<?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>175583</bug_id>
          
          <creation_ts>2017-08-15 10:33:42 -0700</creation_ts>
          <short_desc>Import a better std::variant</short_desc>
          <delta_ts>2018-09-03 20:46:53 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>buildbot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1338734</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-15 10:33:42 -0700</bug_when>
    <thetext>The variant implementation we currently have, https://bitbucket.org/anthonyw/variant/src, is completely standards compliant and is not being updated all that often. We should probably replace it with https://github.com/mpark/variant, which is based on the clang implementation and is  available as a single header, while we wait for all our compilers / standard libraries to support it directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339939</commentid>
    <comment_count>1</comment_count>
      <attachid>318464</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-17 20:59:34 -0700</bug_when>
    <thetext>Created attachment 318464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339950</commentid>
    <comment_count>2</comment_count>
      <attachid>318467</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-17 21:20:51 -0700</bug_when>
    <thetext>Created attachment 318467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1339952</commentid>
    <comment_count>3</comment_count>
      <attachid>318467</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-08-17 21:25:40 -0700</bug_when>
    <thetext>Comment on attachment 318467
Patch

Attachment 318467 did not pass bindings-ews (mac):
Output: http://webkit-queues.webkit.org/results/4334654

New failing tests:
(JS) JSTestCallTracer.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340048</commentid>
    <comment_count>4</comment_count>
      <attachid>318493</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 07:11:44 -0700</bug_when>
    <thetext>Created attachment 318493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340049</commentid>
    <comment_count>5</comment_count>
      <attachid>318494</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 07:13:49 -0700</bug_when>
    <thetext>Created attachment 318494
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340106</commentid>
    <comment_count>6</comment_count>
      <attachid>318509</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-18 09:25:03 -0700</bug_when>
    <thetext>Created attachment 318509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340408</commentid>
    <comment_count>7</comment_count>
      <attachid>318587</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-19 12:26:29 -0700</bug_when>
    <thetext>Created attachment 318587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340460</commentid>
    <comment_count>8</comment_count>
      <attachid>318596</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-19 21:59:27 -0700</bug_when>
    <thetext>Created attachment 318596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1340462</commentid>
    <comment_count>9</comment_count>
      <attachid>318597</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-08-19 22:22:12 -0700</bug_when>
    <thetext>Created attachment 318597
Patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318464</attachid>
            <date>2017-08-17 20:59:34 -0700</date>
            <delta_ts>2017-08-17 21:20:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170817205933.patch</filename>
            <type>text/plain</type>
            <size>364667</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwODIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTYgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KIAogICAgICAgICBbQ29jb2FdIE9sZGVyLWlPUyBpbnN0YWxsIG5hbWUgc3ltYm9scyBhcmUg
YmVpbmcgZXhwb3J0ZWQgb24gb3RoZXIgcGxhdGZvcm1zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIwODIyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwNjUsNyArODA2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDYWxsRE9NKE5vZGUKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBj
YWxsIGZ1bmN0aW9ucyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFy
aWFudDxTcGVjdWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxh
dGVCb29sZWFuT3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5D
TFVESU5HX1RISVM+IG9wZXJhbmRzOworICAgIFZlY3RvcjxzdGQ6OnZhcmlhbnQ8U3BlY3VsYXRl
Q2VsbE9wZXJhbmQsIFNwZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJh
bmQ+LCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBv
cGVyYW5kczsKICAgICBWZWN0b3I8R1BSUmVnLCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJH
VU1FTlRTX0lOQ0xVRElOR19USElTPiByZWdzOwogCiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZd
KEVkZ2UmIGVkZ2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIyMDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg3OCw3ICszODc4
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQoU3BlY3VsYXRlQ2VsbE9wZXJhbmQmJiBvdGhlcikKKyAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGVDZWxsT3BlcmFuZCYmIG90aGVyKQogICAgIHsK
ICAgICAgICAgbV9qaXQgPSBvdGhlci5tX2ppdDsKICAgICAgICAgbV9lZGdlID0gb3RoZXIubV9l
ZGdlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgJKHJldmlzaW9u
IDIyMDgyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MiwyMSArNzIsMjEgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzR1BSKCkpOwotICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8R1BSUmVn
PihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBGUFJSZWcgZnByKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVChpc0ZQUigpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PEZQUlJlZz4obV92
YXJpYW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKICAg
ICB9CiAgICAgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzSlNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVl
UmVncz4obV92YXJpYW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEpTVmFsdWVSZWdzPiht
X3ZhcmlhbnQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWYXJpYW50PEdQUlJlZywgRlBSUmVn
LCBKU1ZhbHVlUmVncz4gbV92YXJpYW50OworICAgIHN0ZDo6dmFyaWFudDxHUFJSZWcsIEZQUlJl
ZywgSlNWYWx1ZVJlZ3M+IG1fdmFyaWFudDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA4
MjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
MSBAQAorMjAxNy0wOC0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSW5QbGFjZS5oOiBBZGRlZC4K
KyAgICAgICAgKiB3dGYvT3B0aW9uYWwuaDoKKyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAg
ICAgICAobXBhcms6OmxpYjo6Y3BwMTQ6OmFycmF5OjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAg
ICAgKG1wYXJrOjpsaWI6OmNwcDE3OjpkZXRhaWw6Omludm9rZV9yZXN1bHQ8dm9pZF90PGRlY2x0
eXBlKToKKyAgICAgICAgKG1wYXJrOjpsaWI6OmNwcDE3OjphZGRyZXNzb2YpOgorICAgICAgICAo
bXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsKToKKyAg
ICAgICAgKG1wYXJrOjpsaWI6OmNwcDE3OjpkZXRhaWw6OmFkZHJlc3NvZik6CisgICAgICAgICht
cGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF9pbXBsOjpkZWNsdHlwZSk6CisgICAgICAgIChz
dGQ6OnRocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWxs
KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpmaW5kX2luZGV4KToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpmaW5kX2luZGV4X2ltcGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnRyYWl0KToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpjb21tb25fdHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
OmNvbW1vbl90cmFpdF9pbXBsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vy
c2l2ZV91bmlvbjo6Z2V0X2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWNjZXNzOjpyZWN1
cnNpdmVfdW5pb246OmdldF9hbHRfaW1wbDo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6QVVUT19SRUZSRUZfUkVUVVJO
KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OmJhc2U6OkFVVE9fUkVGUkVGX1JFVFVS
Tik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6YXQpOgorICAgICAg
ICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6OnZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5
cGVfY2hlY2spOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6OkFVVE9f
UkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2Zk
aWFnb25hbCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9m
bWF0cml4X2ltcGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6Om1h
a2VfZm1hdHJpeCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFr
ZV9mbWF0cml4X2ltcGw6OmltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXM6OkFVVE9f
UkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50Ojp2YWx1
ZV92aXNpdG9yOjpERUNMVFlQRV9BVVRPX1JFVFVSTik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
dmlzaXRhdGlvbjo6dmFyaWFudDo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6
OmFsdDo6YWx0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX1JFQ1VSU0lW
RV9VTklPTik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YmFzZTo6YmFzZSk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6YmFzZTo6aW5kZXhfKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjph
c19iYXNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjpkYXRhKToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjpiYXNlOjpzaXplKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJ
QU5UX0RFU1RSVUNUT1IpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjdG9y
OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpjb25zdHJ1Y3Rvcjo6
Y29uc3RydWN0X2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29uc3RydWN0b3I6OmdlbmVy
aWNfY29uc3RydWN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX01PVkVf
Q09OU1RSVUNUT1IpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfQ09QWV9D
T05TVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6ZW1wbGFjZSk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6YXNzaWduZXI6Om9wZXJhdG9yKCkg
Y29uc3QpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmFzc2lnbl9hbHQpOgor
ICAgICAgICAoc3RkOjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmdlbmVyaWNfYXNzaWduKToKKyAgICAg
ICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCk6CisgICAgICAg
IChzdGQ6OmRldGFpbDo6TVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6OmltcGw6OmFzc2lnbik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6
c3dhcCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcHBlcjo6b3BlcmF0b3IoKSBj
b25zdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6bW92ZV9ub3Rocm93IGNvbnN0KToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpvdmVybG9hZDw+OjpvcGVyYXRvcigpIGNvbnN0KToKKyAg
ICAgICAgKHN0ZDo6dmFyaWFudDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjp2YXJpYW50Ojpl
bXBsYWNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpnZW5lcmljX2dldF9pbXBsOjpnZW5lcmlj
X2dldF9pbXBsKToKKyAgICAgICAgKHN0ZDo6Z2V0KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChzdGQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjwp
OgorICAgICAgICAoc3RkOjpvcGVyYXRvcj4pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjw9KToK
KyAgICAgICAgKHN0ZDo6b3BlcmF0b3I+PSk6CisgICAgICAgIChzdGQ6Om5vZXhjZXB0KToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpoYXNoOjptZWV0c19yZXF1aXJlbWVudHMpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6Omhhc2g6OmlzX2VuYWJsZWQpOgorICAgICAgICAoV1RGOjpzd2l0Y2hPbik6
CisgICAgICAgIChXVEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X190aHJv
d19iYWRfdmFyaWFudF9hY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjo9KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0X3JyZWYpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fY29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fc3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9iYXNlOjp+X192YXJpYW50X2Jhc2Up
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19tb3ZlX2Nv
bnN0cnVjdF9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9v
cHM6Ol9fZGVzdHJveV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3Rv
cmFnZTo6X19iYWNrdXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2U6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0
b3JhZ2U6On5fX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmFyaWFu
dDw+Ojpzd2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19OT0VYQ0VQVF8pOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfYWNjZXNzb3I6OmdldCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmdldF9pZik6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Ol9fdmlzaXRvcl90YWJsZTo6X190cmFtcG9saW5lX2Z1bmMpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjp2aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYXJn
X3NlbGVjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdF9oZWxwZXIyOjpfX3Zp
c2l0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwp
OiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpvcGVyYXRvcj49KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6Ol9faGFzaF92aXNpdG9yOjpvcGVyYXRvcigpKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHA6CisgICAgICAgIChX
VEY6Om1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcik6CisgICAgICAgICogd3RmL3RleHQvVGV4dEJy
ZWFrSXRlcmF0b3IuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJ
bnRlcm5hbElDVU1hYy5tbToKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9y
KToKKwogMjAxNy0wOC0xNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgR2FyZGVuaW5nOiBmaXggR1RLIEFSTV9USFVNQjIgYnVpbGQuCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMDgyMikKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMz
Nyw2ICszMzcsNyBAQAogCQk3QUZFQzZBRTFFQjIyQUM2MDBEQURFMzYgLyogVVVJRC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVVUlELmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVVSUQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QzNGNzIzOTFENzg4MTE5MDA2NzRFMjYgLyogQnJpZ2FuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmlnYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDODY5NjFCMUY0NTQ0RjcwMDgwQ0Y2NCAvKiBJblBsYWNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluUGxhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NCQkEwNzMx
OUJCN0ZEQzAwQkJGMDI1IC8qIE9TT2JqZWN0UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9TT2JqZWN0UHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
RDBENUE3MUQ1NTMyMkEwMDBDQzlFMSAvKiBWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NE
NEMyNkYxRTJDODJCOTAwOTI5NDcwIC8qIFN0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTgyNSw2ICs4MjYsNyBAQAogCQkJCUE4QTQ3
MkJBMTUxQTgyNUEwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggKi8sCiAJCQkJQThBNDcyQkIxNTFB
ODI1QTAwNDEyM0ZGIC8qIEhleE51bWJlci5oICovLAogCQkJCUZFODkyNUFGMUQwMERBRUMwMDQ2
OTA3RSAvKiBJbmRlbnRlci5oICovLAorCQkJCTdDODY5NjFCMUY0NTQ0RjcwMDgwQ0Y2NCAvKiBJ
blBsYWNlLmggKi8sCiAJCQkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250
YWluZXJJdGVyYXRvci5oICovLAogCQkJCTBGMkFDNTYyMUU4QTAxNDkwMDAxRUUzRiAvKiBJbmRl
eEtleVR5cGUuaCAqLywKIAkJCQk1QjQzMzgzQTVEMEI0NjNDOTQzM0Q5MzMgLyogSW5kZXhNYXAu
aCAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0ZvcndhcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHJldmlzaW9uIDIyMDgyMikKKysrIFNvdXJjZS9XVEYvd3Rm
L0ZvcndhcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogCiBuYW1lc3BhY2Ug
c3RkIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIG9wdGlvbmFsOwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gY2xhc3MgdmFyaWFudDsKIH0KIAogbmFtZXNwYWNlIFdURiB7CkBAIC0zNiw3
ICszNyw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZjsKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNsYXNzIFJlZlB0cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFN0cmluZ0J1
ZmZlcjsKIAotdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gY2xhc3MgVmFyaWFudDsKIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSwgdHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyLCBzaXplX3QgbWluQ2FwYWNpdHk+IGNsYXNzIFZlY3RvcjsKIAogY2xhc3MgQXRvbWljU3Ry
aW5nOwpAQCAtNzMsNSArNzMsNCBAQCB1c2luZyBXVEY6OlN0cmluZ0J1aWxkZXI7CiB1c2luZyBX
VEY6OlN0cmluZ0ltcGw7CiB1c2luZyBXVEY6OlN0cmluZ1ZpZXc7CiB1c2luZyBXVEY6OlRleHRQ
b3NpdGlvbjsKLXVzaW5nIFdURjo6VmFyaWFudDsKIHVzaW5nIFdURjo6VmVjdG9yOwpJbmRleDog
U291cmNlL1dURi93dGYvSW5QbGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0lu
UGxhY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgc3RydWN0IGluX3BsYWNl
X3QgeyBleHBsaWNpdCBpbl9wbGFjZV90KCkgPSBkZWZhdWx0OyB9OworCisgIHRlbXBsYXRlIDxz
dGQ6OnNpemVfdCBJPgorICBzdHJ1Y3QgaW5fcGxhY2VfaW5kZXhfdCB7IGV4cGxpY2l0IGluX3Bs
YWNlX2luZGV4X3QoKSA9IGRlZmF1bHQ7IH07CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
IHN0cnVjdCBpbl9wbGFjZV90eXBlX3QgeyBleHBsaWNpdCBpbl9wbGFjZV90eXBlX3QoKSA9IGRl
ZmF1bHQ7IH07CisKKyAgY29uc3RleHByIGluX3BsYWNlX3QgaW5fcGxhY2V7fTsKKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgST4gY29uc3RleHByIGluX3BsYWNlX2luZGV4X3Q8ST4gaW5fcGxh
Y2VfaW5kZXh7fTsKKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY29uc3RleHByIGluX3BsYWNl
X3R5cGVfdDxUPiBpbl9wbGFjZV90eXBle307CisKK30gIC8vIG5hbWVzcGFjZSBzdGQKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
T3B0aW9uYWwuaAkocmV2aXNpb24gMjIwODIyKQorKysgU291cmNlL1dURi93dGYvT3B0aW9uYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTQgKzM3LDE1IEBACiAKICNwcmFnbWEgb25jZQogCi0j
IGluY2x1ZGUgPHV0aWxpdHk+Ci0jIGluY2x1ZGUgPHR5cGVfdHJhaXRzPgotIyBpbmNsdWRlIDxp
bml0aWFsaXplcl9saXN0PgogIyBpbmNsdWRlIDxjYXNzZXJ0PgotIyBpbmNsdWRlIDxzdHJpbmc+
CisjIGluY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CiAjIGluY2x1ZGUgPHN0ZGV4Y2VwdD4KKyMg
aW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKyMgaW5jbHVkZSA8dXRp
bGl0eT4KICMgaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICMgaW5jbHVkZSA8d3RmL0NvbXBp
bGVyLmg+CisjIGluY2x1ZGUgPHd0Zi9JblBsYWNlLmg+CiAjIGluY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KIAogIyBkZWZpbmUgVFIyX09QVElPTkFMX1JFUVVJUkVTKC4uLikgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8X19WQV9BUkdTX186OnZhbHVlLCBib29sPjo6dHlwZSA9IGZhbHNlCkBA
IC0yODMsOCArMjg0LDggQEAgY29uc3RleHByIHN0cnVjdCB0cml2aWFsX2luaXRfdHt9IHRyaXZp
YQogCiAKIC8vIDIwLjUuNiwgSW4tcGxhY2UgY29uc3RydWN0aW9uCi1jb25zdGV4cHIgc3RydWN0
IGluX3BsYWNlX3R7fSBpbl9wbGFjZXt9OwotCisvLyBjb25zdGV4cHIgc3RydWN0IGluX3BsYWNl
X3R7fSBpbl9wbGFjZXt9OworLy8gaW5fcGxhY2VfdCBkZWZpbml0aW9uIG1vdmVkIHRvIHd0Zi9J
blBsYWNlLmggc28gaXQgY2FuIGJlIHNoYXJlZCB3aXRoIHd0Zi9WYXJpYW50LmgKIAogLy8gMjAu
NS43LCBEaXNlbmdhZ2VkIHN0YXRlIGluZGljYXRvcgogc3RydWN0IG51bGxvcHRfdApJbmRleDog
U291cmNlL1dURi93dGYvVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Zh
cmlhbnQuaAkocmV2aXNpb24gMjIwODIyKQorKysgU291cmNlL1dURi93dGYvVmFyaWFudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDIwNzkgKzEsMjMzNyBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDE1
LCBKdXN0IFNvZnR3YXJlIFNvbHV0aW9ucyBMdGQKLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBNUGFyay5WYXJpYW50CiAvLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotLy8gd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKLS8vIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisvLyBDb3B5cmlnaHQgTWljaGFlbCBQYXJrLCAyMDE1LTIwMTcKIC8vCi0vLyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0vLyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwot
Ly8gZGlzY2xhaW1lci4KKy8vIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAt
IEF1Z3VzdCAxN3RoLCAyMDAzCiAvLwotLy8gMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWltZXIgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotLy8gcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv
ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCisvLyBvYnRhaW5pbmcgYSBj
b3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJl
ZCBieQorLy8gdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2Us
IGRpc3BsYXksIGRpc3RyaWJ1dGUsCisvLyBleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3
YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorLy8gU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJu
aXNoZWQgdG8KKy8vIGRvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgogLy8KLS8v
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1l
cyBvZgotLy8gaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMKLS8vIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbgotLy8gcGVybWlzc2lvbi4KKy8vIFRoZSBjb3B5cmlnaHQgbm90aWNl
cyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCisv
LyB0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLAorLy8gbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRo
ZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCisvLyBhbGwgZGVyaXZhdGl2ZSB3
b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCisv
LyB3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmpl
Y3QgY29kZSBnZW5lcmF0ZWQgYnkKKy8vIGEgc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KIC8v
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQKLS8vIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsCi0vLyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLS8vIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCi0vLyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotLy8gTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0vLyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLy8gSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0vLyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IKLS8vIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsCi0vLyBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg
V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKy8vIElNUExJRUQsIElOQ0xVRElORyBC
VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorLy8g
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VN
RU5ULiBJTiBOTyBFVkVOVAorLy8gU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9O
RSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorLy8gRk9SIEFOWSBEQU1BR0VT
IE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJ
U0UsCisvLyBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP
RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKy8vIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K
IAotLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9iaXRidWNrZXQub3JnL2FudGhvbnl3L3ZhcmlhbnQv
c3JjICg1YmNlNDdmYTc4ODY0OGY3OWU1ZWExZDc3YjBlZWYyZThmMGIyOTk5KQorLy8gQ29waWVk
IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL21wYXJrL3ZhcmlhbnQvYmxvYi9zaW5nbGUtaGVhZGVy
L3YxLjIuMC92YXJpYW50LmhwcCAoYzI2Yjg2NWExMjk1MDI5MTYwY2JiNWRiM2NjNmFjYzFjNWIw
OTlmMykKIAotLy8gTW9kaWZpZWQgdG8gbWFrZSBpdCBjb21waWxlIHdpdGggZXhjZXB0aW9ucyBk
aXNhYmxlZC4KKy8vIE1vZGlmaWVkIHRvIHVzZSB0aGUgJ3N0ZCcgbmFtZXNwYWNlLCB1c2Ugd3Rm
L0luUGxhY2UuaCwgYW5kIGluY2x1ZGUgV1RGOjpzd2l0Y2hPbiBoZWxwZXIuCiAKICNwcmFnbWEg
b25jZQogCisvKgorICAgdmFyaWFudCBzeW5vcHNpcworCituYW1lc3BhY2Ugc3RkIHsKKworICAv
LyAyMC43LjIsIGNsYXNzIHRlbXBsYXRlIHZhcmlhbnQKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5
cGVzPgorICBjbGFzcyB2YXJpYW50IHsKKyAgcHVibGljOgorCisgICAgLy8gMjAuNy4yLjEsIGNv
bnN0cnVjdG9ycworICAgIGNvbnN0ZXhwciB2YXJpYW50KCkgbm9leGNlcHQoc2VlIGJlbG93KTsK
KyAgICB2YXJpYW50KGNvbnN0IHZhcmlhbnQmKTsKKyAgICB2YXJpYW50KHZhcmlhbnQmJikgbm9l
eGNlcHQoc2VlIGJlbG93KTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBjb25zdGV4cHIgdmFy
aWFudChUJiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudChpbl9wbGFjZV90
eXBlX3Q8VD4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwg
Y2xhc3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudCgKKyAgICAgICAg
aW5fcGxhY2VfdHlwZV90PFQ+LCBpbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBs
aWNpdCB2YXJpYW50KGluX3BsYWNlX2luZGV4X3Q8ST4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1w
bGF0ZSA8c2l6ZV90IEksIGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3RleHByIGV4
cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8ST4sIGluaXRpYWxpemVy
X2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICAvLyAyMC43LjIuMiwgZGVzdHJ1Y3RvcgorICAg
IH52YXJpYW50KCk7CisKKyAgICAvLyAyMC43LjIuMywgYXNzaWdubWVudAorICAgIHZhcmlhbnQm
IG9wZXJhdG9yPShjb25zdCB2YXJpYW50Jik7CisgICAgdmFyaWFudCYgb3BlcmF0b3I9KHZhcmlh
bnQmJikgbm9leGNlcHQoc2VlIGJlbG93KTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBUPiB2YXJp
YW50JiBvcGVyYXRvcj0oVCYmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworCisgICAgLy8gMjAuNy4y
LjQsIG1vZGlmaWVycworICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBBcmdzPgorICAg
IFQmIGVtcGxhY2UoQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBV
LCBjbGFzcy4uLiBBcmdzPgorICAgIFQmIGVtcGxhY2UoaW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJn
cyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gQXJncz4KKyAgICB2
YXJpYW50X2FsdGVybmF0aXZlPEksIHZhcmlhbnQ+JiBlbXBsYWNlKEFyZ3MmJi4uLik7CisKKyAg
ICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFUsIGNsYXNzLi4uICBBcmdzPgorICAgIHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgdmFyaWFudD4mIGVtcGxhY2UoaW5pdGlhbGl6ZXJfbGlzdDxVPiwg
QXJncyYmLi4uKTsKKworICAgIC8vIDIwLjcuMi41LCB2YWx1ZSBzdGF0dXMKKyAgICBjb25zdGV4
cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHQ7CisgICAgY29u
c3RleHByIHNpemVfdCBpbmRleCgpIGNvbnN0IG5vZXhjZXB0OworCisgICAgLy8gMjAuNy4yLjYs
IHN3YXAKKyAgICB2b2lkIHN3YXAodmFyaWFudCYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgIH07
CisKKyAgLy8gMjAuNy4zLCB2YXJpYW50IGhlbHBlciBjbGFzc2VzCisgIHRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8Y2xh
c3MgVD4KKyAgY29uc3RleHByIHNpemVfdCB2YXJpYW50X3NpemVfdiA9IHZhcmlhbnRfc2l6ZTxU
Pjo6dmFsdWU7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X3NpemU8Y29u
c3QgVD47CisgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxl
IFQ+OworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCB2b2xh
dGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIHN0cnVjdCB2YXJpYW50
X3NpemU8dmFyaWFudDxUeXBlcy4uLj4+OworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3Mg
VD4gc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU7IC8vIHVuZGVmaW5lZAorCisgIHRlbXBsYXRl
IDxzaXplX3QgSSwgY2xhc3MgVD4KKyAgdXNpbmcgdmFyaWFudF9hbHRlcm5hdGl2ZV90ID0gdHlw
ZW5hbWUgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBUPjo6dHlwZTsKKworICB0ZW1wbGF0ZSA8c2l6
ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IFQ+Owor
ICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZl
PEksIHZvbGF0aWxlIFQ+OworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IHZvbGF0aWxlIFQ+OworCisgIHRlbXBsYXRlIDxz
aXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEks
IHZhcmlhbnQ8VHlwZXMuLi4+PjsKKworICBjb25zdGV4cHIgc2l6ZV90IHZhcmlhbnRfbnBvcyA9
IC0xOworCisgIC8vIDIwLjcuNCwgdmFsdWUgYWNjZXNzCisgIHRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mKSBub2V4Y2VwdDsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNs
YXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlh
bnQ8VHlwZXMuLi4+PiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4mJgorICBnZXQodmFyaWFudDxUeXBlcy4uLj4mJik7
CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIHZh
cmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4gY29uc3QmCisgIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3Mu
Li4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxU
eXBlcy4uLj4+IGNvbnN0JiYKKyAgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisg
IHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiAgVHlwZXM+CisgIGNvbnN0ZXhwciBUJiBnZXQo
dmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBUJiYgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGNvbnN0IFQmIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4u
LiBUeXBlcz4KKyAgY29uc3RleHByIGNvbnN0IFQmJiBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4u
Lj4mJik7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3Rl
eHByIGFkZF9wb2ludGVyX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMu
Li4+Pj4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHlwZXMuLi4+Kikgbm9leGNlcHQ7CisKKyAgdGVtcGxh
dGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGFkZF9wb2ludGVyX3Q8
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+Pj4KKyAgZ2V0
X2lmKGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Kikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNs
YXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYWRkX3BvaW50ZXJfdDxUPgorICBn
ZXRfaWYodmFyaWFudDxUeXBlcy4uLj4qKSBub2V4Y2VwdDsKKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IFQ+Cisg
IGdldF9pZihjb25zdCB2YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIC8vIDIwLjcu
NSwgcmVsYXRpb25hbCBvcGVyYXRvcnMKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFy
aWFudDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPihjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlh
bnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPj0oY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50
PFR5cGVzLi4uPiYpOworCisgIC8vIDIwLjcuNiwgdmlzaXRhdGlvbgorICB0ZW1wbGF0ZSA8Y2xh
c3MgVmlzaXRvciwgY2xhc3MuLi4gVmFyaWFudHM+CisgIGNvbnN0ZXhwciBzZWUgYmVsb3cgdmlz
aXQoVmlzaXRvciYmLCBWYXJpYW50cyYmLi4uKTsKKworICAvLyAyMC43LjcsIGNsYXNzIG1vbm9z
dGF0ZQorICBzdHJ1Y3QgbW9ub3N0YXRlOworCisgIC8vIDIwLjcuOCwgbW9ub3N0YXRlIHJlbGF0
aW9uYWwgb3BlcmF0b3JzCisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChtb25vc3RhdGUsIG1v
bm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPihtb25vc3RhdGUs
IG1vbm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obW9ub3N0
YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG1v
bm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsKKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9
PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworCisgIC8vIDIwLjcuOSwgc3Bl
Y2lhbGl6ZWQgYWxnb3JpdGhtcworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIHZvaWQg
c3dhcCh2YXJpYW50PFR5cGVzLi4uPiYsIHZhcmlhbnQ8VHlwZXMuLi4+Jikgbm9leGNlcHQoc2Vl
IGJlbG93KTsKKworICAvLyAyMC43LjEwLCBjbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3MKKyAgY2xh
c3MgYmFkX3ZhcmlhbnRfYWNjZXNzOworCisgIC8vIDIwLjcuMTEsIGhhc2ggc3VwcG9ydAorICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGhhc2g7CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBl
cz4gc3RydWN0IGhhc2g8dmFyaWFudDxUeXBlcy4uLj4+OworICB0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
aGFzaDxtb25vc3RhdGU+OworCit9IC8vIG5hbWVzcGFjZSBzdGQKKworKi8KKworI2luY2x1ZGUg
PGNzdGRkZWY+CisjaW5jbHVkZSA8ZXhjZXB0aW9uPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0j
aW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRl
IDxtZW1vcnk+CiAjaW5jbHVkZSA8bmV3PgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUg
PHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CiAj
aW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUg
PHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9JblBsYWNlLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgogCi0jaWYgQ09NUElMRVIoTVNWQykKLSNwcmFnbWEgd2FybmluZyhw
dXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDI0NSkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQ1MjEpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIyKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDgxNCkKKworLy8gTVNWQyAyMDE1IFVwZGF0ZSAzLgorI2lmIF9fY3BsdXNwbHVz
IDwgMjAxMTAzTCAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IF9NU0NfRlVMTF9WRVIgPCAxOTAw
MjQyMTUpCisjZXJyb3IgIk1QYXJrLlZhcmlhbnQgcmVxdWlyZXMgQysrMTEgc3VwcG9ydC4iCiAj
ZW5kaWYKIAotI2lmICFDT01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Cisj
aWZuZGVmIF9faGFzX2J1aWx0aW4KKyNkZWZpbmUgX19oYXNfYnVpbHRpbih4KSAwCisjZW5kaWYK
IAotbmFtZXNwYWNlIFdURiB7CisjaWZuZGVmIF9faGFzX2ZlYXR1cmUKKyNkZWZpbmUgX19oYXNf
ZmVhdHVyZSh4KSAwCisjZW5kaWYKIAotI2lmIENPTVBJTEVSX1NVUFBPUlRTKEVYQ0VQVElPTlMp
Ci0jZGVmaW5lIF9fVEhST1dfRVhDRVBUSU9OKF9fZXhjZXB0aW9uKSB0aHJvdyBfX2V4Y2VwdGlv
bjsKLSNkZWZpbmUgX19OT0VYQ0VQVCBub2V4Y2VwdAotI2RlZmluZSBfX05PRVhDRVBUXyhfX2V4
Y2VwdGlvbikgbm9leGNlcHQoX19leGNlcHRpb24pCi0jZWxzZQotI2RlZmluZSBfX1RIUk9XX0VY
Q0VQVElPTihfX2V4Y2VwdGlvbikgZG8geyAodm9pZClfX2V4Y2VwdGlvbjsgQ1JBU0goKTsgfSB3
aGlsZSAoMCk7Ci0jZGVmaW5lIF9fTk9FWENFUFQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oLi4uKQor
I2lmIF9faGFzX2J1aWx0aW4oX19idWlsdGluX2FkZHJlc3NvZikgfHwgXAorICAgIChkZWZpbmVk
KF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSA3KSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmlu
ZSBNUEFSS19CVUlMVElOX0FERFJFU1NPRgogI2VuZGlmCiAKLXN0cnVjdCBfX2luX3BsYWNlX3By
aXZhdGV7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWU+Ci0gICAgc3RydWN0IF9fdHlwZV9ob2xkZXI7
CisjaWYgX19oYXNfYnVpbHRpbihfX3R5cGVfcGFja19lbGVtZW50KQorI2RlZmluZSBNUEFSS19U
WVBFX1BBQ0tfRUxFTUVOVAorI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTxzaXplX3Q+Ci0gICAgc3Ry
dWN0IF9fdmFsdWVfaG9sZGVyOwotfTsKKyNpZiBkZWZpbmVkKF9fY3BwX2NvbnN0ZXhwcikgJiYg
X19jcHBfY29uc3RleHByID49IDIwMTMwNAorI2RlZmluZSBNUEFSS19DUFAxNF9DT05TVEVYUFIK
KyNlbmRpZgogCisjaWYgX19oYXNfZmVhdHVyZShjeHhfZXhjZXB0aW9ucykgfHwgZGVmaW5lZChf
X2NwcF9leGNlcHRpb25zKQorI2RlZmluZSBNUEFSS19FWENFUFRJT05TCisjZW5kaWYKIAotc3Ry
dWN0IGluX3BsYWNlX3RhZyB7Ci0gICAgaW5fcGxhY2VfdGFnKCkgPSBkZWxldGU7Ci19OworI2lm
IGRlZmluZWQoX19jcHBfZ2VuZXJpY19sYW1iZGFzKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2Rl
ZmluZSBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyNlbmRpZgogCi11c2luZyBpbl9wbGFjZV90ID0g
aW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBf
bGliX2ludGVnZXJfc2VxdWVuY2UpCisjZGVmaW5lIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyNl
bmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci11c2luZyBpbl9wbGFjZV90eXBlX3QgPSBp
bl9wbGFjZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiYp
OworI2lmIGRlZmluZWQoX19jcHBfcmV0dXJuX3R5cGVfZGVkdWN0aW9uKSB8fCBkZWZpbmVkKF9N
U0NfVkVSKQorI2RlZmluZSBNUEFSS19SRVRVUk5fVFlQRV9ERURVQ1RJT04KKyNlbmRpZgogCi10
ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KLXVzaW5nIGluX3BsYWNlX2luZGV4X3QgPSBpbl9wbGFj
ZV90YWcoJikoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+Jik7Cisj
aWYgZGVmaW5lZChfX2NwcF9saWJfdHJhbnNwYXJlbnRfb3BlcmF0b3JzKSB8fCBkZWZpbmVkKF9N
U0NfVkVSKQorI2RlZmluZSBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyNlbmRpZgogCi1p
bl9wbGFjZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlJik7CisjaWYgZGVmaW5lZChf
X2NwcF92YXJpYWJsZV90ZW1wbGF0ZXMpIHx8IGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIE1Q
QVJLX1ZBUklBQkxFX1RFTVBMQVRFUworI2VuZGlmCiAKLXRlbXBsYXRlIDxjbGFzcyBfVHlwZT4K
LWluX3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3BsYWNlX3ByaXZhdGU6Ol9fdHlwZV9ob2xkZXI8
X1R5cGU+ICYpIHsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7
Ci19CisjaWYgIWRlZmluZWQoX19HTElCQ1hYX18pCisjZGVmaW5lIE1QQVJLX1RSSVZJQUxJVFlf
VFlQRV9UUkFJVFMKKyNlbGlmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVk
ZSg8Y29kZWN2dD4pICAvLyA+PSBsaWJzdGRjKystNQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZ
X1RZUEVfVFJBSVRTCisjZW5kaWYKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci1pbl9wbGFj
ZV90YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3ZhbHVlX2hvbGRlcjxfSW5kZXg+
ICYpIHsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihfX2luX3BsYWNlX3ByaXZhdGUoKSk7Ci19CiAK
LWNsYXNzIGJhZF92YXJpYW50X2FjY2VzczogcHVibGljIHN0ZDo6bG9naWNfZXJyb3J7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiB3
aGF0X2FyZyk6Ci0gICAgICAgIHN0ZDo6bG9naWNfZXJyb3Iod2hhdF9hcmcpCi0gICAge30KLSAg
ICBleHBsaWNpdCBiYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciogd2hhdF9hcmcpOgotICAg
ICAgICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBpbmxpbmUgVCBfX3Rocm93X2JhZF92
YXJpYW50X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyl7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oYmFkX3ZhcmlhbnRfYWNjZXNzKHdoYXRfYXJnKSkKLX0KKy8vIE5PVEU6IHN0ZDo6aW5fcGxh
Y2VfdCBpbXBsZW1lbnRhdGlvbiBtb3ZlZCB0byBXVEYvSW5QbGFjZS5oCiAKLXRlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX190eXBlX2luZGV4X2hlbHBlcjsKKyNkZWZpbmUgUkVUVVJOKC4uLikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG5vZXhjZXB0KG5vZXhjZXB0KF9fVkFf
QVJHU19fKSkgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18pIHsgXAorICAgIHJldHVybiBfX1ZBX0FS
R1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCituYW1l
c3BhY2UgbXBhcmsgeworICBuYW1lc3BhY2UgbGliIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKyAgICBzdHJ1Y3QgaWRlbnRpdHkgeyB1c2luZyB0eXBlID0gVDsgfTsKKworICAgIGlubGlu
ZSBuYW1lc3BhY2UgY3BwMTQgeworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6
ZV90IE4+CisgICAgICBzdHJ1Y3QgYXJyYXkgeworICAgICAgICBjb25zdGV4cHIgY29uc3QgVCAm
b3BlcmF0b3JbXShzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QgeworICAgICAgICAgIHJldHVybiBk
YXRhW2luZGV4XTsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBl
bmFtZSBfVHlwZSx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190
eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBfX3R5cGVfaW5kZXhfaGVs
cGVyPF9PZmZzZXQrMSxfVHlwZSxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9PZmZzZXQ7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9p
bmRleHsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICBf
X3R5cGVfaW5kZXhfaGVscGVyPDAsX1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2lu
ZGV4ZWRfdHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYg
X0hlYWQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0
eXBlZGVmIHZvaWQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uX1R5cGVzPgotc3RydWN0IF9fbmV4dF9pbmRleHsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPQotICAgICAgICAoX0luZGV4Pj1w
dHJkaWZmX3Qoc2l6ZW9mLi4uKF9UeXBlcyktMSkpPy0xOl9JbmRleCsxOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lPgotc3RydWN0IHZhcmlhbnRfc2l6ZTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgot
c3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9
OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0
aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgX1R5cGU+IDogdmFy
aWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lLi4uIF9UeXBlcz4KLXN0
cnVjdCB2YXJpYW50X3NpemU8VmFyaWFudDxfVHlwZXMuLi4+PgotICAgIDogc3RkOjppbnRlZ3Jh
bF9jb25zdGFudDxzaXplX3QsIHNpemVvZi4uLihfVHlwZXMpPiB7fTsKLQotdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwot
Ci10ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9UeXBlPgotdXNpbmcgdmFyaWFudF9h
bHRlcm5hdGl2ZV90PXR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LF9UeXBlPjo6
dHlwZTsKLQotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0
IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlw
ZT1zdGQ6OmFkZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsK
LX07Ci0KLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRpbGUgX1R5cGU+ewotICAgIHVzaW5nIHR5
cGU9c3RkOjphZGRfdm9sYXRpbGVfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBl
Pj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1
Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIGNvbnN0IF9UeXBlPnsKLSAg
ICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8c3RkOjphZGRfY29uc3RfdDx2YXJpYW50
X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj4+OwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0lu
ZGV4LFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgdXNpbmcgdHlwZT10eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlOwotfTsKLQotY29uc3RleHByIHNpemVf
dCB2YXJpYW50X25wb3M9LTE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBf
VHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0
KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmJik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVz
Li4uPiYmKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3QmIGdldCgKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVt
cGxhdGUgPHB0cmRpZmZfdCBfSW5kZXgsIHR5cGVuYW1lLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBj
b25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsIF9UeXBlcy4uLj46Ol9fdHlwZSAm
JgotZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCAmJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90
PF9UeXBlIGNvbnN0PiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6
OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRl
cl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29u
c3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9h
Y2Nlc3NvcjsKLQotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQsCi0gICAgICAgICBib29sIF9fbGFy
Z2VyX3RoYW5fY2hhcj0oX19jb3VudD5TQ0hBUl9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhh
bl9zaG9ydD0oX19jb3VudD5TSFJUX01BWCksCi0gICAgYm9vbCBfX2xhcmdlcl90aGFuX2ludD0o
X19jb3VudD5JTlRfTUFYKT4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZXsKLSAgICB0eXBl
ZGVmIHNpZ25lZCBjaGFyIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgot
c3RydWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSxmYWxzZSxmYWxzZT57Ci0g
ICAgdHlwZWRlZiBzaWduZWQgc2hvcnQgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9f
Y291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsZmFs
c2U+ewotICAgIHR5cGVkZWYgaW50IF9fdHlwZTsKLX07Ci10ZW1wbGF0ZTxzaXplX3QgX19jb3Vu
dD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsdHJ1ZSx0cnVlPnsK
LSAgICB0eXBlZGVmIHNpZ25lZCBsb25nIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlPgotc3RydWN0IF9fc3RvcmVkX3R5cGV7Ci0gICAgdHlwZWRlZiBfVHlwZSBfX3R5cGU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90eXBlPF9U
eXBlJj57Ci0gICAgdHlwZWRlZiBfVHlwZSogX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlOwotCi10
ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTw+IHsKLSAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZT4gewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX3RyaXZp
YWxseV9kZXN0cnVjdGlibGU8dHlwZW5hbWUgX19zdG9yZWRfdHlwZTxfVHlwZT46Ol9fdHlwZT46
OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19hbGxfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19hbGxfdHJpdmlh
bGx5X2Rlc3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVGFyZ2V0LHR5cGVuYW1lIC4uLiBfQXJncz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJv
d19jb25zdHJ1Y3RpYmxlewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAg
IHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9UYXJnZXQsIF9BcmdzLi4uPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fc3RvcmFn
ZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTw+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgX192YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5
cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQs
X1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgot
ICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
b3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwwLF9IZWFkLF9SZXN0Li4u
PnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPV9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhlcl9zdG9yYWdlX25vdGhy
b3dfbW92ZV9jb25zdHJ1Y3RpYmxlPC0xLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8X0hlYWQsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19vdGhl
cl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleCxfSGVhZCxfUmVzdC4u
Lj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX290
aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LTEsX1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWR7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgIV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTwKLSAgICAgICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZT46Ol9fdmFsdWUgJiYKLSAgICAgICAgIV9fb3RoZXJfc3RvcmFnZV9ub3Rocm93
X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRyZGlmZl90IF9Db3VudCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGx7Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19iYWNrdXBfc3RvcmFnZV9yZXF1aXJl
ZDxfSW5kZXgsX1R5cGVzLi4uPjo6X192YWx1ZSB8fAotICAgICAgICBfX2FueV9iYWNrdXBfc3Rv
cmFnZV9yZXF1aXJlZF9pbXBsPF9JbmRleCsxLF9Db3VudC0xLF9UeXBlcy4uLj46Ol9fdmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1z
dHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgsMCxfVHlwZXMu
Li4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9ZmFsc2U7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJl
ZDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBf
c3RvcmFnZV9yZXF1aXJlZDxWYXJpYW50PF9UeXBlcy4uLj4gPnsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfX3ZhbHVlPQotICAgICAgICBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBs
PDAsc2l6ZW9mLi4uKF9UeXBlcyksX1R5cGVzLi4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsYm9vbD1zdGQ6OmlzX2xpdGVyYWxfdHlwZTxfVHlwZT46OnZhbHVlPgot
c3RydWN0IF9fdmFyaWFudF9zdG9yYWdlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOworICAg
ICAgICBUIGRhdGFbTiA9PSAwID8gMSA6IE5dOworICAgICAgfTsKIAotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYg
X192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0g
ICAgICAgIHJldHVybiBfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBf
VHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1vdmUoX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBl
Jil7fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgYWRkX3Bv
aW50ZXJfdCA9IHR5cGVuYW1lIHN0ZDo6YWRkX3BvaW50ZXI8VD46OnR5cGU7CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV93cmFwcGVyewotICAgIHR5cGVuYW1l
IHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihfVHlwZSksYWxpZ25vZihfVHlwZSk+Ojp0eXBl
IF9fc3RvcmFnZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0
aWMgY29uc3RleHByIHZvaWQgX19jb25zdHJ1Y3Qodm9pZCogX19wLF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIG5ldyAoX19wKSBfVHlwZShzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncyku
Li4pOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5n
IGNvbW1vbl90eXBlX3QgPSB0eXBlbmFtZSBzdGQ6OmNvbW1vbl90eXBlPFRzLi4uPjo6dHlwZTsK
IAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRHVtbXkgPSBfVHlwZT4KLSAgICBfX3N0b3JhZ2Vf
d3JhcHBlcigKLSAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19kZWZhdWx0
X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93
cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICAgIF9fY29uc3RydWN0KCZfX3N0
b3JhZ2UpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcg
ZGVjYXlfdCA9IHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VD46OnR5cGU7CiAKLSAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxf
RHVtbXk+Ojp2YWx1ZSwKLSAgICAgICAgdm9pZCAoX19zdG9yYWdlX3dyYXBwZXI6OiopKCk+Ojp0
eXBlID0gbnVsbHB0cikgewotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmly
c3QsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKF9GaXJzdCYmIF9f
Zmlyc3QsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19jb25zdHJ1Y3QoJl9fc3RvcmFn
ZSxzdGQ6OmZvcndhcmQ8X0ZpcnN0PihfX2ZpcnN0KSxzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDxib29sIEIsIHR5cGVuYW1lIFQgPSB2b2lk
PgorICAgICAgdXNpbmcgZW5hYmxlX2lmX3QgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxCLCBU
Pjo6dHlwZTsKIAotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKnN0YXRpY19j
YXN0PF9UeXBlKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KCZfX3N0b3JhZ2UpKTsKLSAgICB9Ci0gICAg
Y29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKnN0
YXRpY19jYXN0PF9UeXBlIGNvbnN0Kj4oc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCo+KCZfX3N0b3Jh
Z2UpKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgX19nZXQoKS5+X1R5
cGUoKTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICB1c2lu
ZyByZW1vdmVfY29uc3RfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PFQ+Ojp0eXBlOwog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlw
ZSY+ewotICAgIF9UeXBlKiBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJn
PgotICAgIGNvbnN0ZXhwciBfX3N0b3JhZ2Vfd3JhcHBlcihfQXJnJiBfX2FyZyk6Ci0gICAgICAg
IF9fc3RvcmFnZSgmX19hcmcpe30KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAg
dXNpbmcgcmVtb3ZlX3JlZmVyZW5jZV90ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PFQ+Ojp0eXBlOwogCi0gICAgX1R5cGUmIF9fZ2V0KCl7Ci0gICAgICAgIHJldHVybiAqX19zdG9y
YWdlOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUgY29uc3QmIF9fZ2V0KCkgY29uc3R7Ci0g
ICAgICAgIHJldHVybiAqX19zdG9yYWdlOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVtb3ZlX3JlZmVy
ZW5jZV90PFQ+ICZ0KSBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICYm
Pih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUsZmFsc2U+ewotICAgIHR5cGVkZWYgX19zdG9yYWdlX3dyYXBwZXI8
X1R5cGU+IF9fdHlwZTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgaW5saW5l
IGNvbnN0ZXhwciBUICYmZm9yd2FyZChyZW1vdmVfcmVmZXJlbmNlX3Q8VD4gJiZ0KSBub2V4Y2Vw
dCB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIXN0ZDo6aXNfbHZhbHVlX3JlZmVyZW5jZTxUPjo6
dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgImNhbiBub3QgZm9yd2FyZCBhbiBydmFsdWUg
YXMgYW4gbHZhbHVlIik7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICYmPih0KTsKKyAg
ICAgIH0KIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwp
ewotICAgICAgICByZXR1cm4gX192YWwuX19nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1vdmUoX192YWwuX19nZXQoKSk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29u
c3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192
YWwuX19nZXQoKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIF9f
Z2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1vdmUo
X192YWwuX19nZXQoKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgX192YWwuX19kZXN0cm95KCk7Ci0gICAgfQotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciByZW1vdmVfcmVmZXJl
bmNlX3Q8VD4gJiZtb3ZlKFQgJiZ0KSBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxyZW1vdmVfcmVmZXJlbmNlX3Q8VD4gJiY+KHQpOworICAgICAgfQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYs
X19iPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7CisjaWZkZWYgTVBBUktfSU5URUdFUl9T
RVFVRU5DRQorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIFQuLi4gSXM+CisgICAgICB1c2lu
ZyBpbnRlZ2VyX3NlcXVlbmNlID0gc3RkOjppbnRlZ2VyX3NlcXVlbmNlPFQsIElzLi4uPjsKIAot
ICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSYgX192YWwpewotICAgICAg
ICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dl
dF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsK
LSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07CisgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICB1c2luZyBpbmRleF9zZXF1ZW5jZSA9
IHN0ZDo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxi
b29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmLF9fYj57Ci0gICAgdHlw
ZWRlZiBfVHlwZSogX190eXBlOworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CisgICAg
ICB1c2luZyBtYWtlX2luZGV4X3NlcXVlbmNlID0gc3RkOjptYWtlX2luZGV4X3NlcXVlbmNlPE4+
OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSYgX192YWwpewot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0
aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMg
Y29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gc3RkOjppbmRleF9zZXF1
ZW5jZV9mb3I8VHMuLi4+OworI2Vsc2UKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4u
IElzPgorICAgICAgc3RydWN0IGludGVnZXJfc2VxdWVuY2UgeworICAgICAgICB1c2luZyB2YWx1
ZV90eXBlID0gVDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBzaXplKCkg
bm9leGNlcHQgeyByZXR1cm4gc2l6ZW9mLi4uKElzKTsgfQorICAgICAgfTsKKworICAgICAgdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBp
bnRlZ2VyX3NlcXVlbmNlPHN0ZDo6c2l6ZV90LCBJcy4uLj47CisKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVl
bmNlX2NvbmNhdDsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIExocywgc3RkOjpz
aXplX3QuLi4gUmhzPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfY29uY2F0PGlu
ZGV4X3NlcXVlbmNlPExocy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhfc2VxdWVuY2U8UmhzLi4uPj4KKyAgICAgICAgICA6IGlkZW50aXR5PGluZGV4
X3NlcXVlbmNlPExocy4uLiwgKHNpemVvZi4uLihMaHMpICsgUmhzKS4uLj4+IHt9OworCisgICAg
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVl
bmNlX2ltcGw7CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcg
bWFrZV9pbmRleF9zZXF1ZW5jZSA9IHR5cGVuYW1lIG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbDxO
Pjo6dHlwZTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CisgICAgICBzdHJ1Y3Qg
bWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsCisgICAgICAgICAgOiBtYWtlX2luZGV4X3NlcXVlbmNl
X2NvbmNhdDxtYWtlX2luZGV4X3NlcXVlbmNlPE4gLyAyPiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1ha2VfaW5kZXhfc2VxdWVuY2U8TiAtIChOIC8gMik+PiB7fTsK
IAotdGVtcGxhdGU8PgotdW5pb24gX192YXJpYW50X2RhdGE8PnsKLSAgICBjb25zdGV4cHIgX192
YXJpYW50X2RhdGEoKXt9Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9f
dmFyaWFudF9kYXRhPF9UeXBlPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlw
ZT46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKLQot
ICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3Bs
YWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX192YWwoc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9CisgICAgICB0ZW1wbGF0ZSA8PgorICAgICAgc3Ry
dWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbDwwPiA6IGlkZW50aXR5PGluZGV4X3NlcXVlbmNl
PD4+IHt9OwogCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQot
ICAgIC8qY29uc3RleHByKi8gX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4p
ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9f
dmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9p
bmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Pjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dl
dF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9pZCBf
X2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPD4K
KyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8MT4gOiBpZGVudGl0eTxpbmRl
eF9zZXF1ZW5jZTwwPj4ge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotdW5pb24gX192
YXJpYW50X2RhdGE8X1R5cGUmPnsKLSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlw
ZSY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Cisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBpbmRleF9zZXF1ZW5j
ZV9mb3IgPSBtYWtlX2luZGV4X3NlcXVlbmNlPHNpemVvZi4uLihUcyk+OworI2VuZGlmCiAKLSAg
ICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQorICAgICAgLy8gPGZ1bmN0
aW9uYWw+CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBl
cXVhbF90byA9IHN0ZDo6ZXF1YWxfdG88PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgZXF1YWxfdG8g
eworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAg
IGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBj
b25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID09IGxpYjo6Zm9y
d2FyZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4
X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2FyZDxf
QXJncz4oX19hcmdzKS4uLil7fQorI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUwor
ICAgICAgdXNpbmcgbm90X2VxdWFsX3RvID0gc3RkOjpub3RfZXF1YWxfdG88PjsKKyNlbHNlCisg
ICAgICBzdHJ1Y3Qgbm90X2VxdWFsX3RvIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExo
cywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3Io
KShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3
YXJkPExocz4obGhzKSAhPSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsKKyNlbmRp
ZgogCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1
cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBj
b25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0K
KyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIGxlc3MgPSBz
dGQ6Omxlc3M8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgbGVzcyB7CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBh
dXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVU
VVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPCBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAg
ICAgfTsKKyNlbmRpZgogCi0gICAgX1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+OjpfX2dldF9ycmVm
KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNl
X2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5
cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95
KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+
OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyID0gc3RkOjpncmVhdGVyPD47CisjZWxzZQor
ICAgICAgc3RydWN0IGdyZWF0ZXIgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0
eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExo
cyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8
TGhzPihsaHMpID4gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAot
dGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZSYmPnsK
LSAgICB0eXBlbmFtZSBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X190eXBlIF9fdmFsOwot
ICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworI2lmZGVmIE1QQVJLX1RSQU5TUEFS
RU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgbGVzc19lcXVhbCA9IHN0ZDo6bGVzc19lcXVhbDw+
OworI2Vsc2UKKyAgICAgIHN0cnVjdCBsZXNzX2VxdWFsIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8g
b3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4o
bGliOjpmb3J3YXJkPExocz4obGhzKSA8PSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAg
fTsKKyNlbmRpZgogCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30K
KyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIGdyZWF0ZXJf
ZXF1YWwgPSBzdGQ6OmdyZWF0ZXJfZXF1YWw8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgZ3JlYXRl
cl9lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4K
KyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMg
JiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPj0g
bGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKKyAgICB9ICAvLyBuYW1l
c3BhY2UgY3BwMTQKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Bcmc+Ci0gICAgX192YXJpYW50
X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJnJiYgX19hcmcpOgotICAgICAgICBfX3ZhbCgm
X19hcmcpe30KKyAgICBpbmxpbmUgbmFtZXNwYWNlIGNwcDE3IHsKIAotICAgIF9UeXBlJiYgX19n
ZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIF9UeXBlJiYgX19n
ZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9z
dG9yYWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAg
ICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07Cisg
ICAgICAvLyA8dHlwZV90cmFpdHM+CisgICAgICB0ZW1wbGF0ZSA8Ym9vbCBCPgorICAgICAgdXNp
bmcgYm9vbF9jb25zdGFudCA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8Ym9vbCwgQj47CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXVuaW9uIF9fdmFyaWFu
dF9kYXRhPF9IZWFkLF9SZXN0Li4uPnsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfSGVhZD4gX19oZWFk
OwotICAgIF9fdmFyaWFudF9kYXRhPF9SZXN0Li4uPiBfX3Jlc3Q7Ci0KLSAgICBjb25zdGV4cHIg
X192YXJpYW50X2RhdGEoKToKLSAgICAgICAgX19oZWFkKCl7fQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9p
bmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9faGVhZChpbl9wbGFjZTww
PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KLSAgICB0ZW1wbGF0ZTxzaXplX3Qg
X0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEo
aW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9f
cmVzdChpbl9wbGFjZTxfSW5kZXgtMT4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICBzdHJ1Y3Qgdm9pZGVyIDogaWRl
bnRpdHk8dm9pZD4ge307CiAKLSAgICBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPil7
Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAgIH0KKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5nIHZvaWRfdCA9IHR5cGVuYW1l
IHZvaWRlcjxUcy4uLj46OnR5cGU7CiAKLSAgICAvKmNvbnN0ZXhwciovIF9IZWFkJiYgX19nZXRf
cnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9y
cmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFk
JiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9faGVh
ZC5fX2dldChpbl9wbGFjZTwwPik7Ci0gICAgfQorICAgICAgbmFtZXNwYWNlIGRldGFpbCB7Cisg
ICAgICAgIG5hbWVzcGFjZSBzd2FwcGFibGUgewogCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFk
JiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJu
IF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxh
dGU8c2l6ZV90IF9JbmRleD4KLSAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4
Pil7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAg
ICB9CisgICAgICAgICAgdXNpbmcgc3RkOjpzd2FwOwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9J
bmRleD4KLSAgICAvKmNvbnN0ZXhwciovIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0x
LF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhf
dDxfSW5kZXg+KXsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9ycmVmKGluX3BsYWNlPF9J
bmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAg
Y29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleC0xLF9SZXN0Li4u
Pjo6X190eXBlJiBfX2dldCgKLSAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KSBjb25z
dHsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldChpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAg
IH0KKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgICBzdHJ1Y3QgaXNf
c3dhcHBhYmxlX2ltcGwgeworICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVLAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lID0gZGVjbHR5
cGUoc3dhcChzdGQ6OmRlY2x2YWw8VSAmPigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8VSAmPigpKSk+CisgICAgICAgICAgICBp
bmxpbmUgc3RhdGljIHN0ZDo6dHJ1ZV90eXBlIHRlc3QoaW50KTsKIAotICAgIHRlbXBsYXRlPHNp
emVfdCBfSW5kZXg+Ci0gICAgY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlJiYgX19nZXRfcnJlZigKLSAgICAgICAgaW5fcGxh
Y2VfaW5kZXhfdDxfSW5kZXg+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fcmVzdC5fX2dldF9y
cmVmKGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotICAgIAotICAgIAotICAgIHZvaWQgX19k
ZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX2hlYWQuX19kZXN0cm95KGlu
X3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICB2b2lk
IF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICBfX3Jlc3QuX19k
ZXN0cm95KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQotfTsKKyAgICAgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBVPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OmZhbHNlX3R5
cGUgdGVzdCguLi4pOwogCisgICAgICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICB1c2luZyB0
eXBlID0gZGVjbHR5cGUodGVzdDxUPigwKSk7CisgICAgICAgICAgfTsKIAotdGVtcGxhdGU8cHRy
ZGlmZl90Li4uIF9JbmRpY2VzPgotc3RydWN0IF9faW5kZXhfc2VxdWVuY2V7Ci0gICAgdHlwZWRl
ZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uLHNpemVvZi4uLihfSW5kaWNlcyk+IF9fbmV4
dDsKLSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX2xlbmd0aD1zaXplb2YuLi4oX0luZGlj
ZXMpOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVf
aW5kaWNlczsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPD57Ci0gICAgdHlw
ZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGU+ewotICAgIHR5cGVkZWYgX19pbmRl
eF9zZXF1ZW5jZTwwPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8X1R5cGUsX1Jlc3QuLi4+ewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1Jlc3QuLi4+OjpfX3R5cGU6Ol9f
bmV4dCBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBf
X3ZhcmlhbnRfaW5kaWNlczsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX3ZhcmlhbnRfaW5kaWNlczxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlw
ZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3Zl
X2NvbnN0cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBj
b25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfY29uc3RydWN0X2Z1
bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAg
X19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAg
IHN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpKTsKLSAgICB9CisgICAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgdXNpbmcgaXNfc3dhcHBhYmxlID0gdHlwZW5hbWUg
aXNfc3dhcHBhYmxlX2ltcGw8VD46OnR5cGU7CiAKLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5
cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIGJvb2wgPSBpc19zd2FwcGFibGU8VD46OnZhbHVlPgorICAgICAgICAgIHN0
cnVjdCBpc19ub3Rocm93X3N3YXBwYWJsZSB7CisgICAgICAgICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmFsdWUgPQorICAgICAgICAgICAgICAgIG5vZXhjZXB0KHN3YXAoc3RkOjpkZWNsdmFs
PFQgJj4oKSwgc3RkOjpkZWNsdmFsPFQgJj4oKSkpOworICAgICAgICAgIH07CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFt
ZSBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2NvbnN0cnVjdF9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAg
c3RydWN0IGlzX25vdGhyb3dfc3dhcHBhYmxlPFQsIGZhbHNlPiA6IHN0ZDo6ZmFsc2VfdHlwZSB7
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5k
aWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVj
dCBfX21vdmVfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgq
IGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1w
bGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3NpZ25fZnVu
YygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAgICBn
ZXQ8X0luZGV4PigqX19saHMpPXN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0K
KyAgICAgICAgfSAgLy8gbmFtZXNwYWNlIHN3YXBwYWJsZQorICAgICAgfSAgLy8gbmFtZXNwYWNl
IGRldGFpbAogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4u
KF9JbmRpY2VzKV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICB1c2lu
ZyBpc19zd2FwcGFibGUgPSBkZXRhaWw6OnN3YXBwYWJsZTo6aXNfc3dhcHBhYmxlPFQ+OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Qg
dHlwZW5hbWUgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVv
Zi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICB1c2luZyBpc19u
b3Rocm93X3N3YXBwYWJsZSA9IGRldGFpbDo6c3dhcHBhYmxlOjppc19ub3Rocm93X3N3YXBwYWJs
ZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVk
ZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsK
LSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9f
Y29weV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBj
b25zdCYgX19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2NvbnN0cnVj
dDxfSW5kZXg+KAotICAgICAgICAgICAgZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAg
ICAvLyA8ZnVuY3Rpb25hbD4KKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gp
CisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDApCisjZW5kaWYKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcz4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0
byBpbnZva2UoRiAmJmYsIEFzICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndh
cmQ8Rj4oZikobGliOjpmb3J3YXJkPEFzPihhcykuLi4pKQorI2lmZGVmIF9NU0NfVkVSCisjcHJh
Z21hIHdhcm5pbmcocG9wKQorI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUg
X19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0
byBpbnZva2UoVCBCOjoqcG12LCBEICYmZCkKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJk
PEQ+KGQpLipwbXYpCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19jb3B5
X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5
X2NvbnN0cnVjdF9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgUG12LCB0eXBlbmFtZSBQdHI+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52
b2tlKFBtdiBwbXYsIFB0ciAmJnB0cikKKyAgICAgICAgICBSRVRVUk4oKCpsaWI6OmZvcndhcmQ8
UHRyPihwdHIpKS4qcG12KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAg
IHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6
X190eXBlPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19jb3B5X2Fzc2ln
bl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAg
dHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25z
dCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZv
aWQgX19jb3B5X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50
IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIGdldDxfSW5kZXg+KCpfX2xocyk9Z2V0PF9JbmRleD4o
X19yaHMpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCLCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBELCB0eXBlbmFtZS4uLiBBcz4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBp
bnZva2UoVCBCOjoqcG1mLCBEICYmZCwgQXMgJiYuLi4gYXMpCisgICAgICAgICAgUkVUVVJOKChs
aWI6OmZvcndhcmQ8RD4oZCkuKnBtZikobGliOjpmb3J3YXJkPEFzPihhcykuLi4pKQogCi0gICAg
c3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19
OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtZiwgdHlwZW5hbWUgUHRyLCB0eXBlbmFtZS4u
LiBBcz4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBpbnZva2UoUG1mIHBtZiwgUHRyICYm
cHRyLCBBcyAmJi4uLiBhcykKKyAgICAgICAgICBSRVRVUk4oKCgqbGliOjpmb3J3YXJkPFB0cj4o
cHRyKSkuKnBtZikobGliOjpmb3J3YXJkPEFzPihhcykuLi4pKQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5
X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
OgotX19mdW5jX3R5cGUKLV9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAg
ICAgbmFtZXNwYWNlIGRldGFpbCB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAg
ICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zhcmlh
bnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19kZXN0cm95X29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fZGVzdHJveV9v
cF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlw
ZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50Kik7Ci0gICAgCi0gICAgdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYygK
LSAgICAgICAgX1ZhcmlhbnQgKiBfX3NlbGYpewotICAgICAgICBpZihfX3NlbGYtPl9faW5kZXg+
PTApewotICAgICAgICAgICAgX19zZWxmLT5fX3N0b3JhZ2UuX19kZXN0cm95KGluX3BsYWNlPF9J
bmRleD4pOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVm9p
ZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3QgaW52b2tlX3Jlc3VsdCB7
fTsKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5k
aWNlcyldOwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHN0cnVjdCBpbnZva2VfcmVzdWx0PHZvaWRfdDxkZWNsdHlwZShsaWI6Omlu
dm9rZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZGVjbHZhbDxGPigp
LCBzdGQ6OmRlY2x2YWw8QXJncz4oKS4uLikpPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj4KKyAgICAgICAgICAg
IDogaWRlbnRpdHk8ZGVjbHR5cGUoCisgICAgICAgICAgICAgICAgICBsaWI6Omludm9rZShzdGQ6
OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4pKT4ge307CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFt
ZSBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fZGVzdHJveV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07CisgICAgICB9
ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAg
ICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zhcmlh
bnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fc3dhcF9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2
b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50JixfVmFyaWFudCYpOwotICAgIAotICAg
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19zd2FwX2Z1bmMo
Ci0gICAgICAgIF9WYXJpYW50ICYgX19saHMsX1ZhcmlhbnQgJiBfX3Jocyl7Ci0gICAgICAgIHN3
YXAoZ2V0PF9JbmRleD4oX19saHMpLGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICB1c2luZyBpbnZv
a2VfcmVzdWx0ID0gZGV0YWlsOjppbnZva2VfcmVzdWx0PHZvaWQsIEYsIEFyZ3MuLi4+OwogCi0g
ICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07
Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAg
ICB1c2luZyBpbnZva2VfcmVzdWx0X3QgPSB0eXBlbmFtZSBpbnZva2VfcmVzdWx0PEYsIEFyZ3Mu
Li4+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19zd2FwX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXpl
b2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX3N3YXBfZnVuYzxfSW5kaWNlcz4uLi4KLSAg
ICB9OworICAgICAgbmFtZXNwYWNlIGRldGFpbCB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGlj
ZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBf
X2VxdWFsaXR5X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+
PnsKLSAgICB0eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFu
dCBjb25zdCYsX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4PgotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2VxdWFsaXR5X2NvbXBhcmVfZnVu
YygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7
Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk9PWdldDxfSW5kZXg+KF9fcmhzKTsK
LSAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWb2lkLCB0eXBlbmFtZSwgdHlwZW5h
bWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGUgOiBzdGQ6OmZhbHNlX3R5cGUge307
CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9fY29tcGFyZV9mdW5jX3R5cGUgX19lcXVhbGl0eV9j
b21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fZXF1YWxpdHlfY29tcGFy
ZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Ci19OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgc3RydWN0IGlzX2ludm9jYWJsZTx2b2lk
X3Q8aW52b2tlX3Jlc3VsdF90PEYsIEFyZ3MuLi4+PiwgRiwgQXJncy4uLj4KKyAgICAgICAgICAg
IDogc3RkOjp0cnVlX3R5cGUge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRp
ZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19lcXVhbGl0eV9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19jb21wYXJlX2Z1
bmNfdHlwZQotX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFyZVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMp
XTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5k
aWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVj
dCBfX2xlc3NfdGhhbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29u
c3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX19sZXNzX3RoYW5fY29tcGFyZV9mdW5jKAotICAgICAgICBfVmFyaWFudCBjb25z
dCYgX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgcmV0dXJuIGdldDxfSW5k
ZXg+KF9fbGhzKTxnZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4KKyAgICAgICAg
c3RydWN0IGlzX2ludm9jYWJsZV9yIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fbGVzc190aGFuX2NvbXBhcmVbc2l6ZW9m
Li4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19sZXNzX3RoYW5fY29tcGFyZV9mdW5jPF9JbmRp
Y2VzPi4uLgotICAgIH07Ci19OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUiwgdHlwZW5h
bWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgc3RydWN0IGlzX2ludm9jYWJsZV9yPHZv
aWRfdDxpbnZva2VfcmVzdWx0X3Q8RiwgQXJncy4uLj4+LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPgorICAgICAgICAgICAgOiBzdGQ6OmlzX2NvbnZl
cnRpYmxlPGludm9rZV9yZXN1bHRfdDxGLCBBcmdzLi4uPiwgUj4ge307CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19sZXNzX3RoYW5fY29tcGFyZVsK
LSAgICBzaXplb2YuLi4oX0luZGljZXMpXTsKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwK
IAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2Vf
dHlwZTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAg
ICAgdXNpbmcgaXNfaW52b2NhYmxlID0gZGV0YWlsOjppc19pbnZvY2FibGU8dm9pZCwgRiwgQXJn
cy4uLj47CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVkLGJvb2wgX190cml2aWFsX2Rlc3Ry
dWN0b3I+Ci1zdHJ1Y3QgX192YXJpYW50X2Jhc2UKLXsKLSAgICB+X192YXJpYW50X2Jhc2UoKXsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8X0Rlcml2ZWQqPih0aGlzKS0+X19kZXN0cm95X3NlbGYoKTsK
LSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICB1c2luZyBpc19pbnZvY2FibGVfciA9IGRldGFpbDo6aXNfaW52
b2NhYmxlX3I8dm9pZCwgUiwgRiwgQXJncy4uLj47CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJp
dmVkPgotc3RydWN0IF9fdmFyaWFudF9iYXNlPF9EZXJpdmVkLHRydWU+ewotfTsKLQotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAg
ICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRp
Y2VzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcywKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+LAotICAgIF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9fdHlwZQotICAg
ICAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
Q3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVyPF9PZmZzZXQs
X0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRy
ZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFtZSBfVHlwZT4K
LXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5
cGU+ewotICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX2luZGlj
ZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAg
MCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2VxdWVuY2VzPgotc3RydWN0IF9fY29tYmluZV9z
ZXF1ZW5jZXM7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0cmRpZmZfdCAu
Li4gX0luZGljZXMyPgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMyLi4uPj57Ci0g
ICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNlczIuLi4+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSAuLi4gX1Jl
c3Q+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3QuLi4+ewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAgX1NlcXVlbmNl
LAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4uPjo6X190eXBl
Pjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9JbmRpY2VzPgotc3Ry
dWN0IF9fZmlyc3RfaW5kZXg7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJbmRleCxwdHJk
aWZmX3QgLi4uIF9SZXN0Pgotc3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9zZXF1ZW5jZTxf
Rmlyc3RJbmRleCxfUmVzdC4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9X0ZpcnN0SW5kZXg7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBl
bmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI7Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFtZSBfVHlw
ZT4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxf
U2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9fc2VxdWVuY2Vf
b3JfZW1wdHl7Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBlOwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5PHRy
dWUsX0VudHJ5PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5PiBfX3R5cGU7
Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVl
bmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4u
IF9SZXN0Pgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwKLSAgICBfT2Zm
c2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYK
LSAgICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIF9P
ZmZzZXQrMSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAg
ICAgIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICAgICB0eXBlbmFtZSBfX3NlcXVlbmNlX29y
X2VtcHR5PAotICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfSGVhZCxfVHlw
ZT46OnZhbHVlLAotICAgICAgICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+OjpfX3R5cGUsCi0g
ICAgICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19o
ZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3R7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX2RpcmVjdF9t
YXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgdHlw
ZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92
ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlLF9UeXBlcy4uLj46
Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRp
Y2VzPAotICAgICAgICBfVHlwZSwKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8
Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGVzPjo6dHlw
ZQotICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3JyZWZfbWF0Y2hlczsKLQotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8X1R5cGUsX1R5cGVzLi4u
Pjo6X190eXBlCi0gICAgX19jb25zdHJ1Y3RpYmxlczsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0g
ICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX192YWx1
ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19ycmVmX21hdGNoZXM6Ol9fbGVu
Z3RoPjApIHx8Ci0gICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpfX2xlbmd0aD09MSksCi0gICAg
ICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFyaWFudHMsIGV4YWN0bHkgb25l
IHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7Ci0gICAgCi0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfX2RpcmVjdF9tYXRjaGVzLF9fdmFsdWVf
bWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKLSAgICAgICAgX19jb25zdHJ1Y3RpYmxlcz46Ol9fdHlw
ZSBfX2FsbF9tYXRjaGVzOwotICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90IF9f
dmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192YWx1ZTsKLX07Ci0KLXN0cnVj
dCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKLSAgICB0ZW1wbGF0ZTwKLSAgICAgICAgcHRy
ZGlmZl90IF9JbmRleCwKLSAgICAgICAgYm9vbCBfX2NvbnN0cnVjdF9kaXJlY3RseSwKLSAgICAg
ICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgICAgICBib29sIF9f
b3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci0gICAgc3RydWN0IF9faGVscGVyOwotCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICAgICAgdHlwZW5hbWUgX0lu
ZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci0gICAg
c3RydWN0IF9fb3BfdGFibGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4
LAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3Jl
cGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LGZhbHNlLHRydWUs
X19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9s
aW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBs
YXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3MuLi4pOwotICAgIH0KLX07Cisg
ICAgICAvLyA8bWVtb3J5PgorI2lmZGVmIE1QQVJLX0JVSUxUSU5fQUREUkVTU09GCisgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAqYWRkcmVzc29m
KFQgJmFyZykgeworICAgICAgICByZXR1cm4gX19idWlsdGluX2FkZHJlc3NvZihhcmcpOworICAg
ICAgfQorI2Vsc2UKKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgewogCi10ZW1wbGF0ZTwKLSAgICBw
dHJkaWZmX3QgX0luZGV4LAotICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92
ZSwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19y
ZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCx0cnVlLF9faW5k
ZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgX19vdGhlcl90eXBlc19oYXZlX25vdGhy
b3dfbW92ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0lu
ZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07CisgICAgICAg
IG5hbWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwgewogCisgICAgICAgICAgc3RydWN0IGZhaWw7
CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSx0cnVlPnsK
KyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgICBpbmxpbmUgZmFpbCBv
cGVyYXRvciYoVCAmJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3Ys
X0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fbG9jYWxfYmFja3Vw
X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0K
LX07CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpbXBsKCkgeworICAgICAgICAgICAgcmV0dXJuIChzdGQ6Omlz
X2NsYXNzPFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSkgJiYKKyAgICAgICAg
ICAgICAgICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKCZzdGQ6OmRlY2x2YWw8VCAmPigpKSwg
ZmFpbD46OnZhbHVlOworICAgICAgICAgIH0KIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9J
bmRleD4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAg
X0luZGV4LGZhbHNlLGZhbHNlLGZhbHNlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1wb2xpbmUoX1Zh
cmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVtcGxhdGUgX19k
aXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0g
ICAgfQotfTsKKyAgICAgICAgfSAgLy8gbmFtZXNwYWNlIGhhc19hZGRyZXNzb2ZfaW1wbAogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0
IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX21vdmVf
ZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25z
dCBfX2NvcHlfZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAg
ICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3Np
Z25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAg
ICAgICBfX2xocy0+dGVtcGxhdGUgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6bW92
ZShnZXQ8X0luZGV4PihfX3JocykpKTsKLSAgICAgICAgX19yaHMuX19kZXN0cm95X3NlbGYoKTsK
LSAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICB1c2luZyBoYXNf
YWRkcmVzc29mID0gYm9vbF9jb25zdGFudDxoYXNfYWRkcmVzc29mX2ltcGw6OmltcGw8VD4oKT47
CiAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29w
eV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYg
X19yaHMpewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19yZXBsYWNlX2NvbnN0cnVjdDxfSW5k
ZXg+KGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBjb25zdCBf
X21vdmVfZnVuY190eXBlIF9fbW92ZV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAg
c3RhdGljIGNvbnN0IF9fY29weV9mdW5jX3R5cGUgX19jb3B5X2Fzc2lnbltzaXplb2YuLi4oX0lu
ZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19v
cF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9f
bW92ZV9mdW5jX3R5cGUKLV9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAot
ICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19tb3ZlX2Fzc2ln
blsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1
bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgICAgIGlubGluZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKFQgJmFyZywgc3RkOjp0cnVlX3R5
cGUpIHsKKyAgICAgICAgICByZXR1cm4gc3RkOjphZGRyZXNzb2YoYXJnKTsKKyAgICAgICAgfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29u
c3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAg
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfZnVuY190eXBl
Ci1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fY29weV9hc3NpZ25bCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4u
LgotICAgIH07CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxpbmUg
Y29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6ZmFsc2VfdHlwZSkgeworICAgICAg
ICAgIHJldHVybiAmYXJnOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgs
cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBf
c3RvcmFnZV9vcHN7Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAg
ICAgICBfU3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpewotICAgICAgICBuZXco
X19kZXN0KSBfU3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sCi0gICAgICAg
ICAgICBzdGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0luZGV4PikpKTsKLSAgICB9
Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7Ci0gICAg
ICAgIF9fb2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfTsKLX07CisgICAg
ICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9JbmRl
eCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKF9TdG9y
YWdlICosX1N0b3JhZ2UmKXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxs
b2MoKSk7Ci0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3RvcmFnZSAq
KXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0gICAgfTsK
LX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIg
VCAqYWRkcmVzc29mKFQgJmFyZykgeworICAgICAgICByZXR1cm4gZGV0YWlsOjphZGRyZXNzb2Yo
YXJnLCBkZXRhaWw6Omhhc19hZGRyZXNzb2Y8VD57fSk7CisgICAgICB9CisjZW5kaWYKIAotdGVt
cGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UsdHlwZW5hbWUgX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNzb2YoY29uc3Qg
VCAmJikgPSBkZWxldGU7CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1l
IF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFn
ZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+ID4KLXsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX21vdmVfZnVuY190eXBlKShfU3Rv
cmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpOwotICAgIHR5cGVkZWYgdm9pZCAoKl9f
ZGVzdHJveV9mdW5jX3R5cGUpKF9TdG9yYWdlICogX19vYmopOwotICAgIAotICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXg+Ci0gICAgc3RydWN0IF9faGVscGVyewotICAgICAgICB0eXBlZGVmIF9f
YmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfTWFza0luZGV4LF9TdG9yYWdlPiBfX29wczsKLSAg
ICB9OworICAgIH0gIC8vIG5hbWVzcGFjZSBjcHAxNwogCi0gICAgc3RhdGljIGNvbnN0IF9fbW92
ZV9mdW5jX3R5cGUgX19tb3ZlX29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLSAgICBzdGF0aWMg
Y29uc3QgX19kZXN0cm95X2Z1bmNfdHlwZSBfX2Rlc3Ryb3lfb3BzW3NpemVvZi4uLihfSW5kaWNl
cyldOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3Jh
Z2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3Jh
Z2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPiA+OjpfX21vdmVfZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxl
PAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4g
Pjo6X19tb3ZlX29wc1sKLSAgICAgICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAm
X19oZWxwZXI8X0luZGljZXM+OjpfX29wczo6X19tb3ZlX2NvbnN0cnVjdF9mdW5jLi4uCi0gICAg
fTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRl
bnRzIDogaWRlbnRpdHk8VD4ge307CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpz
aXplX3QgTj4KKyAgICBzdHJ1Y3QgcmVtb3ZlX2FsbF9leHRlbnRzPGFycmF5PFQsIE4+PiA6IHJl
bW92ZV9hbGxfZXh0ZW50czxUPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IHVzaW5nIHJlbW92ZV9hbGxfZXh0ZW50c190ID0gdHlwZW5hbWUgcmVtb3ZlX2FsbF9leHRlbnRz
PFQ+Ojp0eXBlOworCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CisgICAgdXNpbmcgc2l6
ZV9jb25zdGFudCA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIE4+OwogCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwK
LSAgICBfTWFza0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46
Ol9fZGVzdHJveV9mdW5jX3R5cGUKLV9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01h
c2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ry
b3lfb3BzWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9J
bmRpY2VzPjo6X19vcHM6Ol9fZGVzdHJveV9mdW5jLi4uCisgICAgdGVtcGxhdGUgPGJvb2wuLi4g
QnM+CisgICAgdXNpbmcgYm9vbF9zZXF1ZW5jZSA9IGludGVnZXJfc2VxdWVuY2U8Ym9vbCwgQnMu
Li4+OworCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IGluZGV4ZWRfdHlwZSA6IHNpemVfY29uc3RhbnQ8ST4sIGlkZW50aXR5PFQ+IHt9OworCisg
ICAgdGVtcGxhdGUgPGJvb2wuLi4gQnM+CisgICAgdXNpbmcgYWxsID0KKyAgICAgICAgc3RkOjpp
c19zYW1lPGJvb2xfc2VxdWVuY2U8dHJ1ZSwgQnMuLi4+LCBib29sX3NlcXVlbmNlPEJzLi4uLCB0
cnVlPj47CisKKyNpZmRlZiBNUEFSS19UWVBFX1BBQ0tfRUxFTUVOVAorICAgIHRlbXBsYXRlIDxz
dGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2luZyB0eXBlX3BhY2tfZWxlbWVu
dF90ID0gX190eXBlX3BhY2tfZWxlbWVudDxJLCBUcy4uLj47CisjZWxzZQorICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3QgdHlwZV9wYWNrX2Vs
ZW1lbnRfaW1wbCB7CisgICAgICBwcml2YXRlOgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lPgor
ICAgICAgc3RydWN0IHNldDsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElzPgor
ICAgICAgc3RydWN0IHNldDxpbmRleF9zZXF1ZW5jZTxJcy4uLj4+IDogaW5kZXhlZF90eXBlPElz
LCBUcz4uLi4ge307CisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgaW5saW5l
IHN0YXRpYyBzdGQ6OmVuYWJsZV9pZjx0cnVlLCBUPiBpbXBsKGluZGV4ZWRfdHlwZTxJLCBUPik7
CisKKyAgICAgIGlubGluZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8ZmFsc2U+IGltcGwoLi4uKTsK
KworICAgICAgcHVibGljOgorICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0eXBlKGltcGwoc2V0PGlu
ZGV4X3NlcXVlbmNlX2ZvcjxUcy4uLj4+e30pKTsKICAgICB9OwogCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZXsK
LSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0K
LSAgICB0eXBlZGVmIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgICAgIF9JbmRleCxf
X3N0b3JhZ2VfdHlwZSx0eXBlbmFtZSBfX3R5cGVfaW5kaWNlczxfVHlwZXMuLi4+OjpfX3R5cGU+
Ci0gICAgX19vcF90YWJsZV90eXBlOwotCi0gICAgcHRyZGlmZl90IF9fYmFja3VwX2luZGV4Owot
ICAgIF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZTsKLSAgICBfX3N0b3JhZ2VfdHlwZSBf
X2JhY2t1cDsKLQotICAgIF9fYmFja3VwX3N0b3JhZ2UocHRyZGlmZl90IF9fbGl2ZV9pbmRleF8s
X19zdG9yYWdlX3R5cGUmIF9fbGl2ZV9zdG9yYWdlXyk6Ci0gICAgICAgIF9fYmFja3VwX2luZGV4
KF9fbGl2ZV9pbmRleF8pLF9fbGl2ZV9zdG9yYWdlKF9fbGl2ZV9zdG9yYWdlXyl7Ci0gICAgICAg
IGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19t
b3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwLF9fbGl2
ZV9zdG9yYWdlKTsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tf
X2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9yYWdlKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICB2b2lkIF9fZGVzdHJveSgpewotICAgICAgICBpZihfX2JhY2t1cF9p
bmRleD49MCkKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6X19kZXN0cm95X29wc1tfX2Jh
Y2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fYmFja3VwKTsKLSAgICAgICAgX19iYWNr
dXBfaW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIH5fX2JhY2t1cF9zdG9yYWdlKCl7Ci0gICAg
ICAgIGlmKF9fYmFja3VwX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fb3BfdGFibGVfdHlwZTo6
X19tb3ZlX29wc1tfX2JhY2t1cF9pbmRleF0oCi0gICAgICAgICAgICAgICAgJl9fbGl2ZV9zdG9y
YWdlLF9fYmFja3VwKTsKLSAgICAgICAgICAgIF9fZGVzdHJveSgpOwotICAgICAgICB9Ci0gICAg
fQotfTsKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgICAg
dXNpbmcgdHlwZV9wYWNrX2VsZW1lbnQgPSB0eXBlbmFtZSB0eXBlX3BhY2tfZWxlbWVudF9pbXBs
PEksIFRzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU7CisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVfcGFja19lbGVtZW50X3QgPSB0eXBlbmFt
ZSB0eXBlX3BhY2tfZWxlbWVudDxJLCBUcy4uLj46OnR5cGU7CisjZW5kaWYKIAotdGVtcGxhdGU8
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
dmFsdWU9c3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07CisjaWZkZWYgTVBBUktfVFJJ
VklBTElUWV9UWVBFX1RSQUlUUworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHVzaW5n
IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUgPQorICAgICAgICBzdGQ6OmlzX3RyaXZp
YWxseV9jb3B5X2NvbnN0cnVjdGlibGU8VD47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICB1c2luZyBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlID0KKyAgICAgICAgc3Rk
Ojppc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+OwogCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfY29weV9hc3Np
Z25hYmxlID0gc3RkOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlPFQ+OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYWxsX21vdmVfYXNzaWduYWJsZTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfbW92ZV9hc3Np
Z25hYmxlID0gc3RkOjppc190cml2aWFsbHlfbW92ZV9hc3NpZ25hYmxlPFQ+OworI2Vsc2UKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfdHJpdmlhbGx5X2NvcHlfY29u
c3RydWN0aWJsZQorICAgICAgICA6IGJvb2xfY29uc3RhbnQ8CisgICAgICAgICAgICAgIHN0ZDo6
aXNfY29weV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSAmJiBfX2hhc190cml2aWFsX2NvcHkoVCk+
IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxs
eV9tb3ZlX2NvbnN0cnVjdGlibGUgOiBib29sX2NvbnN0YW50PF9faXNfdHJpdmlhbChUKT4ge307
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfdHJpdmlhbGx5X2Nv
cHlfYXNzaWduYWJsZQorICAgICAgICA6IGJvb2xfY29uc3RhbnQ8CisgICAgICAgICAgICAgIHN0
ZDo6aXNfY29weV9hc3NpZ25hYmxlPFQ+Ojp2YWx1ZSAmJiBfX2hhc190cml2aWFsX2Fzc2lnbihU
KT4ge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFs
dWUgJiYgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9hc3NpZ25h
YmxlIDogYm9vbF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworI2VuZGlmCiAKLXRlbXBs
YXRlPD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlw
ZXt9OworICB9ICAvLyBuYW1lc3BhY2UgbGliCit9ICAvLyBuYW1lc3BhY2UgbXBhcmsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU7
CisjdW5kZWYgUkVUVVJOCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPF9I
ZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19
OwogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPD46Ci0gICAgc3Rk
Ojp0cnVlX3R5cGV7fTsKLQotbmFtZXNwYWNlIF9fc3dhcF90ZXN0X2RldGFpbHsKLXVzaW5nIHN0
ZDo6c3dhcDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgotc3RydWN0IF9fc3dhcF9yZXN1
bHR7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdGF0aWMgY2hhciBfX3Rlc3QoLi4uKTsKLXRl
bXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Ci1zdGF0aWMgc3RkOjpwYWlyPGNoYXIsIHN0ZDo6cGFp
cjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0eXBlKAotICAgIHN3YXAoc3RkOjpkZWNsdmFsPF9P
dGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSkpPj4+Ci1fX3Rlc3QoX090aGVyICop
OwotfQorbmFtZXNwYWNlIHN0ZCB7CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4gc3RydWN0
IF9faXNfc3dhcHBhYmxlIHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAg
ICAgICBzaXplb2YoX19zd2FwX3Rlc3RfZGV0YWlsOjpfX3Rlc3Q8X1R5cGU+KDApKSAhPSAxOwot
fTsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9ERURVQ1RJT04KIAotdGVtcGxhdGU8dHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU7CisjZGVmaW5lIEFVVE8gYXV0
bworI2RlZmluZSBBVVRPX1JFVFVSTiguLi4pIHsgcmV0dXJuIF9fVkFfQVJHU19fOyB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9z
d2FwcGFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZh
bHVlPV9faXNfc3dhcHBhYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfc3dhcHBhYmxlPF9SZXN0
Li4uPjo6dmFsdWU7Ci19OworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvICYmCisjZGVmaW5lIEFV
VE9fUkVGUkVGX1JFVFVSTiguLi4pIHsgcmV0dXJuIF9fVkFfQVJHU19fOyB9CiAKLXRlbXBsYXRl
PD4KLXN0cnVjdCBfX2FsbF9zd2FwcGFibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10
ZW1wbGF0ZTxib29sIF9Nb3ZlQ29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3Zh
cmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFk
JiY+KCkpKSAmJiBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9S
ZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdDoKLV9fbm9leGNlcHRfdmFyaWFudF9t
b3ZlX2NvbnN0cnVjdF9pbXBsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUFzc2lnbmFibGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25f
aW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgot
c3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9IZWFkLCBf
UmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9Ci0gICAgICAgIHN0
ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAgICBz
dGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAg
ICAgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9h
c3NpZ25faW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsK
LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92
YXJpYW50X21vdmVfYXNzaWduCi0gICAgOiBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25f
aW1wbDwKLSAgICAgICAgICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKLSAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlLAotICAgICAgICAgIF9UeXBlcy4uLj4ge307CisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gZGVj
bHR5cGUoYXV0bykKKyNkZWZpbmUgREVDTFRZUEVfQVVUT19SRVRVUk4oLi4uKSB7IHJldHVybiBf
X1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
YWxsX2NvcHlfY29uc3RydWN0aWJsZTsKKyNlbHNlCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X0hl
YWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNf
Y29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9jb25zdHJ1Y3Rp
YmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVU
T19SRVRVUk4oLi4uKSBcCisgIC0+IG1wYXJrOjpsaWI6OmRlY2F5X3Q8ZGVjbHR5cGUoX19WQV9B
UkdTX18pPiB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQorCisjZGVmaW5lIEFVVE9fUkVGUkVGIGF1
dG8KKyNkZWZpbmUgQVVUT19SRUZSRUZfUkVUVVJOKC4uLikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAtPiBkZWNsdHlwZSgoX19WQV9BUkdTX18pKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RhdGljX2Fz
c2VydChzdGQ6OmlzX3JlZmVyZW5jZTxkZWNsdHlwZSgoX19WQV9BUkdTX18pKT46OnZhbHVlLCAi
Iik7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyNkZWZpbmUgREVDTFRZUEVfQVVUTyBh
dXRvCisjZGVmaW5lIERFQ0xUWVBFX0FVVE9fUkVUVVJOKC4uLikgXAorICAtPiBkZWNsdHlwZShf
X1ZBX0FSR1NfXykgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotdGVtcGxhdGU8Pgotc3RydWN0
IF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRl
bXBsYXRlPGJvb2wgX0NvcHlDb25zdHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRl
Y2x2YWw8X0hlYWQgY29uc3QmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlf
Y29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29w
eV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1w
bDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgot
e307Ci0KLXRlbXBsYXRlPGJvb2wgX0NvcHlOb25fQ29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBs
PHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1u
b2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJp
YW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0X2ltcGw8dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
PXRydWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9l
eGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3Zhcmlh
bnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Td2Fw
cGFibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dh
cF9pbXBse307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3Qu
Li4+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBub2V4Y2Vw
dChzd2FwKHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCksc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYm
Ci0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX1Jlc3QuLi4+Ojp2
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9p
bXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
c3dhcDoKLV9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8X19hbGxfc3dhcHBhYmxlPF9UeXBl
cy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY2xhc3MgVmFyaWFudDoKLSAgICAgICAgcHJpdmF0ZSBfX3ZhcmlhbnRfYmFzZTwKLSAg
ICBWYXJpYW50PF9UeXBlcy4uLj4sX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZXMu
Li4+OjpfX3ZhbHVlPgotewotICAgIHR5cGVkZWYgX192YXJpYW50X2Jhc2U8VmFyaWFudDxfVHlw
ZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4g
X19iYXNlX3R5cGU7Ci0gICAgZnJpZW5kIF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBzdHJ1Y3Qg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9f
Y29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX21vdmVf
Y29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fZGVzdHJveV9vcF90
YWJsZTxWYXJpYW50PjsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXMyPgotICAgIGZyaWVuZCBzdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yOwot
Ci0gICAgZnJpZW5kIHN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjsKLQotICAgIHR5
cGVkZWYgX192YXJpYW50X2RhdGE8X1R5cGVzLi4uPiBfX3N0b3JhZ2VfdHlwZTsKLSAgICBfX3N0
b3JhZ2VfdHlwZSBfX3N0b3JhZ2U7Ci0gICAgdHlwZW5hbWUgX19kaXNjcmltaW5hdG9yX3R5cGU8
c2l6ZW9mIC4uLiAoX1R5cGVzKT46Ol9fdHlwZSBfX2luZGV4OwotCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc2l6ZV90IF9fZW1wbGFjZV9jb25z
dHJ1Y3QoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgbmV3KCZfX3N0b3JhZ2UpIF9fc3Rv
cmFnZV90eXBlKAotICAgICAgICAgICAgaW5fcGxhY2U8X0luZGV4PixzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgICAgICByZXR1cm4gIF9JbmRleDsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBfX2Rlc3Ryb3lfc2VsZigpewotICAgICAgICBpZih2YWx1ZWxlc3NfYnlfZXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIF9fZGVzdHJveV9vcF90YWJsZTxW
YXJpYW50Pjo6X19hcHBseVtpbmRleCgpXSh0aGlzKTsKLSAgICAgICAgX19pbmRleD0tMTsKLSAg
ICB9Ci0gICAgCi0gICAgcHRyZGlmZl90IF9fbW92ZV9jb25zdHJ1Y3QoVmFyaWFudCYgX19vdGhl
cil7Ci0gICAgICAgIHB0cmRpZmZfdCBjb25zdCBfX290aGVyX2luZGV4PV9fb3RoZXIuaW5kZXgo
KTsKLSAgICAgICAgaWYoX19vdGhlcl9pbmRleD09LTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0gICAgICAgIF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbX19v
dGhlcl9pbmRleF0odGhpcyxfX290aGVyKTsKLSAgICAgICAgX19vdGhlci5fX2Rlc3Ryb3lfc2Vs
ZigpOwotICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisjZW5kaWYKIAotICAg
IHB0cmRpZmZfdCBfX2NvcHlfY29uc3RydWN0KFZhcmlhbnQgY29uc3QmIF9fb3RoZXIpewotICAg
ICAgICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAg
ICAgIGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAg
ICBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5k
ZXhdKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIHJldHVybiBfX290aGVyX2luZGV4OwotICAgIH0K
KyAgY2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgdmlydHVhbCBjb25zdCBjaGFyICp3aGF0KCkgY29uc3Qgbm9leGNlcHQg
eyByZXR1cm4gImJhZF92YXJpYW50X2FjY2VzcyI7IH0KKyAgfTsKKworICBbW25vcmV0dXJuXV0g
aW5saW5lIHZvaWQgdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCkgeworI2lmZGVmIE1QQVJLX0VY
Q0VQVElPTlMKKyAgICB0aHJvdyBiYWRfdmFyaWFudF9hY2Nlc3N7fTsKKyNlbHNlCisgICAgc3Rk
Ojp0ZXJtaW5hdGUoKTsKKyNlbmRpZgorICB9CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fcmVwbGFjZV9jb25zdHJ1Y3QoX0FyZ3Mm
JiAuLi4gX19hcmdzKXsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxf
SW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdGhpc190eXBlOwotICAgICAgICBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgICAgICAgICBfSW5kZXgsCi0gICAgICAg
ICAgICBfX3N0b3JhZ2Vfbm90aHJvd19jb25zdHJ1Y3RpYmxlPF9fdGhpc190eXBlLF9BcmdzLi4u
Pjo6X192YWx1ZSB8fAotICAgICAgICAgICAgKHNpemVvZi4uLihfVHlwZXMpPT0xKSwKLSAgICAg
ICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfX3RoaXNfdHlwZT46
Ol9fdmFsdWUsCi0gICAgICAgICAgICBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8Ci0gICAgICAgICAgICAgICAgX0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWUKLSAg
ICAgICAgICAgID46Ol9fdHJhbXBvbGluZSgqdGhpcyxzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pOwotICAgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBjbGFzcyB2YXJp
YW50OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgdm9pZCBfX3R3b19zdGFnZV9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci0gICAgICAgIF9fdmFyaWFudF9kYXRhPF9fdHlwZT4gX19sb2NhbCgKLSAgICAg
ICAgICAgIGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAg
ICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PigKLSAgICAgICAgICAgIHN0ZDo6bW92ZShfX2xvY2FsLl9fZ2V0KGluX3BsYWNlPDA+KSkpOwot
ICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAgICAgX19sb2NhbC5fX2Rlc3Ryb3koaW5fcGxh
Y2U8MD4pOwotICAgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50
X3NpemU7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4K
LSAgICB2b2lkIF9fbG9jYWxfYmFja3VwX3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAg
ICAgICAgX19iYWNrdXBfc3RvcmFnZTxfSW5kZXgsX1R5cGVzLi4uPiBfX2JhY2t1cChfX2luZGV4
LF9fc3RvcmFnZSk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRleDsKLSAgICAg
ICAgX19iYWNrdXAuX19kZXN0cm95KCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX19kaXJlY3RfcmVwbGFjZShf
QXJncyYmIC4uLiBfX2FyZ3MpIHsKLSAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAg
X19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
Lik7Ci0gICAgICAgIF9faW5kZXg9X0luZGV4OwotICAgIH0KKyNpZmRlZiBNUEFSS19WQVJJQUJM
RV9URU1QTEFURVMKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIGNvbnN0ZXhwciBzdGQ6OnNp
emVfdCB2YXJpYW50X3NpemVfdiA9IHZhcmlhbnRfc2l6ZTxUPjo6dmFsdWU7CisjZW5kaWYKIAot
ICAgIHN0cnVjdCBfX3ByaXZhdGVfdHlwZXt9OworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg
c3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCBUPiA6IHZhcmlhbnRfc2l6ZTxUPiB7fTsKIAotcHVi
bGljOgotICAgIGNvbnN0ZXhwciBWYXJpYW50KCkKLSAgICAgICAgX19OT0VYQ0VQVF8obm9leGNl
cHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgotICAg
ICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8MD4pLAotICAgICAgICBfX2luZGV4KDApCi0gICAge30K
LQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5
cGU+Ojp0eXBlJiYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9fbW92
ZV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5
cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpPWRlbGV0
ZTsKLSAgICAKLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3Zh
cmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAg
ICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25z
dGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUm
IF9fb3RoZXIpPWRlbGV0ZTsKLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6
Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZh
cmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKQotICAgIF9fTk9FWENF
UFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2
YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7
fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19h
bGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRl
X3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNvbnN0ZXhw
ciBWYXJpYW50KGluX3BsYWNlX3R5cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAg
ICAgICAgX19zdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8X190eXBlX2luZGV4PF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4u
Pjo6X192YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1
Y3RpYmxlPF9UeXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxl
IGZyb20gYXJncyIpOwotICAgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2
YXJpYW50X3NpemU8dm9sYXRpbGUgVD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLSAgICB0ZW1w
bGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25z
dGV4cHIgVmFyaWFudChpbl9wbGFjZV9pbmRleF90PF9JbmRleD4sX0FyZ3MmJiAuLi4gX19hcmdz
KToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfSW5kZXgpCi0gICAgewotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVzdCBi
ZSBjb25zdHJ1Y3RpYmxlIGZyb20gYXJncyIpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZT4KLSAgICBjb25zdGV4cHIgVmFyaWFudChfVHlwZSYmIF9feCk6Ci0gICAg
ICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAgX190eXBl
X2luZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2lu
ZGV4X3RvX2NvbnN0cnVjdDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHt9Ci0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSwKLSAgICAgICAgICAgICB0eXBlbmFtZSBfRW5hYmxl
PQotICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAgICAg
ICAoX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixf
VHlwZXMuLi4+OjpfX3R5cGU6Ol9fbGVuZ3RoPjApCi0gICAgICAgICAgICAgPjo6dHlwZT4KLSAg
ICBjb25zdGV4cHIgVmFyaWFudChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+IF9feCk6Ci0g
ICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPAotICAgICAgICAgICAgX190
eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBl
cy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgX194KSwKLSAgICAgICAgX19pbmRleChfX3R5
cGVfaW5kZXhfdG9fY29uc3RydWN0PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVz
Li4uPjo6X192YWx1ZSkKLSAgICB7fQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBl
PgotICAgIFZhcmlhbnQmIG9wZXJhdG9yPShfVHlwZSYmIF9feCl7Ci0gICAgICAgIGNvbnN0ZXhw
ciBzaXplX3QgX0luZGV4PQotICAgICAgICAgICAgX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxf
VHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotICAgICAgICBpZihfSW5kZXg9PV9faW5kZXgpewot
ICAgICAgICAgICAgZ2V0PF9JbmRleD4oKnRoaXMpPXN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVj
dDxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfVHlwZT4oX194KSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuICp0aGlzOwotICAgIH0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2
YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLSAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46
OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25z
dCAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAg
IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3Zl
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2Fs
bF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50
LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lf
c2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRl
eCgpKXsKLSAgICAgICAgICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAg
ICAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46
Ol9fY29weV9hc3NpZ25bCi0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9f
b3RoZXIpOworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIHN0cnVjdCB2YXJpYW50X3Np
emU8dmFyaWFudDxUcy4uLj4+IDogbXBhcms6OmxpYjo6c2l6ZV9jb25zdGFudDxzaXplb2YuLi4o
VHMpPiB7fTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVD4KKyAgc3Ry
dWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU7CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5
cGVuYW1lIFQ+CisgIHVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IFQ+Cisg
ICAgICA6IHN0ZDo6YWRkX2NvbnN0PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCBUPj4ge307CisK
KyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50
X2FsdGVybmF0aXZlPEksIHZvbGF0aWxlIFQ+CisgICAgICA6IHN0ZDo6YWRkX3ZvbGF0aWxlPHZh
cmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCBUPj4ge307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IHZv
bGF0aWxlIFQ+CisgICAgICA6IHN0ZDo6YWRkX2N2PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCBU
Pj4ge307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBz
dHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFRzLi4uPj4KKyAgICAgIDogbXBh
cms6OmxpYjo6aWRlbnRpdHk8bXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4u
Lj4+IHsKKyAgICBzdGF0aWNfYXNzZXJ0KEkgPCBzaXplb2YuLi4oVHMpLAorICAgICAgICAgICAg
ICAgICAgImB2YXJpYW50X2FsdGVybmF0aXZlYCBpbmRleCBvdXQgb2YgcmFuZ2UuIik7CisgIH07
CisKKyAgY29uc3RleHByIHN0ZDo6c2l6ZV90IHZhcmlhbnRfbnBvcyA9IHN0YXRpY19jYXN0PHN0
ZDo6c2l6ZV90PigtMSk7CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICBpbmxpbmUgY29u
c3RleHByIGJvb2wgYWxsKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIEJzPgorICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBhbGwoYm9vbCBiLCBCcy4uLiBi
cykgeworICAgICAgcmV0dXJuIGIgJiYgYWxsKGJzLi4uKTsKKyAgICB9CisKKyAgICBjb25zdGV4
cHIgc3RkOjpzaXplX3Qgbm90X2ZvdW5kID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKTsK
KyAgICBjb25zdGV4cHIgc3RkOjpzaXplX3QgYW1iaWd1b3VzID0gc3RhdGljX2Nhc3Q8c3RkOjpz
aXplX3Q+KC0yKTsKKworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6
c2l6ZV90IGZpbmRfaW5kZXgoKSB7CisgICAgICBjb25zdGV4cHIgbXBhcms6OmxpYjo6YXJyYXk8
Ym9vbCwgc2l6ZW9mLi4uKFRzKT4gbWF0Y2hlcyA9IHsKKyAgICAgICAgICB7c3RkOjppc19zYW1l
PFQsIFRzPjo6dmFsdWUuLi59CisgICAgICB9OworICAgICAgc3RkOjpzaXplX3QgcmVzdWx0ID0g
bm90X2ZvdW5kOworICAgICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHNpemVvZi4uLihU
cyk7ICsraSkgeworICAgICAgICBpZiAobWF0Y2hlc1tpXSkgeworICAgICAgICAgIGlmIChyZXN1
bHQgIT0gbm90X2ZvdW5kKSB7CisgICAgICAgICAgICByZXR1cm4gYW1iaWd1b3VzOworICAgICAg
ICAgIH0KKyAgICAgICAgICByZXN1bHQgPSBpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotICAgIFZhcmlhbnQg
Jm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAg
ICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAg
ICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgot
ICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUpLAot
ICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICZfX290aGVyKSA9IGRl
bGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpj
b25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBl
Pjo6dHlwZSAmX19vdGhlcikgewotICAgICAgICBpZihfX290aGVyLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSl7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fY29w
eV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVy
KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fY29weV9hc3NpZ25bCi0gICAgICAg
ICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAg
ICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9tb3ZlX2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAm
b3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVf
Y29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5
cGU+Ojp0eXBlICYmCi0gICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBUXyhfX25vZXhjZXB0
X3ZhcmlhbnRfbW92ZV9hc3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lf
c2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRl
eCgpKXsKLSAgICAgICAgICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBw
bHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgICAgIF9fb3RoZXIuX19kZXN0cm95
X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fbW92ZV9hc3NpZ25bCi0g
ICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiAqdGhpczsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90KSB7CisgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4K
KyAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGZpbmRfaW5kZXhfaW1wbChzdGQ6OnNp
emVfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzaXplX3QgaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCcy4uLiBicykgeworICAgICAgcmV0dXJuIGIgPyAocmVzdWx0ICE9
IG5vdF9mb3VuZCA/IGFtYmlndW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IGZpbmRfaW5kZXhfaW1wbChpZHgsIGlkeCArIDEsIGJzLi4uKSkKKyAgICAgICAgICAg
ICAgIDogZmluZF9pbmRleF9pbXBsKHJlc3VsdCwgaWR4ICsgMSwgYnMuLi4pOworICAgIH0KKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBpbmxpbmUgY29u
c3RleHByIHN0ZDo6c2l6ZV90IGZpbmRfaW5kZXgoKSB7CisgICAgICByZXR1cm4gZmluZF9pbmRl
eF9pbXBsKG5vdF9mb3VuZCwgMCwgc3RkOjppc19zYW1lPFQsIFRzPjo6dmFsdWUuLi4pOwogICAg
IH0KKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHZvaWQgZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2Rp
cmVjdF9yZXBsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPigKLSAg
ICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAot
ICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQg
ZW1wbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX2RpcmVjdF9yZXBsYWNlPF9J
bmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAg
Y29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IF9fTk9FWENFUFR7
Ci0gICAgICAgIHJldHVybiBfX2luZGV4PT0tMTsKLSAgICB9Ci0gICAgY29uc3RleHByIHB0cmRp
ZmZfdCBpbmRleCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiBfX2luZGV4Owot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KKyAgICB1c2luZyBmaW5kX2luZGV4
X3NmaW5hZV9pbXBsID0KKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8SSAhPSBub3Rf
Zm91bmQgJiYgSSAhPSBhbWJpZ3VvdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6c2l6ZV9jb25zdGFudDxJPj47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWUgPSBmaW5kX2luZGV4X3Nm
aW5hZV9pbXBsPGZpbmRfaW5kZXg8VCwgVHMuLi4+KCk+OworCisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+CisgICAgc3RydWN0IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsIDogbXBhcms6Omxp
Yjo6c2l6ZV9jb25zdGFudDxJPiB7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gbm90X2ZvdW5k
LCAidGhlIHNwZWNpZmllZCB0eXBlIGlzIG5vdCBmb3VuZC4iKTsKKyAgICAgIHN0YXRpY19hc3Nl
cnQoSSAhPSBhbWJpZ3VvdXMsICJ0aGUgc3BlY2lmaWVkIHR5cGUgaXMgYW1iaWd1b3VzLiIpOwor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgICAg
dXNpbmcgZmluZF9pbmRleF9jaGVja2VkID0gZmluZF9pbmRleF9jaGVja2VkX2ltcGw8ZmluZF9p
bmRleDxULCBUcy4uLj4oKT47CisKKyAgICBzdHJ1Y3QgdmFsdWVsZXNzX3Qge307CiAKLSAgICB2
b2lkIHN3YXAoCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAg
ICBfX2FsbF9zd2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgICBW
YXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUKLSAgICAgICAgICAgICZfX290aGVyKSBfX05P
RVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2YWx1ZSkgewotICAg
ICAgICBpZiAoX19vdGhlci5pbmRleCgpID09IGluZGV4KCkpIHsKLSAgICAgICAgICAgIGlmKCF2
YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgX19zd2FwX29wX3RhYmxl
PFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKCp0aGlzLF9fb3RoZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2V7Ci0gICAgICAgICAgICBWYXJpYW50IF9fdGVtcChzdGQ6Om1vdmUoX19vdGhl
cikpOwotICAgICAgICAgICAgX19vdGhlci5fX2luZGV4PV9fb3RoZXIuX19tb3ZlX2NvbnN0cnVj
dCgqdGhpcyk7Ci0gICAgICAgICAgICBfX2luZGV4PV9fbW92ZV9jb25zdHJ1Y3QoX190ZW1wKTsK
KyAgICBlbnVtIGNsYXNzIFRyYWl0IHsgVHJpdmlhbGx5QXZhaWxhYmxlLCBBdmFpbGFibGUsIFVu
YXZhaWxhYmxlIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKKyAgICAgICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBJc1RyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lPiBjbGFzcyBJc0F2YWlsYWJsZT4KKyAgICBpbmxpbmUg
Y29uc3RleHByIFRyYWl0IHRyYWl0KCkgeworICAgICAgcmV0dXJuIElzVHJpdmlhbGx5QXZhaWxh
YmxlPFQ+Ojp2YWx1ZQorICAgICAgICAgICAgICAgICA/IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFi
bGUKKyAgICAgICAgICAgICAgICAgOiBJc0F2YWlsYWJsZTxUPjo6dmFsdWUgPyBUcmFpdDo6QXZh
aWxhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVHJhaXQ6
OlVuYXZhaWxhYmxlOworICAgIH0KKworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcmFpdHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFp
dCBjb21tb25fdHJhaXQoVHJhaXRzLi4uIHRyYWl0cykgeworICAgICAgVHJhaXQgcmVzdWx0ID0g
VHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZTsKKyAgICAgIGZvciAoVHJhaXQgdCA6IHt0cmFpdHMu
Li59KSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50
PihyZXN1bHQpKSB7CisgICAgICAgICAgcmVzdWx0ID0gdDsKICAgICAgICAgfQorICAgICAgfQor
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci19OworI2Vsc2UKKyAgICBpbmxpbmUgY29uc3Rl
eHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0IHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0
OyB9CiAKLXRlbXBsYXRlPD4KLWNsYXNzIFZhcmlhbnQ8PnsKLXB1YmxpYzoKLSAgICBWYXJpYW50
KCk9ZGVsZXRlOwotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9u
X3RyYWl0X2ltcGwoVHJhaXQgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHJhaXQgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRyYWl0cy4uLiB0cykgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4odCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgPyBjb21t
b25fdHJhaXRfaW1wbCh0LCB0cy4uLikKKyAgICAgICAgICAgICAgICAgOiBjb21tb25fdHJhaXRf
aW1wbChyZXN1bHQsIHRzLi4uKTsKICAgICB9Ci0gICAgY29uc3RleHByIHB0cmRpZmZfdCBpbmRl
eCgpIGNvbnN0IF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiAtMTsKKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcmFpdHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25f
dHJhaXQoVHJhaXRzLi4uIHRzKSB7CisgICAgICByZXR1cm4gY29tbW9uX3RyYWl0X2ltcGwoVHJh
aXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwgdHMuLi4pOwogICAgIH0KKyNlbmRpZgogCi0gICAgdm9p
ZCBzd2FwKFZhcmlhbnQmKXt9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAg
ICBzdHJ1Y3QgdHJhaXRzIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgY29weV9jb25z
dHJ1Y3RpYmxlX3RyYWl0ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9jb3B5X2Nv
bnN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29weV9j
b25zdHJ1Y3RpYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBtb3Zl
X2NvbnN0cnVjdGlibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90cmFpdCh0cmFpdDxUcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfdHJpdmlhbGx5X21v
dmVfY29uc3RydWN0aWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19t
b3ZlX2NvbnN0cnVjdGlibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMgY29uc3RleHByIFRyYWl0
IGNvcHlfYXNzaWduYWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KGNvcHlfY29u
c3RydWN0aWJsZV90cmFpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgdHJhaXQ8VHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9jb3B5X2Fz
c2lnbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29weV9hc3Np
Z25hYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBtb3ZlX2Fzc2ln
bmFibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90cmFpdChtb3ZlX2NvbnN0cnVjdGlibGVf
dHJhaXQsCisgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfbW92ZV9hc3NpZ25hYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX21vdmVfYXNzaWduYWJsZT4oKS4u
Lik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgZGVzdHJ1Y3RpYmxlX3RyYWl0ID0K
KyAgICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjppc19kZXN0cnVjdGlibGU+KCkuLi4pOworICAgIH07CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci10eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxfX2FsbF9z
d2FwcGFibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkPjo6dHlwZQotc3dhcChWYXJpYW50PF9UeXBlcy4uLj4gJl9fbGhz
LCBWYXJpYW50PF9UeXBlcy4uLj4gJl9fcmhzKSBfX05PRVhDRVBUXygKLSAgICBfX25vZXhjZXB0
X3ZhcmlhbnRfc3dhcDxfVHlwZXMuLi4+Ojp2YWx1ZSkgewotICAgIF9fbGhzLnN3YXAoX19yaHMp
OwotfQorICAgIG5hbWVzcGFjZSBhY2Nlc3MgewogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2FjY2Vzc29yewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4mIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9J
bmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSBjb25zdCYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3Jh
Z2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIg
X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgICAgIHJldHVybiBf
X3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25z
dCYmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0X3JyZWYoaW5fcGxh
Y2U8X0luZGV4Pik7Ci0gICAgfQotfTsKKyAgICAgIHN0cnVjdCByZWN1cnNpdmVfdW5pb24gewor
I2lmZGVmIE1QQVJLX1JFVFVSTl9UWVBFX0RFRFVDVElPTgorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQo
ViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8MD4pIHsKKyAgICAgICAgICByZXR1cm4gbXBhcms6Omxp
Yjo6Zm9yd2FyZDxWPih2KS5oZWFkXzsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBl
cy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWLCBz
dGQ6OnNpemVfdCBJPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvICYmZ2V0
X2FsdChWICYmdiwgaW5fcGxhY2VfaW5kZXhfdDxJPikgeworICAgICAgICAgIHJldHVybiBnZXRf
YWx0KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8sIGluX3BsYWNlX2luZGV4X3Q8SSAt
IDE+e30pOworICAgICAgICB9CisjZWxzZQorICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgYm9vbCBEdW1teSA9IHRydWU+CisgICAgICAgIHN0cnVjdCBnZXRfYWx0X2ltcGwgeworICAg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWPgorICAgICAgICAgIGlubGluZSBjb25zdGV4cHIg
QVVUT19SRUZSRUYgb3BlcmF0b3IoKShWICYmdikgY29uc3QKKyAgICAgICAgICAgIEFVVE9fUkVG
UkVGX1JFVFVSTihnZXRfYWx0X2ltcGw8SSAtIDE+e30obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2
KS50YWlsXykpCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPGJvb2wgRHVtbXk+Cisg
ICAgICAgIHN0cnVjdCBnZXRfYWx0X2ltcGw8MCwgRHVtbXk+IHsKKyAgICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVGIG9w
ZXJhdG9yKCkoViAmJnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4obXBh
cms6OmxpYjo6Zm9yd2FyZDxWPih2KS5oZWFkXykKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3QgST4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBj
b25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdiwgaW5fcGxhY2VfaW5kZXhfdDxJPikK
KyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEk+e30obXBhcms6Omxp
Yjo6Zm9yd2FyZDxWPih2KSkpCisjZW5kaWYKKyAgICAgIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUmJiBnZXQoVmFyaWFu
dDxfVHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxf
VHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19CisgICAgICBzdHJ1Y3QgYmFz
ZSB7CisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgorICAgICAg
ICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZXRfYWx0KFYgJiZ2KQorICAg
ICAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihyZWN1cnNpdmVfdW5pb246OmdldF9hbHQoCisgICAg
ICAgICAgICAgIGRhdGEobXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSksIGluX3BsYWNlX2luZGV4
X3Q8ST57fSkpCisgICAgICB9OworCisgICAgICBzdHJ1Y3QgdmFyaWFudCB7CisgICAgICAgIHRl
bXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgorICAgICAgICBpbmxpbmUgc3RhdGlj
IGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZXRfYWx0KFYgJiZ2KQorICAgICAgICAgIEFVVE9fUkVG
UkVGX1JFVFVSTihiYXNlOjpnZXRfYWx0PEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaW1w
bF8pKQorICAgICAgfTsKKworICAgIH0gIC8vIG5hbWVzcGFjZSBhY2Nlc3MKKworICAgIG5hbWVz
cGFjZSB2aXNpdGF0aW9uIHsKKworICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICBwcml2YXRl
OgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBj
b25zdGV4cHIgY29uc3QgVCAmYXQoY29uc3QgVCAmZWxlbSkgeworICAgICAgICAgIHJldHVybiBl
bGVtOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6
X192YWx1ZT4oX192KTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6
ZV90IE4sIHR5cGVuYW1lLi4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBtcGFyazo6bGliOjpyZW1vdmVfYWxsX2V4dGVudHNfdDxUPiAmYXQoCisgICAgICAgICAg
ICBjb25zdCBtcGFyazo6bGliOjphcnJheTxULCBOPiAmZWxlbXMsIHN0ZDo6c2l6ZV90IGksIElz
Li4uIGlzKSB7CisgICAgICAgICAgcmV0dXJuIGF0KGVsZW1zW2ldLCBpcy4uLik7CisgICAgICAg
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0
ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3Ypewot
ICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KHN0
ZDo6bW92ZShfX3YpKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1l
Li4uIEZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBpbnQgdmlzaXRfdmlzaXRv
cl9yZXR1cm5fdHlwZV9jaGVjaygpIHsKKyAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsbChzdGQ6
OmlzX3NhbWU8RiwgRnM+Ojp2YWx1ZS4uLiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYG1w
YXJrOjp2aXNpdGAgcmVxdWlyZXMgdGhlIHZpc2l0b3IgdG8gaGF2ZSBhIHNpbmdsZSAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAicmV0dXJuIHR5cGUuIik7CisgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KIAorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRnM+CisgICAgICAg
IGlubGluZSBzdGF0aWMgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PAorICAgICAgICAgICAg
bXBhcms6OmxpYjo6Y29tbW9uX3R5cGVfdDxtcGFyazo6bGliOjpkZWNheV90PEZzPi4uLj4sCisg
ICAgICAgICAgICBzaXplb2YuLi4oRnMpPgorICAgICAgICBtYWtlX2ZhcnJheShGcyAmJi4uLiBm
cykgeworICAgICAgICAgIHVzaW5nIHJlc3VsdCA9IG1wYXJrOjpsaWI6OmFycmF5PG1wYXJrOjps
aWI6OmNvbW1vbl90eXBlX3Q8bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT47CisgICAgICAgICAgcmV0
dXJuIHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2s8bXBhcms6OmxpYjo6ZGVjYXlfdDxG
cz4uLi4+KCksCisgICAgICAgICAgICAgICAgIHJlc3VsdHt7bXBhcms6OmxpYjo6Zm9yd2FyZDxG
cz4oZnMpLi4ufX07CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3Qm
IF9fdil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAg
ICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBl
bmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0Jj4oIkJh
ZCBWYXJpYW50IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihf
X3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19
CisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgICAgc3RydWN0IGRp
c3BhdGNoZXIgeworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBW
cz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbCB7CisgICAgICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIGRpc3BhdGNoKEYgZiwgVnMuLi4gdnMpCisgICAgICAgICAg
ICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKG1wYXJrOjpsaWI6Omludm9rZSgKKyAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEY+KGYpLAorICAgICAgICAgICAgICAgICAgYWNjZXNzOjpiYXNl
OjpnZXRfYWx0PElzPihzdGF0aWNfY2FzdDxWcz4odnMpKS4uLikpCisgICAgICAgICAgfTsKKyAg
ICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnMs
IHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRP
IG1ha2VfZGlzcGF0Y2gobXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+KQorICAgICAg
ICAgIEFVVE9fUkVUVVJOKCZkaXNwYXRjaGVyPElzLi4uPjo6dGVtcGxhdGUgaW1wbDxGLCBWcy4u
Lj46OmRpc3BhdGNoKQorCisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFt
ZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVU
TyBtYWtlX2ZkaWFnb25hbF9pbXBsKCkKKyAgICAgICAgICBBVVRPX1JFVFVSTihtYWtlX2Rpc3Bh
dGNoPEYsIFZzLi4uPigKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8
bXBhcms6OmxpYjo6aW5kZXhlZF90eXBlPEksIFZzPjo6dmFsdWUuLi4+e30pKQorCisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBWcywgc3RkOjpzaXplX3QuLi4gSXM+
CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlhZ29uYWxfaW1w
bCgKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAg
ICAgICBBVVRPX1JFVFVSTihtYWtlX2ZhcnJheShtYWtlX2ZkaWFnb25hbF9pbXBsPElzLCBGLCBW
cy4uLj4oKS4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lIFYs
IHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciAvKiBhdXRv
ICogKi8gYXV0byBtYWtlX2ZkaWFnb25hbCgpCisgICAgICAgICAgICAtPiBkZWNsdHlwZShtYWtl
X2ZkaWFnb25hbF9pbXBsPEYsIFYsIFZzLi4uPigKKyAgICAgICAgICAgICAgICBtcGFyazo6bGli
OjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46OnNpemUoKT57fSkp
IHsKKyAgICAgICAgICBzdGF0aWNfYXNzZXJ0KAorICAgICAgICAgICAgICBhbGwoKG1wYXJrOjps
aWI6OmRlY2F5X3Q8Vj46OnNpemUoKSA9PSBtcGFyazo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgp
KS4uLiksCisgICAgICAgICAgICAgICJhbGwgb2YgdGhlIHZhcmlhbnRzIG11c3QgYmUgdGhlIHNh
bWUgc2l6ZS4iKTsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBWLCBW
cy4uLj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBh
cms6OmxpYjo6ZGVjYXlfdDxWPjo6c2l6ZSgpPnt9KTsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9JbmRleCE9X192LmluZGV4
KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigi
QmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6YWRkcmVzc29m
KF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpCi0gICAgKTsK
LX0KKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9ERURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgICAg
aW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byBtYWtlX2ZtYXRyaXhfaW1wbCgKKyAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPiBpcykgeworICAgICAgICAgIHJl
dHVybiBtYWtlX2Rpc3BhdGNoPEYsIFZzLi4uPihpcyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiYgX192KXsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJv
d19iYWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAw
KSwgc3RkOjptb3ZlKF9fdikpCi0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEYsCisgICAgICAgICAgICAgICAgICB0eXBlbmFtZS4uLiBWcywKKyAgICAgICAgICAgICAgICAg
IHN0ZDo6c2l6ZV90Li4uIElzLAorICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3QuLi4gSnMs
CisgICAgICAgICAgICAgICAgICB0eXBlbmFtZS4uLiBMcz4KKyAgICAgICAgaW5saW5lIHN0YXRp
YyBjb25zdGV4cHIgYXV0byBtYWtlX2ZtYXRyaXhfaW1wbCgKKyAgICAgICAgICAgIG1wYXJrOjps
aWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwgbXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SnMu
Li4+LCBMcy4uLiBscykgeworICAgICAgICAgIHJldHVybiBtYWtlX2ZhcnJheShtYWtlX2ZtYXRy
aXhfaW1wbDxGLCBWcy4uLj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVl
bmNlPElzLi4uLCBKcz57fSwgbHMuLi4pLi4uKTsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8
X0luZGV4LF9UeXBlcy4uLj46OmdldCgKLSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkg
PyBfX3Rocm93X2JhZF92YXJpYW50X2FjY2VzczxpbnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBn
ZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192KSkKLSAgICApOwotfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3Rl
eHByIGF1dG8gbWFrZV9mbWF0cml4KCkgeworICAgICAgICAgIHJldHVybiBtYWtlX2ZtYXRyaXhf
aW1wbDxGLCBWcy4uLj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNl
PD57fSwKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFy
azo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgpPnt9Li4uKTsKKyAgICAgICAgfQorI2Vsc2UKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBzdHJ1
Y3QgbWFrZV9mbWF0cml4X2ltcGwgeworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4K
KyAgICAgICAgICBzdHJ1Y3QgaW1wbDsKKworICAgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVf
dC4uLiBJcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1ZW5j
ZTxJcy4uLj4+IHsKKyAgICAgICAgICAgIGlubGluZSBjb25zdGV4cHIgQVVUTyBvcGVyYXRvcigp
KCkgY29uc3QKKyAgICAgICAgICAgICAgQVVUT19SRVRVUk4oCisgICAgICAgICAgICAgICAgICBt
YWtlX2Rpc3BhdGNoPEYsIFZzLi4uPihtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj57
fSkpCisgICAgICAgICAgfTsKKworICAgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJ
cywgc3RkOjpzaXplX3QuLi4gSnMsIHR5cGVuYW1lLi4uIExzPgorICAgICAgICAgIHN0cnVjdCBp
bXBsPG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPiwKKyAgICAgICAgICAgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxKcy4uLj4sCisgICAgICAgICAgICAgICAg
ICAgICAgTHMuLi4+IHsKKyAgICAgICAgICAgIGlubGluZSBjb25zdGV4cHIgQVVUTyBvcGVyYXRv
cigpKCkgY29uc3QKKyAgICAgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJyYXkoCisgICAg
ICAgICAgICAgICAgICBpbXBsPG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uLCBKcz4s
IExzLi4uPnt9KCkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGlj
IGNvbnN0ZXhwciBBVVRPIG1ha2VfZm1hdHJpeCgpCisgICAgICAgICAgQVVUT19SRVRVUk4oCisg
ICAgICAgICAgICAgIHR5cGVuYW1lIG1ha2VfZm1hdHJpeF9pbXBsPEYsIFZzLi4uPjo6dGVtcGxh
dGUgaW1wbDwKKyAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPD4s
CisgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJr
OjpsaWI6OmRlY2F5X3Q8VnM+OjpzaXplKCk+Li4uPnt9KCkpCisjZW5kaWYKIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0
dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkp
P251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyAgICAgICAgcHVi
bGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+
CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gdmlzaXRfYWx0
X2F0KHN0ZDo6c2l6ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4g
dnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgICAgICAgIGF0KG1h
a2VfZmRpYWdvbmFsPFZpc2l0b3IgJiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlY2x0eXBlKGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKSkuLi4+KCksCisg
ICAgICAgICAgICAgICAgIGluZGV4KShtcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0
b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJk
PFZzPih2cykpLi4uKSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIERFQ0xUWVBFX0FV
VE8gdmlzaXRfYWx0KFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBE
RUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgYXQobWFrZV9mbWF0cml4PFZpc2l0
b3IgJiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShhc19iYXNlKG1w
YXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAgICAgICB2cy5p
bmRleCgpLi4uKShtcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc19iYXNlKG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+
KHZzKSkuLi4pKQorICAgICAgfTsKKworICAgICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICBw
cml2YXRlOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4g
VmFsdWVzPgorICAgICAgICBzdHJ1Y3QgdmlzaXRfZXhoYXVzdGl2ZV92aXNpdG9yX2NoZWNrIHsK
KyAgICAgICAgICBzdGF0aWNfYXNzZXJ0KAorICAgICAgICAgICAgICBtcGFyazo6bGliOjppc19p
bnZvY2FibGU8VmlzaXRvciwgVmFsdWVzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgICJgbXBh
cms6OnZpc2l0YCByZXF1aXJlcyB0aGUgdmlzaXRvciB0byBiZSBleGhhdXN0aXZlLiIpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0
ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBj
b25zdCYgX192KXsKLSAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+Ojpf
X3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpzdGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9f
dikpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDEwMCkKKyNlbmRpZgorICAgICAgICAgIGlubGluZSBjb25zdGV4
cHIgREVDTFRZUEVfQVVUTyBvcGVyYXRvcigpKFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlcyAmJi4uLiB2
YWx1ZXMpIGNvbnN0CisgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTihtcGFyazo6bGli
OjppbnZva2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8
VmFsdWVzPih2YWx1ZXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBv
cCkKKyNlbmRpZgorICAgICAgICB9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0
cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlw
ZXMuLi4+OjpnZXQoX192KSkpOwotfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRv
cj4KKyAgICAgICAgc3RydWN0IHZhbHVlX3Zpc2l0b3IgeworICAgICAgICAgIFZpc2l0b3IgJiZ2
aXNpdG9yXzsKKworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBbHRzPgorICAgICAg
ICAgIGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyBvcGVyYXRvcigpKEFsdHMgJiYuLi4g
YWx0cykgY29uc3QKKyAgICAgICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAg
ICAgICAgIHZpc2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjazwKKyAgICAgICAgICAgICAgICAg
ICAgVmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoKG1wYXJrOjpsaWI6OmZv
cndhcmQ8QWx0cz4oYWx0cykudmFsdWUpKS4uLj57fSgKKyAgICAgICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yXyksCisgICAgICAgICAgICAgICAgICAg
IG1wYXJrOjpsaWI6OmZvcndhcmQ8QWx0cz4oYWx0cykudmFsdWUuLi4pKQorICAgICAgICB9Owor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICBpbmxpbmUgc3Rh
dGljIGNvbnN0ZXhwciBBVVRPIG1ha2VfdmFsdWVfdmlzaXRvcihWaXNpdG9yICYmdmlzaXRvcikK
KyAgICAgICAgICBBVVRPX1JFVFVSTih2YWx1ZV92aXNpdG9yPFZpc2l0b3I+e21wYXJrOjpsaWI6
OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvcil9KQorCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVf
dCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAg
IERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICBiYXNlOjp2aXNpdF9hbHRfYXQo
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3
YXJkPFZpc2l0b3I+KHZpc2l0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLmltcGxfLi4uKSkKKworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0
aWMgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gdmlzaXRfYWx0KFZpc2l0b3IgJiZ2aXNpdG9yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
cyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTihiYXNlOjp2aXNpdF9h
bHQobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4o
dnMpLmltcGxfLi4uKSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIERFQ0xUWVBFX0FV
VE8gdmlzaXRfdmFsdWVfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0
b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisg
ICAgICAgICAgICAgIHZpc2l0X2FsdF9hdChpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2VfdmFsdWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0
b3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+
KHZzKS4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1l
Li4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZp
c2l0X3ZhbHVlKFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERF
Q0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHQobWFrZV92YWx1ZV92
aXNpdG9yKG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvcikpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKyAgICAgIH07
CisKKyAgICB9ICAvLyBuYW1lc3BhY2UgdmlzaXRhdGlvbgorCisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEluZGV4LCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBhbHQgeworICAgICAgdXNpbmcg
dmFsdWVfdHlwZSA9IFQ7CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVk
X3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAgIFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKChfSW5kZXghPV9fdi5pbmRl
eCgpKT9udWxscHRyOgotICAgICAgICBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8
X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKSk7Ci19CisjaWZkZWYgX01TQ19WRVIKKyNwcmFn
bWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MjQ0KQorI2VuZGlm
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIGlubGluZSBleHBsaWNp
dCBjb25zdGV4cHIgYWx0KGluX3BsYWNlX3QsIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICA6
IHZhbHVlKG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisjaWZkZWYgX01T
Q19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0
aXZlKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KSBfX05PRVhDRVBUewotICAgIHJldHVy
biBfX3YuaW5kZXgoKT09X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19
CisgICAgICBUIHZhbHVlOworICAgIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlOworICAgIHRl
bXBsYXRlIDxUcmFpdCBEZXN0cnVjdGlibGVUcmFpdCwgc3RkOjpzaXplX3QgSW5kZXgsIHR5cGVu
YW1lLi4uIFRzPgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgX1Zpc2l0b3I+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yPnsKLSAg
ICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoKSkgX190eXBlOwot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUg
Li4uIF9SZXN0Pgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfSGVhZCxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigp
KHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl90YWJsZXsK
LSAgICB0eXBlZGVmIFZhcmlhbnQ8X1R5cGVzLi4uPiBfX3ZhcmlhbnRfdHlwZTsKLSAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3R5cGUgX19yZXR1cm5fdHlwZTsKLSAgICB0eXBlZGVmIF9fcmV0dXJuX3R5cGUgKCpfX2Z1bmNf
dHlwZSkoX1Zpc2l0b3ImLF9fdmFyaWFudF90eXBlJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KLSAgICBzdGF0aWMgX19yZXR1cm5fdHlwZSBfX3RyYW1wb2xpbmVfZnVuYyhfVmlz
aXRvciYgX192aXNpdG9yLF9fdmFyaWFudF90eXBlJiBfX3YpewotICAgICAgICByZXR1cm4gX192
aXNpdG9yKGdldDxfVHlwZT4oX192KSk7Ci0gICAgfQorICAgIHRlbXBsYXRlIDxUcmFpdCBEZXN0
cnVjdGlibGVUcmFpdCwgc3RkOjpzaXplX3QgSW5kZXg+CisgICAgdW5pb24gcmVjdXJzaXZlX3Vu
aW9uPERlc3RydWN0aWJsZVRyYWl0LCBJbmRleD4ge307CisKKyNkZWZpbmUgTVBBUktfVkFSSUFO
VF9SRUNVUlNJVkVfVU5JT04oZGVzdHJ1Y3RpYmxlX3RyYWl0LCBkZXN0cnVjdG9yKSAgICAgIFwK
KyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBU
cz4gICAgICAgICAgICAgICAgIFwKKyAgdW5pb24gcmVjdXJzaXZlX3VuaW9uPGRlc3RydWN0aWJs
ZV90cmFpdCwgSW5kZXgsIFQsIFRzLi4uPiB7ICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHJlY3Vyc2l2ZV91bmlvbih2YWx1
ZWxlc3NfdCkgbm9leGNlcHQgICAgICAgIFwKKyAgICAgICAgOiBkdW1teV97fSB7fSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgZXhwbGljaXQgY29u
c3RleHByIHJlY3Vyc2l2ZV91bmlvbihpbl9wbGFjZV9pbmRleF90PDA+LCAgICAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzICYmLi4uIGFy
Z3MpICAgICAgICAgICAgIFwKKyAgICAgICAgOiBoZWFkXyhpbl9wbGFjZV90e30sIG1wYXJrOjps
aWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9ICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJncz4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHJl
Y3Vyc2l2ZV91bmlvbihpbl9wbGFjZV9pbmRleF90PEk+LCAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzICYmLi4uIGFyZ3MpICAgICAg
ICAgICAgIFwKKyAgICAgICAgOiB0YWlsXyhpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9LCBtcGFy
azo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fSBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgcmVjdXJzaXZlX3VuaW9uKGNvbnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7
ICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVjdXJzaXZlX3VuaW9uKHJlY3Vyc2l2ZV91bmlv
biAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgZGVzdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVj
dXJzaXZlX3VuaW9uICZvcGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX3VuaW9uICYpID0gZGVmYXVs
dDsgICAgICAgICBcCisgICAgcmVjdXJzaXZlX3VuaW9uICZvcGVyYXRvcj0ocmVjdXJzaXZlX3Vu
aW9uICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcHJpdmF0ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgY2hhciBkdW1teV87ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWx0PEluZGV4LCBU
PiBoZWFkXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgcmVjdXJzaXZlX3VuaW9uPGRlc3RydWN0aWJsZV90cmFpdCwgSW5kZXggKyAxLCBU
cy4uLj4gdGFpbF87ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnJpZW5k
IHN0cnVjdCBhY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKFRyYWl0
OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fnJlY3Vyc2l2ZV91bmlvbigpID0gZGVmYXVsdDspOworICAgIE1QQVJLX1ZBUklBTlRfUkVDVVJT
SVZFX1VOSU9OKFRyYWl0OjpBdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfnJlY3Vyc2l2ZV91bmlvbigpIHt9KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lW
RV9VTklPTihUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfnJlY3Vyc2l2ZV91bmlvbigpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJ
QU5UX1JFQ1VSU0lWRV9VTklPTgorCisgICAgdXNpbmcgaW5kZXhfdCA9IHVuc2lnbmVkIGludDsK
KworICAgIHRlbXBsYXRlIDxUcmFpdCBEZXN0cnVjdGlibGVUcmFpdCwgdHlwZW5hbWUuLi4gVHM+
CisgICAgY2xhc3MgYmFzZSB7CisgICAgICBwdWJsaWM6CisgICAgICBpbmxpbmUgZXhwbGljaXQg
Y29uc3RleHByIGJhc2UodmFsdWVsZXNzX3QgdGFnKSBub2V4Y2VwdAorICAgICAgICAgIDogZGF0
YV8odGFnKSwgaW5kZXhfKHN0YXRpY19jYXN0PGluZGV4X3Q+KC0xKSkge30KKworICAgICAgdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhw
bGljaXQgY29uc3RleHByIGJhc2UoaW5fcGxhY2VfaW5kZXhfdDxJPiwgQXJncyAmJi4uLiBhcmdz
KQorICAgICAgICAgIDogZGF0YV8oaW5fcGxhY2VfaW5kZXhfdDxJPnt9LCBtcGFyazo6bGliOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSwKKyAgICAgICAgICAgIGluZGV4XyhJKSB7fQorCisgICAg
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5v
ZXhjZXB0IHsKKyAgICAgICAgcmV0dXJuIGluZGV4XyA9PSBzdGF0aWNfY2FzdDxpbmRleF90Pigt
MSk7CisgICAgICB9CisKKyAgICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgaW5kZXgo
KSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9u
KCkgPyB2YXJpYW50X25wb3MgOiBpbmRleF87CisgICAgICB9CisKKyAgICAgIHByb3RlY3RlZDoK
KyAgICAgIHVzaW5nIGRhdGFfdCA9IHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwg
MCwgVHMuLi4+OworCisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBiYXNlICZhc19iYXNl
KGJhc2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNv
bnN0IGJhc2UgJmFzX2Jhc2UoY29uc3QgYmFzZSAmYikgeyByZXR1cm4gYjsgfQorICAgICAgZnJp
ZW5kIGlubGluZSBjb25zdGV4cHIgYmFzZSAmJmFzX2Jhc2UoYmFzZSAmJmIpIHsgcmV0dXJuIG1w
YXJrOjpsaWI6Om1vdmUoYik7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0
IGJhc2UgJiZhc19iYXNlKGNvbnN0IGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3Zl
KGIpOyB9CisKKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGRhdGFfdCAmZGF0YShiYXNl
ICZiKSB7IHJldHVybiBiLmRhdGFfOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBj
b25zdCBkYXRhX3QgJmRhdGEoY29uc3QgYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQorICAg
ICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgZGF0YV90ICYmZGF0YShiYXNlICYmYikgeyByZXR1
cm4gbXBhcms6OmxpYjo6bW92ZShiKS5kYXRhXzsgfQorICAgICAgZnJpZW5kIGlubGluZSBjb25z
dGV4cHIgY29uc3QgZGF0YV90ICYmZGF0YShjb25zdCBiYXNlICYmYikgeyByZXR1cm4gbXBhcms6
OmxpYjo6bW92ZShiKS5kYXRhXzsgfQorCisgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBz
dGQ6OnNpemVfdCBzaXplKCkgeyByZXR1cm4gc2l6ZW9mLi4uKFRzKTsgfQogCi0gICAgc3RhdGlj
IGNvbnN0IF9fZnVuY190eXBlIF9fdHJhbXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV07Ci19Owor
ICAgICAgZGF0YV90IGRhdGFfOworICAgICAgaW5kZXhfdCBpbmRleF87CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3Zp
c2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X19mdW5jX3R5cGUgX192aXNpdG9yX3Rh
YmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV09
ewotICAgICAgICAmX190cmFtcG9saW5lX2Z1bmM8X1R5cGVzPi4uLgorICAgICAgZnJpZW5kIHN0
cnVjdCBhY2Nlc3M6OmJhc2U7CisgICAgICBmcmllbmQgc3RydWN0IHZpc2l0YXRpb246OmJhc2U7
CiAgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5
cGVzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRvcixWYXJpYW50PF9UeXBl
cy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3YudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fdmlzaXRvcl9y
ZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0
eSBWYXJpYW50IikKLSAgICAgICAgOiBfX3Zpc2l0b3JfdGFibGU8X1Zpc2l0b3IsX1R5cGVzLi4u
Pjo6X190cmFtcG9saW5lW19fdi5pbmRleCgpXShfX3Zpc2l0b3IsX192KTsKLX0KKyAgICBzdHJ1
Y3QgZHRvciB7CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGUgOiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQWx0PgorICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShBbHQgJmFsdCkgY29uc3Qgbm9l
eGNlcHQgeyBhbHQufkFsdCgpOyB9CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhw
b3ApCisjZW5kaWYKKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFt
ZSAuLi4gX1ZhcmlhbnRzPgotc3RydWN0IF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZXsKLSAg
ICB0eXBlZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoZ2V0PDA+KHN0ZDo6
ZGVjbHZhbDxfVmFyaWFudHM+KCkpLi4uKSkKLSAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxz
aXplX3QgX1ZhcmlhbnRJbmRleCx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hl
bHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0
X2hlbHBlcjwwLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25z
dGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJp
YW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixfVmFyaWFu
dHMmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdG9yKGdldDxfSW5kaWNlcz4oX192
KS4uLik7Ci0gICAgfQotfTsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5
MTAKKyNkZWZpbmUgSU5IRVJJVElOR19DVE9SKHR5cGUsIGJhc2UpICAgICAgICAgICAgICAgXAor
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQXJncz4gICAgICAgICAgICAgICAgICAgICBcCisgIGlu
bGluZSBleHBsaWNpdCBjb25zdGV4cHIgdHlwZShBcmdzICYmLi4uIGFyZ3MpIFwKKyAgICAgIDog
YmFzZShtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2Vsc2UKKyNkZWZp
bmUgSU5IRVJJVElOR19DVE9SKHR5cGUsIGJhc2UpIHVzaW5nIGJhc2U6OmJhc2U7CisjZW5kaWYK
IAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3QgX19h
cmdfc2VsZWN0b3JfdDsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzLCBUcmFpdCA9IFRy
YWl0czo6ZGVzdHJ1Y3RpYmxlX3RyYWl0PgorICAgIGNsYXNzIGRlc3RydWN0b3I7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FyZ19zZWxl
Y3Rvcl90PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgX0hlYWQgX190eXBlOworI2Rl
ZmluZSBNUEFSS19WQVJJQU5UX0RFU1RSVUNUT1IoZGVzdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0
aW9uLCBkZXN0cm95KSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgZGVzdHJ1Y3Rvcjx0
cmFpdHM8VHMuLi4+LCBkZXN0cnVjdGlibGVfdHJhaXQ+ICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgOiBwdWJsaWMgYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPiB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBiYXNlPGRlc3RydWN0aWJsZV90
cmFpdCwgVHMuLi4+OyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKGRlc3RydWN0b3IsIHN1
cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBl
cjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3Rvcihjb25zdCBkZXN0cnVjdG9y
ICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZXN0cnVj
dG9yKGRlc3RydWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGNv
bnN0IGRlc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBkZXN0
cnVjdG9yICZvcGVyYXRvcj0oZGVzdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHJvdGVjdGVkOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBk
ZXN0cm95ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX0RFU1RSVUNUT1IoCisgICAg
ICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBk
ZWZhdWx0OywKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0IHsKKyAgICAg
ICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90PigtMSk7CisgICAgICAgIH0p
OworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxh
YmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpIHsgZGVzdHJveSgpOyB9LAorICAgICAgICBpbmxp
bmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgeworICAgICAgICAgIGlmICghdGhpcy0+dmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICB2aXNpdGF0aW9uOjpiYXNlOjp2aXNp
dF9hbHQoZHRvcnt9LCAqdGhpcyk7CisgICAgICAgICAgfQorICAgICAgICAgIHRoaXMtPmluZGV4
XyA9IHN0YXRpY19jYXN0PGluZGV4X3Q+KC0xKTsKKyAgICAgICAgfSk7CisKKyAgICBNUEFSS19W
QVJJQU5UX0RFU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpVbmF2YWlsYWJsZSwKKyAgICAgICAg
fmRlc3RydWN0b3IoKSA9IGRlbGV0ZTssCisgICAgICAgIGlubGluZSB2b2lkIGRlc3Ryb3koKSBu
b2V4Y2VwdCA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SCisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIGNvbnN0cnVjdG9yIDog
cHVibGljIGRlc3RydWN0b3I8VHJhaXRzPiB7CisgICAgICB1c2luZyBzdXBlciA9IGRlc3RydWN0
b3I8VHJhaXRzPjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19DVE9SKGNvbnN0
cnVjdG9yLCBzdXBlcikKKyAgICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07CisKKyAgICAgIHBy
b3RlY3RlZDoKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBzdHJ1Y3QgY3Rv
ciB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHNBbHQsIHR5cGVuYW1lIFJoc0FsdD4K
KyAgICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShMaHNBbHQgJmxoc19hbHQsIFJoc0FsdCAm
JnJoc19hbHQpIGNvbnN0IHsKKyAgICAgICAgICBjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2FsdChs
aHNfYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8UmhzQWx0PihyaHNfYWx0KS52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH07Cisj
ZW5kaWYKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBfX3NlbGVjdChfSGVhZCYgX19o
ZWFkLF9SZXN0JiAuLi4pewotICAgICAgICByZXR1cm4gX19oZWFkOwotICAgIH0KLX07CisgICAg
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgIGlubGluZSBzdGF0aWMgVCAmY29uc3RydWN0X2FsdChhbHQ8SSwgVD4gJmEsIEFyZ3Mg
JiYuLi4gYXJncykgeworICAgICAgICA6Om5ldyAoc3RhdGljX2Nhc3Q8dm9pZCAqPihtcGFyazo6
bGliOjphZGRyZXNzb2YoYSkpKQorICAgICAgICAgICAgYWx0PEksIFQ+KGluX3BsYWNlX3R7fSwg
bXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAgIHJldHVybiBhLnZh
bHVlOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmhzPgorICAgICAgaW5s
aW5lIHN0YXRpYyB2b2lkIGdlbmVyaWNfY29uc3RydWN0KGNvbnN0cnVjdG9yICZsaHMsIFJocyAm
JnJocykgeworICAgICAgICBsaHMuZGVzdHJveSgpOworICAgICAgICBpZiAoIXJocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICB2aXNpdGF0aW9uOjpiYXNlOjp2aXNpdF9h
bHRfYXQoCisgICAgICAgICAgICAgIHJocy5pbmRleCgpLAorI2lmZGVmIE1QQVJLX0dFTkVSSUNf
TEFNQkRBUworICAgICAgICAgICAgICBbXShhdXRvICZsaHNfYWx0LCBhdXRvICYmcmhzX2FsdCkg
eworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RfYWx0KAorICAgICAgICAg
ICAgICAgICAgICBsaHNfYWx0LCBtcGFyazo6bGliOjpmb3J3YXJkPGRlY2x0eXBlKHJoc19hbHQp
PihyaHNfYWx0KS52YWx1ZSk7CisgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAg
IGN0b3J7fQorI2VuZGlmCisgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgbGhzLAorICAg
ICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJocz4ocmhzKSk7CisgICAgICAgICAgbGhz
LmluZGV4XyA9IHJocy5pbmRleF87CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9OwogCi10ZW1w
bGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X190eXBlIF9f
dHlwZTsKLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmLF9SZXN0
JiAuLi4gX19yZXN0KXsKLSAgICAgICAgcmV0dXJuIF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LTEs
X1Jlc3QuLi4+OjpfX3NlbGVjdChfX3Jlc3QuLi4pOwotICAgIH0KLX07CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6Om1vdmVfY29uc3RydWN0aWJsZV90cmFp
dD4KKyAgICBjbGFzcyBtb3ZlX2NvbnN0cnVjdG9yOwogCi10ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90
PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZSYmIF9fYXJnX3NlbGVjdG9yKF9BcmdzJiYgLi4uIF9f
YXJncyl7Ci0gICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90
PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZT4oCi0gICAgICAgIF9fYXJnX3NlbGVjdG9yX3Q8X0lu
ZGV4LF9BcmdzLi4uPjo6X19zZWxlY3QoX19hcmdzLi4uKSk7Ci19CisjZGVmaW5lIE1QQVJLX1ZB
UklBTlRfTU9WRV9DT05TVFJVQ1RPUihtb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRp
b24pIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBtb3ZlX2NvbnN0cnVjdG9yPHRy
YWl0czxUcy4uLj4sIG1vdmVfY29uc3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAg
ICA6IHB1YmxpYyBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PiB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlciA9IGNvbnN0cnVjdG9yPHRyYWl0czxU
cy4uLj4+OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IobW92ZV9j
b25zdHJ1Y3Rvciwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBtb3ZlX2NvbnN0
cnVjdG9yKGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfm1vdmVfY29uc3RydWN0b3IoKSA9
IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBtb3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0oY29uc3QgbW92ZV9jb25zdHJ1Y3RvciAmKSA9
IGRlZmF1bHQ7ICAgICAgICAgXAorICAgIG1vdmVfY29uc3RydWN0b3IgJm9wZXJhdG9yPShtb3Zl
X2NvbnN0cnVjdG9yICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1Q
QVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2
YWlsYWJsZSwKKyAgICAgICAgbW92ZV9jb25zdHJ1Y3Rvcihtb3ZlX2NvbnN0cnVjdG9yICYmdGhh
dCkgPSBkZWZhdWx0Oyk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IoCisg
ICAgICAgIFRyYWl0OjpBdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9j
b25zdHJ1Y3RvciAmJnRoYXQpIG5vZXhjZXB0KAorICAgICAgICAgICAgYWxsKHN0ZDo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZS4uLikpCisgICAgICAgICAgICA6IG1v
dmVfY29uc3RydWN0b3IodmFsdWVsZXNzX3R7fSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNf
Y29uc3RydWN0KCp0aGlzLCBtcGFyazo6bGliOjptb3ZlKHRoYXQpKTsKKyAgICAgICAgfSk7CisK
KyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpVbmF2
YWlsYWJsZSwKKyAgICAgICAgbW92ZV9jb25zdHJ1Y3Rvcihtb3ZlX2NvbnN0cnVjdG9yICYmKSA9
IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SCisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzLCBUcmFpdCA9IFRyYWl0czo6Y29weV9jb25zdHJ1
Y3RpYmxlX3RyYWl0PgorICAgIGNsYXNzIGNvcHlfY29uc3RydWN0b3I7CisKKyNkZWZpbmUgTVBB
UktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCwgZGVm
aW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNsYXNzIGNvcHlfY29uc3RydWN0
b3I8dHJhaXRzPFRzLi4uPiwgY29weV9jb25zdHJ1Y3RpYmxlX3RyYWl0PiAgICAgICAgICAgIFwK
KyAgICAgIDogcHVibGljIG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj4geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gbW92ZV9jb25zdHJ1Y3Rv
cjx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihj
b3B5X2NvbnN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlZmlu
aXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY29weV9jb25zdHJ1Y3Rvcihjb3B5X2NvbnN0cnVjdG9yICYmKSA9
IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB+Y29weV9jb25zdHJ1Y3Rv
cigpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBjb3B5X2NvbnN0cnVjdG9y
ICYpID0gZGVmYXVsdDsgICAgICAgICBcCisgICAgY29weV9jb25zdHJ1Y3RvciAmb3BlcmF0b3I9
KGNvcHlfY29uc3RydWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgIFwKKyAgfQorCisg
ICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlh
bGx5QXZhaWxhYmxlLAorICAgICAgICBjb3B5X2NvbnN0cnVjdG9yKGNvbnN0IGNvcHlfY29uc3Ry
dWN0b3IgJnRoYXQpID0gZGVmYXVsdDspOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNU
UlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBjb3B5X2NvbnN0cnVj
dG9yKGNvbnN0IGNvcHlfY29uc3RydWN0b3IgJnRoYXQpCisgICAgICAgICAgICA6IGNvcHlfY29u
c3RydWN0b3IodmFsdWVsZXNzX3R7fSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3Ry
dWN0KCp0aGlzLCB0aGF0KTsKKyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX0NPUFlf
Q09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpVbmF2YWlsYWJsZSwKKyAgICAgICAgY29weV9j
b25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICYpID0gZGVsZXRlOyk7CisKKyN1bmRl
ZiBNUEFSS19WQVJJQU5UX0NPUFlfQ09OU1RSVUNUT1IKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUcmFpdHM+CisgICAgY2xhc3MgYXNzaWdubWVudCA6IHB1YmxpYyBjb3B5X2NvbnN0cnVjdG9y
PFRyYWl0cz4geworICAgICAgdXNpbmcgc3VwZXIgPSBjb3B5X2NvbnN0cnVjdG9yPFRyYWl0cz47
CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihhc3NpZ25tZW50LCBzdXBl
cikKKyAgICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIC8qIGF1dG8gJiAqLyBh
dXRvIGVtcGxhY2UoQXJncyAmJi4uLiBhcmdzKQorICAgICAgICAgIC0+IGRlY2x0eXBlKHRoaXMt
PmNvbnN0cnVjdF9hbHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pKSB7CisgICAgICAgIHRoaXMtPmRlc3Ryb3koKTsKKyAgICAgICAgYXV0byAm
cmVzdWx0ID0gdGhpcy0+Y29uc3RydWN0X2FsdChhY2Nlc3M6OmJhc2U6OmdldF9hbHQ8ST4oKnRo
aXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjps
aWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICB0aGlzLT5pbmRleF8gPSBJOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisjaWZu
ZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoYXQ+
CisgICAgICBzdHJ1Y3QgYXNzaWduZXIgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGhp
c0FsdCwgdHlwZW5hbWUgVGhhdEFsdD4KKyAgICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShU
aGlzQWx0ICZ0aGlzX2FsdCwgVGhhdEFsdCAmJnRoYXRfYWx0KSBjb25zdCB7CisgICAgICAgICAg
c2VsZi0+YXNzaWduX2FsdCh0aGlzX2FsdCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxUaGF0QWx0Pih0
aGF0X2FsdCkudmFsdWUpOworICAgICAgICB9CisgICAgICAgIGFzc2lnbm1lbnQgKnNlbGY7Cisg
ICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsc2l6ZV90IF9WYXJp
YW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjJ7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4K
LSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlw
ZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBf
X3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0gICAgICAgIHJldHVybiAoX19hcmdfc2Vs
ZWN0b3I8X1ZhcmlhbnRJbmRleC0xPihfX3YuLi4pLmluZGV4KCk9PV9JbmRleCkKLSAgICAgICAg
ICAgID8gX192aXNpdF9oZWxwZXI8X1ZhcmlhbnRJbmRleC0xLF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGV4LF9JbmRpY2VzLi4uPj46Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFu
dHM+KF9fdikuLi4pCi0gICAgICAgICAgICA6IF9fdmlzaXRfaGVscGVyMjxfSW5kZXgtMSxfVmFy
aWFudEluZGV4LF9JbmRpY2VzLi4uPjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9W
YXJpYW50cz4oX192KS4uLik7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVf
dCBJLCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBcmc+CisgICAgICBpbmxpbmUgdm9pZCBhc3NpZ25f
YWx0KGFsdDxJLCBUPiAmYSwgQXJnICYmYXJnKSB7CisgICAgICAgIGlmICh0aGlzLT5pbmRleCgp
ID09IEkpIHsKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZSA6IDQyNDQpCisjZW5kaWYKKyAgICAgICAgICBhLnZhbHVlID0gbXBh
cms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZyk7CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2Fy
bmluZyhwb3ApCisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6dHJ1ZV90eXBlKSBjb25zdCB7CisgICAg
ICAgICAgICAgIHRoaXNfLT5lbXBsYWNlPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmdf
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoc3RkOjpmYWxz
ZV90eXBlKSBjb25zdCB7CisgICAgICAgICAgICAgIHRoaXNfLT5lbXBsYWNlPEk+KFQobXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZ18pKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBh
c3NpZ25tZW50ICp0aGlzXzsKKyAgICAgICAgICAgIEFyZyAmJmFyZ187CisgICAgICAgICAgfSBp
bXBse3RoaXMsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpfTsKKyAgICAgICAgICBpbXBs
KG1wYXJrOjpsaWI6OmJvb2xfY29uc3RhbnQ8CisgICAgICAgICAgICAgICAgICAgc3RkOjppc19u
b3Rocm93X2NvbnN0cnVjdGlibGU8VCwgQXJnPjo6dmFsdWUgfHwKKyAgICAgICAgICAgICAgICAg
ICAhc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUPjo6dmFsdWU+e30pOworICAg
ICAgICB9CisgICAgICB9CiAKLXRlbXBsYXRlPHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyPC0xLF9WYXJpYW50SW5kZXgs
X0luZGljZXMuLi4+ewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4u
LiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNp
dChfVmlzaXRvciYsX1ZhcmlhbnRzJiYgLi4uKXsKLSAgICAgICAgcmV0dXJuIF9fdGhyb3dfYmFk
X3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlz
aXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGU+KCJWaXNpdGluZyBvZiBlbXB0eSBWYXJpYW50Iik7
Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgaW5saW5l
IHZvaWQgZ2VuZXJpY19hc3NpZ24oVGhhdCAmJnRoYXQpIHsKKyAgICAgICAgaWYgKHRoaXMtPnZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSAmJiB0aGF0LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkg
eworICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgIH0gZWxzZSBpZiAodGhhdC52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICB0aGlzLT5kZXN0cm95KCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAor
ICAgICAgICAgICAgICB0aGF0LmluZGV4KCksCisjaWZkZWYgTVBBUktfR0VORVJJQ19MQU1CREFT
CisgICAgICAgICAgICAgIFt0aGlzXShhdXRvICZ0aGlzX2FsdCwgYXV0byAmJnRoYXRfYWx0KSB7
CisgICAgICAgICAgICAgICAgdGhpcy0+YXNzaWduX2FsdCgKKyAgICAgICAgICAgICAgICAgICAg
dGhpc19hbHQsIG1wYXJrOjpsaWI6OmZvcndhcmQ8ZGVjbHR5cGUodGhhdF9hbHQpPih0aGF0X2Fs
dCkudmFsdWUpOworICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBhc3NpZ25l
cjxUaGF0Pnt0aGlzfQorI2VuZGlmCisgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgKnRo
aXMsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdD4odGhhdCkpOworICAg
ICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1z
dHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0
cywgVHJhaXQgPSBUcmFpdHM6Om1vdmVfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFzcyBtb3Zl
X2Fzc2lnbm1lbnQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192
YXJpYW50X3R5cGVfY291bnQ8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBfX3ZhbHVlPXNpemVvZi4uLihfVHlwZXMpOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQmPnsK
LSAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBfX3ZhbHVlPV9fdmFyaWFudF90eXBlX2NvdW50
PF9WYXJpYW50Pjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgot
c3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50IGNvbnN0Jj57Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46
Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyPF9WYXJpYW50SW5kZXgsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0
b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1l
IF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5
cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7
Ci0gICAgICAgIHJldHVybiBfX3Zpc2l0X2hlbHBlcjI8Ci0gICAgICAgICAgICBfX3ZhcmlhbnRf
dHlwZV9jb3VudDwKLSAgICAgICAgICAgICAgICB0eXBlbmFtZSBfX2FyZ19zZWxlY3Rvcl90PAot
ICAgICAgICAgICAgICAgICAgICBfVmFyaWFudEluZGV4LTEsX1ZhcmlhbnRzLi4uPjo6X190eXBl
Pjo6X192YWx1ZS0xLAotICAgICAgICAgICAgX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoCi0gICAgICAgICAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHMm
Jj4oX192KS4uLik7Ci0gICAgfQotfTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9NT1ZFX0FTU0lH
Tk1FTlQobW92ZV9hc3NpZ25hYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBjbGFzcyBtb3ZlX2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgbW92ZV9hc3NpZ25h
YmxlX3RyYWl0PiAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGFzc2lnbm1lbnQ8dHJhaXRz
PFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3Vw
ZXIgPSBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElO
R19DVE9SKG1vdmVfYXNzaWdubWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9hc3Np
Z25tZW50KGNvbnN0IG1vdmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAg
ICAgXAorICAgIG1vdmVfYXNzaWdubWVudChtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB+bW92ZV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9hc3Np
Z25tZW50ICZvcGVyYXRvcj0oY29uc3QgbW92ZV9hc3NpZ25tZW50ICYpID0gZGVmYXVsdDsgICAg
ICAgXAorICAgIGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0FT
U0lHTk1FTlQoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1v
dmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KG1vdmVfYXNzaWdubWVudCAmJnRoYXQpID0gZGVmYXVs
dDspOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0FTU0lHTk1FTlQoCisgICAgICAgIFRyYWl0
OjpBdmFpbGFibGUsCisgICAgICAgIG1vdmVfYXNzaWdubWVudCAmCisgICAgICAgIG9wZXJhdG9y
PShtb3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSBub2V4Y2VwdCgKKyAgICAgICAgICAgIGFsbCgoc3Rk
Ojppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZhbHVlICYmCisgICAgICAgICAg
ICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8VHM+Ojp2YWx1ZSkuLi4pKSB7
CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24obXBhcms6OmxpYjo6bW92ZSh0aGF0KSk7
CisgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklB
TlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAg
IG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KG1vdmVfYXNzaWdubWVudCAmJikgPSBkZWxldGU7
KTsKKworI3VuZGVmIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UCisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVHJhaXRzLCBUcmFpdCA9IFRyYWl0czo6Y29weV9hc3NpZ25hYmxlX3RyYWl0
PgorICAgIGNsYXNzIGNvcHlfYXNzaWdubWVudDsKKworI2RlZmluZSBNUEFSS19WQVJJQU5UX0NP
UFlfQVNTSUdOTUVOVChjb3B5X2Fzc2lnbmFibGVfdHJhaXQsIGRlZmluaXRpb24pIFwKKyAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIGNsYXNzIGNvcHlfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+LCBjb3B5
X2Fzc2lnbmFibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgbW92ZV9hc3Np
Z25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1
c2luZyBzdXBlciA9IG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJ
TkhFUklUSU5HX0NUT1IoY29weV9hc3NpZ25tZW50LCBzdXBlcikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBj
b3B5X2Fzc2lnbm1lbnQoY29uc3QgY29weV9hc3NpZ25tZW50ICYpID0gZGVmYXVsdDsgICAgICAg
ICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvcHlfYXNzaWdubWVudCAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH5jb3B5X2Fzc2lnbm1lbnQoKSA9
IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBk
ZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29weV9hc3NpZ25t
ZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5U
X0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwKKyAg
ICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25tZW50ICZ0
aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9BU1NJR05NRU5UKAor
ICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBjb3B5X2Fzc2lnbm1lbnQgJm9wZXJh
dG9yPShjb25zdCBjb3B5X2Fzc2lnbm1lbnQgJnRoYXQpIHsKKyAgICAgICAgICB0aGlzLT5nZW5l
cmljX2Fzc2lnbih0aGF0KTsKKyAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0pOwor
CisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAgICAgIFRyYWl0OjpVbmF2
YWlsYWJsZSwKKyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9h
c3NpZ25tZW50ICYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5UX0NPUFlfQVNT
SUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNzIGltcGwg
OiBwdWJsaWMgY29weV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsKKyAgICAgIHVzaW5nIHN1
cGVyID0gY29weV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+OworCisgICAgICBwdWJsaWM6Cisg
ICAgICBJTkhFUklUSU5HX0NUT1IoaW1wbCwgc3VwZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgQXJnPgor
ICAgICAgaW5saW5lIHZvaWQgYXNzaWduKEFyZyAmJmFyZykgeworICAgICAgICB0aGlzLT5hc3Np
Z25fYWx0KGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZykpOworICAgICAgfQorCisgICAg
ICBpbmxpbmUgdm9pZCBzd2FwKGltcGwgJnRoYXQpIHsKKyAgICAgICAgaWYgKHRoaXMtPnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJiB0aGF0LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewor
ICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgIH0gZWxzZSBpZiAodGhpcy0+aW5kZXgo
KSA9PSB0aGF0LmluZGV4KCkpIHsKKyAgICAgICAgICB2aXNpdGF0aW9uOjpiYXNlOjp2aXNpdF9h
bHRfYXQodGhpcy0+aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10oYXV0byAmdGhpc19hbHQsIGF1
dG8gJnRoYXRfYWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3YXAodGhpc19hbHQudmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGF0X2FsdC52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3YXBwZXJ7fQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
YXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGltcGwgKmxocyA9IHRoaXM7CisgICAg
ICAgICAgaW1wbCAqcmhzID0gbXBhcms6OmxpYjo6YWRkcmVzc29mKHRoYXQpOworICAgICAgICAg
IGlmIChsaHMtPm1vdmVfbm90aHJvdygpICYmICFyaHMtPm1vdmVfbm90aHJvdygpKSB7CisgICAg
ICAgICAgICBzdGQ6OnN3YXAobGhzLCByaHMpOworICAgICAgICAgIH0KKyAgICAgICAgICBpbXBs
IHRtcChtcGFyazo6bGliOjptb3ZlKCpyaHMpKTsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisg
ICAgICAgICAgLy8gRVhURU5TSU9OOiBXaGVuIHRoZSBtb3ZlIGNvbnN0cnVjdGlvbiBvZiBgbGhz
YCBpbnRvIGByaHNgIHRocm93cworICAgICAgICAgIC8vIGFuZCBgdG1wYCBpcyBub3Rocm93IG1v
dmUgY29uc3RydWN0aWJsZSB0aGVuIHdlIG1vdmUgYHRtcGAgYmFjaworICAgICAgICAgIC8vIGlu
dG8gYHJoc2AgYW5kIHByb3ZpZGUgdGhlIHN0cm9uZyBleGNlcHRpb24gc2FmZXR5IGd1YXJhbnRl
ZS4KKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy0+Z2VuZXJpY19jb25zdHJ1Y3Qo
KnJocywgbXBhcms6OmxpYjo6bW92ZSgqbGhzKSk7CisgICAgICAgICAgfSBjYXRjaCAoLi4uKSB7
CisgICAgICAgICAgICBpZiAodG1wLm1vdmVfbm90aHJvdygpKSB7CisgICAgICAgICAgICAgIHRo
aXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUodG1wKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0aHJvdzsKKyAgICAgICAgICB9CisjZWxzZQorICAgICAg
ICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUoKmxocykp
OworI2VuZGlmCisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19jb25zdHJ1Y3QoKmxocywgbXBhcms6
OmxpYjo6bW92ZSh0bXApKTsKKyAgICAgICAgfQorICAgICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotY29uc3RleHByIHR5cGVuYW1lIF9f
bXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUK
LXZpc2l0KF9WaXNpdG9yJiYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgIHJl
dHVybiBfX3Zpc2l0X2hlbHBlcjxzaXplb2YuLi4oX1ZhcmlhbnRzKSxfX2luZGV4X3NlcXVlbmNl
PD4+OjpfX3Zpc2l0KAotICAgICAgICBfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4o
X192KS4uLik7Ci19CisgICAgICBwcml2YXRlOgorI2lmbmRlZiBNUEFSS19HRU5FUklDX0xBTUJE
QVMKKyAgICAgIHN0cnVjdCBzd2FwcGVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRo
aXNBbHQsIHR5cGVuYW1lIFRoYXRBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCko
VGhpc0FsdCAmdGhpc19hbHQsIFRoYXRBbHQgJnRoYXRfYWx0KSBjb25zdCB7CisgICAgICAgICAg
dXNpbmcgc3RkOjpzd2FwOworICAgICAgICAgIHN3YXAodGhpc19hbHQudmFsdWUsIHRoYXRfYWx0
LnZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJl
dHVybiAoX19saHMuaW5kZXgoKT09X19yaHMuaW5kZXgoKSkgJiYKLSAgICAgICAgKChfX2xocy5p
bmRleCgpPT0tMSkgfHwKLSAgICAgICAgIF9fZXF1YWxpdHlfb3BfdGFibGU8VmFyaWFudDxfVHlw
ZXMuLi4+Pjo6X19lcXVhbGl0eV9jb21wYXJlW19fbGhzLmluZGV4KCldKAotICAgICAgICAgICAg
IF9fbGhzLF9fcmhzKSk7Ci19CisgICAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgbW92ZV9ub3Ro
cm93KCkgY29uc3QgeworICAgICAgICByZXR1cm4gdGhpcy0+dmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpIHx8CisgICAgICAgICAgICAgICBtcGFyazo6bGliOjphcnJheTxib29sLCBzaXplb2YuLi4o
VHMpPnsKKyAgICAgICAgICAgICAgICAgICB7c3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0
aWJsZTxUcz46OnZhbHVlLi4ufQorICAgICAgICAgICAgICAgfVt0aGlzLT5pbmRleCgpXTsKKyAg
ICAgIH0KKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAhKF9fbGhzPT1fX3Jocyk7Ci19
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICAgIHN0cnVjdCBvdmVybG9hZDsKIAot
dGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChW
YXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYg
X19yaHMpewotICAgIHJldHVybiAoX19saHMuaW5kZXgoKTxfX3Jocy5pbmRleCgpKSB8fAotICAg
ICAgICAoKF9fbGhzLmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCi0gICAgICAgICAoKF9fbGhz
LmluZGV4KCkhPS0xKSAmJgotICAgICAgICAgIF9fbGVzc190aGFuX29wX3RhYmxlPFZhcmlhbnQ8
X1R5cGVzLi4uPj46OgotICAgICAgICAgIF9fbGVzc190aGFuX2NvbXBhcmVbX19saHMuaW5kZXgo
KV0oX19saHMsX19yaHMpKSk7Ci19CisgICAgdGVtcGxhdGUgPD4KKyAgICBzdHJ1Y3Qgb3Zlcmxv
YWQ8PiB7IHZvaWQgb3BlcmF0b3IoKSgpIGNvbnN0IHt9IH07CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1
cm4gX19yaHM8X19saHM7Ci19CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IFRzPgorICAgIHN0cnVjdCBvdmVybG9hZDxULCBUcy4uLj4gOiBvdmVybG9hZDxUcy4uLj4gewor
ICAgICAgdXNpbmcgb3ZlcmxvYWQ8VHMuLi4+OjpvcGVyYXRvcigpOworICAgICAgbXBhcms6Omxp
Yjo6aWRlbnRpdHk8VD4gb3BlcmF0b3IoKShUKSBjb25zdCB7IHJldHVybiB7fTsgfQorICAgIH07
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj49KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM8X19yaHMpOwotfQorICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2luZyBiZXN0X21hdGNoX3QgPQor
ICAgICAgICB0eXBlbmFtZSBtcGFyazo6bGliOjppbnZva2VfcmVzdWx0X3Q8b3ZlcmxvYWQ8VHMu
Li4+LCBUICYmPjo6dHlwZTsKKworICB9ICAvLyBkZXRhaWwKKworICB0ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gVHM+CisgIGNsYXNzIHZhcmlhbnQgeworICAgIHN0YXRpY19hc3NlcnQoMCA8IHNpemVv
Zi4uLihUcyksCisgICAgICAgICAgICAgICAgICAidmFyaWFudCBtdXN0IGNvbnNpc3Qgb2YgYXQg
bGVhc3Qgb25lIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGli
OjphbGw8IXN0ZDo6aXNfYXJyYXk8VHM+Ojp2YWx1ZS4uLj46OnZhbHVlLAorICAgICAgICAgICAg
ICAgICAgInZhcmlhbnQgY2FuIG5vdCBoYXZlIGFuIGFycmF5IHR5cGUgYXMgYW4gYWx0ZXJuYXRp
dmUuIik7CisKKyAgICBzdGF0aWNfYXNzZXJ0KG1wYXJrOjpsaWI6OmFsbDwhc3RkOjppc19yZWZl
cmVuY2U8VHM+Ojp2YWx1ZS4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgInZhcmlhbnQg
Y2FuIG5vdCBoYXZlIGEgcmVmZXJlbmNlIHR5cGUgYXMgYW4gYWx0ZXJuYXRpdmUuIik7CisKKyAg
ICBzdGF0aWNfYXNzZXJ0KG1wYXJrOjpsaWI6OmFsbDwhc3RkOjppc192b2lkPFRzPjo6dmFsdWUu
Li4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2ZSBhIHZv
aWQgdHlwZSBhcyBhbiBhbHRlcm5hdGl2ZS4iKTsKKworICAgIHB1YmxpYzoKKyAgICB0ZW1wbGF0
ZSA8CisgICAgICAgIHR5cGVuYW1lIEZyb250ID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1l
bnRfdDwwLCBUcy4uLj4sCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNf
ZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPEZyb250Pjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGlu
ZSBjb25zdGV4cHIgdmFyaWFudCgpIG5vZXhjZXB0KAorICAgICAgICBzdGQ6OmlzX25vdGhyb3df
ZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPEZyb250Pjo6dmFsdWUpCisgICAgICAgIDogaW1wbF8oaW5f
cGxhY2VfaW5kZXhfdDwwPnt9KSB7fQorCisgICAgdmFyaWFudChjb25zdCB2YXJpYW50ICYpID0g
ZGVmYXVsdDsKKyAgICB2YXJpYW50KHZhcmlhbnQgJiYpID0gZGVmYXVsdDsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBBcmcsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90
PCFzdGQ6OmlzX3NhbWU8bXBhcms6OmxpYjo6ZGVjYXlfdDxBcmc+LCB2YXJpYW50Pjo6dmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDAsCisgICAgICAgICAgICAg
IHR5cGVuYW1lIFQgPSBkZXRhaWw6OmJlc3RfbWF0Y2hfdDxBcmcsIFRzLi4uPiwKKyAgICAgICAg
ICAgICAgc3RkOjpzaXplX3QgSSA9IGRldGFpbDo6ZmluZF9pbmRleF9zZmluYWU8VCwgVHMuLi4+
Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19j
b25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3Rl
eHByIHZhcmlhbnQoQXJnICYmYXJnKSBub2V4Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93
X2NvbnN0cnVjdGlibGU8VCwgQXJnPjo6dmFsdWUpCisgICAgICAgIDogaW1wbF8oaW5fcGxhY2Vf
aW5kZXhfdDxJPnt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnKSkge30KKworICAgIHRl
bXBsYXRlIDwKKyAgICAgICAgc3RkOjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJn
cywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8
SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX2luZGV4X3Q8ST4sCisgICAg
ICAgIEFyZ3MgJiYuLi4gYXJncykgbm9leGNlcHQoc3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGli
bGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUpCisgICAgICAgIDogaW1wbF8oaW5fcGxhY2Vf
aW5kZXhfdDxJPnt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorCisg
ICAgdGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBV
cCwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJr
OjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGli
OjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4u
Pjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5l
IGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+
LAorICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+IGlsLAorICAgICAgICBBcmdzICYm
Li4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzX25vdGhyb3dfY29uc3RydWN0aWJsZTwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUpCisgICAgICAgIDogaW1wbF8o
aW5fcGxhY2VfaW5kZXhfdDxJPnt9LCBpbCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAg
dHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgc3RkOjpzaXplX3QgSSA9IGRldGFpbDo6ZmluZF9p
bmRleF9zZmluYWU8VCwgVHMuLi4+Ojp2YWx1ZSwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1ZSwgaW50PiA9IDA+
CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAgICAgICBpbl9wbGFj
ZV90eXBlX3Q8VD4sCisgICAgICAgIEFyZ3MgJiYuLi4gYXJncykgbm9leGNlcHQoc3RkOjppc19u
b3Rocm93X2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUpCisgICAgICAg
IDogaW1wbF8oaW5fcGxhY2VfaW5kZXhfdDxJPnt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKSB7fQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBULAorICAg
ICAgICB0eXBlbmFtZSBVcCwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgc3Rk
OjpzaXplX3QgSSA9IGRldGFpbDo6ZmluZF9pbmRleF9zZmluYWU8VCwgVHMuLi4+Ojp2YWx1ZSwK
KyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAg
aW5fcGxhY2VfdHlwZV90PFQ+LAorICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+IGls
LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzX25vdGhyb3dfY29uc3RydWN0aWJsZTwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUp
CisgICAgICAgIDogaW1wbF8oaW5fcGxhY2VfaW5kZXhfdDxJPnt9LCBpbCwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIH52YXJpYW50KCkgPSBkZWZhdWx0Owor
CisgICAgdmFyaWFudCAmb3BlcmF0b3I9KGNvbnN0IHZhcmlhbnQgJikgPSBkZWZhdWx0OworICAg
IHZhcmlhbnQgJm9wZXJhdG9yPSh2YXJpYW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQXJnLAorICAgICAgICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwh
c3RkOjppc19zYW1lPG1wYXJrOjpsaWI6OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0
eXBlbmFtZSBUID0gZGV0YWlsOjpiZXN0X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAg
ICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6
dmFsdWUsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PChzdGQ6OmlzX2Fz
c2lnbmFibGU8VCAmLCBBcmc+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJnPjo6dmFsdWUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSB2YXJpYW50ICZvcGVyYXRv
cj0oQXJnICYmYXJnKSBub2V4Y2VwdCgKKyAgICAgICAgKHN0ZDo6aXNfbm90aHJvd19hc3NpZ25h
YmxlPFQgJiwgQXJnPjo6dmFsdWUgJiYKKyAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1
Y3RpYmxlPFQsIEFyZz46OnZhbHVlKSkgeworICAgICAgaW1wbF8udGVtcGxhdGUgYXNzaWduPEk+
KG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpKTsKKyAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6ZV90IEksCisgICAgICAgIHR5
cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3Bh
Y2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8
c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1ZSwgaW50PiA9IDA+CisgICAg
aW5saW5lIFQgJmVtcGxhY2UoQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICByZXR1cm4gaW1wbF8u
dGVtcGxhdGUgZW1wbGFjZTxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6ZV90IEksCisgICAgICAg
IHR5cGVuYW1lIFVwLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0eXBlbmFt
ZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisgICAgICAg
IG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4K
KyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+IGlsLCBBcmdz
ICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KGls
LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisg
ICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4u
Pjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZlbXBs
YWNlKEFyZ3MgJiYuLi4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxh
Y2U8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBULAorICAgICAgICB0eXBlbmFtZSBVcCwKKyAg
ICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgc3RkOjpzaXplX3QgSSA9IGRldGFpbDo6
ZmluZF9pbmRleF9zZmluYWU8VCwgVHMuLi4+Ojp2YWx1ZSwKKyAgICAgICAgbXBhcms6OmxpYjo6
ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46
OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBU
ICZlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gaWwsIEFyZ3MgJiYuLi4gYXJncykg
eworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4oaWwsIG1wYXJrOjpsaWI6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIGlubGluZSBjb25zdGV4cHIg
Ym9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNlcHQgeworICAgICAgcmV0
dXJuIGltcGxfLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBpbmxpbmUg
Y29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNlcHQgeworICAgICAgcmV0
dXJuIGltcGxfLmluZGV4KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICBib29s
IER1bW15ID0gdHJ1ZSwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8bXBhcms6Omxp
Yjo6YWxsPER1bW15LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGQ6Omlz
X21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZhbHVlICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3N3YXBwYWJsZTxUcz46OnZhbHVlKS4uLj46OnZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSB2b2lk
IHN3YXAodmFyaWFudCAmdGhhdCkgbm9leGNlcHQoCisgICAgICAgIG1wYXJrOjpsaWI6OmFsbDwo
c3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZhbHVlICYmCisgICAgICAg
ICAgICAgICAgICBtcGFyazo6bGliOjppc19ub3Rocm93X3N3YXBwYWJsZTxUcz46OnZhbHVlKS4u
Lj46OnZhbHVlKSB7CisgICAgICBpbXBsXy5zd2FwKHRoYXQuaW1wbF8pOworICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgZGV0YWlsOjppbXBsPFRzLi4uPiBpbXBsXzsKKworICAgIGZyaWVuZCBz
dHJ1Y3QgZGV0YWlsOjphY2Nlc3M6OnZhcmlhbnQ7CisgICAgZnJpZW5kIHN0cnVjdCBkZXRhaWw6
OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgIH07CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRp
dmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gdi5pbmRl
eCgpID09IEk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+
CisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShjb25zdCB2YXJpYW50
PFRzLi4uPiAmdikgbm9leGNlcHQgeworICAgIHJldHVybiBob2xkc19hbHRlcm5hdGl2ZTxkZXRh
aWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIG5h
bWVzcGFjZSBkZXRhaWwgeworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBW
PgorICAgIHN0cnVjdCBnZW5lcmljX2dldF9pbXBsIHsKKyAgICAgIGNvbnN0ZXhwciBnZW5lcmlj
X2dldF9pbXBsKGludCkge30KKworICAgICAgY29uc3RleHByIEFVVE9fUkVGUkVGIG9wZXJhdG9y
KCkoViAmJnYpIGNvbnN0CisgICAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTigKKyAgICAgICAgICAg
IGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpKS52
YWx1ZSkKKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IGJvb2wgb3BlcmF0b3I8PShWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAhKF9fbGhzPl9fcmhzKTsKLX0K
KyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29u
c3RleHByIEFVVE9fUkVGUkVGIGdlbmVyaWNfZ2V0KFYgJiZ2KQorICAgICAgQVVUT19SRUZSRUZf
UkVUVVJOKGdlbmVyaWNfZ2V0X2ltcGw8SSwgVj4oCisgICAgICAgICAgaG9sZHNfYWx0ZXJuYXRp
dmU8ST4odikgPyAwIDogKHRocm93X2JhZF92YXJpYW50X2FjY2VzcygpLCAwKSkoCisgICAgICAg
ICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkpCisgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwK
KworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBj
b25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmZ2V0KAor
ICAgICAgdmFyaWFudDxUcy4uLj4gJnYpIHsKKyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dl
dDxJPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBU
cz4KKyAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxU
cy4uLj4+ICYmZ2V0KAorICAgICAgdmFyaWFudDxUcy4uLj4gJiZ2KSB7CisgICAgcmV0dXJuIGRl
dGFpbDo6Z2VuZXJpY19nZXQ8ST4obXBhcms6OmxpYjo6bW92ZSh2KSk7CisgIH0KKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmZ2V0KAorICAg
ICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIHsKKyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmlj
X2dldDxJPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4u
LiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBjb25zdCB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwg
dmFyaWFudDxUcy4uLj4+ICYmZ2V0KAorICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJiZ2KSB7
CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4obXBhcms6OmxpYjo6bW92ZSh2KSk7
CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGlu
ZSBjb25zdGV4cHIgVCAmZ2V0KHZhcmlhbnQ8VHMuLi4+ICZ2KSB7CisgICAgcmV0dXJuIGdldDxk
ZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhw
ciBUICYmZ2V0KHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpm
aW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4obXBhcms6OmxpYjo6bW92ZSh2KSk7
CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGlu
ZSBjb25zdGV4cHIgY29uc3QgVCAmZ2V0KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2KSB7CisgICAg
cmV0dXJuIGdldDxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2
KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5s
aW5lIGNvbnN0ZXhwciBjb25zdCBUICYmZ2V0KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgewor
ICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1
ZT4obXBhcms6OmxpYjo6bW92ZSh2KSk7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKwor
ICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgorICAgIGlubGluZSBjb25z
dGV4cHIgLyogYXV0byAqICovIEFVVE8gZ2VuZXJpY19nZXRfaWYoViAqdikgbm9leGNlcHQKKyAg
ICAgIEFVVE9fUkVUVVJOKHYgJiYgaG9sZHNfYWx0ZXJuYXRpdmU8ST4oKnYpCisgICAgICAgICAg
ICAgICAgICAgICAgPyBtcGFyazo6bGliOjphZGRyZXNzb2YoYWNjZXNzOjp2YXJpYW50OjpnZXRf
YWx0PEk+KCp2KS52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICA6IG51bGxwdHIpCisKKyAg
fSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBl
bmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBtcGFyazo6bGliOjphZGRfcG9pbnRlcl90
PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4+CisgIGdldF9pZih2YXJp
YW50PFRzLi4uPiAqdikgbm9leGNlcHQgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0
X2lmPEk+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4u
IFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFkZF9wb2ludGVyX3Q8CisgICAg
ICBjb25zdCB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUcy4uLj4+PgorICBnZXRf
aWYoY29uc3QgdmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZGV0YWls
OjpnZW5lcmljX2dldF9pZjxJPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBtcGFyazo6bGliOjphZGRfcG9pbnRl
cl90PFQ+CisgIGdldF9pZih2YXJpYW50PFRzLi4uPiAqdikgbm9leGNlcHQgeworICAgIHJldHVy
biBnZXRfaWY8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7
CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGlu
ZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYo
Y29uc3QgdmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRl
dGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0
b3I9PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmVxdWFsX3RvOwor
I2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChsaHMuaW5kZXgoKSAhPSByaHMu
aW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpKSByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhz
LmluZGV4KCksIGVxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy5p
bmRleCgpID09IHJocy5pbmRleCgpICYmCisgICAgICAgICAgIChsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpIHx8CisgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5k
ZXgoKSwgZXF1YWxfdG97fSwgbGhzLCByaHMpKTsKKyNlbmRpZgorICB9CiAKLXN0cnVjdCBNb25v
c3RhdGV7fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IGJvb2wgb3BlcmF0b3IhPShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAg
dXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6
Om5vdF9lcXVhbF90bzsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICBpZiAobGhz
LmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZp
c2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBub3RfZXF1YWxfdG97fSwgbGhzLCByaHMpOworI2Vs
c2UKKyAgICByZXR1cm4gbGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkgfHwKKyAgICAgICAgICAg
KCFsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICB2YXJpYW50Ojp2
aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbm90X2VxdWFsX3Rve30sIGxocywgcmhzKSk7Cisj
ZW5kaWYKKyAgfQogCi1jb25zdGV4cHIgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShNb25vc3RhdGUg
Y29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gdHJ1ZTt9Ci1jb25zdGV4cHIgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1
cm4gZmFsc2U7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPj0oTW9ub3N0YXRlIGNv
bnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBi
b29sIG9wZXJhdG9yPD0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPihNb25vc3RhdGUgY29uc3Qm
LE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFsc2U7fQotY29uc3RleHByIGlubGluZSBib29s
IG9wZXJhdG9yPChNb25vc3RhdGUgY29uc3QmLE1vbm9zdGF0ZSBjb25zdCYpeyByZXR1cm4gZmFs
c2U7fQotCi1zdHJ1Y3QgX19oYXNoX3Zpc2l0b3J7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoX1R5cGUgY29uc3QmIF9feCl7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Omhhc2g8X1R5cGU+KCkoX194KTsKLSAgICB9Ci19OworICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoY29uc3QgdmFy
aWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2
YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6Omxlc3M7CisjaWZkZWYgTVBBUktfQ1BQMTRf
Q09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7
CisgICAgaWYgKGxocy5pbmRleCgpIDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlm
IChsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZh
cmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBsZXNze30sIGxocywgcmhzKTsKKyNl
bHNlCisgICAgcmV0dXJuICFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAg
ICAgIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIHx8IGxocy5pbmRleCgpIDwgcmhzLmlu
ZGV4KCkgfHwKKyAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAg
ICAgICAgICAgIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBsZXNze30sIGxo
cywgcmhzKSkpOworI2VuZGlmCisgIH0KIAotLy8gLS0gV2ViS2l0IEFkZGl0aW9ucyAtLQorICB0
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj4oY29uc3QgdmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWlsOjp2
aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXI7CisjaWZk
ZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0
aW9uKCkpIHJldHVybiBmYWxzZTsKKyAgICBpZiAocmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24o
KSkgcmV0dXJuIHRydWU7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4KCkpIHJldHVy
biB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBncmVhdGVy
e30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuICFsaHMudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpICYmCisgICAgICAgICAgIChyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIHx8IGxo
cy5pbmRleCgpID4gcmhzLmluZGV4KCkgfHwKKyAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSBy
aHMuaW5kZXgoKSAmJgorICAgICAgICAgICAgIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5p
bmRleCgpLCBncmVhdGVye30sIGxocywgcmhzKSkpOworI2VuZGlmCisgIH0KIAotdGVtcGxhdGU8
Y2xhc3MgViwgY2xhc3MuLi4gRj4KLWF1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBk
ZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZv
cndhcmQ8Vj4odikpKQotewotICAgIHJldHVybiB2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndh
cmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpOwotfQorICB0ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHZhcmlh
bnQ8VHMuLi4+ICZsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZhcmlhbnQ8VHMuLi4+ICZyaHMpIHsKKyAgICB1c2luZyBkZXRhaWw6OnZpc2l0YXRpb246OnZh
cmlhbnQ7CisgICAgdXNpbmcgbXBhcms6OmxpYjo6bGVzc19lcXVhbDsKKyNpZmRlZiBNUEFSS19D
UFAxNF9DT05TVEVYUFIKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0
dXJuIHRydWU7CisgICAgaWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGxlc3NfZXF1YWx7fSwgbGhz
LCByaHMpOworI2Vsc2UKKyAgICByZXR1cm4gbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8
fAorICAgICAgICAgICAoIXJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYKKyAgICAgICAg
ICAgIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAgKGxocy5pbmRl
eCgpID09IHJocy5pbmRleCgpICYmCisgICAgICAgICAgICAgIHZhcmlhbnQ6OnZpc2l0X3ZhbHVl
X2F0KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9
CiAKLX0gLy8gbmFtZXNwYWNlIFdURgorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlu
bGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+
ICZyaHMpIHsKKyAgICB1c2luZyBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgICAgdXNp
bmcgbXBhcms6OmxpYjo6Z3JlYXRlcl9lcXVhbDsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVY
UFIKKyAgICBpZiAocmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSkgcmV0dXJuIHRydWU7CisgICAgaWYgKGxocy5p
bmRleCgpIDwgcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdmFyaWFudDo6
dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGdyZWF0ZXJfZXF1YWx7fSwgbGhzLCByaHMpOwor
I2Vsc2UKKyAgICByZXR1cm4gcmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAg
ICAgICAoIWxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYKKyAgICAgICAgICAgIChsaHMu
aW5kZXgoKSA+IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAgKGxocy5pbmRleCgpID09IHJo
cy5pbmRleCgpICYmCisgICAgICAgICAgICAgIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KAorICAg
ICAgICAgICAgICAgICAgbGhzLmluZGV4KCksIGdyZWF0ZXJfZXF1YWx7fSwgbGhzLCByaHMpKSkp
OworI2VuZGlmCisgIH0KIAotbmFtZXNwYWNlIHN0ZCB7CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBW
aXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRP
IHZpc2l0KFZpc2l0b3IgJiZ2aXNpdG9yLCBWcyAmJi4uLiB2cykKKyAgICBERUNMVFlQRV9BVVRP
X1JFVFVSTigKKyAgICAgICAgKGRldGFpbDo6YWxsKCF2cy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9u
KCkuLi4pCisgICAgICAgICAgICAgPyAodm9pZCkwCisgICAgICAgICAgICAgOiB0aHJvd19iYWRf
dmFyaWFudF9hY2Nlc3MoKSksCisgICAgICAgIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDo6
dmlzaXRfdmFsdWUobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpm
b3J3YXJkPFZzPih2cykuLi4pKQorCisgIHN0cnVjdCBtb25vc3RhdGUge307CisKKyAgaW5saW5l
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNlcHQg
eworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7
CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShtb25vc3RhdGUsIG1v
bm9zdGF0ZSkgbm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5saW5lIGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yPj0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRv
cj09KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHRydWU7Cisg
IH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShtb25vc3RhdGUsIG1vbm9z
dGF0ZSkgbm9leGNlcHQgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGF1dG8gc3dhcCh2YXJpYW50PFRzLi4uPiAmbGhzLAor
ICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ8VHMuLi4+ICZyaHMpIG5vZXhjZXB0KG5vZXhjZXB0
KGxocy5zd2FwKHJocykpKQorICAgICAgLT4gZGVjbHR5cGUobGhzLnN3YXAocmhzKSkgeworICAg
IGxocy5zd2FwKHJocyk7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLj4KKyAgICB1c2luZyBlbmFibGVkX3R5cGUgPSBU
OworCisgICAgbmFtZXNwYWNlIGhhc2ggeworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSCwg
dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIG1lZXRzX3JlcXVpcmVtZW50cygpIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgor
ICAgICAgICAgICAgICAgc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc19pbnZvY2FibGVfcjxzdGQ6OnNpemVfdCwgSCwg
Y29uc3QgSyAmPjo6dmFsdWU7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBL
PgorICAgICAgY29uc3RleHByIGJvb2wgaXNfZW5hYmxlZCgpIHsKKyAgICAgICAgdXNpbmcgSCA9
IHN0ZDo6aGFzaDxLPjsKKyAgICAgICAgcmV0dXJuIG1lZXRzX3JlcXVpcmVtZW50czxILCBLPigp
ICYmCisgICAgICAgICAgICAgICBzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxIPjo6dmFs
dWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfY29weV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZSAm
JgorICAgICAgICAgICAgICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8SD46OnZhbHVlOworICAg
ICAgfQorCisgICAgfSAgLy8gbmFtZXNwYWNlIGhhc2gKKworICB9ICAvLyBuYW1lc3BhY2UgZGV0
YWlsCisKKyN1bmRlZiBBVVRPCisjdW5kZWYgQVVUT19SRVRVUk4KKworI3VuZGVmIEFVVE9fUkVG
UkVGCisjdW5kZWYgQVVUT19SRUZSRUZfUkVUVVJOCisKKyN1bmRlZiBERUNMVFlQRV9BVVRPCisj
dW5kZWYgREVDTFRZUEVfQVVUT19SRVRVUk4KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+
CisgIHN0cnVjdCBoYXNoPGRldGFpbDo6ZW5hYmxlZF90eXBlPAorICAgICAgdmFyaWFudDxUcy4u
Lj4sCisgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxtcGFyazo6bGliOjphbGw8ZGV0YWls
OjpoYXNoOjppc19lbmFibGVkPAorICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90
PFRzPj4oKS4uLj46OnZhbHVlPj4+IHsKKyAgICB1c2luZyBhcmd1bWVudF90eXBlID0gdmFyaWFu
dDxUcy4uLj47CisgICAgdXNpbmcgcmVzdWx0X3R5cGUgPSBzdGQ6OnNpemVfdDsKKworICAgIGlu
bGluZSByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGNvbnN0IGFyZ3VtZW50X3R5cGUgJnYpIGNvbnN0
IHsKKyAgICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICAgIHN0ZDo6
c2l6ZV90IHJlc3VsdCA9CisgICAgICAgICAgdi52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkKKyAg
ICAgICAgICAgICAgPyAyOTk3OTI0NTggIC8vIFJhbmRvbSB2YWx1ZSBjaG9zZW4gYnkgdGhlIHVu
aXZlcnNlIHVwb24gY3JlYXRpb24KKyAgICAgICAgICAgICAgOiB2YXJpYW50Ojp2aXNpdF9hbHQo
CisjaWZkZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAgICAgIFtdKGNv
bnN0IGF1dG8gJmFsdCkgeworICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGFsdF90eXBlID0g
bXBhcms6OmxpYjo6ZGVjYXlfdDxkZWNsdHlwZShhbHQpPjsKKyAgICAgICAgICAgICAgICAgICAg
ICB1c2luZyB2YWx1ZV90eXBlID0gbXBhcms6OmxpYjo6cmVtb3ZlX2NvbnN0X3Q8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGFsdF90eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaDx2YWx1ZV90eXBlPnt9KGFsdC52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIGhhc2hlcnt9
CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICB2KTsK
KyAgICAgIHJldHVybiBoYXNoX2NvbWJpbmUocmVzdWx0LCBoYXNoPHN0ZDo6c2l6ZV90Pnt9KHYu
aW5kZXgoKSkpOworICAgIH0KIAotdGVtcGxhdGU8Pgotc3RydWN0IGhhc2g8V1RGOjpNb25vc3Rh
dGU+ewotICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6TW9ub3N0YXRlKSBfX05PRVhDRVBUewot
ICAgICAgICByZXR1cm4gNDI7CisgICAgcHJpdmF0ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19M
QU1CREFTCisgICAgc3RydWN0IGhhc2hlciB7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQWx0
PgorICAgICAgaW5saW5lIHN0ZDo6c2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgQWx0ICZhbHQpIGNv
bnN0IHsKKyAgICAgICAgdXNpbmcgYWx0X3R5cGUgPSBtcGFyazo6bGliOjpkZWNheV90PEFsdD47
CisgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPQorICAgICAgICAgICAgbXBhcms6OmxpYjo6cmVt
b3ZlX2NvbnN0X3Q8dHlwZW5hbWUgYWx0X3R5cGU6OnZhbHVlX3R5cGU+OworICAgICAgICByZXR1
cm4gaGFzaDx2YWx1ZV90eXBlPnt9KGFsdC52YWx1ZSk7CisgICAgICB9CisgICAgfTsKKyNlbmRp
ZgorCisgICAgc3RhdGljIHN0ZDo6c2l6ZV90IGhhc2hfY29tYmluZShzdGQ6OnNpemVfdCBsaHMs
IHN0ZDo6c2l6ZV90IHJocykgeworICAgICAgcmV0dXJuIGxocyBePSByaHMgKyAweDllMzc3OWI5
ICsgKGxocyA8PCA2KSArIChsaHMgPj4gMik7CiAgICAgfQotfTsKKyAgfTsKKworICB0ZW1wbGF0
ZSA8PgorICBzdHJ1Y3QgaGFzaDxtb25vc3RhdGU+IHsKKyAgICB1c2luZyBhcmd1bWVudF90eXBl
ID0gbW9ub3N0YXRlOworICAgIHVzaW5nIHJlc3VsdF90eXBlID0gc3RkOjpzaXplX3Q7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgaGFzaDxXVEY6OlZhcmlhbnQ8X1R5
cGVzLi4uPj57Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RGOjpWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QgJnYpIF9fTk9FWENFUFQgewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPHB0cmRpZmZf
dD4oKSh2LmluZGV4KCkpIF4gV1RGOjp2aXNpdChXVEY6Ol9faGFzaF92aXNpdG9yKCksIHYpOwor
ICAgIGlubGluZSByZXN1bHRfdHlwZSBvcGVyYXRvcigpKGNvbnN0IGFyZ3VtZW50X3R5cGUgJikg
Y29uc3Qgbm9leGNlcHQgeworICAgICAgcmV0dXJuIDY2NzQwODMxOyAgLy8gcmV0dXJuIGEgZnVu
ZGFtZW50YWxseSBhdHRyYWN0aXZlIHJhbmRvbSB2YWx1ZS4KICAgICB9Ci19OworICB9OwogCi19
IC8vIG5hbWVzcGFjZSBzdGQKK30gIC8vIG5hbWVzcGFjZSBzdGQKIAotdXNpbmcgV1RGOjpNb25v
c3RhdGU7Ci11c2luZyBXVEY6OlZhcmlhbnQ7CituYW1lc3BhY2UgV1RGIHsKIAotI2VuZGlmIC8v
ICFDT01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Cit0ZW1wbGF0ZTxjbGFz
cyBWLCBjbGFzcy4uLiBGPgorYXV0byBzd2l0Y2hPbihWJiYgdiwgRiYmLi4uIGYpIC0+IGRlY2x0
eXBlKHZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2Fy
ZDxWPih2KSkpCit7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3
YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKK30KIAotI2lmIENPTVBJTEVSKE1T
VkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCit9CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjIwODIyKQorKysgU291cmNl
L1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKQogCi1zdGF0aWMgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJy
ZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKFN0cmluZ1ZpZXcg
c3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsZSkKK3N0YXRpYyBzdGQ6OnZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRC
cmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3
IHN0cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBUZXh0QnJlYWtJdGVy
YXRvcjo6TW9kZTo6TGluZToKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJh
dG9yLmgJKHJldmlzaW9uIDIyMDgyMikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFr
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBtX2xvY2FsZTsKICAgICB9CiAKLSAgICBWYXJpYW50PFRleHRCcmVha0l0
ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtX2JhY2tpbmc7CisgICAgc3Rk
Ojp2YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3Jt
PiBtX2JhY2tpbmc7CiAgICAgTW9kZSBtX21vZGU7CiAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxl
OwogfTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50
ZXJuYWxJQ1VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9tYWMvVGV4
dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbQkocmV2aXNpb24gMjIwODIyKQorKysgU291
cmNlL1dURi93dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3Rh
dGljIFZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZv
cm0+IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFr
SXRlcmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMg
c3RkOjp2YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRm
b3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVh
a0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAg
IHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNzggQEAKKzIwMTctMDgtMTcgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2
YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IE1vZHVsZXMvY2FjaGUvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmRvTWF0
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpD
YWNoZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjprZXlzKToKKyAgICAgICAg
KiBNb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmV4dHJhY3QpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQmxvYiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OmlzRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0
Y2hCb2R5Ojppc0FycmF5QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9k
eTo6aXNBcnJheUJ1ZmZlclZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5
Ojppc1VSTFNlYXJjaFBhcmFtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6
OmlzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmJsb2JCb2R5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Zm9ybURhdGFCb2R5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Zm9ybURhdGFCb2R5IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZldGNoQm9keTo6YXJyYXlCdWZmZXJCb2R5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZldGNoQm9keTo6YXJyYXlCdWZmZXJWaWV3Qm9keSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
dGV4dEJvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp1cmxTZWFyY2hQ
YXJhbXNCb2R5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmaWxsSGVhZGVyTWFwKToKKyAgICAgICAgKiBNb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5oOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoUmVxdWVzdDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRp
bnVlUHJpbWFyeUtleSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxS
ZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5T2ZWYXJpYW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6YWRkS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkdldEFsbFJlc3VsdDo6YWRkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0QWxsUmVz
dWx0OjprZXlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6dmFs
dWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkZp
bGVQYXRocyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVz
dWx0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmVuY29kZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmRlY29kZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmNvbXBhcmUgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5OjphcnJheSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OnN0cmlu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmRhdGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCS2V5OjpudW1iZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5OjpiaW5hcnkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6SURCS2V5RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjptYXliZUNyZWF0ZUlEQktleSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjppc29sYXRlZENvcHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpjb21wYXJlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmxvZ2dpbmdTdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURC
S2V5RGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpzdHJp
bmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6ZGF0ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpudW1iZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6YmluYXJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktl
eURhdGE6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNJREJLZXlQYXRoVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQktleVBhdGguaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgp
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJl
cXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUgY29uc3QpOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
ZXJpYWxpemVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVk
aWFDb250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6
OmRpc3BsYXlOYW1lRm9yVHJhY2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9N
ZWRpYUNvbnRyb2xzSG9zdC5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFE
ZXZpY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhQ29uc3RyYWludHMpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmg6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuaDoKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ0ljZVNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVl
ckNvbm5lY3Rpb246OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9T
RFBQcm9jZXNzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6UGFyc2luZ1Jl
c3VsdDo6cGFyc2luZ1N0YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNz
b3I6OlBhcnNpbmdSZXN1bHQ6OmNhbmRpZGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvSURMVHlw
ZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkJ1ZmZlclNvdXJjZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJTb3VyY2U6Omxlbmd0aCBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQ2FsbFRyYWNl
clR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6bWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVLZXlQYXRoQXJyYXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFVuaW9uLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0
V2ViR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvSlNWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0
ZUNhbGxUcmFjZXJQYXJhbWV0ZXIpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG0u
aDoKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6CisgICAgICAgICogY3J5cHRvL1N1YnRs
ZUNyeXB0by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OlN1YnRsZUNyeXB0bzo6d3JhcEtleSk6CisgICAgICAgICogY3J5
cHRvL1N1YnRsZUNyeXB0by5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVT
X0NCQzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfQ0ZCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19D
RkI6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RS
OjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19HQ00uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6
aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfS1cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjppbXBv
cnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREgu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KToK
KyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KToKKyAgICAg
ICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUhLREY6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlw
dG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjppbXBvcnRLZXkpOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppbXBv
cnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9P
QUVQLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBv
cnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9Q
U1MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0
S2V5KToKKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1FY2RzYVBh
cmFtcy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhrZGZQ
YXJhbXMuaDoKKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFj
S2V5UGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
UGJrZGYyUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3Jp
dGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMv
Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmg6CisgICAgICAgICogY3NzL0NT
U1N0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJh
dGlvbjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oOgor
ICAgICAgICAqIGNzcy9ET01NYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1hdHJpeDo6
Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4UmVhZE9ubHkuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTU1hdHJpeFJlYWRPbmx5OjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9Gb250RmFj
ZS5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1h
cmtlci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OmRlc2NyaXB0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjppc0FjdGl2ZU1hdGNoIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnNldEFsdGVybmF0aXZlKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjptZXRhZGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c2V0TWV0YWRhdGEpOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
SW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcik6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGlu
Z3MpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJG
b3JCaW5kaW5ncyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogZG9t
L01lc3NhZ2VFdmVudC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9u
QWx0ZXJuYXRpdmVzRm9yTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICog
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6CisgICAgICAgICogZmlsZWFwaS9C
bG9iLmg6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXI6OnJlc3VsdCBjb25zdCk6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVh
ZGVyLmg6CisgICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVt
cyBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAq
IGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6
bmFtZWRJdGVtKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6Om5h
bWVkSXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAg
KiBodG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9VUkxTZWFyY2hQYXJh
bXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUpOgorICAg
ICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JB
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDTVlL
QSBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N0eWxlOjppc0N1cnJlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6aGFzT3ZlcnJpZGVBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6b3ZlcnJpZGVBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNTdHlsZTo6Y2FudmFzR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
U3R5bGU6OmNhbnZhc1BhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5
bGU6OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBbnkuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAg
ICAgKiBodG1sL3RyYWNrL1RyYWNrRXZlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ2FudmFzLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcDoKKyAgICAgICAgKiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNlY3Rpb25PYnNlcnZlcik6Cisg
ICAgICAgICogcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oOgorICAgICAgICAqIHBhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6
OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVu
dDo6c2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jZi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6
OmNyZWF0ZUNGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6Omhp
bnRNZW1vcnlOb3ROZWVkZWRTb29uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9EZWNvZGluZ09wdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6
aXNOb25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aXNTeW5j
aHJvbm91cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzQXN5
bmNocm9ub3VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6c2l6
ZUZvckRyYXdpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjpo
YXMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVhbGl6ZU5leHRGYWxsYmFjayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmF1ZGlvU2FtcGxlc0F2
YWlsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdnZWRD
b250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIHRlc3RpbmcvVHlwZUNv
bnZlcnNpb25zLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTctMDgt
MTYgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRk
IGEgbG9nIGNoYW5uZWwgZm9yIG1lZGlhIHF1ZXJpZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvY2FjaGUvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvY2FjaGUvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2NhY2hlL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCB2
b2lkIENhY2hlOjpkb01hdGNoKHN0ZDo6b3B0aW9uYWw8UmVxdWVzCiB7CiAgICAgUmVmUHRyPEZl
dGNoUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAoaW5mbykgewotICAgICAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewot
ICAgICAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZv
LnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAg
ICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSku
cmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAi
R0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHsKICAgICAgICAgICAgICAgICBpZiAobWF0
Y2hUeXBlID09IE1hdGNoVHlwZTo6T25seUZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHBy
b21pc2UtPnJlc29sdmUoKTsKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lkIENhY2hlOjphZGRBbGwo
VmVjdG9yPFJlcXVlc3RJbmZvPiYmCiB2b2lkIENhY2hlOjpwdXQoUmVxdWVzdEluZm8mJiBpbmZv
LCBSZWY8RmV0Y2hSZXNwb25zZT4mJiByZXNwb25zZSwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+
JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0OwotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgewot
ICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJl
bGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZl
dGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6OmdldDxSZWZQdHI8
RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgaWYgKHJlcXVl
c3QtPm1ldGhvZCgpICE9ICJHRVQiKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNl
cHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiUmVxdWVzdCBtZXRob2QgaXMgbm90IEdF
VCIpIH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgQ2Fj
aGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjwKIHZvaWQgQ2FjaGU6OnJlbW92ZShSZXF1
ZXN0SW5mbyYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgRE9NUHJvbWlzZURl
ZmVycmVkPElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0
PiByZXF1ZXN0OwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJl
cXVlc3Q+PihpbmZvKSkgewotICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3Qg
PSBzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsK
ICAgICAgICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiICYmICFvcHRpb25zLmlnbm9y
ZU1ldGhvZCkgewogICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTIwOSw4ICsyMDksOCBAQCB2b2lkIENhY2hlOjprZXlzKHN0ZDo6b3B0
aW9uYWw8UmVxdWVzdEluCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKICAg
ICBpZiAoaW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAgICAgICAgcmVxdWVzdCA9IFdU
Rjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVl
c3Q+PihpbmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVm
UHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVN
ZXRob2QpIHsKICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoVmVjdG9yPFJlZjxGZXRj
aFJlcXVlc3Q+PiB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgQ3Jl
ZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7Ci0gICAgdXNpbmcgUGFzc3dvcmRDcmVkZW50aWFsSW5p
dCA9IFZhcmlhbnQ8UGFzc3dvcmRDcmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxGb3JtRWxlbWVu
dD4+OworICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBzdGQ6OnZhcmlhbnQ8UGFz
c3dvcmRDcmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4+OwogCiAgICAgc3Rk
OjpvcHRpb25hbDxQYXNzd29yZENyZWRlbnRpYWxJbml0PiBwYXNzd29yZDsKICAgICBzdGQ6Om9w
dGlvbmFsPEZlZGVyYXRlZENyZWRlbnRpYWxJbml0PiBmZWRlcmF0ZWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDQyICs0Miw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZldGNoQm9keSBG
ZXRjaEJvZHk6OmV4dHJhY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSW5pdCYm
IHZhbHVlLCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxCbG9iPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBCbG9iPiBi
bG9iID0gV1RGOjpnZXQ8UmVmUHRyPEJsb2I+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgeworICAg
ICAgICBSZWY8Y29uc3QgQmxvYj4gYmxvYiA9IHN0ZDo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUp
LnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGNvbnRlbnRUeXBlID0gYmxvYi0+dHlwZSgpOwog
ICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYmxvYikpOwogICAgIH0KLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKLSAg
ICAgICAgUmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IFdURjo6Z2V0PFJlZlB0cjxET01G
b3JtRGF0YT4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKSkgeworICAgICAgICBSZWY8RE9N
Rm9ybURhdGE+IGRvbUZvcm1EYXRhID0gc3RkOjpnZXQ8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFs
dWUpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGF1dG8gZm9ybURhdGEgPSBGb3JtRGF0YTo6
Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLmdldCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rpbmco
KSwgJnN0YXRpY19jYXN0PERvY3VtZW50Jj4oY29udGV4dCkpOwogICAgICAgICBjb250ZW50VHlw
ZSA9IG1ha2VTdHJpbmcoIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIsIGZvcm1EYXRh
LT5ib3VuZGFyeSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShm
b3JtRGF0YSkpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0
cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IFVSTFNlYXJj
aFBhcmFtcz4gcGFyYW1zID0gV1RGOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVl
KS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0
cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IFVSTFNlYXJj
aFBhcmFtcz4gcGFyYW1zID0gc3RkOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVl
KS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IEhUVFBIZWFkZXJWYWx1
ZXM6OmZvcm1VUkxFbmNvZGVkQ29udGVudFR5cGUoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9k
eShXVEZNb3ZlKHBhcmFtcykpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IFdURjo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKS5y
ZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxB
cnJheUJ1ZmZlcj4+KHZhbHVlKSkgeworICAgICAgICBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IHN0ZDo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKS5yZWxlYXNlTm9uTnVs
bCgpOwogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBzZXQgYSBDb250ZW50LVR5cGUg
aGVyZSBidXQgd2UgbmVlZCB0byBkbyB0aGlzIHVudGlsIGFsbCBuZXR3b3JrIHN0YWNrcwogICAg
ICAgICAvLyBzdXBwb3J0IHNlbmRpbmcgbm8gQ29udGVudC1UeXBlIGhlYWRlciAoPGRhcjovL3By
b2JsZW0vMzM5MDY1NjcpLgogICAgICAgICBjb250ZW50VHlwZSA9IEhUVFBIZWFkZXJWYWx1ZXM6
Om9jdGV0U3RyZWFtQ29udGVudFR5cGUoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZN
b3ZlKGJ1ZmZlcikpOwogICAgIH0KLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBBcnJheUJ1
ZmZlclZpZXc+IGJ1ZmZlciA9IFdURjo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1
ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1
ZmZlclZpZXc+IGJ1ZmZlciA9IHN0ZDo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1
ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3Qgc2V0
IGEgQ29udGVudC1UeXBlIGhlcmUgYnV0IHdlIG5lZWQgdG8gZG8gdGhpcyB1bnRpbCBhbGwgbmV0
d29yayBzdGFja3MKICAgICAgICAgLy8gc3VwcG9ydCBzZW5kaW5nIG5vIENvbnRlbnQtVHlwZSBo
ZWFkZXIgKDxkYXI6Ly9wcm9ibGVtLzMzOTA2NTY3KS4KICAgICAgICAgY29udGVudFR5cGUgPSBI
VFRQSGVhZGVyVmFsdWVzOjpvY3RldFN0cmVhbUNvbnRlbnRUeXBlKCk7CiAgICAgICAgIHJldHVy
biBGZXRjaEJvZHkoV1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8U3RyaW5nPih2YWx1ZSkpOwogICAgIGNvbnRlbnRUeXBlID0gSFRUUEhlYWRl
clZhbHVlczo6dGV4dFBsYWluQ29udGVudFR5cGUoKTsKLSAgICByZXR1cm4gRmV0Y2hCb2R5KFdU
Rk1vdmUoV1RGOjpnZXQ8U3RyaW5nPih2YWx1ZSkpKTsKKyAgICByZXR1cm4gRmV0Y2hCb2R5KFdU
Rk1vdmUoc3RkOjpnZXQ8U3RyaW5nPih2YWx1ZSkpKTsKIH0KIAogRmV0Y2hCb2R5IEZldGNoQm9k
eTo6cmVhZGFibGVTdHJlYW1Cb2R5KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hCb2R5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHkuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTUgKzUzLDE1IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYsIEZldGNoUmVz
cG9uc2VTb3VyY2UmKTsKICNlbmRpZgogCi0gICAgYm9vbCBpc0Jsb2IoKSBjb25zdCB7IHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQotICAg
IGJvb2wgaXNGb3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmPEZvcm1EYXRhPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNBcnJheUJ1ZmZlcigpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4o
bV9kYXRhKTsgfQotICAgIGJvb2wgaXNBcnJheUJ1ZmZlclZpZXcoKSBjb25zdCB7IHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEp
OyB9Ci0gICAgYm9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSk7IH0KLSAg
ICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3Ry
aW5nPihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0Jsb2IoKSBjb25zdCB7IHJldHVybiBzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNG
b3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEZvcm1E
YXRhPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKTsg
fQorICAgIGJvb2wgaXNBcnJheUJ1ZmZlclZpZXcoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpOyB9CisgICAg
Ym9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlz
VGV4dCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2Rh
dGEpOyB9CiAgICAgYm9vbCBpc1JlYWRhYmxlU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9pc1Jl
YWRhYmxlU3RyZWFtOyB9CiAKLSAgICB1c2luZyBJbml0ID0gVmFyaWFudDxSZWZQdHI8QmxvYj4s
IFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9N
Rm9ybURhdGE+LCBSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPiwgU3RyaW5nPjsKKyAgICB1c2luZyBJ
bml0ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxCbG9iPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4s
IFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxET01Gb3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFy
Y2hQYXJhbXM+LCBTdHJpbmc+OwogICAgIHN0YXRpYyBGZXRjaEJvZHkgZXh0cmFjdChTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgSW5pdCYmLCBTdHJpbmcmKTsKICAgICBzdGF0aWMgRmV0Y2hCb2R5
IGxvYWRpbmdCb2R5KCkgeyByZXR1cm4geyB9OyB9CiAgICAgc3RhdGljIEZldGNoQm9keSByZWFk
YWJsZVN0cmVhbUJvZHkoKTsKQEAgLTk1LDE2ICs5NSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBjb25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
OwogCi0gICAgY29uc3QgQmxvYiYgYmxvYkJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxS
ZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBGb3JtRGF0YSYgZm9ybURhdGFC
b2R5KCkgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQot
ICAgIGNvbnN0IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6Omdl
dDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIm
IGFycmF5QnVmZmVyQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBBcnJh
eUJ1ZmZlcj4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJheUJ1ZmZlclZpZXcmIGFy
cmF5QnVmZmVyVmlld0JvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgQXJy
YXlCdWZmZXJWaWV3Pj4obV9kYXRhKS5nZXQoKTsgfQotICAgIFN0cmluZyYgdGV4dEJvZHkoKSB7
IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KLSAgICBjb25zdCBTdHJpbmcmIHRl
eHRCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9Ci0gICAg
Y29uc3QgVVJMU2VhcmNoUGFyYW1zJiB1cmxTZWFyY2hQYXJhbXNCb2R5KCkgY29uc3QgeyByZXR1
cm4gV1RGOjpnZXQ8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSkuZ2V0KCk7IH0K
KyAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxj
b25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIEZvcm1EYXRhJiBmb3JtRGF0YUJvZHko
KSB7IHJldHVybiBzdGQ6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9CisgICAg
Y29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJl
ZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBBcnJheUJ1ZmZlciYgYXJy
YXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVm
ZmVyPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVmZmVyVmlldyYgYXJyYXlC
dWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1
ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9CisgICAgU3RyaW5nJiB0ZXh0Qm9keSgpIHsgcmV0
dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dEJv
ZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KKyAgICBjb25z
dCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25zdCB7IHJldHVybiBz
dGQ6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5nZXQoKTsgfQogCi0g
ICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwg
UmVmPEZvcm1EYXRhPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVm
ZmVyVmlldz4sIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAgIHVzaW5n
IERhdGEgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwgUmVm
PEZvcm1EYXRhPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVy
Vmlldz4sIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OwogICAgIERhdGEgbV9k
YXRhIHsgbnVsbHB0ciB9OwogCiAgICAgRmV0Y2hCb2R5Q29uc3VtZXIgbV9jb25zdW1lciB7IEZl
dGNoQm9keUNvbnN1bWVyOjpUeXBlOjpOb25lIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDggKzc3LDggQEAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGFwcGVuZFRvSGVhZGVy
TQogLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1maWxs
CiBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gZmlsbEhlYWRlck1hcChIVFRQSGVhZGVyTWFwJiBo
ZWFkZXJzLCBjb25zdCBGZXRjaEhlYWRlcnM6OkluaXQmIGhlYWRlcnNJbml0LCBGZXRjaEhlYWRl
cnM6Okd1YXJkIGd1YXJkKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KSkgewotICAgICAgICBhdXRvJiBzZXF1ZW5j
ZSA9IFdURjo6Z2V0PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKKyAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8VmVjdG9yPFN0cmluZz4+PihoZWFkZXJz
SW5pdCkpIHsKKyAgICAgICAgYXV0byYgc2VxdWVuY2UgPSBzdGQ6OmdldDxWZWN0b3I8VmVjdG9y
PFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogc2Vx
dWVuY2UpIHsKICAgICAgICAgICAgIGlmIChoZWFkZXIuc2l6ZSgpICE9IDIpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIkhlYWRlciBzdWItc2VxdWVuY2Ug
bXVzdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zIiB9OwpAQCAtODcsNyArODcsNyBAQCBzdGF0
aWMgRXhjZXB0aW9uT3I8dm9pZD4gZmlsbEhlYWRlck1hcChICiAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBhdXRvJiByZWNvcmQgPSBXVEY6OmdldDxWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8
U3RyaW5nLCBTdHJpbmc+Pj4oaGVhZGVyc0luaXQpOworICAgICAgICBhdXRvJiByZWNvcmQgPSBz
dGQ6OmdldDxWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4oaGVhZGVy
c0luaXQpOwogICAgICAgICBmb3IgKGF1dG8mIGhlYWRlciA6IHJlY29yZCkgewogICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBhcHBlbmRUb0hlYWRlck1hcChoZWFkZXIua2V5LCBoZWFkZXIudmFs
dWUsIGhlYWRlcnMsIGd1YXJkKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgJ
KHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hI
ZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAg
ICBSZXNwb25zZQogICAgIH07CiAKLSAgICB1c2luZyBJbml0ID0gVmFyaWFudDxWZWN0b3I8VmVj
dG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj47
CisgICAgdXNpbmcgSW5pdCA9IHN0ZDo6dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBW
ZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj47CiAgICAgc3RhdGljIEV4
Y2VwdGlvbk9yPFJlZjxGZXRjaEhlYWRlcnM+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxJbml0PiYm
KTsKIAogICAgIHN0YXRpYyBSZWY8RmV0Y2hIZWFkZXJzPiBjcmVhdGUoR3VhcmQgZ3VhcmQgPSBH
dWFyZDo6Tm9uZSwgSFRUUEhlYWRlck1hcCYmIGhlYWRlcnMgPSB7IH0pIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRmV0Y2hIZWFkZXJzIHsgZ3VhcmQsIFdURk1vdmUoaGVhZGVycykgfSk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHAJKHJl
dmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEyICsyMzUsMTIgQEAgRXhjZXB0aW9uT3I8
UmVmPEZldGNoUmVxdWVzdD4+IEZldGNoUmVxdQogewogICAgIGF1dG8gcmVxdWVzdCA9IGFkb3B0
UmVmKCpuZXcgRmV0Y2hSZXF1ZXN0KGNvbnRleHQsIHN0ZDo6bnVsbG9wdCwgRmV0Y2hIZWFkZXJz
OjpjcmVhdGUoRmV0Y2hIZWFkZXJzOjpHdWFyZDo6UmVxdWVzdCksIHsgfSkpOwogCi0gICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihpbnB1dCkpIHsKLSAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aChXVEY6OmdldDxTdHJpbmc+KGlucHV0KSwg
V1RGTW92ZShpbml0KSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihp
bnB1dCkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aChz
dGQ6OmdldDxTdHJpbmc+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7CiAgICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmlu
aXRpYWxpemVXaXRoKCpXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZN
b3ZlKGluaXQpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0
aCgqc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7
CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgY2xhc3MgVVJMU2VhcmNoUGFyYW1zOwogY2xhc3MgRmV0Y2hSZXF1ZXN0
IGZpbmFsIDogcHVibGljIEZldGNoQm9keU93bmVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBJbml0
ID0gRmV0Y2hSZXF1ZXN0SW5pdDsKLSAgICB1c2luZyBJbmZvID0gVmFyaWFudDxSZWZQdHI8RmV0
Y2hSZXF1ZXN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBJbmZvID0gc3RkOjp2YXJpYW50PFJlZlB0
cjxGZXRjaFJlcXVlc3Q+LCBTdHJpbmc+OwogCiAgICAgdXNpbmcgQ2FjaGUgPSBGZXRjaE9wdGlv
bnM6OkNhY2hlOwogICAgIHVzaW5nIENyZWRlbnRpYWxzID0gRmV0Y2hPcHRpb25zOjpDcmVkZW50
aWFsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6Y29udGludWVQcmkKICAgICBpZiAoc291cmNlc0Rl
bGV0ZWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBB
U0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJ
REJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUg
aGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRl
ICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNl
IGlzIG5vdCBhbiBpbmRleC4iKSB9OwogCiAgICAgYXV0byBkaXJlY3Rpb24gPSBtX2luZm8uY3Vy
c29yRGlyZWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfklEQkN1cnNvcigpOwogCi0gICAgdXNpbmcgU291
cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+PjsK
KyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPiwg
UmVmUHRyPElEQkluZGV4Pj47CiAKICAgICBjb25zdCBTb3VyY2UmIHNvdXJjZSgpIGNvbnN0Owog
ICAgIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJ
REJPYmplY3RTdG9yZT4+IElEQkRhdGEKICAgICBpZiAoa2V5UGF0aCAmJiAhaXNJREJLZXlQYXRo
VmFsaWQoa2V5UGF0aC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRh
eEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9y
ZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5vdCBhIHZhbGlkIGtl
eSBwYXRoLiIpIH07CiAKLSAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9JbmNyZW1l
bnQgJiYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKSAm
JiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkKKyAgICBp
ZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9JbmNyZW1lbnQgJiYgKChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKSAmJiBzdGQ6OmdldDxTdHJpbmc+KGtl
eVBhdGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxTdHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3Jl
YXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlv
biB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIp
IH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgT2JqZWN0U3RvcmUgaW50byB0aGUgY29ubmVj
dGlvbidzIG1ldGFkYXRhLgpAQCAtMTcxLDEwICsxNzEsMTAgQEAgRXhjZXB0aW9uT3I8UmVmPElE
QlRyYW5zYWN0aW9uPj4gSURCRGF0YQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9u
JyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiIp
IH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7Ci0gICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQotICAgICAgICBvYmpl
Y3RTdG9yZXMgPSBXVEZNb3ZlKFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7
CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFt
ZXMpKQorICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3RvcjxTdHJp
bmc+PihzdG9yZU5hbWVzKSk7CiAgICAgZWxzZQotICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5k
KFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkpOworICAgICAgICBvYmplY3RT
dG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkpOwogCiAg
ICAgaWYgKG9iamVjdFN0b3Jlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3Ry
YW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgc3RvcmVOYW1lcyBwYXJhbWV0ZXIgd2Fz
IGVtcHR5LiIpIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcg
QEAgcHVibGljOgogCiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQk9iamVjdFN0b3JlPj4gY3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBPYmplY3RTdG9yZVBhcmFtZXRlcnMmJik7
CiAKLSAgICB1c2luZyBTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyA9IFdURjo6VmFyaWFudDxTdHJp
bmcsIFZlY3RvcjxTdHJpbmc+PjsKKyAgICB1c2luZyBTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyA9
IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKICAgICBFeGNlcHRpb25PcjxS
ZWY8SURCVHJhbnNhY3Rpb24+PiB0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyYm
IHN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uTW9kZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4g
ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGNsb3NlKCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdl
dEFsbFJlc3VsdC5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDEx
ICszMiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHZvaWQgaXNvbGF0ZWRDb3B5T2ZWYXJpYW50KGNvbnN0IFdURjo6VmFyaWFudDxWZWN0b3I8SURC
S2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgc291cmNlLCBXVEY6
OlZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxw
dHJfdD4mIHRhcmdldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXNvbGF0ZWRDb3B5T2ZW
YXJpYW50KGNvbnN0IHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJW
YWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgc291cmNlLCBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktl
eURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4mIHRhcmdldCkKIHsKICAg
ICB0YXJnZXQgPSBWZWN0b3I8VD4oKTsKLSAgICBhdXRvJiBzb3VyY2VWZWN0b3IgPSBXVEY6Omdl
dDxWZWN0b3I8VD4+KHNvdXJjZSk7Ci0gICAgYXV0byYgdGFyZ2V0VmVjdG9yID0gV1RGOjpnZXQ8
VmVjdG9yPFQ+Pih0YXJnZXQpOworICAgIGF1dG8mIHNvdXJjZVZlY3RvciA9IHN0ZDo6Z2V0PFZl
Y3RvcjxUPj4oc291cmNlKTsKKyAgICBhdXRvJiB0YXJnZXRWZWN0b3IgPSBzdGQ6OmdldDxWZWN0
b3I8VD4+KHRhcmdldCk7CiAgICAgdGFyZ2V0VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c291cmNlVmVjdG9yLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogc291cmNlVmVj
dG9yKQogICAgICAgICB0YXJnZXRWZWN0b3IudW5jaGVja2VkQXBwZW5kKGVsZW1lbnQuaXNvbGF0
ZWRDb3B5KCkpOwpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIElEQkdldEFsbFJlc3VsdDo6aXNvbGF0
ZWRDb3B5KGNvbnN0CiB7CiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNlLm1fdHlwZTsK
IAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pihzb3VyY2Uu
bV9yZXN1bHRzKSkKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJf
dD4oc291cmNlLm1fcmVzdWx0cykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAoc291
cmNlLm1fdHlwZSkgewpAQCAtNzIsMjkgKzcyLDI5IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0Ojpp
c29sYXRlZENvcHkoY29uc3QKIHZvaWQgSURCR2V0QWxsUmVzdWx0OjphZGRLZXkoSURCS2V5RGF0
YSYmIGtleSkKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6
S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURh
dGE+PihtX3Jlc3VsdHMpKTsKLSAgICBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVz
dWx0cykuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsKKyAgICBzdGQ6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUoa2V5KSk7CiB9CiAKIHZv
aWQgSURCR2V0QWxsUmVzdWx0OjphZGRWYWx1ZShJREJWYWx1ZSYmIHZhbHVlKQogewogICAgIEFT
U0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwotICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOwot
ICAgIFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUo
dmFsdWUpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCVmFs
dWU+PihtX3Jlc3VsdHMpKTsKKyAgICBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3Vs
dHMpLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKIGNvbnN0IFZlY3RvcjxJREJLZXlEYXRh
PiYgSURCR2V0QWxsUmVzdWx0OjprZXlzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09
IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsKLSAgICByZXR1cm4gV1RG
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOworICAgIEFTU0VSVChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKSk7CisgICAgcmV0
dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKIH0KIAogY29uc3Qg
VmVjdG9yPElEQlZhbHVlPiYgSURCR2V0QWxsUmVzdWx0Ojp2YWx1ZXMoKSBjb25zdAogewogICAg
IEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwotICAgIEFT
U0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykp
OwotICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpOworICAg
IEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0
cykpOworICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpOwog
fQogCiBWZWN0b3I8U3RyaW5nPiBJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMoKSBj
b25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJlc3VsdDo6
YWxsQmxvYkYKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6VmFs
dWVzKTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoU2V0OwotICAgIGZvciAoYXV0byYgdmFs
dWUgOiBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKSB7CisgICAgZm9yIChh
dXRvJiB2YWx1ZSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpIHsKICAg
ICAgICAgZm9yIChhdXRvJiBwYXRoIDogdmFsdWUuYmxvYkZpbGVQYXRocygpKQogICAgICAgICAg
ICAgcGF0aFNldC5hZGQocGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmgJKHJldmlzaW9uIDIyMDgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQg
aXNvbGF0ZWRDb3B5KGNvbnN0IElEQkdldEFsbFJlc3VsdCYgc291cmNlLCBJREJHZXRBbGxSZXN1
bHQmIGRlc3RpbmF0aW9uKTsKIAogICAgIEluZGV4ZWREQjo6R2V0QWxsVHlwZSBtX3R5cGUgeyBJ
bmRleGVkREI6OkdldEFsbFR5cGU6OktleXMgfTsKLSAgICBXVEY6OlZhcmlhbnQ8VmVjdG9yPElE
QktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4gbV9yZXN1bHRzIHsg
bnVsbHB0ciB9OworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJ
REJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiBtX3Jlc3VsdHMgeyBudWxscHRyIH07CiB9OwogCiB0
ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtODQsMTAgKzg0LDEwIEBAIHZvaWQgSURCR2V0QWxs
UmVzdWx0OjplbmNvZGUoRW5jb2RlciYgZW4KIAogICAgIHN3aXRjaCAobV9yZXN1bHRzLmluZGV4
KCkpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElE
QktleURhdGE+PihtX3Jlc3VsdHMpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFZlY3Rv
cjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgot
ICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cyk7
CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgICBicmVhazsKQEAgLTEwOSwx
MiArMTA5LDEyIEBAIGJvb2wgSURCR2V0QWxsUmVzdWx0OjpkZWNvZGUoRGVjb2RlciYgZGUKICAg
ICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXN1bHQubV9yZXN1bHRz
ID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RG
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV9yZXN1bHRzKSkpCisgICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV9y
ZXN1bHRzKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgMToKICAgICAgICAgcmVzdWx0Lm1fcmVzdWx0cyA9IFZlY3RvcjxJREJWYWx1ZT4oKTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+Pihy
ZXN1bHQubV9yZXN1bHRzKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8
VmVjdG9yPElEQlZhbHVlPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBJREJLZXk6OmlzVmFsaWQoKSBjb25zdAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV90eXBlID09IEtleVR5cGU6OkFycmF5KSB7Ci0gICAg
ICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKSkgewor
ICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSkp
IHsKICAgICAgICAgICAgIGlmICgha2V5LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDksOCArMTA5LDggQEAgaW50IElEQktleTo6Y29t
cGFyZShjb25zdCBJREJLZXkmIG90aGVyKQogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEtleVR5cGU6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8SURC
S2V5VmVjdG9yPihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IFdURjo6Z2V0
PElEQktleVZlY3Rvcj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3Rk
OjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9
IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4ob3RoZXIubV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlckFycmF5LnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBpZiAoaW50IHJlc3VsdCA9IGFycmF5W2ldLT5jb21wYXJlKCpvdGhl
ckFycmF5W2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTIyLDEzICsx
MjIsMTMgQEAgaW50IElEQktleTo6Y29tcGFyZShjb25zdCBJREJLZXkmIG90aGVyKQogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJl
dHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4o
bV92YWx1ZSksIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7
CisgICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJlYWRTYWZl
RGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhl
ci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiAt
Y29kZVBvaW50Q29tcGFyZShXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpLCBXVEY6Omdl
dDxTdHJpbmc+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC1jb2RlUG9pbnRDb21wYXJlKHN0
ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSksIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkp
OwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjogewot
ICAgICAgICBhdXRvIG51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7Ci0gICAgICAg
IGF1dG8gb3RoZXJOdW1iZXIgPSBXVEY6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAg
ICAgICBhdXRvIG51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIGF1
dG8gb3RoZXJOdW1iZXIgPSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogICAgICAg
ICByZXR1cm4gKG51bWJlciA8IG90aGVyTnVtYmVyKSA/IC0xIDogKChudW1iZXIgPiBvdGhlck51
bWJlcikgPyAxIDogMCk7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lvbiAyMjA4
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDMxICsxMTMsMzEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8SURCS2V5Pj4mIGFycmF5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5
cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPFJl
ZlB0cjxJREJLZXk+Pj4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8
UmVmUHRyPElEQktleT4+PihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0
cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OlN0
cmluZyk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAg
ICByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUg
ZGF0ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkRh
dGUpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIG51
bWJlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6Ok51
bWJlcik7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAg
ICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBU
aHJlYWRTYWZlRGF0YUJ1ZmZlciYgYmluYXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBpbnQgY29tcGFyZShj
b25zdCBJREJLZXkmIG90aGVyKSBjb25zdDsKQEAgLTE3MSw3ICsxNzEsNyBAQCBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IElEQktleShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogCiAgICAg
Y29uc3QgS2V5VHlwZSBtX3R5cGU7Ci0gICAgVmFyaWFudDxWZWN0b3I8UmVmUHRyPElEQktleT4+
LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CisgICAgc3Rk
Ojp2YXJpYW50PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIAogICAgIGNvbnN0IHNpemVfdCBtX3NpemVFc3RpbWF0
ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIElE
QktleURhdGE6OklEQktleURhdGEoY29uc3QgSURCS2V5KiBrZXkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBtX3ZhbHVlID0gVmVjdG9yPElEQktl
eURhdGE+KCk7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURh
dGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBmb3IgKGF1dG8mIGtleTIgOiBrZXktPmFycmF5
KCkpCiAgICAgICAgICAgICBhcnJheS5hcHBlbmQoSURCS2V5RGF0YShrZXkyLmdldCgpKSk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtODEsMjAgKzgxLDIwIEBAIFJlZlB0cjxJREJLZXk+IElEQktleURh
dGE6Om1heWJlQ3JlYXRlSUQKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgp
OwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJL
ZXk+PiBhcnJheTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDogV1RGOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihtX3ZhbHVlKSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBz
dGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKSB7CiAgICAgICAgICAgICBhcnJh
eS5hcHBlbmQoa2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpKTsKICAgICAgICAgICAgIEFTU0VS
VChhcnJheS5sYXN0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZUFycmF5KGFycmF5KTsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZUJpbmFyeShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVCaW5hcnkoc3RkOjpn
ZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKFdURjo6Z2V0PFN0cmlu
Zz4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RkOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAgICBy
ZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVOdW1iZXIoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtl
eVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0xMjUsMjAgKzEyNSwyMCBAQCB2b2lkIElEQktleURhdGE6Omlzb2xhdGVk
Q29weShjb25zdCBJREJLCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5
OiB7CiAgICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsK
LSAgICAgICAgYXV0byYgZGVzdGluYXRpb25BcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4oZGVzdGluYXRpb24ubV92YWx1ZSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogV1RG
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihzb3VyY2UubV92YWx1ZSkpCisgICAgICAgIGF1dG8m
IGRlc3RpbmF0aW9uQXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGRlc3RpbmF0
aW9uLm1fdmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4oc291cmNlLm1fdmFsdWUpKQogICAgICAgICAgICAgZGVzdGluYXRpb25BcnJh
eS5hcHBlbmQoa2V5Lmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdU
Rjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihzb3VyY2UubV92YWx1ZSk7CisgICAgICAgIGRl
c3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oc291cmNl
Lm1fdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0g
ICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxTdHJpbmc+KHNvdXJjZS5tX3Zh
bHVlKS5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6
Z2V0PFN0cmluZz4oc291cmNlLm1fdmFsdWUpLmlzb2xhdGVkQ29weSgpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgot
ICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gV1RGOjpnZXQ8ZG91YmxlPihzb3VyY2UubV92
YWx1ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxkb3VibGU+KHNv
dXJjZS5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6TWF4Ogog
ICAgIGNhc2UgS2V5VHlwZTo6TWluOgpAQCAtMTYwLDI1ICsxNjAsMjUgQEAgdm9pZCBJREJLZXlE
YXRhOjplbmNvZGUoS2V5ZWRFbmNvZGVyJiBlbgogICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0
byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAg
ICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAg
ICAgICAgIGVuY29kZXIuZW5jb2RlT2JqZWN0cygiYXJyYXkiLCBhcnJheS5iZWdpbigpLCBhcnJh
eS5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXkp
IHsKICAgICAgICAgICAgIGtleS5lbmNvZGUoZW5jb2Rlcik7CiAgICAgICAgIH0pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgIGF1
dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgp
OworICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1f
dmFsdWUpLmRhdGEoKTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYXNCaW5hcnkiLCAh
IWRhdGEpOwogICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlQnl0
ZXMoImJpbmFyeSIsIGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgZW5jb2Rlci5lbmNv
ZGVTdHJpbmcoInN0cmluZyIsIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICBl
bmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7
CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlU
eXBlOjpOdW1iZXI6Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJudW1iZXIiLCBXVEY6
OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm51
bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBAIC0yMjAsMTIgKzIy
MCwxMiBAQCBib29sIElEQktleURhdGE6OmRlY29kZShLZXllZERlY29kZXImIGRlCiAKICAgICBp
ZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpIHsKICAgICAgICAgcmVzdWx0Lm1f
dmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJz
dHJpbmciLCBXVEY6OmdldDxTdHJpbmc+KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihyZXN1bHQu
bV92YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5cGU6Ok51
bWJlciB8fCByZXN1bHQubV90eXBlID09IEtleVR5cGU6OkRhdGUpIHsKICAgICAgICAgcmVzdWx0
Lm1fdmFsdWUgPSAwLjA7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJsZSgibnVt
YmVyIiwgV1RGOjpnZXQ8ZG91YmxlPihyZXN1bHQubV92YWx1ZSkpOworICAgICAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVEb3VibGUoIm51bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4ocmVzdWx0Lm1f
dmFsdWUpKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpCaW5h
cnkpIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIElEQktleURhdGE6OmRlY29kZShLZXllZERl
Y29kZXImIGRlCiAgICAgfTsKICAgICAKICAgICByZXN1bHQubV92YWx1ZSA9IFZlY3RvcjxJREJL
ZXlEYXRhPigpOwotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5IiwgV1RG
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV92YWx1ZSksIGFycmF5RnVuY3Rpb24p
OworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5Iiwgc3RkOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihyZXN1bHQubV92YWx1ZSksIGFycmF5RnVuY3Rpb24pOwogfQogCiBp
bnQgSURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKQEAg
LTI3Nyw4ICsyNzcsOCBAQCBpbnQgSURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRh
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICBj
YXNlIEtleVR5cGU6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IFdU
Rjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8m
IGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAg
YXV0byYgb3RoZXJBcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92
YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpICYmIGkg
PCBvdGhlckFycmF5LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaW50IHJlc3VsdCA9
IGFycmF5W2ldLmNvbXBhcmUob3RoZXJBcnJheVtpXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNv
bnN0IElEQktleURhdGEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGNhc2UgS2V5VHlw
ZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURhdGEoV1RGOjpnZXQ8
VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4ob3RoZXIubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURh
dGEoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBzdGQ6OmdldDxUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6U3Ry
aW5nOgotICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShXVEY6OmdldDxTdHJpbmc+KG1f
dmFsdWUpLCBXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IGNvZGVQb2ludENvbXBhcmUoc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSwgc3RkOjpnZXQ8U3Ry
aW5nPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2Ug
S2V5VHlwZTo6TnVtYmVyOiB7Ci0gICAgICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4o
b3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKTsKKyAgICAgICAgYXV0byBvdGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4ob3Ro
ZXIubV92YWx1ZSk7CiAKICAgICAgICAgaWYgKG51bWJlciA9PSBvdGhlck51bWJlcikKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMzI1LDcgKzMyNSw3IEBAIFN0cmluZyBJREJLZXlEYXRhOjps
b2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8
YXJyYXk+IC0geyAiKTsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3Rv
cjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YXJyYXkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFycmF5W2ld
LmxvZ2dpbmdTdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaSA8IGFycmF5LnNpemUoKSAtIDEp
CkBAIC0zMzksNyArMzM5LDcgQEAgU3RyaW5nIElEQktleURhdGE6OmxvZ2dpbmdTdHJpbmcoKSBj
b25zdAogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCI8YmluYXJ5PiAtICIpOwogCi0gICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOworICAgICAgICBhdXRvKiBkYXRhID0g
c3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAgICAgICAg
aWYgKCFkYXRhKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiKG51bGwpIik7CiAgICAg
ICAgICAgICByZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CkBAIC0zNTcsMTIgKzM1NywxMiBA
QCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmVzdWx0ID0gIjxz
dHJpbmc+IC0gIiArIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CisgICAgICAgIHJlc3VsdCA9
ICI8c3RyaW5nPiAtICIgKyBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1h
dCgiPGRhdGU+IC0gJWYiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIFN0cmluZzo6Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1
ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gU3RyaW5nOjpm
b3JtYXQoIjxudW1iZXI+IC0gJWYiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8bnVtYmVyPiAtICVmIiwgc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgICAgIHJldHVybiAiPG1h
eGltdW0+IjsKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTQ0MiwxMyArNDQyLDEzIEBAIGJv
b2wgSURCS2V5RGF0YTo6b3BlcmF0b3I9PShjb25zdCBJREJLZXkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSA9PSBXVEY6OmdldDxkb3Vi
bGU+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3Zh
bHVlKSA9PSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2UgS2V5VHlw
ZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSA9PSBX
VEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
U3RyaW5nPihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpOwogICAg
IGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpID09IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihv
dGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVm
ZmVyPihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92
YWx1ZSk7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURh
dGE+PihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJL
ZXlEYXRhPj4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5t
X3ZhbHVlKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgJKHJl
dmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEzICsxMzEsMTMgQEAgcHVibGljOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAgICAgICBj
YXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hh
c2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91YmxlKT4oJldURjo6Z2V0PGRvdWJsZT4obV92YWx1
ZSkpKTsKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVt
b3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAg
aGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKFdURjo6Z2V0PFN0cmluZz4obV92YWx1
ZSkpKTsKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6
OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOworICAgICAgICAgICAgYXV0byog
ZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CiAg
ICAgICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgw
KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAg
ICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1f
dmFsdWUpKQorICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KG1fdmFsdWUpKQogICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5
Lmhhc2goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU5LDM4ICsxNTks
MzggQEAgcHVibGljOgogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpOwotICAgICAgICByZXR1cm4gV1RGOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92
YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIGRhdGUoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpEYXRlKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0
PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFs
dWUpOwogICAgIH0KIAogICAgIGRvdWJsZSBudW1iZXIoKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIpOwotICAgICAgICByZXR1cm4gV1RGOjpn
ZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92
YWx1ZSk7CiAgICAgfQogCiAgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFyeSgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFyeSk7
Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7
CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgIH0KIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgdm9pZCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5RGF0YSYgc291
cmNlLCBJREJLZXlEYXRhJiBkZXN0aW5hdGlvbik7CiAKICAgICBLZXlUeXBlIG1fdHlwZTsKLSAg
ICBWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVE
YXRhQnVmZmVyPiBtX3ZhbHVlOworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4s
IFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIAogICAgIGJv
b2wgbV9pc051bGwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0RlbGV0ZWRWYWx1ZSB7IGZhbHNl
IH07CkBAIC0yNDIsMTcgKzI0MiwxNyBAQCB2b2lkIElEQktleURhdGE6OmVuY29kZShFbmNvZGVy
JiBlbmNvZGVyCiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgS2V5VHlwZTo6QXJyYXk6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElE
QktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6
OkJpbmFyeToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4obV92YWx1ZSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OlN0cmlu
ZzoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAg
ICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAg
ICAgZW5jb2RlciA8PCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVy
IDw8IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
QEAgLTI3NiwyMyArMjc2LDIzIEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2RlKERlY29kZXImIGRl
Y29kZXIKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKICAgICAgICAg
a2V5RGF0YS5tX3ZhbHVlID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihrZXlEYXRhLm1fdmFsdWUp
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0
YT4+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKICAgICAgICAga2V5RGF0YS5tX3Zh
bHVlID0gVGhyZWFkU2FmZURhdGFCdWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KGtl
eURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0g
U3RyaW5nKCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8U3RyaW5nPihr
ZXlEYXRhLm1fdmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxT
dHJpbmc+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpO
dW1iZXI6CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IDAuMDsKLSAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShXVEY6OmdldDxkb3VibGU+KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCShyZXZp
c2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgaXNJREJLZXlQ
YXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKKyAg
ICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAogSURCS2V5UGF0aCBp
c29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKQEAgLTIyMCw3ICsyMjAsNyBA
QCBJREJLZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoCiAgICAgICAgIHJldHVy
biB2ZWN0b3JDb3B5OwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwg
a2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CiB9CiAK
ICNpZm5kZWYgTkRFQlVHCkBAIC0yNDQsNyArMjQ0LDcgQEAgU3RyaW5nIGxvZ2dpbmdTdHJpbmco
Y29uc3QgSURCS2V5UGF0aCYgcAogICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
ICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgcGF0aCk7CisgICAgcmV0
dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgcGF0aCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAkocmV2aXNpb24gMjIw
ODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgSURCS2V5UGF0aCA9IFdURjo6VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsK
K3VzaW5nIElEQktleVBhdGggPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47
CiBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmKTsKIAogZW51bSBjbGFz
cyBJREJLZXlQYXRoUGFyc2VFcnJvciB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+
PiBJREJPYmplY3RTdG9yCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAotICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50cnkg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCisgICAg
aWYgKHBhcmFtZXRlcnMubXVsdGlFbnRyeSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxTdHJpbmc+PihrZXlQYXRoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgn
IG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBhcnJheSBh
bmQgdGhlIG11bHRpRW50cnkgb3B0aW9uIGlzIHRydWUuIikgfTsKIAogICAgIC8vIEluc3RhbGwg
dGhlIG5ldyBJbmRleCBpbnRvIHRoZSBPYmplY3RTdG9yZSdzIGluZm8uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24g
MjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNl
dFNvdXJjZShJREJDdXJzb3ImIGN1CiAKICAgICBtX3NvdXJjZSA9IFNvdXJjZSB7ICZjdXJzb3Ig
fTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVH
dWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSkpOwotICAgICAgICBXVEY6OmdldDxS
ZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSktPmRlY3JlbWVudE91dHN0YW5kaW5n
UmVxdWVzdENvdW50KCk7CisgICAgICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKSk7CisgICAgICAgIHN0ZDo6Z2V0PFJl
ZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdS
ZXF1ZXN0Q291bnQoKTsKICAgICB9KTsKIH0KIApAQCAtMjA3LDkgKzIwNyw5IEBAIHVpbnQ2NF90
IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWQKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZS52YWx1ZSgpLAotICAgICAgICBbXSAoY29u
c3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgcmV0dXJuIG9iamVjdFN0
b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElE
QkluZGV4PiYgaW5kZXgpIHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIHsgcmV0dXJu
IDA7IH0KKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9iamVjdFN0
b3JlKSAtPiB1aW50NjRfdCB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIo
KTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSAtPiB1aW50
NjRfdCB7IHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9LAor
ICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkN1cnNvcj4mKSAtPiB1aW50NjRfdCB7IHJldHVy
biAwOyB9CiAgICAgKTsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBAIEluZGV4ZWREQjo6SW5kZXhS
ZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnIKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkp
OworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1f
c291cmNlLnZhbHVlKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlw
ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAotICAgIHVzaW5nIFJlc3VsdCA9IFZh
cmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4sIFJlZlB0cjxJREJEYXRhYmFzZT4sIEpTQzo6U3Ryb25n
PEpTQzo6VW5rbm93bj4+OworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8
SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3du
Pj47CiAgICAgRXhjZXB0aW9uT3I8c3RkOjpvcHRpb25hbDxSZXN1bHQ+PiByZXN1bHQoKSBjb25z
dDsKIAotICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPiwg
UmVmUHRyPElEQkluZGV4PiwgUmVmUHRyPElEQkN1cnNvcj4+OworICAgIHVzaW5nIFNvdXJjZSA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBS
ZWZQdHI8SURCQ3Vyc29yPj47CiAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxTb3VyY2U+JiBzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogCiAgICAgRXhjZXB0aW9uT3I8RE9NRXJy
b3IqPiBlcnJvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNp
b24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgKICAgICAgICAgICAgICAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RyaW5nKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9KTsKLSAgICAgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVlKCkpOwor
ICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5cGUiLCBLZXlQYXRoVHlwZTo6TnVsbCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRy
b2xzSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFN0cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6
ZGlzcGxheU5hbWVGb3IKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykgeworICAg
IHJldHVybiBzdGQ6OnZpc2l0KFsmcGFnZV0oYXV0byYgdHJhY2spIHsKICAgICAgICAgcmV0dXJu
IHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuZGlzcGxheU5hbWVGb3JUcmFjayh0
cmFjay5nZXQoKSk7CiAgICAgfSwgdHJhY2sudmFsdWUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hv
c3QuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcg
QEAgcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gc29ydGVkVHJhY2tMaXN0
Rm9yTWVudShUZXh0VHJhY2tMaXN0Jik7CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4g
c29ydGVkVHJhY2tMaXN0Rm9yTWVudShBdWRpb1RyYWNrTGlzdCYpOwogCi0gICAgdXNpbmcgVGV4
dE9yQXVkaW9UcmFjayA9IFdURjo6VmFyaWFudDxSZWZQdHI8VGV4dFRyYWNrPiwgUmVmUHRyPEF1
ZGlvVHJhY2s+PjsKKyAgICB1c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gc3RkOjp2YXJpYW50PFJl
ZlB0cjxUZXh0VHJhY2s+LCBSZWZQdHI8QXVkaW9UcmFjaz4+OwogICAgIFN0cmluZyBkaXNwbGF5
TmFtZUZvclRyYWNrKGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dE9yQXVkaW9UcmFjaz4mKTsKIAog
ICAgIFRleHRUcmFjayogY2FwdGlvbk1lbnVPZmZJdGVtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCShyZXZpc2lv
biAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2
aWNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgRG9jdW1lbnQqIE1lZGlh
RGV2aWNlczo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4o
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAotc3RhdGljIE1lZGlhQ29uc3RyYWludHMg
Y3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdCBWYXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25z
dHJhaW50cz4mIGNvbnN0cmFpbnRzKQorc3RhdGljIE1lZGlhQ29uc3RyYWludHMgY3JlYXRlTWVk
aWFDb25zdHJhaW50cyhjb25zdCBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFp
bnRzPiYgY29uc3RyYWludHMpCiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29uc3RyYWlu
dHMsCiAgICAgICAgIFsmXSAoYm9vbCBpc1ZhbGlkKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgJKHJldmlzaW9uIDIyMDgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIHVzaW5nIEVudW1l
cmF0ZURldmljZXNQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETFNlcXVlbmNlPElETElu
dGVyZmFjZTxNZWRpYURldmljZUluZm8+Pj47CiAKICAgICBzdHJ1Y3QgU3RyZWFtQ29uc3RyYWlu
dHMgewotICAgICAgICBWYXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4gdmlkZW87
Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiBhdWRpbzsKKyAg
ICAgICAgc3RkOjp2YXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4gdmlkZW87Cisg
ICAgICAgIHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1ZGlvOwog
ICAgIH07CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gZ2V0VXNlck1lZGlhKGNvbnN0IFN0cmVhbUNv
bnN0cmFpbnRzJiwgUHJvbWlzZSYmKSBjb25zdDsKICAgICB2b2lkIGVudW1lcmF0ZURldmljZXMo
RW51bWVyYXRlRGV2aWNlc1Byb21pc2UmJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRz
LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDgg
QEAgc3RydWN0IENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzIHsKIH07CiAKIHN0cnVjdCBDb25z
dHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3Ry
aW5nLCBWZWN0b3I8U3RyaW5nPj4+IGV4YWN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxT
dHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gaWRlYWw7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGV4YWN0OworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBpZGVhbDsKIH07CiAKIHN0cnVj
dCBDb25zdHJhaW5Eb3VibGVSYW5nZSA6IERvdWJsZVJhbmdlIHsKQEAgLTU2LDEwICs1NiwxMCBA
QCBzdHJ1Y3QgQ29uc3RyYWluTG9uZ1JhbmdlIDogTG9uZ1JhbmdlIHsKICAgICBzdGQ6Om9wdGlv
bmFsPGludD4gaWRlYWw7CiB9OwogCi11c2luZyBDb25zdHJhaW5Cb29sZWFuID0gVmFyaWFudDxi
b29sLCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5ET01TdHJp
bmcgPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4sIENvbnN0cmFpbkRPTVN0cmluZ1Bh
cmFtZXRlcnM+OwotdXNpbmcgQ29uc3RyYWluRG91YmxlID0gVmFyaWFudDxkb3VibGUsIENvbnN0
cmFpbkRvdWJsZVJhbmdlPjsKLXVzaW5nIENvbnN0cmFpbkxvbmcgPSBWYXJpYW50PGludCwgQ29u
c3RyYWluTG9uZ1JhbmdlPjsKK3VzaW5nIENvbnN0cmFpbkJvb2xlYW4gPSBzdGQ6OnZhcmlhbnQ8
Ym9vbCwgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnM+OwordXNpbmcgQ29uc3RyYWluRE9NU3Ry
aW5nID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4sIENvbnN0cmFpbkRPTVN0
cmluZ1BhcmFtZXRlcnM+OwordXNpbmcgQ29uc3RyYWluRG91YmxlID0gc3RkOjp2YXJpYW50PGRv
dWJsZSwgQ29uc3RyYWluRG91YmxlUmFuZ2U+OwordXNpbmcgQ29uc3RyYWluTG9uZyA9IHN0ZDo6
dmFyaWFudDxpbnQsIENvbnN0cmFpbkxvbmdSYW5nZT47CiAKIHN0cnVjdCBNZWRpYVRyYWNrQ29u
c3RyYWludFNldCB7CiAgICAgc3RkOjpvcHRpb25hbDxDb25zdHJhaW5Mb25nPiB3aWR0aDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2
ZXIuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENJY2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgUlRDSWNlU2VydmVyIHsKLSAgICBWYXJpYW50PFN0
cmluZywgVmVjdG9yPFN0cmluZz4+IHVybHM7CisgICAgc3RkOjp2YXJpYW50PFN0cmluZywgVmVj
dG9yPFN0cmluZz4+IHVybHM7CiAgICAgU3RyaW5nIGNyZWRlbnRpYWw7CiAgICAgU3RyaW5nIHVz
ZXJuYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0LDggKzE4NCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ1Bl
ZXJDb25uZWN0aW9uOjpyZW0KIAogRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4g
UlRDUGVlckNvbm5lY3Rpb246OmFkZFRyYW5zY2VpdmVyKEFkZFRyYW5zY2VpdmVyVHJhY2tPcktp
bmQmJiB3aXRoVHJhY2ssIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKIHsKLSAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHdpdGhUcmFjaykpIHsKLSAgICAg
ICAgY29uc3QgU3RyaW5nJiBraW5kID0gV1RGOjpnZXQ8U3RyaW5nPih3aXRoVHJhY2spOworICAg
IGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkgeworICAgICAg
ICBjb25zdCBTdHJpbmcmIGtpbmQgPSBzdGQ6OmdldDxTdHJpbmc+KHdpdGhUcmFjayk7CiAgICAg
ICAgIGlmIChraW5kICE9ICJhdWRpbyIgJiYga2luZCAhPSAidmlkZW8iKQogICAgICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCkBAIC0xOTMsNyArMTkzLDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gUlRDUAogICAgICAgICByZXR1cm4gY29t
cGxldGVBZGRUcmFuc2NlaXZlcihXVEZNb3ZlKHNlbmRlciksIGluaXQsIGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSwga2luZCk7CiAgICAgfQogCi0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2s+
IHRyYWNrID0gV1RGOjpnZXQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+Pih3aXRoVHJhY2spLnJl
bGVhc2VOb25OdWxsKCk7CisgICAgUmVmPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gc3RkOjpn
ZXQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+Pih3aXRoVHJhY2spLnJlbGVhc2VOb25OdWxsKCk7
CiAgICAgY29uc3QgU3RyaW5nJiB0cmFja0lkID0gdHJhY2stPmlkKCk7CiAgICAgY29uc3QgU3Ry
aW5nJiB0cmFja0tpbmQgPSB0cmFjay0+a2luZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6
CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxNZWRpYVN0
cmVhbT4+Jik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVy
Jik7CiAKLSAgICB1c2luZyBBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kID0gVmFyaWFudDxSZWZQ
dHI8TWVkaWFTdHJlYW1UcmFjaz4sIFN0cmluZz47CisgICAgdXNpbmcgQWRkVHJhbnNjZWl2ZXJU
cmFja09yS2luZCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4sIFN0cmlu
Zz47CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2
ZXIoQWRkVHJhbnNjZWl2ZXJUcmFja09yS2luZCYmLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlcklu
aXQmKTsKIAogICAgIC8vIDYuMSBQZWVyLXRvLXBlZXIgZGF0YSBBUEkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAkocmV2aXNp
b24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9j
ZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIHB1YmxpYzoKICAgICBS
ZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYg
b3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0g
ICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKKyAgICAgICAgc3Rk
Ojp2YXJpYW50PEljZUNhbmRpZGF0ZSwgUmVzdWx0PiByZXN1bHQ7CiAKLSAgICAgICAgUmVzdWx0
IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPElj
ZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6IFdURjo6Z2V0PFNEUFByb2Nl
c3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9Ci0gICAgICAgIEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRl
KCkgeyByZXR1cm4gV1RGOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9CisgICAgICAgIFJl
c3VsdCBwYXJzaW5nU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxJY2VDYW5kaWRhdGU+KHJlc3VsdCkgPyBSZXN1bHQ6OlN1Y2Nlc3MgOiBzdGQ6OmdldDxTRFBQ
cm9jZXNzb3I6OlJlc3VsdD4ocmVzdWx0KTsgfQorICAgICAgICBJY2VDYW5kaWRhdGUmIGNhbmRp
ZGF0ZSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PEljZUNhbmRpZGF0ZT4ocmVzdWx0KTsgfQogICAgIH07
CiAgICAgUGFyc2luZ1Jlc3VsdCBwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5k
aWRhdGVMaW5lKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlw
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBlcy5oCShy
ZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjgsMTEgKzIyOCwxMSBAQCBzdHJ1Y3QgSURMRXJyb3IgOiBJRExV
bnN1cHBvcnRlZFR5cGUgeyB9CiBzdHJ1Y3QgSURMRE9NRXhjZXB0aW9uIDogSURMVW5zdXBwb3J0
ZWRUeXBlIHsgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgSURMVW5pb24g
OiBJRExUeXBlPFZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+IHsK
K3N0cnVjdCBJRExVbmlvbiA6IElETFR5cGU8c3RkOjp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBs
ZW1lbnRhdGlvblR5cGUuLi4+PiB7CiAgICAgdXNpbmcgVHlwZUxpc3QgPSBicmlnYW5kOjpsaXN0
PFRzLi4uPjsKIAotICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBjb25zdCBWYXJpYW50PHR5cGVu
YW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+JjsKLSAgICB1c2luZyBOdWxsYWJsZVBhcmFt
ZXRlclR5cGUgPSBjb25zdCBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxl
bWVudGF0aW9uVHlwZS4uLj4+JjsKKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gY29uc3Qgc3Rk
Ojp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+JjsKKyAgICB1c2lu
ZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBjb25zdCBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFu
dDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4mOwogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IElETEJ1ZmZlclNvdXJjZSA6IElETFdyYXBwZXI8VD4geyB9OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9u
IDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQnVmZmVyU291cmNlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBWYXJpYW50VHlwZSA9IFdURjo6
VmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlcj4+OworICAgIHVzaW5nIFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj47CiAKICAgICBCdWZm
ZXJTb3VyY2UoKSB7IH0KICAgICBCdWZmZXJTb3VyY2UoVmFyaWFudFR5cGUmJiB2YXJpYW50KQpA
QCAtNDUsMTQgKzQ1LDE0IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAt
PiBjb25zdCB1aW50OF90KiB7CisgICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1
ZmZlcikgLT4gY29uc3QgdWludDhfdCogewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSk7CiAgICAgICAgIH0sIG1fdmFyaWFudCk7
CiAgICAgfQogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNpemVfdCB7CisgICAgICAgIHJldHVy
biBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJl
dHVybiBidWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlwZXMuaAko
cmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbFRyYWNl
clR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi10eXBlZGVmIFZhcmlhbnQ8Cit0eXBlZGVmIHN0ZDo6dmFyaWFudDwKICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkltYWdlU21vb3RoaW5nUXVhbGl0eSwKICAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OldpbmRpbmdSdWxlLAogICAgIERPTU1hdHJpeEluaXQsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCwxMSArMjcwLDEx
IEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGEKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKKyAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKIAogICAgIFZlY3RvcjxTdHJp
bmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAg
ICBJREJQYXJzZUtleVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0aEVsZW1l
bnRzLCBlcnJvcik7CisgICAgSURCUGFyc2VLZXlQYXRoKHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0
aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQ
YXRoUGFyc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlzRW1wdHko
KSkKQEAgLTI5Nyw4ICsyOTcsOCBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShF
eGVjU3RhCiAKIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZl
Y3RvcjxTdHJpbmc+PihrZXlQYXRoKSkgewotICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0
PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpIHsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6
OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8SURC
S2V5Pj4gcmVzdWx0OwogICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcnJh
eS5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IGFycmF5KSB7CkBAIC0zMTAs
MTcgKzMxMCwxNyBAQCBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpCiAg
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KFdURk1vdmUocmVzdWx0KSk7CiAgICAg
fQogCi0gICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aChleGVjLCB2YWx1ZSwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSk7CisgICAgcmV0dXJu
IGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1
ZSwgc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSk7CiB9CiAKIGJvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2NyaXB0VmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJj
YW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhF
bGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQYXJzZUtl
eVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7
CisgICAgSURCUGFyc2VLZXlQYXRoKHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtleVBhdGhF
bGVtZW50cywgZXJyb3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJv
cjo6Tm9uZSk7CiAKICAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCkBAIC00MDAsNyAr
NDAwLDcgQEAgc3RhdGljIFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQQogICAgICAg
ICByZXR1cm4ga2V5czsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3Is
IGluZm8ua2V5UGF0aCgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtl
eVBhdGgoKSk7CiB9CiAKIHZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEV4ZWNTdGF0ZSYg
ZXhlYywgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBKU1ZhbHVlIHZhbHVlLCBJbmRleEtleSYg
b3V0S2V5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5p
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRVbmlvbi5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNyArMzg1LDcgQEAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydAogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
bmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5k
OjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8
SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2Fu
ZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFudF9zaXpl
PEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUg
Y29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKICAgICB7CkBAIC0zOTYs
NyArMzk2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydAogICAg
ICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVj
bHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwogICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUs
IGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBzdGQ6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0V2ViR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydFdlYkdMLmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2NiArNjYsNjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNWYWx1ZSBjb252ZXJ0VG9KU1Zh
bHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFdlYkdMQW55JiBhbnkpCiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYW55LAotICAg
ICAgICBbXSAoc3RkOjpudWxscHRyX3QpIHsKKyAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAgfSwKLSAg
ICAgICAgW10gKGJvb2wgdmFsdWUpIHsKKyAgICAgICAgW10gKGJvb2wgdmFsdWUpIC0+IEpTVmFs
dWUgewogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIH0sCi0g
ICAgICAgIFtdIChpbnQgdmFsdWUpIHsKKyAgICAgICAgW10gKGludCB2YWx1ZSkgLT4gSlNWYWx1
ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAg
ICAgICBbXSAodW5zaWduZWQgdmFsdWUpIHsKKyAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFtdIChsb25nIGxvbmcgdmFsdWUpIHsKKyAgICAgICAgW10gKGxvbmcgbG9u
ZyB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUp
OwogICAgICAgICB9LAotICAgICAgICBbXSAoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgW10gKGZs
b2F0IHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1
ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeworICAg
ICAgICBbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwogICAgICAgICB9LAotICAg
ICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYgdmFsdWVzKSB7CisgICAgICAgIFsmXSAoY29u
c3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1
ZXMpCiAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29sZWFuKHZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCAmZ2xvYmFsT2JqZWN0LCBs
aXN0KTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5
PiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJy
YXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPEludDMyQXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQz
MkFycmF5PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0
IFJlZlB0cjxVaW50OEFycmF5PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0s
Ci0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAg
ICAgWyZdIChjb25zdCBSZWZQdHI8VWludDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAg
ICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgp
KTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xCdWZmZXI+JiBi
dWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xCdWZmZXI+JiBidWZmZXIp
IC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTEZyYW1lYnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+JiBidWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFByb2dyYW0+JiBwcm9ncmFtKSB7Cisg
ICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4mIHByb2dyYW0pIC0+IEpTVmFs
dWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBwcm9n
cmFtLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+JiBidWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9LAotICAg
ICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFRleHR1cmU+JiB0ZXh0dXJlKSB7CisgICAgICAg
IFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVGV4dHVyZT4mIHRleHR1cmUpIC0+IEpTVmFsdWUgewog
ICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB0ZXh0dXJlLmdl
dCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAg
fQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgICwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdD4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3Qg
UmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3Q+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsK
ICAgICAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTcyNTEsNyArNzI1MSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxUcmFjZXJQYXJhbWV0ZXIo
KQogICAgIG15ICgkbmFtZSwgJHR5cGUsICRpbmRlbnQpID0gQF87CiAKICAgICBpZiAoJHR5cGUt
PmlzVW5pb24pIHsKLSAgICAgICAgcmV0dXJuICRpbmRlbnQgLiAiICAgIFdURjo6dmlzaXQoWyZd
IChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCAi
IC4gJG5hbWUgLiAiKTsiOworICAgICAgICByZXR1cm4gJGluZGVudCAuICIgICAgc3RkOjp2aXNp
dChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1ZSk7
IH0sICIgLiAkbmFtZSAuICIpOyI7CiAgICAgfQogCiAgICAgcmV0dXJuICRpbmRlbnQgLiAiICAg
IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCgiIC4gJG5hbWUgLiAiKTsiOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0uaAkocmV2aXNpb24gMjIwODEyKQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCw4IEBAIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAvLyBEYXRhIGlz
IG11dGFibGUsIHNvIGFzeW5jIG9wZXJhdGlvbnMgc2hvdWxkIGNvcHkgaXQgZmlyc3QuCiB1c2lu
ZyBDcnlwdG9PcGVyYXRpb25EYXRhID0gc3RkOjpwYWlyPGNvbnN0IHVpbnQ4X3QqLCBzaXplX3Q+
OwogCi11c2luZyBLZXlEYXRhID0gVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEpzb25XZWJLZXk+
OwotdXNpbmcgS2V5T3JLZXlQYWlyID0gVmFyaWFudDxSZWZQdHI8Q3J5cHRvS2V5PiwgQ3J5cHRv
S2V5UGFpcj47Cit1c2luZyBLZXlEYXRhID0gc3RkOjp2YXJpYW50PFZlY3Rvcjx1aW50OF90Piwg
SnNvbldlYktleT47Cit1c2luZyBLZXlPcktleVBhaXIgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPENy
eXB0b0tleT4sIENyeXB0b0tleVBhaXI+OwogCiBjbGFzcyBDcnlwdG9BbGdvcml0aG0gOiBwdWJs
aWMgUmVmQ291bnRlZDxDcnlwdG9BbGdvcml0aG0+IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwcml2YXRl
OgogY2xhc3MgQ3J5cHRvS2V5IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENyeXB0b0tl
eT4gewogcHVibGljOgogICAgIHVzaW5nIFR5cGUgPSBDcnlwdG9LZXlUeXBlOwotICAgIHVzaW5n
IEFsZ29yaXRobVZhcmlhbnQgPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRvQWVz
S2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29yaXRo
bSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+Owor
ICAgIHVzaW5nIEFsZ29yaXRobVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8Q3J5cHRvS2V5QWxnb3Jp
dGhtLCBDcnlwdG9BZXNLZXlBbGdvcml0aG0sIENyeXB0b0VjS2V5QWxnb3JpdGhtLCBDcnlwdG9I
bWFjS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0sIENyeXB0b1JzYUtl
eUFsZ29yaXRobT47CiAKICAgICBDcnlwdG9LZXkoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciwg
VHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApOwogICAgIHZpcnR1
YWwgfkNyeXB0b0tleSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5j
cHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlw
dG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNCArOTYsMTQgQEAgc3RhdGljIEV4Y2VwdGlv
bk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgeworICAgIGlmIChz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKICAg
ICAgICAgYXV0byBuZXdQYXJhbXMgPSBTdHJvbmc8SlNPYmplY3Q+KHZtLCBjb25zdHJ1Y3RFbXB0
eU9iamVjdCgmc3RhdGUpKTsKLSAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZygmc3RhdGUsIFdURjo6Z2V0
PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKKyAgICAgICAgbmV3UGFyYW1zLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZygm
c3RhdGUsIHN0ZDo6Z2V0PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBub3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0YXRl
LCBuZXdQYXJhbXMsIG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgYXV0byYgdmFsdWUgPSBXVEY6
OmdldDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4oYWxnb3JpdGhtSWRlbnRpZmllcik7Cisg
ICAgYXV0byYgdmFsdWUgPSBzdGQ6OmdldDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4oYWxn
b3JpdGhtSWRlbnRpZmllcik7CiAKICAgICBhdXRvIHBhcmFtcyA9IGNvbnZlcnREaWN0aW9uYXJ5
PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KHN0YXRlLCB2YWx1ZS5nZXQoKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25FcnJv
ciB9KTsKQEAgLTg2MywxMiArODYzLDEyIEBAIHZvaWQgU3VidGxlQ3J5cHRvOjpleHBvcnRLZXko
S2V5Rm9ybWF0IGYKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6U3BraToK
ICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6CiAgICAgICAgIGNh
c2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlJhdzogewotICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiByYXdLZXkgPSBXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGtleSk7CisgICAgICAg
ICAgICBWZWN0b3I8dWludDhfdD4mIHJhd0tleSA9IHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
a2V5KTsKICAgICAgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1vdmUo
Y2FwdHVyZWRQcm9taXNlKSwgcmF3S2V5LmRhdGEoKSwgcmF3S2V5LnNpemUoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZv
cm1hdDo6SndrOgotICAgICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNvbHZlPElETERpY3Rp
b25hcnk8SnNvbldlYktleT4+KFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOwor
ICAgICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNvbHZlPElETERpY3Rpb25hcnk8SnNvbldl
YktleT4+KFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtOTMy
LDExICs5MzIsMTEgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OndyYXBLZXkoSlNDOjpFeGVjU3RhdAog
ICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBjYXNl
IFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlw
dG86OktleUZvcm1hdDo6UmF3OgotICAgICAgICAgICAgYnl0ZXMgPSBXVEY6OmdldDxWZWN0b3I8
dWludDhfdD4+KGtleSk7CisgICAgICAgICAgICBieXRlcyA9IHN0ZDo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oa2V5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0
bzo6S2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0aW5nIHRv
IEpTIGp1c3QgdG8gSlNPTi1TdHJpbmdpZnkgc2VlbXMgaW5lZmZpY2llbnQuIFdlIHNob3VsZCBm
aW5kIGEgd2F5IHRvIGdvIGRpcmVjdGx5IGZyb20gdGhlIHN0cnVjdCB0byBKU09OLgotICAgICAg
ICAgICAgYXV0byBqd2sgPSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJvbWlz
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCkpLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKKyAgICAgICAgICAgIGF1
dG8gandrID0gdG9KUzxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+PigqKHByb21pc2UtPmdsb2Jh
bE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpLCAqKHByb21pc2UtPmdsb2JhbE9iamVjdCgpKSwgV1RG
TW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAgICAgICAgICBTdHJpbmcgandr
U3RyaW5nID0gSlNPTlN0cmluZ2lmeShwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpLCBqd2ssIDApOwogICAgICAgICAgICAgQ1N0cmluZyBqd2tVdGY4U3RyaW5nID0gandrU3Ry
aW5nLnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgICAgICBieXRlcy5hcHBlbmQoandr
VXRmOFN0cmluZy5kYXRhKCksIGp3a1V0ZjhTdHJpbmcubGVuZ3RoKCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw4
IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEtleUZvcm1hdCA9IENyeXB0b0tleUZvcm1hdDsKIAot
ICAgIHVzaW5nIEFsZ29yaXRobUlkZW50aWZpZXIgPSBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+LCBTdHJpbmc+OwotICAgIHVzaW5nIEtleURhdGFWYXJpYW50ID0gVmFyaWFudDxS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIEpz
b25XZWJLZXk+OworICAgIHVzaW5nIEFsZ29yaXRobUlkZW50aWZpZXIgPSBzdGQ6OnZhcmlhbnQ8
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz47CisgICAgdXNpbmcgS2V5RGF0YVZh
cmlhbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+LCBKc29uV2ViS2V5PjsKIAogICAgIHZvaWQgZW5jcnlwdChKU0M6
OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291
cmNlJiYgZGF0YSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAgICAgdm9pZCBkZWNyeXB0KEpT
Qzo6RXhlY1N0YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJT
b3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19DQkMuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDcgKzExNiw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KEMKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKICAg
ICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NCQzo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBv
cnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykp
OworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAJKHJldmlzaW9u
IDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DRkIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlB
RVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9y
bWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6
OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNrQWxn
Q2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7
CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRL
ZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
c3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3Zl
KGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1B
RVNfQ1RSLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
VFI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAgIHN3
aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRl
cnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tl
eUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNpemVf
dCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTEyOCw3ICsxMjgsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmltcG9ydEtleShDCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3Zl
KGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBv
cnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19HQ00uY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0
LDcgKzE1NCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6aW1wb3J0S2V5KEMKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKICAg
ICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3QgU3Ry
aW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0dDTTo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBv
cnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykp
OworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCShyZXZpc2lvbiAy
MjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfS1cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMCArOTAsMTAgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfS1c6OmltcG9ydEtleShDcgogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+
IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0
OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRl
cnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6Omlt
cG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgW10oc2l6ZV90IGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgeworICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgW10oc2l6ZV90IGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewogICAgICAgICAgICAgc3dpdGNoIChsZW5n
dGgpIHsKICAgICAgICAgICAgIGNhc2UgQ3J5cHRvS2V5QUVTOjpzX2xlbmd0aDEyODoKICAgICAg
ICAgICAgICAgICByZXR1cm4gYWxnLmlzTnVsbCgpIHx8IGFsZyA9PSBBTEcxMjg7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1FQ0RILmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNESC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw3ICsxMjMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShDcnlwCiAg
ICAgUmVmUHRyPENyeXB0b0tleUVDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0g
V1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkg
a2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgYm9v
bCBpc1VzYWdlc0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKCFrZXkuZC5pc051bGwoKSkg
ewpAQCAtMTUwLDIxICsxNTAsMjEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1FQ0RIOjppbXBvcnRL
ZXkoQ3J5cAogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVD
OjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1
cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJhdyhlY1Bh
cmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3Rk
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6U3BraToKICAgICAgICAgaWYg
KHVzYWdlcykgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eUVDOjppbXBvcnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFt
ZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRTcGtp
KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92
ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODoKICAgICAg
ICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXkpICYmICh1
c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpICYmICh1c2FnZXMgXiAoQ3J5cHRvS2V5
VXNhZ2VEZXJpdmVLZXkgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpKSkgewogICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1Bh
cmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RG
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0ZXJzLmlkZW50
aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGlmICghcmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwCShyZXZpc2lv
biAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1FQ0RTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgIFJlZlB0cjxDcnlwdG9LZXlFQz4g
cmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6
Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8
SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNO
dWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwo
KSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTEyNCwyMSArMTI0LDIxIEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtleShDcnkKICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVycy5pZGVu
dGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8
dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1l
dGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tl
eVVzYWdlVmVyaWZ5KSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJy
b3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleUVDOjppbXBvcnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRl
cnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwg
ZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBv
cnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODoK
ICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgewog
ICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQ
a2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdU
Rk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0
ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAko
cmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1IS0RGOjppbXBvcnRLZXkoQ3J5cAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2Vz
KSk7CisgICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRp
ZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7
CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtSEtERjo6Z2V0S2V5TGVu
Z3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5j
cHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkoQ3J5cAogICAgIFJlZlB0cjxD
cnlwdG9LZXlITUFDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENy
eXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlITUFDOjppbXBv
cnRSYXcoaG1hY1BhcmFtZXRlcnMubGVuZ3RoLnZhbHVlX29yKDApLCBobWFjUGFyYW1ldGVycy5o
YXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwg
ZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6Omlt
cG9ydFJhdyhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJz
Lmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsK
QEAgLTEzNSw3ICsxMzUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShD
cnlwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07
Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6OmltcG9ydEp3ayhobWFjUGFyYW1ldGVy
cy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZN
b3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RG
TW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6
OmltcG9ydEp3ayhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0
ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwg
ZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUEJLREYyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCShy
ZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1QQktERjIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRLZXkoQ3IKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6Y3JlYXRlKHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIHVzYWdl
cykpOworICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6Y3JlYXRlKHBhcmFtZXRlcnMtPmlkZW50
aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIHVzYWdlcykp
OwogfQogCiBFeGNlcHRpb25PcjxzaXplX3Q+IENyeXB0b0FsZ29yaXRobVBCS0RGMjo6Z2V0S2V5
TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3Yx
XzUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1SU0FFU19QS0NTMV92MV81OjppbQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3Vs
dDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6
IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+
KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25X
ZWJLZXk+KGRhdGEpKTsKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0KSkgfHwgKGtleS5kLmlzTnVsbCgpICYm
ICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZUVuY3J5cHQpKSkpIHsKICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNSw3
ICsxMjUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltCiAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtp
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShXVEY6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBz
dGQ6Om51bGxvcHQsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4
dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1SU0FFU19QS0NTMV92MV81OjppbQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
U3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
c3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBv
cnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1vdmUoc3Rk
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
UlNBU1NBX1BLQ1MxX3YxXzU6OmkKICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAg
ICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0g
ICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRh
KSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5
PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAo
dXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2Fn
ZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTU5LDcgKzE1OSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJz
Lmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpQa2NzODogewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzU6OmkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
cnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBk
ZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtUlNBX09BRVAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAkocmV2aXNpb24gMjIwODEyKQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09B
RVAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KAogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3Vs
dDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6
IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+
KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25X
ZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBib29sIGlzVXNhZ2VzQWxsb3dlZCA9IGZhbHNlOwog
ICAgICAgICBpZiAoIWtleS5kLmlzTnVsbCgpKSB7CkBAIC0xNzMsNyArMTczLDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRp
ZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJz
YVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xODIsNyArMTgyLDcgQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KAogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4K
LSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVy
LCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcAkocmV2aXNpb24g
MjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtUlNBX1BTUy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+
IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0
OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25X
ZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlz
TnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxs
KCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7CiAgICAgICAgICAgICBl
eGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRp
ZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJz
YVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xNTIsNyArMTUyLDcgQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1SU0FfUFNTOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4K
LSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVy
LCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUVjZHNhUGFyYW1zLmgJKHJldmlz
aW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobUVjZHNhUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFu
dDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFy
aWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAgICBDbGFzcyBwYXJhbWV0
ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDbGFzczo6RWNkc2FQYXJhbXM7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhrZGZQ
YXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9D
cnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhrZGZQYXJhbXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBD
cnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2gg
YW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJ
ZGVudGlmaWVyOwogICAgIEJ1ZmZlclNvdXJjZSBzYWx0OwogICAgIEJ1ZmZlclNvdXJjZSBpbmZv
OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
SG1hY0tleVBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaAkocmV2aXNpb24gMjIwODEyKQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tl
eVBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMgZmluYWwgOiBwdWJsaWMg
Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAgICAgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGxl
bmd0aDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtUGJrZGYyUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFyYW1zLmgJKHJldmlzaW9uIDIyMDgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBi
a2RmMlBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICBCdWZmZXJTb3VyY2Ugc2FsdDsKICAgICB1bnNpZ25lZCBsb25nIGl0ZXJhdGlvbnM7CiAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAg
VmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0
ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAg
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAgICBjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHNhbHRWZWN0b3IoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
UnNhSGFzaGVkSW1wb3J0UGFyYW1zLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFt
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIENyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcyBmaW5hbCA6IHB1Ymxp
YyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29u
c2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIENsYXNzIHBhcmFtZXRlcnNDbGFz
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENsYXNzOjpSc2FIYXNoZWRJbXBvcnRQYXJhbXM7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJz
YUhhc2hlZEtleUdlblBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtleUdlblBhcmFtcy5oCShyZXZp
c2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9B
bGdvcml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1Sc2FIYXNo
ZWRLZXlHZW5QYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUnNhS2V5R2VuUGFy
YW1zIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBo
YXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBT
dHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+
LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRp
ZmllcjsKIAogICAgIENsYXNzIHBhcmFtZXRlcnNDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IENsYXNzOjpSc2FIYXNoZWRLZXlHZW5QYXJhbXM7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUw
LDcgKzI1MCw3IEBAIHN0YXRpYyBDU1NQcm9wZXJ0eUluZm8gcGFyc2VKYXZhU2NyaXB0Q1MKIAog
fQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBDU1NTdHlsZURlY2xh
cmF0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCitzdGQ6
Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IENTU1N0eWxlRGVjbGFyYXRp
b246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKICAgICBh
dXRvIHByb3BlcnR5SW5mbyA9IHBhcnNlSmF2YVNjcmlwdENTU1Byb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUpOwogICAgIGlmICghcHJvcGVydHlJbmZvLnByb3BlcnR5SUQpCkBAIC0yNTksMTcgKzI1
OSwxNyBAQCBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBDCiAgICAgYXV0
byB2YWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWVJbnRlcm5hbChwcm9wZXJ0eUluZm8ucHJvcGVy
dHlJRCk7CiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMg
YSBzaG9ydGhhbmQgcHJvcGVydHkgKHN1Y2ggYXMgInBhZGRpbmciKSwgaXQgY2FuIG9ubHkgYmUg
YWNjZXNzZWQgdXNpbmcgZ2V0UHJvcGVydHlWYWx1ZS4KLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8
U3RyaW5nLCBkb3VibGU+IHsgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5w
cm9wZXJ0eUlEKSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91Ymxl
PiB7IGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkgfTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKHByb3BlcnR5SW5mby5oYWRQaXhlbE9yUG9zUHJlZml4ICYm
IGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKSB7CiAgICAgICAgIC8vIENhbGwgdGhpcyB2
ZXJzaW9uIG9mIHRoZSBnZXR0ZXIgc28gdGhhdCwgZS5nLiwgcGl4ZWxUb3AgcmV0dXJucyB0b3Ag
YXMgYSBudW1iZXIKICAgICAgICAgLy8gaW4gcGl4ZWwgdW5pdHMgYW5kIHBvc1RvcCBzaG91bGQg
ZG9lcyB0aGUgc2FtZSBfaWZfIHRoaXMgaXMgYSBwb3NpdGlvbmVkIGVsZW1lbnQuCiAgICAgICAg
IC8vIEZJWE1FOiBJZiBub3QgYSBwb3NpdGlvbmVkIGVsZW1lbnQsIE1TSUUgZG9jdW1lbnRhdGlv
biBzYXlzIHBvc1RvcCBzaG91bGQgcmV0dXJuIDA7IHRoaXMgcnVsZSBpcyBub3QgaW1wbGVtZW50
ZWQuCi0gICAgICAgIHJldHVybiBWYXJpYW50PFN0cmluZywgZG91YmxlPiB7IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCkgfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5mbG9hdFZhbHVlKENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpIH07CiAgICAgfQogCi0gICAgcmV0dXJuIFZhcmlhbnQ8U3RyaW5nLCBk
b3VibGU+IHsgdmFsdWUtPmNzc1RleHQoKSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBkb3VibGU+IHsgdmFsdWUtPmNzc1RleHQoKSB9OwogfQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIFN0cmluZyB2YWx1ZSwgYm9vbCYgcHJvcGVydHlTdXBwb3J0ZWQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDIyMDgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVl
dCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIC8v
IEJpbmRpbmdzIHN1cHBvcnQuCi0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgZG91
YmxlPj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUsIFN0cmluZyB2YWx1ZSwgYm9vbCYgcHJvcGVydHlTdXBwb3J0ZWQpOwogICAgIFZl
Y3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9ET01NYXRyaXguaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0RPTU1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRE9NTWF0cml4IDogcHVibGljIERPTU1hdHJpeFJlYWRP
bmx5IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeD4+IGNy
ZWF0ZShzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYgaW5p
dCkKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeD4+IGNyZWF0ZShzdGQ6Om9w
dGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0KQogICAg
IHsKICAgICAgICAgYXV0byBtYXRyaXggPSBhZG9wdFJlZigqbmV3IERPTU1hdHJpeCk7CiAgICAg
ICAgIGlmICghaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25s
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5o
CShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9u
bHkuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBzdHJ1Y3QgRE9NUG9pbnRJbml0
OwogY2xhc3MgRE9NTWF0cml4UmVhZE9ubHkgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJs
aWMgUmVmQ291bnRlZDxET01NYXRyaXhSZWFkT25seT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4UmVh
ZE9ubHk+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJs
ZT4+PiYmIGluaXQpCisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXhSZWFkT25s
eT4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3Vi
bGU+Pj4mJiBpbml0KQogICAgIHsKICAgICAgICAgYXV0byBtYXRyaXggPSBhZG9wdFJlZigqbmV3
IERPTU1hdHJpeFJlYWRPbmx5KTsKICAgICAgICAgaWYgKCFpbml0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0ZvbnRGYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0Zv
bnRGYWNlLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgU3Ry
aW5nIGZlYXR1cmVTZXR0aW5nczsKICAgICB9OwogICAgIAotICAgIHVzaW5nIFNvdXJjZSA9IFZh
cmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4+OworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3Pj47CiAg
ICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxGb250RmFjZT4+IGNyZWF0ZShEb2N1bWVudCYsIGNv
bnN0IFN0cmluZyYgZmFtaWx5LCBTb3VyY2UmJiwgY29uc3QgRGVzY3JpcHRvcnMmKTsKICAgICBz
dGF0aWMgUmVmPEZvbnRGYWNlPiBjcmVhdGUoQ1NTRm9udEZhY2UmKTsKICAgICB2aXJ0dWFsIH5G
b250RmFjZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIyMDgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyAr
MjgyLDcgQEAgZW51bSBjbGFzcyBDdXN0b21FbGVtZW50TmFtZVZhbGlkYXRpb25TdAogICAgIENv
bmZsaWN0c1dpdGhTdGFuZGFyZEVsZW1lbnROYW1lCiB9OwogCi11c2luZyBSZW5kZXJpbmdDb250
ZXh0ID0gVmFyaWFudDwKK3VzaW5nIFJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnZhcmlhbnQ8CiAj
aWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+LAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAkocmV2aXNpb24gMjIwODEy
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBEcmFnZ2VkQ29udGVudERhdGEg
ewogICAgICAgICBSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZTsKICAgICB9OwotICAgIHVzaW5nIERh
dGEgPSBWYXJpYW50PElzQWN0aXZlTWF0Y2hEYXRhLCBEZXNjcmlwdGlvbkRhdGEsIERpY3RhdGlv
bkRhdGEsIERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEsIERyYWdnZWRDb250ZW50RGF0YT47Cisg
ICAgdXNpbmcgRGF0YSA9IHN0ZDo6dmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVzY3JpcHRp
b25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBEcmFnZ2Vk
Q29udGVudERhdGE+OwogCiAgICAgRG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBpc0FjdGl2ZU1hdGNoKTsKICAgICBEb2N1bWVudE1h
cmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0gU3RyaW5nKCkpOwpAQCAtMTk4LDEyICsxOTgs
MTIgQEAgaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cwogCiBpbmxpbmUg
Y29uc3QgU3RyaW5nJiBEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRpb24oKSBjb25zdAogewotICAg
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKSA/IFdURjo6Z2V0
PFN0cmluZz4obV9kYXRhKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8gc3RkOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDog
ZW1wdHlTdHJpbmcoKTsKIH0KIAogaW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXI6OmlzQWN0aXZl
TWF0Y2goKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+
KG1fZGF0YSkgJiYgV1RGOjpnZXQ8Ym9vbD4obV9kYXRhKTsKKyAgICByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxib29sPihtX2RhdGEpICYmIHN0ZDo6Z2V0PGJvb2w+KG1fZGF0YSk7CiB9
CiAKIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBY3RpdmVNYXRjaChib29sIGlzQWN0
aXZlTWF0Y2gpCkBAIC0yMjcsMjIgKzIyNywyMiBAQCBpbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRv
Y3VtZW50TWFya2VyKE1hCiAKIGlubGluZSBjb25zdCBWZWN0b3I8U3RyaW5nPiYgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PERpY3Rh
dGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOworICAgIHJldHVybiBz
dGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLmFsdGVybmF0aXZlczsK
IH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFsdGVybmF0aXZlKGNvbnN0IFN0
cmluZyYgYWx0ZXJuYXRpdmUsIHNpemVfdCBpbmRleCkKIHsKLSAgICBXVEY6OmdldDxEaWN0YXRp
b25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLmFsdGVybmF0aXZlc1tpbmRleF0gPSBhbHRlcm5h
dGl2ZTsKKyAgICBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLmFs
dGVybmF0aXZlc1tpbmRleF0gPSBhbHRlcm5hdGl2ZTsKIH0KIAogaW5saW5lIGlkIERvY3VtZW50
TWFya2VyOjptZXRhZGF0YSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PERpY3RhdGlv
bkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEuZ2V0KCk7CisgICAgcmV0dXJuIHN0
ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEuZ2V0KCk7
CiB9CiAKIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRNZXRhZGF0YShpZCBtZXRhZGF0
YSkKIHsKLSAgICBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLm1l
dGFkYXRhID0gbWV0YWRhdGE7CisgICAgc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0
YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDcgKzMwOSw3IEBAIHN0YXRpYyBib29sIHNob3Vs
ZEluc2VydEFzU2VwYXJhdGVNYXJrZXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAg
ICBpZiAobmV3TWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQp
IHsKLSAgICAgICAgaWYgKGF1dG8gdGFyZ2V0Tm9kZSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2Vy
OjpEcmFnZ2VkQ29udGVudERhdGE+KG5ld01hcmtlci5kYXRhKCkpLnRhcmdldE5vZGUpCisgICAg
ICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dl
ZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXROb2RlKQogICAgICAgICAgICAg
cmV0dXJuIHRhcmdldE5vZGUtPnJlbmRlcmVyKCkgJiYgdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKS0+
aXNSZW5kZXJSZXBsYWNlZCgpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgRXZlbnRUYXJnZXQ6
OmFkZEV2ZW50TGlzdGVuZXJGb3JCaW4KICAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5
cGUsIGxpc3RlbmVyLnJlbGVhc2VOb25OdWxsKCksIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAg
V1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZh
cmlhbnQpOwogfQogCiB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmlu
ZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVy
PiYmIGxpc3RlbmVyLCBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4mJiB2YXJpYW50KQpAQCAtMTA0
LDcgKzEwNCw3IEBAIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3IKICAg
ICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsICpsaXN0ZW5lciwgY2FwdHVyZSk7
CiAgICAgfSk7CiAKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6
dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiB9CiAKIGJvb2wgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIm
IGxpc3RlbmVyLCBjb25zdCBMaXN0ZW5lck9wdGlvbnMmIG9wdGlvbnMpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDkgKzkxLDkgQEAgcHVibGljOgog
ICAgICAgICBib29sIG9uY2U7CiAgICAgfTsKIAotICAgIHVzaW5nIEFkZEV2ZW50TGlzdGVuZXJP
cHRpb25zT3JCb29sZWFuID0gVmFyaWFudDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucywgYm9vbD47
CisgICAgdXNpbmcgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBzdGQ6OnZhcmlh
bnQ8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsIGJvb2w+OwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRU
eXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNPckJv
b2xlYW4mJik7Ci0gICAgdXNpbmcgTGlzdGVuZXJPcHRpb25zT3JCb29sZWFuID0gVmFyaWFudDxM
aXN0ZW5lck9wdGlvbnMsIGJvb2w+OworICAgIHVzaW5nIExpc3RlbmVyT3B0aW9uc09yQm9vbGVh
biA9IHN0ZDo6dmFyaWFudDxMaXN0ZW5lck9wdGlvbnMsIGJvb2w+OwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiwgTGlzdGVuZXJPcHRpb25zT3JC
b29sZWFuJiYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPGJvb2w+IGRpc3BhdGNo
RXZlbnRGb3JCaW5kaW5ncyhFdmVudCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBCbG9iOwogCi11c2luZyBNZXNzYWdlRXZlbnRTb3VyY2UgPSBWYXJpYW50PFJlZlB0
cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+PjsKK3VzaW5nIE1lc3NhZ2VFdmVudFNv
dXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPE1lc3NhZ2VQb3J0
Pj47CiAKIGNsYXNzIE1lc3NhZ2VFdmVudCBmaW5hbCA6IHB1YmxpYyBFdmVudCB7CiBwdWJsaWM6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgU1ZHUXVhbGlm
aWVkTmFtZTsKIGNsYXNzIFNoYWRvd1Jvb3Q7CiBjbGFzcyBUb3VjaEV2ZW50OwogCi11c2luZyBO
b2RlT3JTdHJpbmcgPSBWYXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKK3VzaW5nIE5vZGVP
clN0cmluZyA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz47CiAKIGNsYXNzIE5v
ZGVSYXJlRGF0YUJhc2UgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAyMjA4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjp0aW1lckZpcgogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lv
bjogewogICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgU3RyaW5nIHJlcGxhY2VtZW50U3RyaW5nID0gV1RGOjpnZXQ8QXV0b2Nv
cnJlY3Rpb25SZXBsYWNlbWVudD4obV9kZXRhaWxzKTsKKyAgICAgICAgU3RyaW5nIHJlcGxhY2Vt
ZW50U3RyaW5nID0gc3RkOjpnZXQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudD4obV9kZXRhaWxz
KTsKICAgICAgICAgaWYgKHJlcGxhY2VtZW50U3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKQEAgLTMyNiw3ICszMjYsNyBAQCB2
b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyCiAjaWYgVVNFKERJQ1RBVElP
Tl9BTFRFUk5BVElWRVMpCiAgICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IFdU
Rjo6Z2V0PEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4obV9kZXRhaWxzKTsKKyAgICAgICAg
dWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IHN0ZDo6Z2V0PEFsdGVybmF0aXZlRGljdGF0aW9u
Q29udGV4dD4obV9kZXRhaWxzKTsKICAgICAgICAgaWYgKCFkaWN0YXRpb25Db250ZXh0KQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKQEAgLTU5Miw5ICs1
OTIsOSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUCiAgICAgICAg
IHN0YXJ0QWx0ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9u
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0
ZXJuYXRpdmVzOiB7Ci0gICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpCisgICAgICAgIGlmICghc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2Vy
LmRhdGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIG1hcmtl
ckRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRh
dGEoKSk7CisgICAgICAgIGF1dG8mIG1hcmtlckRhdGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSk7CiAgICAgICAgIGlmIChjdXJyZW50V29y
ZCAhPSBtYXJrZXJEYXRhLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSA9IHdvcmRSYW5nZTsKQEAgLTY0Miw5ICs2
NDIsOSBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpCiB2b2lkIEFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1h
cmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQogewogI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSk7CisgICAgQVNTRVJUKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5k
YXRhKCkpKTsKICAgICBpZiAoYXV0byogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
Ci0gICAgICAgIGNsaWVudC0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0PERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKKyAg
ICAgICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMoc3RkOjpnZXQ8RG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0obWFya2VyKTsKICNlbmRpZgpAQCAtNjU1LDcgKzY1NSw3IEBAIFZl
Y3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIKICNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKICAgICBBU1NFUlQobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKICAgICBpZiAoYXV0byogY2xpZW50ID0gYWx0ZXJu
YXRpdmVUZXh0Q2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQtPmRpY3RhdGlvbkFsdGVy
bmF0aXZlcyhXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRh
dGEoKSkuY29udGV4dCk7CisgICAgICAgIHJldHVybiBjbGllbnQtPmRpY3RhdGlvbkFsdGVybmF0
aXZlcyhzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEo
KSkuY29udGV4dCk7CiAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShtYXJrZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTEsNyArMTExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0FjdGl2ZTsK
ICAgICAgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSB0eXBlOwogICAgICAgICBTdHJpbmcgb3JpZ2lu
YWxUZXh0OwotICAgICAgICBWYXJpYW50PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVy
bmF0aXZlRGljdGF0aW9uQ29udGV4dD4gZGV0YWlsczsKKyAgICAgICAgc3RkOjp2YXJpYW50PEF1
dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4gZGV0
YWlsczsKICAgICB9OwogCiAgICAgU3RyaW5nIGRpc21pc3NTb29uKFJlYXNvbkZvckRpc21pc3Np
bmdBbHRlcm5hdGl2ZVRleHQpOwpAQCAtMTM2LDcgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2lzRGlzbWlzc2VkQnlFZGl0aW5nOwogICAgIEFsdGVybmF0aXZlVGV4dFR5cGUgbV90eXBl
OwogICAgIFN0cmluZyBtX29yaWdpbmFsVGV4dDsKLSAgICBWYXJpYW50PEF1dG9jb3JyZWN0aW9u
UmVwbGFjZW1lbnQsIEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4gbV9kZXRhaWxzOworICAg
IHN0ZDo6dmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3Rh
dGlvbkNvbnRleHQ+IG1fZGV0YWlsczsKIAogICAgIFN0cmluZyBtX29yaWdpbmFsU3RyaW5nRm9y
TGFzdERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKICAgICBQb3NpdGlvbiBtX3Bvc2l0aW9uRm9yTGFz
dERlbGV0ZWRBdXRvY29ycmVjdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxv
Yi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCShyZXZpc2lv
biAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBCbG9iOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotdXNpbmcgQmxvYlBhcnRWYXJpYW50ID0gVmFy
aWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
cj4sIFJlZlB0cjxCbG9iPiwgU3RyaW5nPjsKK3VzaW5nIEJsb2JQYXJ0VmFyaWFudCA9IHN0ZDo6
dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlcj4sIFJlZlB0cjxCbG9iPiwgU3RyaW5nPjsKIAogY2xhc3MgQmxvYiA6IHB1YmxpYyBTY3Jp
cHRXcmFwcGFibGUsIHB1YmxpYyBVUkxSZWdpc3RyYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8Qmxv
Yj4gewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShy
ZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpmaXJl
RXZlbnQoY29uc3QgQXRvbWljUwogICAgIGRpc3BhdGNoRXZlbnQoUHJvZ3Jlc3NFdmVudDo6Y3Jl
YXRlKHR5cGUsIHRydWUsIG1fbG9hZGVyID8gbV9sb2FkZXItPmJ5dGVzTG9hZGVkKCkgOiAwLCBt
X2xvYWRlciA/IG1fbG9hZGVyLT50b3RhbEJ5dGVzKCkgOiAwKSk7CiB9CiAKLXN0ZDo6b3B0aW9u
YWw8VmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+IEZpbGVSZWFkZXI6
OnJlc3VsdCgpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyPj4+IEZpbGVSZWFkZXI6OnJlc3VsdCgpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX2xvYWRlciB8fCBtX2Vycm9yKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHJldmlzaW9uIDIyMDgxMikKKysr
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02
OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlOyB9CiAgICAgUmVmUHRyPEZpbGVFcnJvcj4gZXJyb3IoKSB7IHJldHVy
biBtX2Vycm9yOyB9CiAgICAgRmlsZVJlYWRlckxvYWRlcjo6UmVhZFR5cGUgcmVhZFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3JlYWRUeXBlOyB9Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0
cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gcmVzdWx0KCkgY29uc3Q7CisgICAgc3Rk
OjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+
PiByZXN1bHQoKSBjb25zdDsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ6OnJlZjsKICAgICB1c2lu
ZyBSZWZDb3VudGVkOjpkZXJlZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENv
bGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENv
bGxlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbGxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMjggKzQzLDI4IEBAIGlu
bGluZSBIVE1MQWxsQ29sbGVjdGlvbjo6SFRNTEFsbENvbGxlY3QKIH0KIAogLy8gaHR0cHM6Ly9o
dG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNkb20taHRt
bGFsbGNvbGxlY3Rpb24taXRlbQotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxIVE1MQ29s
bGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZE9ySW5k
ZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0Citz
dGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8
RWxlbWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBjb25zdAogewogICAgIGlmIChuYW1lT3JJ
bmRleC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChh
dXRvIGluZGV4ID0gSlNDOjpwYXJzZUluZGV4KCpuYW1lT3JJbmRleC5pbXBsKCkpKQotICAgICAg
ICByZXR1cm4gVmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+
IHsgUmVmUHRyPEVsZW1lbnQ+IHsgaXRlbShpbmRleC52YWx1ZSgpKSB9IH07CisgICAgICAgIHJl
dHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+
PiB7IFJlZlB0cjxFbGVtZW50PiB7IGl0ZW0oaW5kZXgudmFsdWUoKSkgfSB9OwogCiAgICAgcmV0
dXJuIG5hbWVkSXRlbU9ySXRlbXMobmFtZU9ySW5kZXgpOwogfQogCiAvLyBodHRwczovL2h0bWwu
c3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI2NvbmNlcHQtZ2V0
LWFsbC1uYW1lZAotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4s
IFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50
PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxBbGxDb2xsZWN0
aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsK
ICAgICBhdXRvIG5hbWVkSXRlbXMgPSB0aGlzLT5uYW1lZEl0ZW1zKG5hbWUpOwogCiAgICAgaWYg
KG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAg
IGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsg
V1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50
PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4geyBkb3duY2FzdDxEb2N1bWVudD4ob3duZXJOb2RlKCkpLmFsbEZpbHRlcmVkQnlOYW1l
KG5hbWUpIH0gfTsKKyAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgZG93bmNhc3Q8
RG9jdW1lbnQ+KG93bmVyTm9kZSgpKS5hbGxGaWx0ZXJlZEJ5TmFtZShuYW1lKSB9IH07CiB9CiAK
IEhUTUxBbGxOYW1lZFN1YkNvbGxlY3Rpb246On5IVE1MQWxsTmFtZWRTdWJDb2xsZWN0aW9uKCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIy
MDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBjbGFzcyBIVE1MQWxsQ29sbGVjdGlvbiBmaW5hbCA6
IHB1YmxpYyBBCiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxIVE1MQWxsQ29sbGVjdGlvbj4gY3Jl
YXRlKERvY3VtZW50JiwgQ29sbGVjdGlvblR5cGUpOwogCi0gICAgc3RkOjpvcHRpb25hbDxWYXJp
YW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkT3JJbmRl
eGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3Q7Ci0g
ICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxF
bGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7Cisg
ICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVm
UHRyPEVsZW1lbnQ+Pj4gbmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVPckluZGV4KSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW1Pckl0ZW1z
KGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIEhUTUxBbGxDb2xs
ZWN0aW9uKERvY3VtZW50JiwgQ29sbGVjdGlvblR5cGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTERvY3VtZW50LmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgUmVm
PERvY3VtZW50UGFyc2VyPiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZQogfQogCiAvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNkb20tZG9jdW1lbnQtbmFtZWRp
dGVtCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4+IEhUTUxEb2N1bWVudDo6bmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0
cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+PiBI
VE1MRG9jdW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAg
aWYgKG5hbWUuaXNOdWxsKCkgfHwgIWhhc0RvY3VtZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSkp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkBAIC0xMjAsMTYgKzEyMCwxNiBAQCBzdGQ6
Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sCiAgICAgaWYgKFVOTElLRUxZKGRv
Y3VtZW50TmFtZWRJdGVtQ29udGFpbnNNdWx0aXBsZUVsZW1lbnRzKCpuYW1lLmltcGwoKSkpKSB7
CiAgICAgICAgIGF1dG8gY29sbGVjdGlvbiA9IGRvY3VtZW50TmFtZWRJdGVtcyhuYW1lKTsKICAg
ICAgICAgQVNTRVJUKGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7Ci0gICAgICAgIHJldHVybiBW
YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29s
bGVjdGlvbj4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB7IFdURk1vdmUoY29sbGVjdGlvbikg
fSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQ
dHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiB7IFdURk1vdmUoY29sbGVjdGlvbikgfSB9OwogICAgIH0KIAogICAgIGF1dG8mIGVsZW1l
bnQgPSAqZG9jdW1lbnROYW1lZEl0ZW0oKm5hbWUuaW1wbCgpKTsKICAgICBpZiAoVU5MSUtFTFko
aXM8SFRNTElGcmFtZUVsZW1lbnQ+KGVsZW1lbnQpKSkgewogICAgICAgICBpZiAoYXV0byogZG9t
V2luZG93ID0gZG93bmNhc3Q8SFRNTElGcmFtZUVsZW1lbnQ+KGVsZW1lbnQpLmNvbnRlbnRXaW5k
b3coKSkKLSAgICAgICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQ
dHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+IHsgUmVmUHRyPERPTVdpbmRvdz4g
eyBkb21XaW5kb3cgfSB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8
RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJl
ZlB0cjxET01XaW5kb3c+IHsgZG9tV2luZG93IH0gfTsKICAgICB9CiAKLSAgICByZXR1cm4gVmFy
aWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+PiB7IFJlZlB0cjxFbGVtZW50PiB7ICZlbGVtZW50IH0gfTsKKyAgICByZXR1cm4gc3Rk
Ojp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgJmVsZW1lbnQgfSB9OwogfQogCiBWZWN0
b3I8QXRvbWljU3RyaW5nPiBIVE1MRG9jdW1lbnQ6OnN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCShyZXZpc2lvbiAyMjA4MTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgd2lkdGgoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgaGVpZ2h0KCk7CiAgICAgCi0gICAgc3RkOjpvcHRpb25h
bDxWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50Piwg
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsK
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7
CiAKICAgICBFbGVtZW50KiBkb2N1bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBs
JiBuYW1lKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50TmFtZWRJdGVtLmdldEVsZW1lbnRCeURv
Y3VtZW50TmFtZWRJdGVtKG5hbWUsICp0aGlzKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNiArNTIsMTYgQEAgSFRNTEZvcm1Db250cm9sc0NvbGxl
Y3Rpb246On5IVE1MRm9ybUNvbgogewogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRy
PFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CitzdGQ6Om9w
dGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50
Pj4+IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICBhdXRvIG5hbWVkSXRlbXMgPSB0aGlzLT5uYW1lZEl0
ZW1zKG5hbWUpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAg
ICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4g
eyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50
Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKIAotICAg
IHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7
IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IG93bmVyTm9kZSgpLnJhZGlvTm9kZUxpc3QobmFtZSkg
fSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQ
dHI8RWxlbWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgb3duZXJOb2RlKCkucmFkaW9O
b2RlTGlzdChuYW1lKSB9IH07CiB9CiAKIGNvbnN0IFZlY3RvcjxGb3JtQXNzb2NpYXRlZEVsZW1l
bnQqPiYgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmZvcm1Db250cm9sRWxlbWVudHMoKSBj
b25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbigpOwogCiAg
ICAgSFRNTEVsZW1lbnQqIGl0ZW0odW5zaWduZWQgb2Zmc2V0KSBjb25zdCBvdmVycmlkZTsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxl
bWVudD4+PiBuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHN0ZDo6
b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1l
bnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJpbmcmKSBjb25zdDsKIAogICAgIC8vIEZv
ciBDYWNoZWRIVE1MQ29sbGVjdGlvbi4KICAgICBIVE1MRWxlbWVudCogY3VzdG9tRWxlbWVudEFm
dGVyKEVsZW1lbnQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDE2ICsxNjMsMTYgQEAgSFRNTEVs
ZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6aXRlbSh1bnNpZwogICAgIHJldHVybiBlbGVtZW50cygp
LT5pdGVtKGluZGV4KTsKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05v
ZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRy
PFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUVsZW1lbnQ6Om5hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7CiAgICAgYXV0byBuYW1lZEl0ZW1zID0g
bmFtZWRFbGVtZW50cyhuYW1lKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8
RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07
CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQ
dHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9
IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxF
bGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyByYWRpb05vZGVMaXN0KG5hbWUpIH0g
fTsKKyAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRy
PEVsZW1lbnQ+PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IHJhZGlvTm9kZUxpc3QobmFtZSkg
fSB9OwogfQogCiBWZWN0b3I8QXRvbWljU3RyaW5nPiBIVE1MRm9ybUVsZW1lbnQ6OnN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIEhUTUxFbGVtZW50
KiBpdGVtKHVuc2lnbmVkIGluZGV4KTsKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRy
PFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWlj
U3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7
CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0
OwogCiAgICAgU3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuZW5j
b2RpbmdUeXBlKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2NSw3ICsxMzY1LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cgogCiAgICAgICAgICAgICAvLyAyLiBFbmQg
dGhlIHN5bmNocm9ub3VzIHNlY3Rpb24sIGNvbnRpbnVpbmcgdGhlIHJlbWFpbmluZyBzdGVwcyBp
biBwYXJhbGxlbC4KICAgICAgICAgICAgIC8vIDMuIFJ1biB0aGUgcmVzb3VyY2UgZmV0Y2ggYWxn
b3JpdGhtIHdpdGggdGhlIGFzc2lnbmVkIG1lZGlhIHByb3ZpZGVyIG9iamVjdC4KLSAgICAgICAg
ICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcigKKyAgICAgICAgICAgIHN0ZDo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcigKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgICAgICAgICAg
ICAgIFt0aGlzXShSZWZQdHI8TWVkaWFTdHJlYW0+IHN0cmVhbSkgeyBtX21lZGlhU3RyZWFtU3Jj
T2JqZWN0ID0gc3RyZWFtOyB9LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB1c2lu
ZyBDdWVJbnRlcnZhbCA9IEN1ZUludGVydmFsVHJlZTo6SW50CiB1c2luZyBDdWVMaXN0ID0gVmVj
dG9yPEN1ZUludGVydmFsPjsKICNlbmRpZgogCi11c2luZyBNZWRpYVByb3ZpZGVyID0gc3RkOjpv
cHRpb25hbDxWYXJpYW50PAordXNpbmcgTWVkaWFQcm92aWRlciA9IHN0ZDo6b3B0aW9uYWw8c3Rk
Ojp2YXJpYW50PAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtPiwKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxl
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29s
bGVjdGlvbi5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25zQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0Myw4IEBAIHB1Ymxp
YzoKICAgICAKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRJdGVtKHVuc2lnbmVkIGluZGV4LCBI
VE1MT3B0aW9uRWxlbWVudCopOwogICAgIAotICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVt
ZW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRNTE9wdEdy
b3VwRWxlbWVudD4+OwotICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBWYXJpYW50PFJlZlB0
cjxIVE1MRWxlbWVudD4sIGludD47CisgICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQg
PSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRH
cm91cEVsZW1lbnQ+PjsKKyAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9u
T3I8dm9pZD4gYWRkKGNvbnN0IE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50JiwgY29uc3Qgc3RkOjpv
cHRpb25hbDxIVE1MRWxlbWVudE9ySW50PiYgYmVmb3JlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlbW92ZShpbnQgaW5kZXgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Vs
ZWN0RWxlbWVudC5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDggQEAgcHVibGlj
OgogCiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdDsKIAotICAgIHVzaW5nIE9wdGlvbk9y
T3B0R3JvdXBFbGVtZW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTE9wdEdyb3VwRWxlbWVudD4+OwotICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBW
YXJpYW50PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47CisgICAgdXNpbmcgT3B0aW9uT3JPcHRH
cm91cEVsZW1lbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVm
UHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKKyAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0g
c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MRWxlbWVudD4sIGludD47CiAgICAgV0VCQ09SRV9FWFBP
UlQgRXhjZXB0aW9uT3I8dm9pZD4gYWRkKGNvbnN0IE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50Jiwg
Y29uc3Qgc3RkOjpvcHRpb25hbDxIVE1MRWxlbWVudE9ySW50PiYgYmVmb3JlKTsKIAogICAgIHVz
aW5nIE5vZGU6OnJlbW92ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFy
YW1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFt
cy5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNo
UGFyYW1zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjIgKzQxLDI1IEBAIFVSTFNlYXJjaFBh
cmFtczo6VVJMU2VhcmNoUGFyYW1zKGNvbnN0IFYKIHsKIH0KIAotRXhjZXB0aW9uT3I8UmVmPFVS
TFNlYXJjaFBhcmFtcz4+IFVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKFZhcmlhbnQ8VmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4s
IFN0cmluZz4mJiB2YXJpYW50KQorRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IFVS
TFNlYXJjaFBhcmFtczo6Y3JlYXRlKHN0ZDo6dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+
LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5nPiYmIHZh
cmlhbnQpCiB7Ci0gICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3Qg
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgdmVjdG9yKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2Vh
cmNoUGFyYW1zPj4gewotICAgICAgICBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBT
dHJpbmc+PiBwYWlyczsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBwYWlyIDogdmVjdG9yKSB7
Ci0gICAgICAgICAgICBpZiAocGFpci5zaXplKCkgIT0gMikKLSAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07Ci0gICAgICAgICAgICBwYWlycy5hcHBlbmQoe3Bh
aXJbMF0sIHBhaXJbMV19KTsKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbih2YXJpYW50LAorICAg
ICAgICBbXShjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiB2ZWN0b3IpIC0+IEV4Y2VwdGlv
bk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAgICAgICBWZWN0b3I8V1RGOjpLZXlW
YWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiBwYWlyczsKKyAgICAgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcGFpciA6IHZlY3RvcikgeworICAgICAgICAgICAgICAgIGlmIChwYWlyLnNpemUoKSAh
PSAyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07
CisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHtwYWlyWzBdLCBwYWlyWzFdfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJh
bXMoV1RGTW92ZShwYWlycykpKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9y
PFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4mIHBhaXJzKSAtPiBFeGNlcHRpb25P
cjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4geworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVVJMU2VhcmNoUGFyYW1zKHBhaXJzKSk7CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gewor
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKHN0cmluZywg
bnVsbHB0cikpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNl
YXJjaFBhcmFtcyhXVEZNb3ZlKHBhaXJzKSkpOwotICAgIH0sIFsmXShjb25zdCBWZWN0b3I8V1RG
OjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKHBhaXJzKSk7Ci0gICAgfSwgWyZdKGNvbnN0
IFN0cmluZyYgc3RyaW5nKSB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJj
aFBhcmFtcyhzdHJpbmcsIG51bGxwdHIpKTsKLSAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNp
dCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICApOwogfQogCiBTdHJpbmcgVVJMU2VhcmNoUGFyYW1z
OjpnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9VUkxTZWFyY2hQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1VS
TFNlYXJjaFBhcmFtcy5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L1VSTFNlYXJjaFBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVVJMU2VhcmNoUGFyYW1zIDogcHVibGljIFJlZkNvdW50
ZWQ8VVJMU2VhcmNoUGFyYW1zPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJl
ZjxVUkxTZWFyY2hQYXJhbXM+PiBjcmVhdGUoVmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+
LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5nPiYmKTsK
KyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IGNyZWF0ZShzdGQ6
OnZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWly
PFN0cmluZywgU3RyaW5nPj4sIFN0cmluZz4mJik7CiAgICAgc3RhdGljIFJlZjxVUkxTZWFyY2hQ
YXJhbXM+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHN0cmluZywgRE9NVVJMKiBhc3NvY2lhdGVkVVJM
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKHN0
cmluZywgYXNzb2NpYXRlZFVSTCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHJldmlzaW9uIDIyMDgxMikK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIGNsYXNzIFRleHRNZXRyaWNzOwogc3Ry
dWN0IERPTU1hdHJpeEluaXQ7CiAKICNpZiBFTkFCTEUoVklERU8pCi11c2luZyBDYW52YXNJbWFn
ZVNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTFZp
ZGVvRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwordXNpbmcgQ2FudmFzSW1h
Z2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8
SFRNTFZpZGVvRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwogI2Vsc2UKLXVz
aW5nIENhbnZhc0ltYWdlU291cmNlID0gVmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4s
IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwordXNpbmcgQ2FudmFzSW1hZ2VTb3VyY2UgPSBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0Vs
ZW1lbnQ+PjsKICNlbmRpZgogCiBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgZmluYWwg
OiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIENhbnZhc1BhdGggewpAQCAt
MTcyLDcgKzE3Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbnN0IFN0cmluZyYpOwogCi0gICAgdXNpbmcgU3R5bGUgPSBWYXJpYW50PFN0cmluZywgUmVm
UHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+PjsKKyAgICB1c2luZyBT
dHlsZSA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0
cjxDYW52YXNQYXR0ZXJuPj47CiAgICAgU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdDsKICAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0eWxlJiYpOwogICAgIFN0eWxlIGZpbGxTdHlsZSgpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2
aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsMTIgKzEzNSwxMiBAQCBDYW52YXNTdHlsZSBDYW52
YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluCiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVu
dENvbG9yKGNvbnN0IENhbnZhc1N0eWxlJiBvdGhlcikgY29uc3QKIHsKLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxDb2xvcj4ob3RoZXIubV9zdHlsZSkpCi0gICAgICAgIHJldHVybiBXVEY6OmdldDxDb2xvcj4o
bV9zdHlsZSkgPT0gV1RGOjpnZXQ8Q29sb3I+KG90aGVyLm1fc3R5bGUpOworICAgIGlmIChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPENvbG9yPihvdGhlci5tX3N0eWxlKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PENvbG9y
PihtX3N0eWxlKSA9PSBzdGQ6OmdldDxDb2xvcj4ob3RoZXIubV9zdHlsZSk7CiAKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpKSB7Ci0gICAgICAgIGF1dG8m
IGEgPSBXVEY6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKTsKLSAgICAgICAgYXV0byYgYiA9IFdU
Rjo6Z2V0PENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpIHsKKyAgICAgICAgYXV0byYgYSA9IHN0ZDo6Z2V0
PENNWUtBQ29sb3I+KG1fc3R5bGUpOworICAgICAgICBhdXRvJiBiID0gc3RkOjpnZXQ8Q01ZS0FD
b2xvcj4ob3RoZXIubV9zdHlsZSk7CiAgICAgICAgIHJldHVybiBhLmMgPT0gYi5jICYmIGEubSA9
PSBiLm0gJiYgYS55ID09IGIueSAmJiBhLmsgPT0gYi5rICYmIGEuYSA9PSBiLmE7CiAgICAgfQog
CkBAIC0xNDksMTUgKzE0OSwxNSBAQCBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xv
cihjb25zCiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09
IENvbG9yIHsgciwgZywgYiwgYSB9OworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PENvbG9yPihtX3N0eWxlKSAmJiBzdGQ6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gQ29sb3IgeyBy
LCBnLCBiLCBhIH07CiB9CiAKIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENNWUtBKGZs
b2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpIGNvbnN0CiB7Ci0gICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQorICAgIGlm
ICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byYgY2hhbm5lbHMgPSBXVEY6OmdldDxDTVlLQUNvbG9y
PihtX3N0eWxlKTsKKyAgICBhdXRvJiBjaGFubmVscyA9IHN0ZDo6Z2V0PENNWUtBQ29sb3I+KG1f
c3R5bGUpOwogICAgIHJldHVybiBjID09IGNoYW5uZWxzLmMgJiYgbSA9PSBjaGFubmVscy5tICYm
IHkgPT0gY2hhbm5lbHMueSAmJiBrID09IGNoYW5uZWxzLmsgJiYgYSA9PSBjaGFubmVscy5hOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgJKHJldmlz
aW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENh
bnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiBjb2xvcik7CiAgICAgc3Rh
dGljIENhbnZhc1N0eWxlIGNyZWF0ZUZyb21TdHJpbmdXaXRoT3ZlcnJpZGVBbHBoYShjb25zdCBT
dHJpbmcmIGNvbG9yLCBmbG9hdCBhbHBoYSk7CiAKLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7
IHJldHVybiAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQotICAg
IGJvb2wgaXNDdXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEN1cnJlbnRDb2xvcj4obV9zdHlsZSk7IH0KLSAgICBib29sIGhhc092ZXJyaWRlQWxwaGEo
KSBjb25zdCB7IHJldHVybiBpc0N1cnJlbnRDb2xvcigpICYmIFdURjo6Z2V0PEN1cnJlbnRDb2xv
cj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYTsgfQotICAgIGZsb2F0IG92ZXJyaWRlQWxwaGEoKSBj
b25zdCB7IHJldHVybiBXVEY6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxw
aGEudmFsdWUoKTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9CisgICAgYm9vbCBpc0N1cnJlbnRD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q3VycmVudENvbG9y
PihtX3N0eWxlKTsgfQorICAgIGJvb2wgaGFzT3ZlcnJpZGVBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IGlzQ3VycmVudENvbG9yKCkgJiYgc3RkOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVy
cmlkZUFscGhhOyB9CisgICAgZmxvYXQgb3ZlcnJpZGVBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYS52YWx1ZSgpOyB9CiAK
ICAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKICAgICBDYW52YXNHcmFkaWVudCogY2FudmFzR3Jh
ZGllbnQoKSBjb25zdDsKQEAgLTkxLDcgKzkxLDcgQEAgcHJpdmF0ZToKIAogICAgIENhbnZhc1N0
eWxlKEN1cnJlbnRDb2xvcik7CiAKLSAgICBWYXJpYW50PEludmFsaWQsIENvbG9yLCBDTVlLQUNv
bG9yLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4sIEN1cnJl
bnRDb2xvcj4gbV9zdHlsZTsKKyAgICBzdGQ6OnZhcmlhbnQ8SW52YWxpZCwgQ29sb3IsIENNWUtB
Q29sb3IsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiwgQ3Vy
cmVudENvbG9yPiBtX3N0eWxlOwogfTsKIAogQ29sb3IgY3VycmVudENvbG9yKEhUTUxDYW52YXNF
bGVtZW50Kik7CkBAIC0xMDQsMjEgKzEwNCwyMSBAQCBpbmxpbmUgQ2FudmFzU3R5bGU6OkNhbnZh
c1N0eWxlKCkKIAogaW5saW5lIENhbnZhc0dyYWRpZW50KiBDYW52YXNTdHlsZTo6Y2FudmFzR3Jh
ZGllbnQoKSBjb25zdAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9zdHlsZSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBXVEY6OmdldDxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxl
KS5nZXQoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9z
dHlsZSkuZ2V0KCk7CiB9CiAKIGlubGluZSBDYW52YXNQYXR0ZXJuKiBDYW52YXNTdHlsZTo6Y2Fu
dmFzUGF0dGVybigpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSkpCisgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBXVEY6OmdldDxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1fc3R5
bGUpLmdldCgpOworICAgIHJldHVybiBzdGQ6OmdldDxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1f
c3R5bGUpLmdldCgpOwogfQogCiBpbmxpbmUgU3RyaW5nIENhbnZhc1N0eWxlOjpjb2xvcigpIGNv
bnN0CiB7Ci0gICAgYXV0byYgY29sb3IgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPiht
X3N0eWxlKSA/IFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IFdURjo6Z2V0PENNWUtBQ29sb3I+
KG1fc3R5bGUpLmNvbG9yOworICAgIGF1dG8mIGNvbG9yID0gc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxDb2xvcj4obV9zdHlsZSkgPyBzdGQ6OmdldDxDb2xvcj4obV9zdHlsZSkgOiBzdGQ6OmdldDxD
TVlLQUNvbG9yPihtX3N0eWxlKS5jb2xvcjsKICAgICByZXR1cm4gY29sb3Iuc2VyaWFsaXplZCgp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDcgKzY4LDcgQEAgcHVibGljOgogICAgIHZvaWQgdGV4SW1hZ2UzRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEaW50IGJvcmRlciwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHBpeGVs
cyk7CiAKICAgICB2b2lkIHRleFN1YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiYmIHBpeGVs
cyk7Ci0gICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdl
RGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50
PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKKyAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+
LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4+Owog
ICAgIHZvaWQgdGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgVGV4SW1hZ2VTb3VyY2UmJik7CiAKICAgICB2b2lkIGNv
cHlUZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFueS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdDsK
IGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CiAKLXVzaW5nIFdlYkdMQW55ID0gVmFy
aWFudDwKK3VzaW5nIFdlYkdMQW55ID0gc3RkOjp2YXJpYW50PAogICAgIHN0ZDo6bnVsbHB0cl90
LAogICAgIGJvb2wsCiAgICAgaW50LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDIy
MDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDcgKzExODksNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICBzdGQ6OnZp
c2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZm
ZXJEYXRhKGRhdGEuZ2V0KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxp
ZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMTgsNyArMTIxOCw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3UKICAgICBpZiAoIWRhdGEpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAgICBz
dGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEuZ2V0
KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5n
ZSIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzY3Niw3ICszNjc2LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAgIHJl
dHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3Rk
Ojp2aXNpdCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CiB9CiAKIGJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVBcnJheUJ1ZmZlclR5cGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9wdGlvbmFsPEpTQzo6VHlwZWRBcnJheVR5cGU+
IGFycmF5VHlwZSkKQEAgLTQyMTIsNyArNDIxMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEIKICNlbmRpZgogICAgICk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNp
dCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRv
ciwgc291cmNlLnZhbHVlKCkpOwogfQogCiBSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UmIGltYWdlLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlz
aW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKTsK
ICAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0
UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwogCi0gICAgdXNpbmcg
QnVmZmVyRGF0YVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3Pj47CisgICAgdXNpbmcgQnVmZmVyRGF0YVNvdXJjZSA9IHN0ZDo6
dmFyaWFudDxSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj47CiAg
ICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0Rl
bnVtIHVzYWdlKTsKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBzdGQ6Om9w
dGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+JiYsIEdDM0RlbnVtIHVzYWdlKTsKICAgICB2b2lkIGJ1
ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBzdGQ6Om9wdGlv
bmFsPEJ1ZmZlckRhdGFTb3VyY2U+JiYpOwpAQCAtMjQ3LDkgKzI0Nyw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
aW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiYmKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICB1c2luZyBUZXhJbWFnZVNv
dXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVs
ZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVu
dD4+OworICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJbWFn
ZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVu
dD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CiAjZWxzZQotICAgIHVzaW5nIFRleEltYWdl
U291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdl
U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwogI2VuZGlmCiAKICAgICBFeGNl
cHRpb25Pcjx2b2lkPiB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
c3RkOjpvcHRpb25hbDxUZXhJbWFnZVNvdXJjZT4pOwpAQCAtMjYzLDcgKzI2Myw3IEBAIHB1Ymxp
YzoKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHlwZWRBcnJheSwgY2xhc3MgRGF0YVR5cGU+CiAgICAg
Y2xhc3MgVHlwZWRMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHVzaW5nIFZhcmlhbnRUeXBl
ID0gVmFyaWFudDxSZWZQdHI8VHlwZWRBcnJheT4sIFZlY3RvcjxEYXRhVHlwZT4+OworICAgICAg
ICB1c2luZyBWYXJpYW50VHlwZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VHlwZWRBcnJheT4sIFZl
Y3RvcjxEYXRhVHlwZT4+OwogCiAgICAgICAgIFR5cGVkTGlzdChWYXJpYW50VHlwZSYmIHZhcmlh
bnQpCiAgICAgICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKHZhcmlhbnQpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVHJhY2tF
dmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIFdURk1vdmUodHJhY2spKSk7CiAgICAg
fQogCi0gICAgdXNpbmcgVHJhY2tFdmVudFRyYWNrID0gVmFyaWFudDxSZWZQdHI8VmlkZW9UcmFj
az4sIFJlZlB0cjxBdWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OworICAgIHVzaW5nIFRy
YWNrRXZlbnRUcmFjayA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VmlkZW9UcmFjaz4sIFJlZlB0cjxB
dWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OwogCiAgICAgc3RydWN0IEluaXQgOiBwdWJs
aWMgRXZlbnRJbml0IHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxUcmFja0V2ZW50VHJhY2s+IHRy
YWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAko
cmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBj
c3NDYW52YXNOYW1lKTsKIAotICAgIHR5cGVkZWYgVmFyaWFudDwKKyAgICB0eXBlZGVmIHN0ZDo6
dmFyaWFudDwKICAgICAgICAgQ2FudmFzR3JhZGllbnQqLAogICAgICAgICBDYW52YXNQYXR0ZXJu
KiwKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqLApJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCShyZXZpc2lvbiAy
MjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIH0KIAogICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAg
IGlmICghcmVzdWx0VmFsdWUgfHwgIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkRh
dGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKICAgICAgICAgICAgIG1fZXhlY3V0YWJs
ZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIlVuZXhwZWN0ZWQg
cmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gV1RGOjpnZXQ8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVz
dWx0VmFsdWUudmFsdWUoKSk7CisgICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBzdGQ6Omdl
dDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgbV9l
eGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKCpkYXRhYmFzZVJlc3VsdCk7CiAgICAgICAg
IGRhdGFiYXNlUmVzdWx0LT5jbG9zZSgpOwogICAgIH0KQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0
aWMgUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5CiAgICAgICAgIGtleVBhdGgtPnNl
dEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7CiAgICAgfSk7
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1ZSgpKTsKKyAg
ICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOwogfQogCiBz
dGF0aWMgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElEQkRh
dGFiYXNlKiBpZGJEYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIElEQlRy
YW5zYWN0aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb25Nb2RlOjpSZWFkb25seSkKQEAgLTM3
MywxMiArMzczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgYXV0
byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29y
Pj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAh
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFs
dWUoKSkpIHsKICAgICAgICAgICAgIGVuZChmYWxzZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBhdXRvIGN1cnNvciA9IFdURjo6Z2V0PFJlZlB0cjxJREJDdXJz
b3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBjdXJzb3IgPSBzdGQ6Omdl
dDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CiAKICAgICAgICAgaWYg
KG1fc2tpcENvdW50KSB7CiAgICAgICAgICAgICBpZiAoY3Vyc29yLT5hZHZhbmNlKG1fc2tpcENv
dW50KS5oYXNFeGNlcHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0
aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTAgKzQw
LDEwIEBAIEludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNlY3Rpb25PYnNlcnYKICAgICAsIG1f
cm9vdE1hcmdpbihXVEZNb3ZlKGluaXQucm9vdE1hcmdpbikpCiAgICAgLCBtX2NhbGxiYWNrKFdU
Rk1vdmUoY2FsbGJhY2spKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJs
ZT4oaW5pdC50aHJlc2hvbGQpKQotICAgICAgICBtX3RocmVzaG9sZHMuYXBwZW5kKFdURjo6Z2V0
PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxkb3VibGU+KGluaXQudGhyZXNob2xkKSkKKyAgICAgICAgbV90aHJlc2hvbGRzLmFwcGVuZChz
dGQ6OmdldDxkb3VibGU+KGluaXQudGhyZXNob2xkKSk7CiAgICAgZWxzZQotICAgICAgICBtX3Ro
cmVzaG9sZHMgPSBXVEY6OmdldDxWZWN0b3I8ZG91YmxlPj4oV1RGTW92ZShpbml0LnRocmVzaG9s
ZCkpOworICAgICAgICBtX3RocmVzaG9sZHMgPSBzdGQ6OmdldDxWZWN0b3I8ZG91YmxlPj4oV1RG
TW92ZShpbml0LnRocmVzaG9sZCkpOwogfQogCiB2b2lkIEludGVyc2VjdGlvbk9ic2VydmVyOjpv
YnNlcnZlKEVsZW1lbnQmKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIuaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1Ymxp
YzoKICAgICBzdHJ1Y3QgSW5pdCB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiByb290OwogICAg
ICAgICBTdHJpbmcgcm9vdE1hcmdpbjsKLSAgICAgICAgVmFyaWFudDxkb3VibGUsIFZlY3Rvcjxk
b3VibGU+PiB0aHJlc2hvbGQ7CisgICAgICAgIHN0ZDo6dmFyaWFudDxkb3VibGUsIFZlY3Rvcjxk
b3VibGU+PiB0aHJlc2hvbGQ7CiAgICAgfTsKIAogICAgIHN0YXRpYyBSZWY8SW50ZXJzZWN0aW9u
T2JzZXJ2ZXI+IGNyZWF0ZShSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFjaz4mJiBjYWxs
YmFjaywgSW5pdCYmIGluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlkIG91dC4KICAg
ICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcmKSB7IH0KIAot
ICAgIHVzaW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBXVEY6OlZhcmlh
bnQ8c3RkOjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+PjsK
KyAgICB1c2luZyBMYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3ZlcnJpZGVSZWN0ID0gc3RkOjp2YXJp
YW50PHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4sIHN0ZDo6b3B0aW9uYWw8RmxvYXRSZWN0Pj47
CiAgICAgdmlydHVhbCB2b2lkIHJlY29uY2lsZVNjcm9sbGluZ1N0YXRlKEZyYW1lVmlldyYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBMYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3ZlcnJpZGVSZWN0
JiwgYm9vbCAvKiBwcm9ncmFtbWF0aWNTY3JvbGwgKi8sIFZpZXdwb3J0UmVjdFN0YWJpbGl0eSwg
U2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbikgeyB9CiAKICAgICAvLyBTaG91bGQgYmUgY2Fs
bGVkIHdoZW5ldmVyIHRoZSBzbG93IHJlcGFpbnQgb2JqZWN0cyBjb3VudGVyIGNoYW5nZXMgYmV0
d2VlbiB6ZXJvIGFuZCBvbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1
ZmZlci5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBAQCBjb25zdCBj
aGFyKiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkCiAjZW5kaWYKICAgICAgICAgW10oY29u
c3QgTWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGRhdGEuZGF0YSgpKTsgfQogICAgICk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwgbV9pbW11dGFibGVEYXRhKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBt
X2ltbXV0YWJsZURhdGEpOwogfQogCiAjaWYgIVVTRShDRikKQEAgLTIxOSwxNyArMjE5LDI0IEBA
IHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogc2l6ZV90IFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUoKSBjb25zdAogewotICAgIGF1dG8gdmlzaXRvciA9
IFdURjo6bWFrZVZpc2l0b3IoCi0gICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkg
eyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9pbW11
dGFibGVEYXRhLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpIC0+IHNpemVf
dCB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5zaXplKCk7CisgICAgICAgIH0sCiAjaWYgVVNF
KENGKQotICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgeyByZXR1
cm4gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShjb25zdCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBD
RkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0sCiAjZW5kaWYKICNpZiBVU0Uo
U09VUCkKLSAgICAgICAgW10oY29uc3QgR1VuaXF1ZVB0cjxTb3VwQnVmZmVyPiYgZGF0YSkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOyB9LAorICAgICAgICBbXShj
b25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bGVuZ3RoKTsKKyAgICAgICAgfSwK
ICNlbmRpZgotICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4g
ZGF0YS5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgTWFwcGVkRmlsZURhdGEmIGRhdGEpIC0+
IHNpemVfdCB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5zaXplKCk7CisgICAgICAgIH0KICAg
ICApOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9
CiAKIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OjpTaGFyZWRCdWZmZXJEYXRhVmlldyhSZWY8U2hhcmVk
QnVmZmVyOjpEYXRhU2VnbWVudD4mJiBzZWdtZW50LCBzaXplX3QgcG9zaXRpb25XaXRoaW5TZWdt
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHJldmlzaW9u
IDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTYsMTkgKzExNiwyOCBAQCBwdWJsaWM6CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBEYXRhU2VnbWVudChWZWN0b3I8Y2hhcj4mJiBkYXRhKQotICAgICAgICAgICAgOiBt
X2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1tdXRh
YmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNpZiBVU0UoQ0Yp
CiAgICAgICAgIERhdGFTZWdtZW50KFJldGFpblB0cjxDRkRhdGFSZWY+JiYgZGF0YSkKLSAgICAg
ICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQorICAgICAgICAgICAg
OiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAgeworICAgICAgICB9CiAj
ZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICAgICAgRGF0YVNlZ21lbnQoR1VuaXF1ZVB0cjxTb3Vw
QnVmZmVyPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRh
dGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpCisg
ICAgICAgIHsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIERhdGFTZWdtZW50KE1hcHBlZEZp
bGVEYXRhJiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0
YSkpIHsgfQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAg
ICAgICAgeworICAgICAgICB9CiAKLSAgICAgICAgVmFyaWFudDxWZWN0b3I8Y2hhcj4sCisgICAg
ICAgIHN0ZDo6dmFyaWFudDwKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiwKICNpZiBVU0UoQ0Yp
CiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiwKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBA
IHN0cnVjdCBQbGF0Zm9ybURlc2NyaXB0aW9uIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgQ0FB
dWRpb1N0cmVhbUJhc2ljVHlwZSwKICAgICB9IHR5cGU7Ci0gICAgVmFyaWFudDxzdGQ6Om51bGxw
dHJfdCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4gZGVzY3JpcHRpb247Cisg
ICAgc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKIH07CiAKIGNsYXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIwODEyKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBsYXRmb3JtRGVzY3JpcHRpb246
OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgcmV0dXJuIG9wZXJhdG9yPT0oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbio+KG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbikpOwor
ICAgICAgICByZXR1cm4gb3BlcmF0b3I9PSgqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNp
Y0Rlc2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7
CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9u
JiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KIApAQCAtMTAyLDcgKzEw
Miw3IEBAIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUoRGUKIGlubGluZSBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNTRVJUKGRlc2Ny
aXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVzY3JpcHRpb246
OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIHJldHVybiBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KGRlc2Ny
aXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbikpOworICAgIHJldHVybiBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKnN0ZDo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlv
bikpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZm
ZXJDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVk
QnVmZmVyQ0YuY3BwCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAg
U2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGRhdAogUmV0YWluUHRyPENGRGF0
YVJlZj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEoKSBjb25zdAogewogICAgIGlmIChtX3Nl
Z21lbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9p
ZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4obV9zZWdtZW50c1swXS5zZWdtZW50LT5tX2ltbXV0YWJs
ZURhdGEpKQorICAgICAgICBpZiAoYXV0byBkYXRhID0gc3RkOjpnZXRfaWY8UmV0YWluUHRyPENG
RGF0YVJlZj4+KCZtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCiAgICAg
ICAgICAgICByZXR1cm4gKmRhdGE7CiAgICAgfQogICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNy
ZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0YSgpKSwgc2l6
ZSgpKSk7CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90
TmVlZGVkU28KIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9zZWdtZW50cykgewog
ICAgICAgICBpZiAoZW50cnkuc2VnbWVudC0+aGFzT25lUmVmKCkpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oZW50cnkuc2Vn
bWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6
OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oJmVudHJ5LnNlZ21lbnQtPm1faW1tdXRhYmxl
RGF0YSkpCiAgICAgICAgICAgICAgICAgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlOb3ROZWVkZWRT
b29uKGNvbnN0X2Nhc3Q8VUludDgqPihDRkRhdGFHZXRCeXRlUHRyKGRhdGEtPmdldCgpKSksIENG
RGF0YUdldExlbmd0aChkYXRhLT5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgJ
KHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rl
Y29kaW5nT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxNyArNTYsMTcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc05vbmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0Rl
Y29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNp
emUpID09IERlY29kaW5nTW9kZTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9k
ZSgpICYmIHN0ZDo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERl
Y29kaW5nTW9kZTo6Tm9uZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1N5bmNocm9ub3VzKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBXVEY6Omdl
dDxEZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OlN5
bmNocm9ub3VzOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8
RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpTeW5j
aHJvbm91czsKICAgICB9CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBXVEY6OmdldDxEZWNvZGluZ01v
ZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91czsK
KyAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIHN0ZDo6Z2V0PERlY29kaW5nTW9k
ZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzOwog
ICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXNDb21wYXRpYmxlV2l0aChjb25zdCBEZWNv
ZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QKQEAgLTExMCw3ICsxMTAsNyBAQCBw
dWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxJbnRTaXplPiBzaXplRm9yRHJhd2luZygpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzU2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6
Z2V0PHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6Z2V0PHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+KG1fZGVjb2RpbmdNb2Rl
T3JTaXplKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW50IG1heERpbWVuc2lvbihjb25zdCBJbnRT
aXplJiBzaXplKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KICAgICBib29sIGhhcygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxUPihtX2RlY29kaW5nTW9kZU9yU2l6ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKICAg
ICB9CiAKICAgICBib29sIGhhc0RlY29kaW5nTW9kZSgpIGNvbnN0CkBAIC0xNDAsNyArMTQwLDcg
QEAgcHJpdmF0ZToKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGFueVNpemU6IERlY29kaW5nTW9k
ZTo6QXN5bmNocm9ub3VzCiAgICAgLy8gLSBBc3luY2hyb25vdXMgKyBpbnRyaW5zaWNTaXplOiBh
biBlbXB0eSBzdGQ6Om9wdGlvbmFsPEludFNpemU+PgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsg
c2l6ZUZvckRyYXdpbmc6IGEgbm9uZSBlbXB0eSBzdGQ6Om9wdGlvbmFsPEludFNpemU+PgotICAg
IHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9IFZhcmlhbnQ8RGVjb2RpbmdNb2RlLCBzdGQ6Om9w
dGlvbmFsPEludFNpemU+PjsKKyAgICB1c2luZyBEZWNvZGluZ01vZGVPclNpemUgPSBzdGQ6OnZh
cmlhbnQ8RGVjb2RpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPEludFNpemU+PjsKICAgICBEZWNvZGlu
Z01vZGVPclNpemUgbV9kZWNvZGluZ01vZGVPclNpemU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAko
cmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBzdGF0
aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAgICAgICAgICAgICByZXR1cm4g
Zm9udEZhbWlseVNwZWNpZmljYXRpb24uZm9udFJhbmdlcyhkZXNjcmlwdGlvbik7CiAgICAgICAg
IH0pOwogICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50RmFtaWx5ID0gZGVzY3JpcHRpb24uZWZm
ZWN0aXZlRmFtaWx5QXQoaW5kZXgrKyk7Ci0gICAgICAgIGF1dG8gcmFuZ2VzID0gV1RGOjp2aXNp
dCh2aXNpdG9yLCBjdXJyZW50RmFtaWx5KTsKKyAgICAgICAgYXV0byByYW5nZXMgPSBzdGQ6OnZp
c2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOwogICAgICAgICBpZiAoIXJhbmdlcy5pc051bGwo
KSkKICAgICAgICAgICAgIHJldHVybiByYW5nZXM7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHJldmlzaW9u
IDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlw
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHR5cGVkZWYgRm9udEZhbWls
eVNwZWNpZmljYXRpb25OdWxsIEZvbnQKIAogI2RlZmluZSBVU0VfUExBVEZPUk1fU1lTVEVNX0ZB
TExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9O
X01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQogCi10eXBlZGVmIFZhcmlhbnQ8QXRvbWljU3RyaW5n
LCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bjsKK3R5cGVkZWYgc3RkOjp2YXJpYW50PEF0b21pY1N0cmluZywgRm9udEZhbWlseVBsYXRmb3Jt
U3BlY2lmaWNhdGlvbj4gRm9udEZhbWlseVNwZWNpZmljYXRpb247CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVkaW9T
b3VyY2VQcm92aWRlckFWRk9iakMubW0JKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2Jq
Qy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgV2ViQXVkaW9Tb3Vy
Y2VQcm92aWRlckFWRk9iakM6OnVucHIKIHZvaWQgV2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9i
akM6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYsIGNvbnN0
IE1lZGlhVGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBkYXRhLCBjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IGZyYW1lQ291bnQpCiB7CiAgICAg
QVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3Jt
RGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIGF1dG8mIGJhc2ljRGVz
Y3JpcHRpb24gPSAqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4o
ZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKKyAgICBhdXRv
JiBiYXNpY0Rlc2NyaXB0aW9uID0gKnN0ZDo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNj
cmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbik7
CiAgICAgaWYgKCFtX2lucHV0RGVzY3JpcHRpb24gfHwgbV9pbnB1dERlc2NyaXB0aW9uLT5zdHJl
YW1EZXNjcmlwdGlvbigpICE9IGJhc2ljRGVzY3JpcHRpb24pCiAgICAgICAgIHByZXBhcmUoYmFz
aWNEZXNjcmlwdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1
ZS5oCShyZXZpc2lvbiAyMjA4MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXVzaW5nIFNRTFZhbHVlID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5n
LCBkb3VibGU+OwordXNpbmcgU1FMVmFsdWUgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3Qs
IFN0cmluZywgZG91YmxlPjsKIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0
Miw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBkcmFnZ2VkQ29udGVudENvbnRhaW4KICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7Ci0gICAg
ICAgIGF1dG8mIGRyYWdnZWRDb250ZW50RGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpE
cmFnZ2VkQ29udGVudERhdGE+KG1hcmtlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byYgZHJhZ2dl
ZENvbnRlbnREYXRhID0gc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0
YT4obWFya2VyLT5kYXRhKCkpOwogICAgICAgICBpZiAoZHJhZ2dlZENvbnRlbnREYXRhLnRhcmdl
dE5vZGUgPT0gJmVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgJKHJldmlzaW9uIDIyMDgx
MikKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgc3RyaW5nVmFs
dWU7CiAgICAgICAgIFN0cmluZyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWU7CiAgICAgICAg
IFZlY3RvcjxTdHJpbmc+IHNlcXVlbmNlVmFsdWU7Ci0gICAgICAgIFZhcmlhbnQ8UmVmUHRyPE5v
ZGU+LCBWZWN0b3I8U3RyaW5nPiwgT3RoZXJEaWN0aW9uYXJ5PiB1bmlvblZhbHVlOworICAgICAg
ICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBWZWN0b3I8U3RyaW5nPiwgT3RoZXJEaWN0aW9u
YXJ5PiB1bmlvblZhbHVlOwogICAgICAgICBpbnQgY2xhbXBMb25nVmFsdWU7CiAgICAgICAgIGlu
dCBlbmZvcmNlUmFuZ2VMb25nVmFsdWU7CiAgICAgfTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJs
aWM6CiAgICAgY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgVmVjdG9yPFN0
cmluZz4+PiYgdGVzdFNlcXVlbmNlUmVjb3JkKCkgY29uc3QgeyByZXR1cm4gbV9zZXF1ZW5jZVJl
Y29yZDsgfQogICAgIHZvaWQgc2V0VGVzdFNlcXVlbmNlUmVjb3JkKGNvbnN0IFZlY3RvcjxXVEY6
OktleVZhbHVlUGFpcjxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4mIHZhbHVlKSB7IG1fc2VxdWVu
Y2VSZWNvcmQgPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcgVGVzdFVuaW9uID0gVmFyaWFudDxTdHJp
bmcsIGludCwgYm9vbCwgUmVmUHRyPE5vZGU+LCBWZWN0b3I8aW50Pj47CisgICAgdXNpbmcgVGVz
dFVuaW9uID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZl
Y3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0VW5pb24mIHRlc3RVbmlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdW5pb247IH0KICAgICB2b2lkIHNldFRlc3RVbmlvbihUZXN0VW5pb24mJiB2YWx1ZSkg
eyBtX3VuaW9uID0gdmFsdWU7IH0KIApAQCAtMTMwLDE1ICsxMzAsMTUgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VGVzdERpY3Rpb25hcnkoRGljdGlvbmFyeSYmIGRpY3Rpb25hcnkpIHsgbV90ZXN0
RGljdGlvbmFyeSA9IGRpY3Rpb25hcnk7IH0KICAgICAKIAotICAgIHVzaW5nIFRlc3RDbGFtcFVu
aW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OworICAgIHVzaW5nIFRlc3RD
bGFtcFVuaW9uID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CiAgICAg
Y29uc3QgVGVzdENsYW1wVW5pb24mIHRlc3RDbGFtcFVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV9j
bGFtcFVuaW9uOyB9CiAgICAgdm9pZCBzZXRUZXN0Q2xhbXBVbmlvbihjb25zdCBUZXN0Q2xhbXBV
bmlvbiYgdmFsdWUpIHsgbV9jbGFtcFVuaW9uID0gdmFsdWU7IH0KIAotICAgIHVzaW5nIFRlc3RF
bmZvcmNlUmFuZ2VVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxpbnQ+PjsKKyAg
ICB1c2luZyBUZXN0RW5mb3JjZVJhbmdlVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQs
IFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0RW5mb3JjZVJhbmdlVW5pb24mIHRlc3RFbmZv
cmNlUmFuZ2VVbmlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5mb3JjZVJhbmdlVW5pb247IH0KICAg
ICB2b2lkIHNldFRlc3RFbmZvcmNlUmFuZ2VVbmlvbihjb25zdCBUZXN0RW5mb3JjZVJhbmdlVW5p
b24mIHZhbHVlKSB7IG1fZW5mb3JjZVJhbmdlVW5pb24gPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcg
VGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZl
Y3RvcjxTdHJpbmc+PjsKKyAgICB1c2luZyBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9u
ID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8U3RyaW5nPj47CiAgICAgY29uc3Qg
VGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiYgdGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJp
bmdVbmlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uOyB9
CiAgICAgdm9pZCBzZXRUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uKGNvbnN0IFRlc3RU
cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24mIHZhbHVlKSB7IG1fdHJlYXROdWxsQXNFbXB0eVN0
cmluZ1VuaW9uID0gdmFsdWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICBFdmVudFRh
cmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CiAgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9CiAK
LSAgICB1c2luZyBTZW5kVHlwZXMgPSBWYXJpYW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxC
bG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+LCBTdHJpbmc+OworICAgIHVzaW5nIFNlbmRUeXBlcyA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8RG9jdW1lbnQ+LCBSZWZQdHI8QmxvYj4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZv
cm1EYXRhPiwgU3RyaW5nPjsKIAogICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KICAgICBTdHJpbmcgc3RhdHVzVGV4dCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0
dXJlOjpldmVudFRvU3RyaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlRXZlbnQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVy
ZTo6UmVzb3VyY2U6OnVybCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrRGF0YVRhc2tSZXBsYXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6
TmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBT
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6QXJndW1lbnRD
b2RlcjxJREJLZXlQYXRoPjo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAod2Via2l0
X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZCk6CisKIDIwMTctMDgtMTYgIFlvc2hpYWtpIEpp
dHN1a2F3YSAgPFlvc2hpYWtpLkppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBbUEFMXSBN
b3ZlIHNwaS9pb3MgYW5kIHNwaS93aW4gZGlyZWN0b3JpZXMgaW50byBQQUwKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVFdmVudC5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHN0ZDo6c3RyaW5nIGV2ZW50VG9TdHJpbmcoY29uc3QgQ2Fw
dHVyZUUKIHsKICAgICBqc29uIHJlc3VsdDsKIAotICAgIFdURjo6dmlzaXQoWyZyZXN1bHRdKGNv
bnN0IGF1dG8mIGV2ZW50KSB7CisgICAgc3RkOjp2aXNpdChbJnJlc3VsdF0oY29uc3QgYXV0byYg
ZXZlbnQpIHsKICAgICAgICAgdXNpbmcgRXZlbnRUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBl
KGV2ZW50KT47CiAgICAgICAgIHJlc3VsdCA9IEpTT05Db2RlcjxFdmVudFR5cGU+OjplbmNvZGUo
ZXZlbnQpOwogICAgIH0sIGV2ZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkocmV2aXNp
b24gMjIwODEyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdHJ1Y3Qg
UmVkaXJlY3RTZW50RXZlbnQ7CiBzdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQ7CiBzdHJ1Y3QgRmlu
aXNoZWRFdmVudDsKIAotdXNpbmcgQ2FwdHVyZUV2ZW50ID0gV1RGOjpWYXJpYW50PFJlcXVlc3RT
ZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50LCBS
ZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+OwordXNp
bmcgQ2FwdHVyZUV2ZW50ID0gc3RkOjp2YXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNl
UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwg
RGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+OwogdXNpbmcgT3B0aW9uYWxDYXB0dXJl
RXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0dXJlRXZlbnRz
ID0gVmVjdG9yPENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0dXJlQ2xvY2tUeXBlID0gV1RGOjpN
b25vdG9uaWNUaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAkocmV2aXNp
b24gMjIwODEyKQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAg
Y29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJjZTo6dXJsKCkKICAgICAgICAgYXV0byBldmVudCA9
IGV2ZW50cy5uZXh0RXZlbnQoKTsKICAgICAgICAgaWYgKCFldmVudCkKICAgICAgICAgICAgIERF
QlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxl
ID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpl
dmVudCkpCisgICAgICAgIGVsc2UgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlcXVlc3RT
ZW50RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0
cmVhbSBkb2VzIG5vdCBoYXZlIGEgcmVxdWVzdFNlbnQgZXZlbnQ6IGZpbGUgPSAiIFNUUklOR19T
UEVDSUZJRVIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKICAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBhdXRvIHJlcXVlc3RTZW50RXZlbnQgPSBXVEY6OmdldDxSZXF1ZXN0U2VudEV2
ZW50PigqZXZlbnQpOworICAgICAgICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gc3RkOjpn
ZXQ8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKICAgICAgICAgICAgIFdlYkNvcmU6OlVSTFBh
cnNlciBwYXJzZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0LnVybCk7CiAgICAgICAgICAgICBt
X3VybCA9IHBhcnNlci5yZXN1bHQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzYsNyArMTc2LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVu
dAogICAgICAgICAgICAgICAgIHJlcGxheUZpbmlzaGVkKGV2ZW50KTsKICAgICAgICAgICAgIH0p
OwogCi0gICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwgKmV2ZW50KTsKKyAgICAgICAgc3RkOjp2
aXNpdCh2aXNpdG9yLCAqZXZlbnQpOwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIyMDgxMikK
KysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNzEsMTIgKzIzNzEsMTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPENhcHR1
cmVEZXZpY2U+OjpkZWNvZAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogdm9pZCBBcmd1
bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBib29sIGlzU3RyaW5nID0gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOworICAgIGJvb2wgaXNTdHJpbmcgPSBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCk7CiAgICAgZW5jb2RlciA8PCBpc1N0cmluZzsK
ICAgICBpZiAoaXNTdHJpbmcpCi0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U3RyaW5nPihr
ZXlQYXRoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpOwog
ICAgIGVsc2UKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5
UGF0aCk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBh
dGgpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SURCS2V5UGF0aD46OmRlY29kZShEZWNvZGVy
JiBkZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjgsNyArMTY4LDcgQEAgc3RydWN0IE1lZGlhQ29uc3RyYWludHM7CiAKICNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIElEQktleVBhdGgg
PSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwordXNpbmcgSURCS2V5UGF0aCA9IHN0
ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKIH0KICNlbmRpZgogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXVkaW9TYW1w
bGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGltZSYgdGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0Rh
dGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IHNpemVfdCBudW1iZXJPZkZyYW1lcykgZmluYWwgewogICAgICAgICBpZiAobV9kZXNjcmlwdGlv
biAhPSBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgQVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRm
b3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJl
YW1CYXNpY1R5cGUpOwotICAgICAgICAgICAgbV9kZXNjcmlwdGlvbiA9ICpXVEY6OmdldDxjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2Ny
aXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgICAgICAgICAgbV9kZXNjcmlwdGlvbiA9ICpzdGQ6
OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0
Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOwogCiAgICAgICAgICAgICAvLyBBbGxvY2F0
ZSBhIHJpbmcgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250YWluIDIgc2Vjb25kcyBvZiBhdWRp
by4KICAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmFtZXMgPSBtX2Rlc2NyaXB0aW9uLnNhbXBsZVJh
dGUoKSAqIDI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJL
aXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMDgxMikKKysrIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1M
U2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCB2b2lk
IHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQoCiAgICAgV2ViQ29yZTo6SFRNTFNl
bGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6SFRN
TEVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6OmNvcmUoZWxlbWVudCk7CiAgICAg
V2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEJlZm9yZSA9IFdlYktpdDo6Y29yZShiZWZv
cmUpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVm
UHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQogICAgICAgICB2
YXJpYW50RWxlbWVudCA9ICZkb3duY2FzdDxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oKmNv
bnZlcnRlZEVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVs
ZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjIwODEyKQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDgtMTcgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9E
T01IVE1MU2VsZWN0RWxlbWVudC5tbToKKyAgICAgICAgKC1bRE9NSFRNTFNlbGVjdEVsZW1lbnQg
YWRkOmJlZm9yZTpdKToKKwogMjAxNy0wOC0xNiAgWW9zaGlha2kgSml0c3VrYXdhICA8WW9zaGlh
a2kuSml0c3VrYXdhQHNvbnkuY29tPgogCiAgICAgICAgIFtQQUxdIE1vdmUgc3BpL2lvcyBhbmQg
c3BpL3dpbiBkaXJlY3RvcmllcyBpbnRvIFBBTApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbQkocmV2aXNpb24gMjIwODEy
KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgLSAodm9pZClhZGQ6KERPTUhUTUxF
bGVtZW50ICopZWxlbWVudCBiZQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwog
CiAgICAgYXV0byYgY29yZUVsZW1lbnQgPSAqY29yZShlbGVtZW50KTsKLSAgICBWYXJpYW50PFJl
ZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0
R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBF
bGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CiAgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50Pihjb3JlRWxlbWVudCkpCiAgICAgICAgIHZhcmlhbnRFbGVtZW50ID0gJmRvd25jYXN0
PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Pihjb3JlRWxlbWVudCk7CiAgICAgZWxzZSBpZiAo
aXM8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudD4oY29yZUVsZW1lbnQpKQpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIw
ODk5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBv
cnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMDgtMTcgIFlvc2hpYWtpIEpp
dHN1a2F3YSAgPFlvc2hpYWtpLkppdHN1a2F3YUBzb255LmNvbT4KIAogICAgICAgICBjaGVjay13
ZWJraXQtc3R5bGUgc2hvdWxkbid0IGNoZWNrIHNwYWNpbmcgaW4gI2VsaWYgcHJlcHJvY2Vzc29y
IGxpbmVzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAko
cmV2aXNpb24gMjIwODEyKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDM3ICszNywzNyBAQCBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEluaXRpYWwpCiB7Ci0gICAgVmFyaWFudDxp
bnQsIGRvdWJsZT4gdjE7CisgICAgc3RkOjp2YXJpYW50PGludCwgZG91YmxlPiB2MTsKICAgICBF
WFBFQ1RfVFJVRSh2MS5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGlu
dD4odjEpID09IDApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odjEpID09IDApOwog
CiAgICAgc3RydWN0IFQgewogICAgICAgICBUKCkgOiB2YWx1ZSgxNSkgeyB9CiAgICAgICAgIGlu
dCB2YWx1ZTsKICAgICB9OwogCi0gICAgVmFyaWFudDxULCBpbnQ+IHYyOworICAgIHN0ZDo6dmFy
aWFudDxULCBpbnQ+IHYyOwogICAgIEVYUEVDVF9UUlVFKHYyLmluZGV4KCkgPT0gMCk7Ci0gICAg
RVhQRUNUX1RSVUUoV1RGOjpnZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBC
YXNpYykKIHsKLSAgICBWYXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKKyAgICBzdGQ6
OnZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOwogICAgIEVYUEVDVF9UUlVFKHZhcmlh
bnQuaW5kZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHZhcmlhbnQp
ID09IDEpOwotICAgIEVYUEVDVF9UUlVFKCpXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IDEp
OwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVsbHB0
cik7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQp
KTsKLSAgICBFWFBFQ1RfRkFMU0UoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlh
bnQpKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHZhcmlhbnQpID09IDEpOworICAg
IEVYUEVDVF9UUlVFKCpzdGQ6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVD
VF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQ
RUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKIAogICAg
IHZhcmlhbnQgPSAxLjA7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDEpOwot
ICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQ
RUNUX1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBF
Q1RfVFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVD
VF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQ
RUNUX1RSVUUoc3RkOjpnZXQ8ZG91YmxlPih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RSgqc3RkOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAxLjApOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUo
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFM
U0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVTVChXVEZf
VmFyaWFudCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTMgKzk0LDEzIEBAIFRFU1QoV1RGX1Zhcmlh
bnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKLSAgICBW
YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdChW
aXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3Ry
aW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQp
OwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9
IDEuMGY7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6
OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZs
b2F0ID09IHR5cGUpOwogCiAKQEAgLTEyNywxMiArMTI3LDEyIEBAIFRFU1QoV1RGX1ZhcmlhbnQs
IFJldGFpblB0cikKICAgICAKICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQdHI7CiAgICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gcmV0YWluUHRyOwotICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dl
cj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7Ci0gICAg
V1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJl
ZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7
CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBl
OjpSZWZQdHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1vdmUocmV0YWluUHRy
KTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWluUHRyID09IHR5cGUp
OwogfQogI2VuZGlmCkBAIC0xNTQsMTggKzE1NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBWaXNp
dG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0
cmluZzsgfQogICAgICk7CiAKLSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFu
dCA9IDg7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlh
bnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAg
ICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAg
ICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZs
b2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAg
ICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xODAsNyArMTgw
LDcgQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nU3dpdGNoT24pCiAKICAgICBUeXBl
IHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZh
cmlhbnQgPSA4OworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQg
PSA4OwogICAgIHR5cGUgPSBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCiAgICAgICAgIFtdKGludCkg
eyByZXR1cm4gVHlwZTo6SW50OyB9LAogICAgICAgICBbXShmbG9hdCkgeyByZXR1cm4gVHlwZTo6
RmxvYXQ7IH0sCkBAIC0yMTMsNyArMjEzLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yKQogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFu
dDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gdiA9
IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0
cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQ
dHIpOwogCiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cjo6Y29uc3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9y
RGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMjI4LDcgKzIyOCw3IEBA
IFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJh
Iik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQ8
UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJl
ZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVR
KCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigp
KTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQdHIpCiAgICAgewog
ICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYo
JmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3Zl
KHJlZik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0g
V1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEp
ICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBURVNUKFdURl9W
YXJpYW50LCBSZWYpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBS
ZWY8UmVmTG9nZ2VyPiByZWYoYSk7Ci0gICAgICAgIFZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4sIGlu
dD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxSZWZMb2dnZXI+
LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYo
YSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMjY1LDExICsyNjUsMTEg
QEAgcHVibGljOgogCiBURVNUKFdURl9WYXJpYW50LCBPcGVyYXRvckFtcGVyc2FuZCkKIHsKLSAg
ICBWYXJpYW50PEhvbGRlcjxpbnQ+LCBpbnQ+IHYgPSBIb2xkZXI8aW50PigxMCk7Ci0gICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXQ8SG9sZGVyPGludD4+KHYpLmRhdGEgPT0gMTApOworICAgIHN0ZDo6
dmFyaWFudDxIb2xkZXI8aW50PiwgaW50PiB2ID0gSG9sZGVyPGludD4oMTApOworICAgIEVYUEVD
VF9UUlVFKHN0ZDo6Z2V0PEhvbGRlcjxpbnQ+Pih2KS5kYXRhID09IDEwKTsKIAogICAgIHYgPSAy
MDsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYpID09IDIwKTsKKyAgICBFWFBFQ1Rf
VFJVRShzdGQ6OmdldDxpbnQ+KHYpID09IDIwKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318467</attachid>
            <date>2017-08-17 21:20:51 -0700</date>
            <delta_ts>2017-08-18 07:11:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170817212050.patch</filename>
            <type>text/plain</type>
            <size>364201</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5OiBjb25zdCBpbiB1bnJlYWNoYWJsZSBjb2RlIGRl
Y29kZWQgaW5jb3JyZWN0bHksIGVycm9uZW91c2x5IHJlamVjdHMgYmluYXJ5IGFzIGludmFsaWQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3Nyw3ICs4MDc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwgZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiBy
ZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3BlcmFuZHM7CisgICAgVmVjdG9y
PHN0ZDo6dmFyaWFudDxTcGVjdWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5k
LCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdV
TUVOVFNfSU5DTFVESU5HX1RISVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxHUFJSZWcsIEpTQ19E
T01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IHJlZ3M7CiAKICAg
ICBhdXRvIGFwcGVuZENlbGwgPSBbJl0oRWRnZSYgZWRnZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjIwOTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zODg4LDcgKzM4ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGVDZWxs
T3BlcmFuZCYmIG90aGVyKQorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kJiYgb3RoZXIpCiAgICAgewogICAgICAgICBtX2ppdCA9IG90aGVyLm1faml0OwogICAg
ICAgICBtX2VkZ2UgPSBvdGhlci5tX2VkZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NuaXBwZXRSZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NuaXBwZXRSZWcuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbmlwcGV0UmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIxICs3MiwyMSBAQCBwdWJs
aWM6CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNHUFIo
KSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CisgICAgICAg
IHJldHVybiBzdGQ6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CiAgICAgfQogICAgIEZQUlJlZyBm
cHIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRlBSKCkpOwotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVncygpKTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8SlNWYWx1ZVJlZ3M+KG1fdmFyaWFudCk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZhcmlhbnQ8R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgc3Rk
Ojp2YXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVncz4gbV92YXJpYW50OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIxIEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAq
IHd0Zi9JblBsYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAg
ICAqIHd0Zi9WYXJpYW50Lmg6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNDo6YXJyYXk6Om9w
ZXJhdG9yW10gY29uc3QpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6aW52
b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6
OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNzo6ZGV0YWlsOjpoYXNfYWRk
cmVzc29mX2ltcGw6OmltcGwpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6
YWRkcmVzc29mKToKKyAgICAgICAgKG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X2ltcGw6
OmRlY2x0eXBlKToKKyAgICAgICAgKHN0ZDo6dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjphbGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5k
ZXgpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5kZXhfaW1wbCk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6dHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFpdCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29tbW9uX3RyYWl0X2ltcGwpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6Z2V0X2FsdF9pbXBsOjpBVVRPX1JF
RlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3Vu
aW9uOjpBVVRPX1JFRlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6
YmFzZTo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0
aW9uOjpiYXNlOjphdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6
dmlzaXRfdmlzaXRvcl9yZXR1cm5fdHlwZV9jaGVjayk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
dmlzaXRhdGlvbjo6YmFzZTo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OmJhc2U6Om1ha2VfZmRpYWdvbmFsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2
aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbDo6aW1wbDxtcGFyazo6bGliOjpp
bmRleF9zZXF1ZW5jZTxJczo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ6OnZhbHVlX3Zpc2l0b3I6OkRFQ0xUWVBFX0FVVE9fUkVUVVJOKToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OjpBVVRPX1JFVFVSTik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWx0OjphbHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Ok1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpiYXNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjppbmRleF8pOgorICAgICAg
ICAoc3RkOjpkZXRhaWw6OmJhc2U6OmFzX2Jhc2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJh
c2U6OmRhdGEpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJhc2U6OnNpemUpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRl
dGFpbDo6Y29uc3RydWN0b3I6OmN0b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RfYWx0KToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpjb25zdHJ1Y3Rvcjo6Z2VuZXJpY19jb25zdHJ1Y3QpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6Ok1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojphc3NpZ25tZW50OjplbXBsYWNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphc3NpZ25tZW50
Ojphc3NpZ25lcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNz
aWdubWVudDo6YXNzaWduX2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6
Z2VuZXJpY19hc3NpZ24pOgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfTU9W
RV9BU1NJR05NRU5UKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0NPUFlf
QVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6YXNzaWduKToKKyAgICAg
ICAgKHN0ZDo6ZGV0YWlsOjppbXBsOjpzd2FwKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojpzd2FwcGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojptb3ZlX25vdGhyb3cgY29uc3QpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Om92ZXJsb2FkPD46
Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3RkOjp2YXJpYW50Ojpub2V4Y2VwdCk6Cisg
ICAgICAgIChzdGQ6OnZhcmlhbnQ6OmVtcGxhY2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omdl
bmVyaWNfZ2V0X2ltcGw6OmdlbmVyaWNfZ2V0X2ltcGwpOgorICAgICAgICAoc3RkOjpnZXQpOgor
ICAgICAgICAoc3RkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChzdGQ6Om9wZXJhdG9yPCk6CisgICAgICAgIChzdGQ6Om9wZXJhdG9yPik6CisgICAg
ICAgIChzdGQ6Om9wZXJhdG9yPD0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcj49KToKKyAgICAg
ICAgKHN0ZDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omhhc2g6Om1lZXRzX3Jl
cXVpcmVtZW50cyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZCk6Cisg
ICAgICAgIChXVEY6OnN3aXRjaE9uKToKKyAgICAgICAgKFdURjo6aW5fcGxhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Oj0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFn
ZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19n
ZXRfcnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2Rl
c3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19jb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19zdG9y
YWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6
X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19kZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6Ol9f
c3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50
X2Jhc2U6On5fX3ZhcmlhbnRfYmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2Vfb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19kZXN0cm95X2Z1bmMpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6fl9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpWYXJpYW50PD46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX05PRVhDRVBUXyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9hY2Nlc3Nv
cjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Z2V0X2lmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdG9yX3RhYmxlOjpf
X3RyYW1wb2xpbmVfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnZpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19oYXNoX3Zpc2l0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHd0Zi90ZXh0
L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tOgorICAgICAgICAoV1RGOjpt
YXBNb2RlVG9CYWNraW5nSXRlcmF0b3IpOgorCiAyMDE3LTA4LTE3ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmx5IHVzZSAxNiBWRlAgcmVnaXN0ZXJzIGlmICFD
UFUoQVJNX05FT04pLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAKIAkJN0FGRUM2QUUx
RUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZFQzZCMDFFQjIyQjU5
MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjcyMzkxRDc4ODEx
OTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg2OTYxQjFGNDU0NEY3
MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBsYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVj
dFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyog
VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBT
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFz
aFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIu
aCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKKwkJ
CQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovLAogCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZp
c2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIHZhcmlhbnQ7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBj
bGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTczLDUgKzczLDQgQEAgdXNp
bmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwogdXNpbmcgV1RG
OjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11c2luZyBXVEY6OlZhcmlh
bnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luUGxhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVz
cGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdCgp
ID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KKyAgc3RydWN0IGlu
X3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90KCkgPSBkZWZhdWx0OyB9
OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5fcGxhY2VfdHlwZV90IHsg
ZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9OworCisgIGNvbnN0ZXhwciBp
bl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+IGNvbnN0
ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307CisKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4gaW5fcGxhY2VfdHlwZXt9
OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHJldmlzaW9uIDIyMDkw
MSkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0
ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1dGlsaXR5PgotIyBpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KICMgaW5jbHVk
ZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRlIDxpbml0aWFsaXplcl9s
aXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGluY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBpbmNsdWRlIDx3dGYvSW5Q
bGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICMgZGVmaW5lIFRSMl9P
UFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19f
Ojp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4NCw4IEBAIGNvbnN0ZXhw
ciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAyMC41LjYsIEluLXBsYWNl
IGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsK
LQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsKKy8vIGluX3Bs
YWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNvIGl0IGNhbiBiZSBzaGFy
ZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5nYWdlZCBzdGF0ZSBpbmRp
Y2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIyMDkwMSkK
KysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDc5ICsx
LDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0d2FyZSBTb2x1dGlvbnMg
THRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFyaWFudAogLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IK
LS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
Ci0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29weXJpZ2h0IE1pY2hhZWwg
UGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWltZXIuCisvLyBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwogLy8KLS8v
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9y
IG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFj
Y29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRoaXMgbGljZW5zZSAodGhl
ICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorLy8g
ZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZh
dGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRp
ZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisvLyBkbyBzbywgYWxsIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0vLyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLS8vIHBlcm1p
c3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlz
IGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQs
IHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKy8vIG11c3Qg
YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGlu
IHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxl
c3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJlIHNvbGVseSBpbiB0aGUg
Zm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CisvLyBh
IHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotLy8gSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0vLyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAotLy8gRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKy8vIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FS
RSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGllZCBmcm9tIGh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhmNzllNWVh
MWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9t
cGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFyaWFudC5ocHAgKGMyNmI4
NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8vIE1vZGlmaWVkIHRvIG1h
a2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisvLyBNb2RpZmllZCB0byB1
c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgsIGFuZCBpbmNsdWRlIFdU
Rjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoKKyAgIHZhcmlhbnQgc3lu
b3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBjbGFzcyB0ZW1wbGF0ZSB2
YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xhc3MgdmFyaWFudCB7Cisg
IHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMKKyAgICBjb25zdGV4cHIg
dmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFudChjb25zdCB2YXJpYW50
Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBub2V4Y2VwdChzZWUgYmVs
b3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBBcmdzJiYuLi4pOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwgaW5pdGlh
bGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xh
c3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudChpbl9wbGFjZV9pbmRl
eF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBVLCBj
bGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJpYW50KAorICAgICAgICBp
bl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgpOworCisgICAgLy8gMjAu
Ny4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgdmFyaWFudCYp
OworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0b3I9KFQmJikgbm9leGNl
cHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmllcnMKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNlKEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBl
bXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8
c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJp
YW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0aXZlPEksIHZhcmlhbnQ+
JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICAvLyAyMC43
LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXplX3QgaW5kZXgoKSBjb25z
dCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAgdm9pZCBzd2FwKHZhcmlh
bnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIwLjcuMywgdmFyaWFudCBo
ZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTsg
Ly8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNvbnN0ZXhwciBzaXplX3Qg
dmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworCisgIHRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisKKyAgdGVtcGxhdGUgPGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHlwZXMuLi4+PjsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0
aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+CisgIHVz
aW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBUPjsKKyAgdGVtcGxh
dGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25z
dCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5cGVzLi4uPj47CisKKyAg
Y29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAvLyAyMC43LjQsIHZhbHVl
IGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jikgbm9leGNl
cHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHBy
IHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4mCisgIGdldCh2YXJp
YW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+
CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+
JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBjb25zdCYmCisgIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mu
Li4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgVCYmIGdldCh2
YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25z
dCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXpl
X3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PHZhcmlhbnRf
YWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZih2YXJpYW50PFR5
cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUeXBlcz4KKyAg
Y29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHlwZXMuLi4+Kikg
bm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9uYWwgb3BlcmF0b3JzCisg
IHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBs
YXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxh
dGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHZh
cmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICAvLyAyMC43
LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3IsIGNsYXNzLi4uIFZhcmlh
bnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3ImJiwgVmFyaWFudHMmJi4u
Lik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3RydWN0IG1vbm9zdGF0ZTsK
KworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJhdG9ycworICBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsK
KyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNl
cHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFsZ29yaXRobXMKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFudDxUeXBlcy4uLj4mLCB2
YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgLy8gMjAuNy4xMCwg
Y2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2VzczsKKwor
ICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBo
YXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBoYXNoPHZhcmlhbnQ8VHlw
ZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0YXRlPjsKKworfSAvLyBu
YW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGV4Y2Vw
dGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG5ldz4K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIENP
TVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisKKy8vIE1TVkMg
MjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wgJiYgKCFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vycm9yICJNUGFyay5WYXJp
YW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIoQ0xB
TkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hhc19idWlsdGluCisjZGVm
aW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgeworI2lmbmRl
ZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCiAKLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9l
eGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0
aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsg
KHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhD
RVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRp
bl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0g
NykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJTFRJTl9BRERSRVNTT0YK
ICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFzX2J1aWx0aW4oX190eXBl
X3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Cisj
aWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0ZXhwciA+PSAyMDEzMDQK
KyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAorI2lmIF9faGFzX2ZlYXR1
cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykKKyNkZWZpbmUg
TVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFjZV90YWcgewotICAgIGlu
X3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9fY3BwX2dlbmVyaWNfbGFt
YmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfR0VORVJJQ19MQU1CREFT
CisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNl
X3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2VyX3NlcXVlbmNlKQorI2Rl
ZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVtcGxhdGUgPGNsYXNzIF9U
eXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZpbmVkKF9fY3BwX3JldHVy
bl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfUkVU
VVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci11
c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0
ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQoX19jcHBfbGliX3RyYW5z
cGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfVFJB
TlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5f
cGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFibGVfdGVtcGxhdGVzKSB8
fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJMRV9URU1QTEFURVMKKyNl
bmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19p
bl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAgX19USFJPV19F
WENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFkZWZpbmVkKF9fR0xJQkNY
WF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRTCisjZWxpZiBkZWZpbmVk
KF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+KSAgLy8gPj0gbGlic3Rk
YysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlUUworI2VuZGlmCiAKLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3M6
IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0IGJhZF92YXJp
YW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAgICBzdGQ6Omxv
Z2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNj
ZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0
X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciog
d2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0
X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVtZW50YXRpb24gbW92ZWQg
dG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI7Cisj
ZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+IGRlY2x0eXBlKF9fVkFf
QVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJrIHsKKyAgbmFtZXNwYWNl
IGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlkZW50aXR5IHsg
dXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNlIGNwcDE0IHsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IGFycmF5
IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgaW5k
ZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07CisgICAgICAgIH0KIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxf
VHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192
YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09m
ZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTww
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRf
dHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9U
eXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMp
LTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
bGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3NpemU7
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
X1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9U
eXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8
X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9z
aXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlhbnQ8
X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2Yu
Li4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXplX3Qg
X0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50
X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9J
bmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgs
IHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFy
aWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVf
dCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0lu
ZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xh
dGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlw
ZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Y29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAgVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0
eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5
cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNpemVf
dCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NI
QVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgp
LAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlw
ZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWlu
YXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBfX3R5
cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9y
X3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90
eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFs
dWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1l
IF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+Ojpf
X3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0
aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQot
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBl
bmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwtMSxf
SGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6X192
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxf
SGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9z
dG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAg
ICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYmCi0g
ICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0
cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBf
c3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0g
ICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFs
dWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgr
MSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdl
X3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFudDxf
VHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19h
bnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9UeXBl
cy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotdW5p
b24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2w9c3RkOjpp
c19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZXsK
LSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRhW04gPT0gMCA/IDEgOiBO
XTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0eXBlbmFtZSBzdGQ6OmFk
ZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBf
X3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3Ry
dWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5
cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlwZV90ID0gdHlwZW5hbWUg
c3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZh
bHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxs
cHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0eXBlbmFtZSBzdGQ6OmRl
Y2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgot
ICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwh
c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZv
aWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19m
aXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVzaW5nIGVuYWJsZV9pZl90
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAKLSAgICBfVHlwZSYgX19n
ZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZv
aWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0
YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19k
ZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2NvbnN0X3QgPSB0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92ZV9yZWZlcmVuY2VfdCA9
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsKIAotICAgIF9UeXBlJiBf
X2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsK
LSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29u
c3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAmdCkgbm9leGNlcHQgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsK
LSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5cGU7CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVt
b3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1ZSIpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9f
Z2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29u
c3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIF9fdmFsLl9f
ZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAg
IGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmbW92ZShUICYmdCkgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSog
X190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9zZXF1ZW5jZSA9IHN0ZDo6
aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElz
PgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4u
PjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5j
ZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5
cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0
KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUm
Jj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlw
ZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5nIGluZGV4
X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRzLi4uPjsKKyNlbHNlCisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAgIHN0cnVjdCBpbnRlZ2Vy
X3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsgcmV0dXJuIHNpemVvZi4u
LihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4K
KyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1ZW5jZTxzdGQ6OnNpemVf
dCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7CisKKyAgICAgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJocz4KKyAgICAgIHN0cnVj
dCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5jZTxMaHMuLi4+LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3NlcXVlbmNlPFJocy4u
Lj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxMaHMuLi4sIChzaXplb2Yu
Li4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOworCisgICAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhfc2VxdWVuY2UgPSB0eXBl
bmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbAor
ICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2lu
ZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRlPD4KLXVuaW9uIF9fdmFy
aWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7Ci0gICAgc3Ry
dWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4u
IF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2lt
cGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAotICAgIF9UeXBlJiBfX2dl
dChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRf
cnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7
Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9z
ZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8MD4+IHt9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJj57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBlIF9fdmFsOwotICAgIHN0
cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4u
IFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFrZV9pbmRleF9zZXF1ZW5j
ZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lmZGVmIE1QQVJLX1RSQU5T
UEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBzdGQ6OmVxdWFsX3RvPD47
CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3Bl
cmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGli
Ojpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsK
KyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6
Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKyNpZmRl
ZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIG5vdF9lcXVhbF90byA9
IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IG5vdF9lcXVhbF90byB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNv
bnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgIT0gbGliOjpmb3J3
YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Jj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47CisjZWxzZQorICAgICAg
c3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBS
aHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywg
UmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMp
IDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBl
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0
ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAg
ICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9
Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZ3Jl
YXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVjdCBncmVhdGVyIHsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QK
KyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+IGxpYjo6Zm9yd2FyZDxS
aHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
dW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgbGVz
c19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4K
KyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMg
JiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPD0g
bGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3RkOjpncmVhdGVyX2VxdWFs
PD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgeworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIg
YXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJF
VFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisg
ICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4s
X0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9CisgICAgaW5saW5lIG5hbWVz
cGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsK
LSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQo
X192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJl
ZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6
X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5cGVfdHJhaXRzPgorICAg
ICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29uc3RhbnQgPSBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVz
dC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6Ci0gICAgICAg
IF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25z
dGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2Fy
Z3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+IHt9OwogCi0gICAgX0hl
YWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9f
Z2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+
CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMuLi4+Ojp0eXBlOwogCi0g
ICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7
Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQot
ICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDww
PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAg
IH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1lc3BhY2Ugc3dhcHBhYmxl
IHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAot
ICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVy
biBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9pbXBsIHsKKyAgICAgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwKKyAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3RkOjpkZWNsdmFsPFUgJj4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpk
ZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OnRydWVfdHlw
ZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+
KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4p
OwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4uKTsKIAorICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0eXBlKHRlc3Q8VD4oMCkp
OworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9pbmRp
Y2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
dHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFyaWFu
dDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
LSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50
KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
bGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2Vf
Y29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19y
aHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAg
IHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJsZV9pbXBsPFQ+Ojp0eXBl
OwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sID0gaXNfc3dh
cHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90aHJvd19zd2FwcGFibGUg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgICAg
ICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0ZDo6ZGVjbHZhbDxUICY+
KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUK
LV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19ub3Rocm93X3N3YXBwYWJs
ZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19s
aHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1v
dmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0gIC8vIG5hbWVzcGFjZSBz
d2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBhYmxlID0gZGV0YWlsOjpz
d2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2FwcGFibGUgPSBkZXRhaWw6
OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdl
dDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0aW9uYWw+CisjaWZkZWYg
X01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUg
OiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYgJiZmLCBBcyAmJi4uLiBh
cykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxpYjo6Zm9yd2FyZDxBcz4o
YXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgog
Ci0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2Vz
KV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtdiwgRCAmJmQp
CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12KQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwgdHlwZW5hbWUgUHRyPgor
ICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12LCBQdHIgJiZwdHIpCisg
ICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSkuKnBtdikKIAotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNz
aWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVu
Y190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAg
ICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBn
ZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUuLi4gQXM+
CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtZiwgRCAmJmQsIEFz
ICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJkPEQ+KGQpLipwbWYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3Rl
eHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYuLi4gYXMpCisgICAgICAg
ICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYpKGxpYjo6Zm9yd2FyZDxB
cz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNz
aWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWdu
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxm
KXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+
X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4K
KyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBzdHJ1Y3QgaW52b2tl
X3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4p
KT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5PGRlY2x0eXBlKAorICAg
ICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+KCksIHN0ZDo6ZGVjbHZh
bDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19kZXN0
cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2Rlc3Ryb3lfZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fc3dh
cF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShf
VmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBfVmFyaWFudCAmIF9fbGhz
LF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5kZXg+KF9fbGhzKSxnZXQ8
X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9IGRldGFpbDo6aW52b2tl
X3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlw
ZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdF90ID0g
dHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
c3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ogot
X19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRh
aWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9J
bmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3Ry
dWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29u
c3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0
JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRl
eD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3QgaXNf
aW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBf
X2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9yZXN1bHRfdDxGLCBBcmdz
Li4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2Nv
bXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9W
YXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBh
cmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19y
aHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0
eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNf
dHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90PEYsIEFy
Z3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
Lj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZva2VfcmVzdWx0X3Q8Riwg
QXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190
eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07
CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlzX2ludm9jYWJsZSA9IGRl
dGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9i
YXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJp
dmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcg
aXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZvaWQsIFIsIEYsIEFyZ3Mu
Li4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFz
ZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBfVHlwZSxf
VHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBl
cjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sX09mZnNl
dD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAg
IHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4uPjo6X190
eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9D
dXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxw
ZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9DdXJyZW50
U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVjdCBfX2Nv
bWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uPixfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmluZV9zZXF1
ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmlu
ZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21i
aW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+PnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4OwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAg
ICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBl
ZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQscHRyZGlm
Zl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVkZWYgX19p
bmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRW50cnk+
Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlwZWRlZiBf
X2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25zdHJ1Y3Rp
YmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5cGVuYW1l
IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNlLAotICAg
ICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhf
c2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAot
ICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQot
ICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+
OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0
aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwK
LSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25z
dHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3Ry
dWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJs
ZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAg
ICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0g
ICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxf
bWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJv
b2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFz
X25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19t
b3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQot
dGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNf
aGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
aGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93
X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9J
bmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1lbW9yeT4KKyNpZmRlZiBN
UEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJu
IF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBuYW1lc3Bh
Y2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3Zl
LAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9f
dHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9f
di50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2UgaGFzX2FkZHJlc3NvZl9p
bXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZm
X3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwK
LSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQgJiYpOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2
b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGJvb2wgaW1wbCgp
IHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6dmFsdWUgfHwgc3RkOjpp
c191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1ZTsKKyAgICAgICAgICB9
CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19h
cmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6
OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07CisgICAgICAgIH0gIC8vIG5h
bWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJp
YW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVw
bGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0g
ICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9IGJvb2xfY29uc3RhbnQ8
aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRl
bXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0luZGV4PihfX3JocykpOwot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNz
aWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2NvcHlfZnVuY190
eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190eXBlCi1fX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIFQg
KmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAgICAgICAgcmV0dXJuIHN0
ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNzb2YoVCAm
YXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4gJmFyZzsKKyAgICAgICAg
fQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVu
YW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0
b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9f
Z2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAog
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBU
SU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWlsOjpoYXNfYWRkcmVzc29m
PFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4
LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0
b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGlu
ZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVsZXRlOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9f
c291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFn
ZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVj
dCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9ICAvLyBuYW1lc3BhY2Ug
Y3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUg
X19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5k
ZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNf
dHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdl
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6
Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50aXR5PFQ+IHt9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CisgICAgc3RydWN0IHJlbW92
ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4dGVudHM8VD4ge307CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1vdmVfYWxsX2V4dGVudHNf
dCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsKKworICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQgPSBzdGQ6OmludGVncmFs
X2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVu
YW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2Jh
Y2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lf
ZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVzaW5nIGJvb2xfc2VxdWVu
Y2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVkX3R5cGUgOiBzaXplX2Nv
bnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgor
ICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29sX3NlcXVlbmNlPHRydWUs
IEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisjaWZkZWYgTVBBUktfVFlQ
RV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlwZV9wYWNrX2VsZW1lbnQ8
SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUu
Li4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwgeworICAgICAgcHJpdmF0
ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBzZXQ7CisKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVjdCBzZXQ8aW5kZXhfc2Vx
dWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9OworCisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8dHJ1
ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIHVz
aW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5jZV9mb3I8VHMuLi4+Pnt9
KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190
eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQot
ICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZl
X3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9z
dG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3Rv
cmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3Rv
cmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAot
ICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBf
X29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rl
c3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29w
X3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAg
ICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAK
LSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAg
ICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVfcGFja19lbGVtZW50ID0g
dHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46OnR5cGU7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
OworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2lu
ZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnQ8SSwgVHMu
Li4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+
Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4u
Pjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQRV9UUkFJVFMKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfY29weV9jb25zdHJ1
Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFQ+
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21v
dmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfY29uc3Ry
dWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUKKyAgICAgICAgOiBib29s
X2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlIDogYm9v
bF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGUKKyAgICAgICAgOiBi
b29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6
OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBz
dHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xfY29uc3RhbnQ8X19pc190
cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAgLy8gbmFtZXNwYWNlIGxp
YgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJFVFVSTgogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9f
YWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFj
ZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Pgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgot
c3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNs
dHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090
aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVzcGFjZSBzdGQgewogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2Rl
dGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4u
KSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgot
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyNkZWZpbmUg
QVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9SRVRVUk4oLi4uKSB7IHJl
dHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxl
PD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0cnVj
dGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRy
dWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9j
b25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRl
bXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAgIDog
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMuLi4+
IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8pCisjZGVmaW5lIERFQ0xU
WVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Cisj
ZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsK
KyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4uLikgXAorICAtPiBtcGFy
azo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyByZXR1cm4gX19WQV9BUkdT
X187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5lIEFVVE9fUkVGUkVGX1JF
VFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
LT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19yZWZlcmVuY2U8ZGVj
bHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmluZSBERUNMVFlQRV9BVVRP
X1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18pIHsgcmV0dXJuIF9fVkFf
QVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0
aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYm
IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3Qu
Li4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92
YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5
Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFs
PF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMu
Li4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQm
PigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3Zhcmlh
bnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRf
c3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAg
ICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICB0eXBl
ZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBf
X2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8
VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlh
bnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0g
ICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmll
bmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBl
cy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAg
IHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5
cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAg
cmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsK
LSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
dGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBf
X21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29u
c3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5k
ZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3Ro
ZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3QgX19jb3B5X2NvbnN0cnVj
dChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3Ro
ZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJs
ZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAg
ICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2Vz
cyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgorICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJiYWRfdmFyaWFudF9hY2Nl
c3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lkIHRocm93X2JhZF92YXJp
YW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3Zh
cmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRlKCk7CisjZW5kaWYKKyAg
fQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
dm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVy
PAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29u
c3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAg
IChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19v
dGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAg
IF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUo
KnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFj
ZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3Zhcmlh
bnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
X19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0g
ICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xvY2FsX2JhY2t1cF9y
ZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2U8X0lu
ZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwotICAgICAgICBfX2Vt
cGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9fZGVzdHJveSgpOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKSB7Ci0gICAg
ICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRl
eDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVTCisgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJp
YW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7
fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
VD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFu
dCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+
KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAg
IHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIp
Ci0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVj
dChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29u
c3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9f
Y29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhl
cik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8
X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAg
ICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAg
ICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5k
ZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZh
bHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIFQ+IDog
dmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9f
aW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3Rl
eHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAg
ICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9f
eCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
Ci0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVz
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0
aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3Rk
Ojppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0o
X1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsK
LSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0
aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9f
YWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJp
YW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNv
bnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAg
ICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHMuLi4+PiA6IG1wYXJr
OjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisKKyAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwor
CisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICB1c2luZyB2YXJpYW50
X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPEksIFQ+Ojp0eXBl
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6OmFkZF9jb25zdDx2YXJp
YW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
LCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBU
PgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+
IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3Qg
dmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFk
ZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6OmlkZW50aXR5PG1wYXJrOjps
aWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAgc3RhdGljX2Fzc2VydChJ
IDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFyaWFudF9hbHRlcm5hdGl2
ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0ZXhwciBzdGQ6OnNpemVf
dCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpOworCisgIG5hbWVz
cGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGFsbCgpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4KKyAgICBpbmxpbmUgY29u
c3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiICYmIGFs
bChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG5vdF9mb3VuZCA9
IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90
IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7CisKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAg
ICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVvZi4uLihUcyk+IG1hdGNo
ZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4ufQorICAgICAg
fTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsKKyAgICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsKKyAgICAgICAgaWYgKG1h
dGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9mb3VuZCkgeworICAgICAg
ICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ID0g
aTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVy
YXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBf
X2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAg
ICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAg
ICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgo
KT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAgICAg
X19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBl
cy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21vdmVf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3Rh
YmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5k
ZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Cisj
ZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleF9pbXBsKHN0
ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGlkeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnMuLi4gYnMp
IHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQgPyBhbWJpZ3VvdXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5kX2luZGV4X2ltcGwoaWR4
LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRfaW5kZXhfaW1wbChyZXN1
bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2lu
ZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3RfZm91bmQsIDAsIHN0ZDo6
aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09
LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1wbCA9CisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkgIT0gYW1iaWd1b3VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4+Owor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZp
bmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxmaW5kX2luZGV4PFQsIFRz
Li4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgorICAgIHN0cnVjdCBmaW5k
X2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4geworICAg
ICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVjaWZpZWQgdHlwZSBpcyBu
b3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1iaWd1b3VzLCAidGhlIHNw
ZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRfaW5kZXhfY2hlY2tlZCA9
IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMuLi4+KCk+OworCisgICAg
c3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50
X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9
PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgp
XSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAg
VmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAgICAgIF9fb3RoZXIu
X19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAgICAgICAgICAgX19p
bmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBjbGFzcyBUcmFpdCB7IFRy
aXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9OworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg
SXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4g
Y2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCB0cmFpdCgpIHsK
KyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFsdWUKKyAgICAgICAgICAg
ICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIDogSXNB
dmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJsZTsKKyAgICB9CisKKyNp
ZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJh
aXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0
cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGU7
CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkgeworICAgICAgICAgIHJl
c3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXRfaW1w
bChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1wbGF0ZTw+Ci1jbGFzcyBW
YXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25z
dGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRyYWl0cz4KKyAg
ICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0IHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWl0IHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFpdHMuLi4gdHMp
IHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2ltcGwodCwgdHMuLi4pCisg
ICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0LCB0cy4uLik7CiAgICAg
fQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAg
IGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0cykgeworICAg
ICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsIHRz
Li4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICBz
dGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAg
ICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZT4oKS4uLik7CisKKyAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0ID0KKyAg
ICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVjdGlibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPigpLi4uKTsK
KworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2lnbmFibGVfdHJhaXQgPQor
ICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4uLik7CisKKyAgICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0ID0KKyAgICAgICAgICBj
b21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAgICAgICAgICAgICAgICAg
ICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMgY29uc3Rl
eHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRy
YWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfZGVzdHJ1
Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgot
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUK
LXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jo
cykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6
dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBuYW1lc3BhY2UgYWNjZXNz
IHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9fdHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLX07Cisg
ICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9E
RURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgIGlubGluZSBz
dGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9wbGFjZV9pbmRleF90PDA+
KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVhZF87Cisg
ICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1
cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3QgST4KKyAgICAgICAgaW5s
aW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4
X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6bGliOjpmb3J3YXJkPFY+
KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVtbXkgPSB0cnVlPgorICAg
ICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Vj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVGIG9wZXJhdG9yKCkoViAm
JnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEkg
LSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQorICAgICAgICB9OworCisg
ICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBs
PDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAg
ICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVh
ZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFYsIHN0ZDo6c2l6
ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE9fUkVGUkVGIGdldF9h
bHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAgQVVUT19SRUZSRUZfUkVU
VVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpKQorI2VuZGlm
CisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBkYXRhKG1wYXJrOjpsaWI6
OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQorICAgICAgfTsKKworICAg
ICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlw
ZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0
X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oYmFzZTo6Z2V0X2FsdDxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAgIH07CisKKyAgICB9ICAv
LyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRhdGlvbiB7CisKKyAgICAg
IHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNvbnN0IFQgJmF0KGNvbnN0
IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNv
bnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZS4uLiBJcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6OmxpYjo6cmVtb3ZlX2Fs
bF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBhcms6OmxpYjo6YXJyYXk8
VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgeworICAgICAgICAgIHJldHVy
biBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2soKSB7Cisg
ICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYsIEZzPjo6dmFsdWUuLi4p
LAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRgIHJlcXVpcmVzIHRoZSB2
aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJldHVy
biB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmNvbW1vbl90eXBlX3Q8
bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT4K
KyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAgICAgICB1c2luZyByZXN1
bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25fdHlwZV90PG1wYXJrOjps
aWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92aXNpdG9yX3JldHVybl90
eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAorICAgICAgICAgICAgICAg
ICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19OworICAgICAgICB9CiAK
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAqKAotICAg
ICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2Yo
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkK
LSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgICAgc3RydWN0IGltcGwg
eworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyBkaXNw
YXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTiht
cGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGPihmKSwK
KyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJcz4oc3RhdGljX2Nhc3Q8
VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAg
ICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3BhdGNoKG1wYXJrOjpsaWI6
OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JFVFVSTigmZGlzcGF0Y2hl
cjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRjaCkKKworICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAg
ICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlhZ29uYWxfaW1wbCgpCisg
ICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4oCisgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmluZGV4ZWRfdHlwZTxJ
LCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlw
ZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGli
OjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJy
YXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4pKQorCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAg
aW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8gbWFrZV9mZGlhZ29uYWwo
KQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBWLCBWcy4u
Lj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFy
azo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCkgPT0g
bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAgICAgICAgICAgICAiYWxs
IG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7CisgICAgICAgICAgcmV0
dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46OnNpemUo
KT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJu
ICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFk
ZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIp
KQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4
LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBW
cywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1
dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0
dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAo
KChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4o
IkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7
Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdC4uLiBJcywKKyAgICAg
ICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0
cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4s
IG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4gbHMpIHsKKyAgICAgICAg
ICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+e30sIGxzLi4uKS4u
Lik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsK
LSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0g
ICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikp
Ci0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1ha2VfZm1hdHJpeCgpIHsK
KyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAgICAgICAgICAgIG1wYXJr
OjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUo
KT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1hdHJpeF9pbXBsIHsKKyAg
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAgc3RydWN0IGltcGw7CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgICAgc3RydWN0
IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7CisgICAgICAgICAgICBp
bmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAgIEFV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4obXBh
cms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAgICAgIH07CisKKyAgICAg
ICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6ZV90Li4uIEpzLCB0eXBl
bmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5kZXhfc2Vx
dWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4uPiB7CisgICAgICAgICAg
ICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAg
IEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAgICAgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgpLi4uKSkKKyAgICAgICAg
ICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFt
ZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2ZtYXRy
aXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtl
X2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8CisgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgp
Pi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdl
dDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVfdCBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25hbDxWaXNpdG9yICYmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShhc19iYXNlKG1wYXJrOjps
aWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAgICAgICBpbmRleCkobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlz
aXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAg
ICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykp
KS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLikobXBhcms6OmxpYjo6Zm9y
d2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkKKyAgICAgIH07CisKKyAg
ICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAgICAgICAgc3RydWN0IHZp
c2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydCgK
KyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZpc2l0b3IsIFZhbHVlcy4u
Lj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAgcmVxdWlyZXMgdGhlIHZp
c2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29u
c3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIChf
X3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxw
dHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNpZmRlZiBfTVNDX1ZFUgor
I3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDApCisj
ZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3Io
KShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25zdAorICAgICAgICAgICAg
REVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1wYXJrOjpsaWI6OmZvcndh
cmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFsdWVzKS4uLikpCisjaWZk
ZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyAgICAgICAgfTsKIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVy
biAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29m
KF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHN0cnVjdCB2YWx1ZV92
aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xU
WVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0CisgICAgICAgICAgICBE
RUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNpdF9leGhhdXN0aXZlX3Zp
c2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IsCisgICAgICAgICAgICAg
ICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlKSku
Li4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4o
dmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX3Zh
bHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAgQVVUT19SRVRVUk4odmFs
dWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3Ip
fSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9y
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZ
UEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNp
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAg
ICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZz
KS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVu
YW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRP
IHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVD
TFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vmlz
aXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3ZhbHVlX2F0KHN0ZDo6c2l6
ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAg
ICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHRfYXQo
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ZhbHVlX3Zpc2l0b3IobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQorCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShWaXNpdG9yICYmdmlzaXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAg
ICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJk
PFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAgLy8gbmFtZXNwYWNlIHZp
c2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjph
ZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3Rk
OjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192
KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIGFsdChpbl9wbGFjZV90
LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9w
KQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2YWx1ZTsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxl
VHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1bmlvbiByZWN1
cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBl
cy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0
dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAg
dHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRf
dHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0
dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRf
dHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90
IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwgSW5k
ZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKGRlc3RydWN0
aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
bmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICBcCisgIHVu
aW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4LCBULCBUcy4uLj4g
eyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0
IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5vZXhjZXB0ICAgICAgICBc
CisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5f
cGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAg
IDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5k
ZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAgIDogdGFpbF8o
aW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihjb25z
dCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KGNv
bnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAorICAgIHJlY3Vyc2l2
ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNo
YXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbjxk
ZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxfOyAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpyZWN1cnNpdmVf
dW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFS
S19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9IGRlZmF1
bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSB7
fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJhaXQ6OlVuYXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9
IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04KKworICAg
IHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVz
dHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNzIGJhc2UgeworICAgICAg
cHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKHZhbHVlbGVzc190
IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGluZGV4XyhzdGF0aWNfY2Fz
dDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKGluX3Bs
YWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICA6IGRhdGFfKGluX3Bs
YWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiksCisg
ICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIHZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBp
bmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgfQorCisgICAgICBpbmxp
bmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNlcHQgeworICAgICAg
ICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFudF9ucG9zIDogaW5kZXhf
OworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2luZyBkYXRhX3QgPSByZWN1
cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsKKworICAgICAgZnJpZW5k
IGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7IHJldHVybiBiOyB9Cisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZhc19iYXNlKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGJhc2Ug
JiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3ZlKGIpOyB9CisgICAg
ICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNfYmFzZShjb25zdCBiYXNl
ICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisgICAgICBmcmllbmQgaW5s
aW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQor
ICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90ICZkYXRhKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHBy
IGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0
YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGRhdGFfdCAmJmRhdGEo
Y29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0YV87IH0KKwor
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIHsgcmV0dXJu
IHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1w
b2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFfdCBkYXRhXzsKKyAgICAg
IGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBl
cy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBvbGluZV9m
dW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpiYXNlOworICAgICAg
ZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX192
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zp
c2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAo
X192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVz
Li4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpCi0gICAgICAgIDogX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgo
KV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3IgeworI2lmZGVmIF9NU0NfVkVS
CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMCkK
KyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSB2b2lk
IG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0Ln5BbHQoKTsgfQorI2lm
ZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikp
Ci0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5h
bWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zp
c2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07CisjaWYgZGVm
aW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RP
Uih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHR5
cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RPUih0eXBlLCBi
YXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3RydWN0aWJsZV90cmFpdD4K
KyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9ERVNUUlVD
VE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJveSkgXAorICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4uPiwgZGVzdHJ1Y3RpYmxl
X3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGJhc2U8ZGVzdHJ1
Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVz
aW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPjsgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yICYmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVjdG9yICYpID0gZGVmYXVs
dDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGRlc3RydWN0
b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisgICAg
TVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxh
YmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisgICAgICAgIGlubGluZSB2
b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+aW5kZXhfID0gc3RhdGlj
X2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfREVT
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgfmRlc3RydWN0b3Io
KSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0
IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7fSwgKnRoaXMpOworICAg
ICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90Pigt
MSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAg
ICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBkZWxldGU7LAor
ICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBkZWxldGU7KTsKKworI3Vu
ZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRy
YWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0cnVjdG9yPFRyYWl0cz4g
eworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47CisKKyAgICAgIHB1Ymxp
YzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3VwZXIpCisgICAgICB1c2lu
ZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6CisjaWZuZGVmIE1QQVJLX0dF
TkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJh
dG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBjb25zdCB7CisgICAgICAg
ICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJoc0FsdD4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAg
cmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgc3RhdGljIFQgJmNv
bnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgICAgOjpu
ZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVzc29mKGEpKSkKKyAgICAg
ICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAgIH0KKworICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZCBnZW5lcmljX2Nv
bnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAgICAgICAgbGhzLmRlc3Ry
b3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAgICAgICAgICAgICByaHMu
aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAgICAgICAgICAgICAgW10o
YXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAgbGhzX2FsdCwgbXBhcms6
OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCkudmFsdWUpOworICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNlbmRpZgorICAgICAgICAg
ICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9y
d2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSByaHMuaW5kZXhfOworICAg
ICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3Jf
dDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJl
dHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0
Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9jb25zdHJ1
Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUm
JiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZv
cndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+
KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9f
YXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IobW92
ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+LCBtb3ZlX2NvbnN0cnVj
dGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgY29uc3RydWN0b3I8dHJh
aXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNp
bmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25zdCBtb3ZlX2NvbnN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3RvciAmb3BlcmF0
b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBt
b3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0
OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNU
T1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVsdDspOworCisgICAgTVBB
UktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAor
ICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3IgJiZ0aGF0KSBub2V4Y2Vw
dCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRz
Pjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVjdG9yKHZhbHVlbGVzc190
e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgbXBhcms6Omxp
Yjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NP
TlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJL
X1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0
cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBj
b3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RP
Uihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwKKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4sIGNvcHlfY29u
c3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBtb3ZlX2NvbnN0
cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHVibGljOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1Y3Rvciwgc3VwZXIpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRv
cj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfY29u
c3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5X2NvbnN0cnVjdG9yICZv
cGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAor
ICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0cnVjdG9yICYmKSA9IGRl
ZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05T
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAgY29w
eV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0KSA9IGRlZmF1bHQ7KTsK
KworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2
YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9y
ICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZhbHVlbGVzc190e30pIHsK
KyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgdGhhdCk7CisgICAgICAg
IH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3IoY29uc3QgY29weV9jb25z
dHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNU
UlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIGFzc2ln
bm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsKKyAgICAgIHVzaW5nIHN1
cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBwdWJsaWM6CisgICAgICBJ
TkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNlKEFyZ3MgJiYuLi4gYXJn
cykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3RfYWx0KGFjY2Vzczo6YmFz
ZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkgeworICAgICAgICB0
aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRoaXMtPmNvbnN0cnVjdF9h
bHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3RydWN0IGFzc2lnbmVyIHsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVuYW1lIFRoYXRBbHQ+Cisg
ICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhpc19hbHQsIFRoYXRBbHQg
JiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2lnbl9hbHQodGhpc19hbHQs
IG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJpYW50SW5kZXgtMT4oX192
Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlzaXRfaGVscGVyPF9WYXJp
YW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNlcy4uLj4+OjpfX3Zpc2l0
KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKQotICAgICAgICAgICAg
OiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotICAgIH0K
LX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
QXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwgVD4gJmEsIEFyZyAmJmFy
ZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7CisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MjQ0KQor
I2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcp
OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29uc3QgeworICAgICAgICAg
ICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmdfKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAqdGhpc187CisgICAgICAg
ICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBtcGFyazo6bGliOjpmb3J3
YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGliOjpib29sX2NvbnN0YW50
PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFy
Zz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAgICAgfQogCi10ZW1wbGF0
ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
dmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4u
Lil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNfYXNzaWduKFRoYXQg
JiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYg
dGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5n
LgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZp
c2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAgICAgdGhhdC5pbmRleCgp
LAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICBbdGhpc10oYXV0
byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAgICAgICAgIHRoaXMtPmFz
c2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBtcGFyazo6bGliOjpmb3J3
YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhpc30KKyNlbmRpZgorICAg
ICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAgICBtcGFyazo6
bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2Fz
c2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2Yu
Li4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9
X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zp
c2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYg
X192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9o
ZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1Zhcmlh
bnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAg
IF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9f
dmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Cisj
ZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVfYXNzaWduYWJsZV90cmFp
dCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9hc3NpZ25t
ZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4gICAgICAgICAgICBcCisg
ICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdubWVudDx0cmFpdHM8VHMu
Li4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3ZlX2Fzc2lnbm1lbnQsIHN1
cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25zdCBtb3ZlX2Fzc2lnbm1l
bnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBtb3ZlX2Fzc2lnbm1lbnQo
bW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IG1v
dmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9yPSht
b3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRf
TU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBtb3Zl
X2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3NpZ25tZW50ICYmdGhhdCkg
bm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNf
YXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCgKKyAgICAg
ICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9y
PShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5U
X01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQg
PSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFzcyBjb3B5X2Fzc2lnbm1l
bnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoY29weV9hc3NpZ25h
YmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5
X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxlX3RyYWl0PiAgICAgICAg
ICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBtb3ZlX2Fzc2lnbm1l
bnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKGNvcHlfYXNzaWdu
bWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1
cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvbnN0IGNvcHlf
YXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAgICAg
IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZhdWx0Oyk7CisKKyAgICBN
UEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwK
KyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25tZW50
ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24odGhhdCk7CisgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9B
U1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlbGV0ZTspOwor
CisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNvcHlfYXNzaWdubWVudDx0
cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19DVE9SKGltcGws
IHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGluZSB2b2lkIGFzc2lnbihB
cmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nlc3M6OmJhc2U6OmdldF9h
bHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgc3dhcChpbXBsICZ0
aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYgdGhh
dC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5nLgor
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5pbmRleCgpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMtPmluZGV4KCksCisjaWZk
ZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdF9h
bHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisj
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVye30K
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwgKnJocyA9IG1wYXJrOjps
aWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5tb3ZlX25vdGhyb3coKSAm
JiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKGxocywgcmhz
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6OmxpYjo6bW92ZSgqcmhz
KSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8vIEVYVEVOU0lPTjogV2hl
biB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhzYCB0aHJvd3MKKyAgICAg
ICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVjdGlibGUgdGhlbiB3ZSBt
b3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFuZCBwcm92aWRlIHRoZSBz
dHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUoKmxo
cykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAgICAgaWYgKHRtcC5tb3Zl
X25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqcmhz
LCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhy
b3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVj
dCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgorICAgICAgICAgIHRoaXMt
PmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUodG1wKSk7CisgICAgICAg
IH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRv
cixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8c2l6ZW9m
Li4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNpdCgKLSAgICAgICAgX192
aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotfQorICAgICAgcHJpdmF0
ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBzdHJ1Y3Qgc3dhcHBlciB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBlbmFtZSBUaGF0QWx0Pgor
ICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRoaXNfYWx0LCBUaGF0QWx0
ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAgICAg
ICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
IH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhz
LmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAgICAgICBf
X2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFy
ZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQorICAgICAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAgICAgICAgICAgICAgICAg
e3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZS4uLn0KKyAgICAg
ICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jo
cy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKLSAgICAgICAg
ICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjoKLSAgICAgICAgICBf
X2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOwotfQorICAg
IHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lkIG9wZXJhdG9yKCkoKSBj
b25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ8
VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5nIG92ZXJsb2FkPFRzLi4u
Pjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5PFQ+IG9wZXJhdG9yKCko
VCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAh
KF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlwZW5hbWUgbXBhcms6Omxp
Yjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46OnR5cGU7CisKKyAgfSAg
Ly8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBjbGFzcyB2YXJpYW50
IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAorICAgICAgICAgICAgICAg
ICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBhbHRlcm5hdGl2ZS4iKTsK
KworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6OmlzX2FycmF5PFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2Vy
dChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6dmFsdWUuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2ZSBhIHJlZmVyZW5jZSB0
eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGli
OjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAg
ICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMgYW4gYWx0ZXJuYXRpdmUu
Iik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBGcm9u
dCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMuLi4+LAorICAgICAgICBt
cGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnQoKSBub2V4
Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8MD57fSkge30KKwor
ICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7CisgICAgdmFyaWFudCh2YXJp
YW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPG1wYXJrOjpsaWI6
OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBUID0gZGV0YWlsOjpiZXN0
X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRh
aWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50KEFyZyAmJmFyZykgbm9l
eGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6
ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBt
cGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6
OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAg
ICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhj
ZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgc3Rk
OjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFy
Z3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90
PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFu
dCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXpl
cl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVj
dGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9s
aXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
cy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWws
IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8
CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFs
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25z
dGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+LAorICAgICAgICBBcmdz
ICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8
ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBs
YXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRf
aW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwKKyAgICAg
ICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdz
KSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNl
X2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9
CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPShj
b25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZvcGVyYXRvcj0odmFyaWFu
dCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZywKKyAgICAgICAg
ICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxtcGFyazo6bGliOjpk
ZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9IGRldGFpbDo6YmVzdF9t
YXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWls
OjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQgJiwgQXJnPjo6dmFsdWUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxl
PFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0g
MD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFyZykgbm9leGNlcHQoCisg
ICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFyZz46OnZhbHVlICYmCisg
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSkpIHsK
KyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4o
YXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0
eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisg
ICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBB
cmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZlbXBsYWNlKEFyZ3MgJiYu
Li4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4obXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAor
ICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBVcCwKKyAgICAgICAgdHlw
ZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFj
a19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5lIFQgJmVtcGxhY2Uoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICByZXR1
cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBU
LAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0
YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICBtcGFyazo6
bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVl
LCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYmLi4uIGFyZ3MpIHsKKyAg
ICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5h
bWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisg
ICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4u
Pjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1w
bGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5pbmRleCgpOworICAgIH0K
KworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRydWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1teSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpp
c19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlhbnQgJnRoYXQpIG5vZXhj
ZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNf
bm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkgeworICAgICAgaW1wbF8u
c3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgorICAgIGRldGFpbDo6aW1w
bDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFpbDo6YWNjZXNzOjp2YXJp
YW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICB9
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5l
IGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOworICB9CisKKyAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wg
aG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwg
VHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1Y3QgZ2VuZXJpY19nZXRf
aW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChpbnQpIHt9CisKKyAgICAg
IGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAgICAgICBB
VVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZhcmlhbnQ6OmdldF9hbHQ8
ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZW5lcmlj
X2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5lcmljX2dldF9pbXBsPEks
IFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8gMCA6ICh0aHJvd19iYWRf
dmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4o
dikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICZ2KSB7
CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJr
OjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVu
YW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAg
ICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIFQgJmdldCh2YXJpYW50
PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8
VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2YXJpYW50PFRzLi4uPiAm
JnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4u
Pjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IFQgJmdldChj
b25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgY29uc3QgVCAmJmdl
dChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6Zmlu
ZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOwor
ICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1dG8gKiAqLyBBVVRPIGdl
bmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JFVFVSTih2ICYmIGhvbGRz
X2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAgID8gbXBhcms6OmxpYjo6
YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdikudmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKwor
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25z
dGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwg
dmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsKKyAgfQorCisgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2
ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXRfaWY8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBj
b25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBnZXRfaWYodmFyaWFudDxU
cy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRldGFpbDo6ZmluZF9pbmRl
eF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFk
ZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2KSBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxU
LCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4K
KyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgdmFyaWFudDxUcy4uLj4g
JmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVY
UFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBlcXVhbF90b3t9LCBsaHMs
IHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgor
ICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAg
dmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFsX3Rve30sIGxocywgcmhz
KSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307CisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgdmFy
aWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxfdG87CisjaWZkZWYgTVBB
UktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwg
bm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy5pbmRleCgp
ICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCks
IG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0KIAotY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsg
cmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRl
IGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBj
b25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0
JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3RydWN0IF9faGFzaF92aXNp
dG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigp
KF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9f
eCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgewor
ICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6
bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgo
KSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMu
aW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiAhcmhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhz
LmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAK
LS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZs
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4u
Lj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1
c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJocyk7CisjZWxzZQorICAg
IHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAocmhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpIHx8
CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNsYXNzLi4uIEY+Ci1hdXRv
IHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlzaXQobWFrZVZpc2l0b3Io
c3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKLXsKLSAgICByZXR1
cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJk
PFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxo
cy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgp
IDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5p
bmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0
KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJu
IGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFyaHMudmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPCByaHMuaW5k
ZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAg
ICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc19lcXVh
bHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXJfZXF1
YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4
KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSB8fAor
ICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAgICAgIGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9CiAKLW5hbWVzcGFj
ZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+Cisg
IGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNpdG9yICYmdmlzaXRvciwg
VnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgIChkZXRhaWw6
OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAgICAgICAgICAgID8gKHZv
aWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCkpLAorICAgICAg
ICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVlKG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKworICBz
dHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
bW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG1v
bm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKwor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkg
bm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBh
dXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICB2YXJpYW50
PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChyaHMpKSkKKyAgICAgIC0+
IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChyaHMpOworICB9CisKKyAg
bmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5hbWVzcGFjZSBoYXNoIHsK
KworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+CisgICAgICBjb25zdGV4
cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX2Nv
cHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92
ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46OnZhbHVlOworICAgICAg
fQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIGlz
X2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8Sz47CisgICAgICAgIHJl
dHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAgICAgICAgICAgc3RkOjpp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNf
bW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAgIH0gIC8vIG5hbWVzcGFj
ZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5kZWYgQVVUTworI3VuZGVm
IEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVmIEFVVE9fUkVGUkVGX1JF
VFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xUWVBFX0FVVE9fUkVUVVJO
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgaGFzaDxkZXRhaWw6OmVu
YWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAgbXBhcms6OmxpYjo6ZW5h
YmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZDwKKyAgICAg
ICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+Ojp2YWx1ZT4+PiB7Cisg
ICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+OworICAgIHVzaW5nIHJlc3Vs
dF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1c2luZyBkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPQorICAgICAgICAg
IHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgID8gMjk5NzkyNDU4ICAv
LyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9uIGNyZWF0aW9uCisgICAg
ICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFN
QkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZhbHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6OmRlY2F5X3Q8ZGVjbHR5
cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IG1wYXJr
OjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisjZWxz
ZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1cm4gaGFzaF9jb21iaW5l
KHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsKKyAgICB9CiAKLXRlbXBs
YXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOworICAgIHBy
aXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgIHN0cnVjdCBoYXNoZXIg
eworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSBzdGQ6OnNpemVf
dCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAgICAgIHVzaW5nIGFsdF90
eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1c2luZyB2YWx1ZV90eXBl
ID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PHR5cGVuYW1lIGFsdF90
eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQu
dmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0YXRpYyBzdGQ6OnNpemVf
dCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVfdCByaHMpIHsKKyAgICAg
IHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwgNikgKyAobGhzID4+IDIp
OwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3RydWN0IGhhc2g8bW9ub3N0
YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0ZTsKKyAgICB1c2luZyBy
ZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVy
YXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlz
aXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJl
dHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkgYXR0cmFjdGl2ZSByYW5k
b20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3BhY2Ugc3RkCit9ICAvLyBu
YW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNpbmcgV1RGOjpWYXJpYW50
OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9D
UFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KK2F1dG8gc3dp
dGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6
OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQoreworICAgIHJldHVybiBz
dGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2Fy
ZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkK
LSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAotc3RhdGljIFZhcmlh
bnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1v
ZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6
Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMgc3RkOjp2YXJp
YW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBN
b2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9y
OjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAyMjA5MDEpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9sb2NhbGU7CiAg
ICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0
b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVyYXRv
cklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOwogICAgIE1vZGUgbV9t
b2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VN
YWMubW0JKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50PFRleHRCcmVha0l0ZXJh
dG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0
b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVy
YXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNl
IFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjc4IEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9jcmVkZW50aWFscy9DcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRyYWN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5
Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFyY2hQYXJhbXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZv
cm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVm
ZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVy
Vmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0Qm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJl
cXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlLZXkpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6
OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0
QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YXJyYXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6bnVtYmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmJpbmFyeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJheSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0aFZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dnaW5nU3Ry
aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdGVk
SW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRyYWNrKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFU
cmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VT
ZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZl
cik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNpbmdTdGF0dXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5nUmVzdWx0OjpjYW5kaWRh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1heWJlQ3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0
aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2VyUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAgICogY3J5cHRvL0NyeXB0
b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVD
cnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaDoKKyAgICAg
ICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkpOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6CisgICAgICAgICogY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1I
S0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1w
b3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktE
RjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL3Bh
cmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAgICAgICAgKiBjcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oOgorICAgICAgICAqIGNy
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oOgorICAgICAgICAq
IGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtl
eUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkSXRlbSk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0RP
TU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXhSZWFkT25seTo6
Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRh
cmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MpOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZXN1bHQgY29u
c3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAqIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwv
SFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2Up
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1VSTFNlYXJjaFBhcmFt
cy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNW
YWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNDdXJyZW50Q29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Omhhc092ZXJyaWRlQWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Om92ZXJyaWRlQWxwaGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52YXNQYXR0ZXJuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBjb25zdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbiBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
YWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldlYkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVt
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25f
aHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtJbnB1dCBFdmVudHNdIFJlbmFtZSBpbnB1dFR5
cGUgImZvcm1hdEZvcmVDb2xvciIgdG8gImZvcm1hdEZvbnRDb2xvciIKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvY2FjaGUvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCAr
NjMsOCBAQCB2b2lkIENhY2hlOjpkb01hdGNoKHN0ZDo6b3B0aW9uYWw8UmVxdWVzCiB7CiAgICAg
UmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAoaW5mbykgewotICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1
ZSgpKSkgewotICAgICAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVl
c3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7Cisg
ICAgICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8u
dmFsdWUoKSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5tZXRo
b2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHsKICAgICAgICAgICAgICAg
ICBpZiAobWF0Y2hUeXBlID09IE1hdGNoVHlwZTo6T25seUZpcnN0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIHByb21pc2UtPnJlc29sdmUoKTsKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lkIENhY2hl
OjphZGRBbGwoVmVjdG9yPFJlcXVlc3RJbmZvPiYmCiB2b2lkIENhY2hlOjpwdXQoUmVxdWVzdElu
Zm8mJiBpbmZvLCBSZWY8RmV0Y2hSZXNwb25zZT4mJiByZXNwb25zZSwgRE9NUHJvbWlzZURlZmVy
cmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0
OwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+Pihp
bmZvKSkgewotICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+
KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6Omdl
dDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAg
aWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJl
amVjdChFeGNlcHRpb24geyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiUmVxdWVzdCBtZXRob2Qg
aXMgbm90IEdFVCIpIH0pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTgwLDggKzE4MCw4IEBA
IHZvaWQgQ2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjwKIHZvaWQgQ2FjaGU6OnJl
bW92ZShSZXF1ZXN0SW5mbyYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgRE9N
UHJvbWlzZURlZmVycmVkPElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0
Y2hSZXF1ZXN0PiByZXF1ZXN0OwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0
cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgewotICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVm
UHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAg
IHJlcXVlc3QgPSBzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5v
bk51bGwoKTsKICAgICAgICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiICYmICFvcHRp
b25zLmlnbm9yZU1ldGhvZCkgewogICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwMSw4ICsyMDEsOCBAQCB2b2lkIENhY2hlOjprZXlz
KHN0ZDo6b3B0aW9uYWw8UmVxdWVzdEluCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVx
dWVzdDsKICAgICBpZiAoaW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAgICAgICAgcmVx
dWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVh
c2VOb25OdWxsKCk7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxG
ZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1ZXN0ID0gc3Rk
OjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFzZU5vbk51bGwo
KTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9u
cy5pZ25vcmVNZXRob2QpIHsKICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoVmVjdG9y
PFJlZjxGZXRjaFJlcXVlc3Q+PiB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlhbENyZWF0aW9uT3B0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY3JlZGVudGlhbHMv
Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dHJ1Y3QgQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyB7Ci0gICAgdXNpbmcgUGFzc3dvcmRDcmVk
ZW50aWFsSW5pdCA9IFZhcmlhbnQ8UGFzc3dvcmRDcmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxG
b3JtRWxlbWVudD4+OworICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBzdGQ6OnZh
cmlhbnQ8UGFzc3dvcmRDcmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4+Owog
CiAgICAgc3RkOjpvcHRpb25hbDxQYXNzd29yZENyZWRlbnRpYWxJbml0PiBwYXNzd29yZDsKICAg
ICBzdGQ6Om9wdGlvbmFsPEZlZGVyYXRlZENyZWRlbnRpYWxJbml0PiBmZWRlcmF0ZWQ7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCShyZXZpc2lvbiAy
MjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDM2ICs0MiwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZl
dGNoQm9keSBGZXRjaEJvZHk6OmV4dHJhY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSW5pdCYmIHZhbHVlLCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZlB0cjxCbG9iPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25z
dCBCbG9iPiBibG9iID0gV1RGOjpnZXQ8UmVmUHRyPEJsb2I+Pih2YWx1ZSkucmVsZWFzZU5vbk51
bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QmxvYj4+KHZhbHVl
KSkgeworICAgICAgICBSZWY8Y29uc3QgQmxvYj4gYmxvYiA9IHN0ZDo6Z2V0PFJlZlB0cjxCbG9i
Pj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGNvbnRlbnRUeXBlID0gYmxvYi0+
dHlwZSgpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYmxvYikpOwogICAgIH0K
LSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1
ZSkpIHsKLSAgICAgICAgUmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IFdURjo6Z2V0PFJl
ZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKSkgeworICAgICAg
ICBSZWY8RE9NRm9ybURhdGE+IGRvbUZvcm1EYXRhID0gc3RkOjpnZXQ8UmVmUHRyPERPTUZvcm1E
YXRhPj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGF1dG8gZm9ybURhdGEgPSBG
b3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLmdldCgpLCBkb21Gb3JtRGF0YS0+
ZW5jb2RpbmcoKSwgJnN0YXRpY19jYXN0PERvY3VtZW50Jj4oY29udGV4dCkpOwogICAgICAgICBj
b250ZW50VHlwZSA9IG1ha2VTdHJpbmcoIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIs
IGZvcm1EYXRhLT5ib3VuZGFyeSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHko
V1RGTW92ZShmb3JtRGF0YSkpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0
IFVSTFNlYXJjaFBhcmFtcz4gcGFyYW1zID0gV1RGOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFt
cz4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0
IFVSTFNlYXJjaFBhcmFtcz4gcGFyYW1zID0gc3RkOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFt
cz4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IEhUVFBI
ZWFkZXJWYWx1ZXM6OmZvcm1VUkxFbmNvZGVkQ29udGVudFR5cGUoKTsKICAgICAgICAgcmV0dXJu
IEZldGNoQm9keShXVEZNb3ZlKHBhcmFtcykpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8
Y29uc3QgQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdURjo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+
KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKSkgeworICAgICAgICBSZWY8Y29uc3QgQXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IHN0ZDo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYnVmZmVyKSk7
CiAgICAgfQotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4gYnVm
ZmVyID0gV1RGOjpnZXQ8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+KHZhbHVlKS5yZWxlYXNlTm9u
TnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4gYnVm
ZmVyID0gc3RkOjpnZXQ8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+KHZhbHVlKS5yZWxlYXNlTm9u
TnVsbCgpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYnVmZmVyKSk7CiAgICAg
fQogCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih2YWx1ZSkpOwor
ICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsKICAgICBj
b250ZW50VHlwZSA9IEhUVFBIZWFkZXJWYWx1ZXM6OnRleHRQbGFpbkNvbnRlbnRUeXBlKCk7Ci0g
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKFdURjo6Z2V0PFN0cmluZz4odmFsdWUpKSk7Cisg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4odmFsdWUpKSk7CiB9
CiAKIEZldGNoQm9keSBGZXRjaEJvZHk6OnJlYWRhYmxlU3RyZWFtQm9keSgpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHJldmlzaW9uIDIyMDkwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDE1ICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdW1lQXNTdHJlYW0oRmV0
Y2hCb2R5T3duZXImLCBGZXRjaFJlc3BvbnNlU291cmNlJik7CiAjZW5kaWYKIAotICAgIGJvb2wg
aXNCbG9iKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3Qg
QmxvYj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzRm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxGb3JtRGF0YT4+KG1fZGF0YSk7IH0KLSAgICBib29s
IGlzQXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
Zjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXJW
aWV3KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJy
YXlCdWZmZXJWaWV3Pj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNVUkxTZWFyY2hQYXJhbXMoKSBj
b25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBVUkxTZWFyY2hQ
YXJhbXM+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNCbG9iKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQmxvYj4+KG1f
ZGF0YSk7IH0KKyAgICBib29sIGlzRm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxGb3JtRGF0YT4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlC
dWZmZXIoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBB
cnJheUJ1ZmZlcj4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29u
c3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXJW
aWV3Pj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNVUkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+Piht
X2RhdGEpOyB9CisgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFN0cmluZz4obV9kYXRhKTsgfQogICAgIGJvb2wgaXNSZWFkYWJsZVN0cmVhbSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNSZWFkYWJsZVN0cmVhbTsgfQogCi0gICAgdXNpbmcgSW5pdCA9
IFZhcmlhbnQ8UmVmUHRyPEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEFy
cmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgUmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4s
IFN0cmluZz47CisgICAgdXNpbmcgSW5pdCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8QmxvYj4sIFJl
ZlB0cjxBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9y
bURhdGE+LCBSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPiwgU3RyaW5nPjsKICAgICBzdGF0aWMgRmV0
Y2hCb2R5IGV4dHJhY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEluaXQmJiwgU3RyaW5nJik7
CiAgICAgc3RhdGljIEZldGNoQm9keSBsb2FkaW5nQm9keSgpIHsgcmV0dXJuIHsgfTsgfQogICAg
IHN0YXRpYyBGZXRjaEJvZHkgcmVhZGFibGVTdHJlYW1Cb2R5KCk7CkBAIC05NSwxNiArOTUsMTYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbnN1bWVUZXh0KFJlZjxEZWZlcnJlZFByb21pc2U+JiYs
IGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgY29uc3VtZUJsb2IoRmV0Y2hCb2R5T3duZXImLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKIAotICAgIGNvbnN0IEJsb2ImIGJsb2JCb2R5KCkgY29u
c3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpLmdldCgpOyB9Ci0g
ICAgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxGb3JtRGF0
YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQot
ICAgIGNvbnN0IEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlckJvZHkoKSBjb25zdCB7IHJldHVybiBX
VEY6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgY29u
c3QgQXJyYXlCdWZmZXJWaWV3JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyByZXR1cm4g
V1RGOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAg
ICBTdHJpbmcmIHRleHRCb2R5KCkgeyByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9
Ci0gICAgY29uc3QgU3RyaW5nJiB0ZXh0Qm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFN0
cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFy
YW1zQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgQmxvYiYgYmxvYkJvZHkoKSBjb25zdCB7
IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBG
b3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPEZvcm1EYXRhPj4o
bV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSBjb25z
dCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9CisgICAg
Y29uc3QgQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBB
cnJheUJ1ZmZlclZpZXcmIGFycmF5QnVmZmVyVmlld0JvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6
OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKS5nZXQoKTsgfQorICAgIFN0
cmluZyYgdGV4dEJvZHkoKSB7IHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KKyAg
ICBjb25zdCBTdHJpbmcmIHRleHRCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8U3RyaW5n
PihtX2RhdGEpOyB9CisgICAgY29uc3QgVVJMU2VhcmNoUGFyYW1zJiB1cmxTZWFyY2hQYXJhbXNC
b2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+
KG1fZGF0YSkuZ2V0KCk7IH0KIAotICAgIHVzaW5nIERhdGEgPSBWYXJpYW50PHN0ZDo6bnVsbHB0
cl90LCBSZWY8Y29uc3QgQmxvYj4sIFJlZjxGb3JtRGF0YT4sIFJlZjxjb25zdCBBcnJheUJ1ZmZl
cj4sIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+LCBSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1z
PiwgU3RyaW5nPjsKKyAgICB1c2luZyBEYXRhID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90
LCBSZWY8Y29uc3QgQmxvYj4sIFJlZjxGb3JtRGF0YT4sIFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4s
IFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+LCBSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPiwg
U3RyaW5nPjsKICAgICBEYXRhIG1fZGF0YSB7IG51bGxwdHIgfTsKIAogICAgIEZldGNoQm9keUNv
bnN1bWVyIG1fY29uc3VtZXIgeyBGZXRjaEJvZHlDb25zdW1lcjo6VHlwZTo6Tm9uZSB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAkocmV2
aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRl
cnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBAIHN0YXRpYyBFeGNlcHRpb25P
cjx2b2lkPiBhcHBlbmRUb0hlYWRlck0KIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3Jn
LyNjb25jZXB0LWhlYWRlcnMtZmlsbAogc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGZpbGxIZWFk
ZXJNYXAoSFRUUEhlYWRlck1hcCYgaGVhZGVycywgY29uc3QgRmV0Y2hIZWFkZXJzOjpJbml0JiBo
ZWFkZXJzSW5pdCwgRmV0Y2hIZWFkZXJzOjpHdWFyZCBndWFyZCkKIHsKLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8VmVjdG9yPFN0cmluZz4+PihoZWFkZXJzSW5pdCkpIHsK
LSAgICAgICAgYXV0byYgc2VxdWVuY2UgPSBXVEY6OmdldDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+
PihoZWFkZXJzSW5pdCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFZl
Y3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpKSB7CisgICAgICAgIGF1dG8mIHNlcXVlbmNlID0g
c3RkOjpnZXQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6IHNlcXVlbmNlKSB7CiAgICAgICAgICAgICBpZiAoaGVhZGVyLnNp
emUoKSAhPSAyKQogICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3Is
ICJIZWFkZXIgc3ViLXNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHR3byBpdGVtcyIgfTsK
QEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGZpbGxIZWFkZXJNYXAo
SAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byYgcmVjb3JkID0gV1RGOjpnZXQ8VmVj
dG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKKyAg
ICAgICAgYXV0byYgcmVjb3JkID0gc3RkOjpnZXQ8VmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0
cmluZywgU3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIg
OiByZWNvcmQpIHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYXBwZW5kVG9IZWFkZXJNYXAo
aGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlLCBoZWFkZXJzLCBndWFyZCk7CiAgICAgICAgICAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaEhlYWRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0
Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVzcG9uc2UKICAgICB9OwogCi0gICAgdXNpbmcgSW5p
dCA9IFZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQ
YWlyPFN0cmluZywgU3RyaW5nPj4+OworICAgIHVzaW5nIEluaXQgPSBzdGQ6OnZhcmlhbnQ8VmVj
dG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3Ry
aW5nPj4+OwogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RmV0Y2hIZWFkZXJzPj4gY3JlYXRl
KHN0ZDo6b3B0aW9uYWw8SW5pdD4mJik7CiAKICAgICBzdGF0aWMgUmVmPEZldGNoSGVhZGVycz4g
Y3JlYXRlKEd1YXJkIGd1YXJkID0gR3VhcmQ6Ok5vbmUsIEhUVFBIZWFkZXJNYXAmJiBoZWFkZXJz
ID0geyB9KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEZldGNoSGVhZGVycyB7IGd1YXJkLCBXVEZN
b3ZlKGhlYWRlcnMpIH0pOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0Zl
dGNoUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaFJlcXVlc3QuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSwxMiAr
MjM1LDEyIEBAIEV4Y2VwdGlvbk9yPFJlZjxGZXRjaFJlcXVlc3Q+PiBGZXRjaFJlcXUKIHsKICAg
ICBhdXRvIHJlcXVlc3QgPSBhZG9wdFJlZigqbmV3IEZldGNoUmVxdWVzdChjb250ZXh0LCBzdGQ6
Om51bGxvcHQsIEZldGNoSGVhZGVyczo6Y3JlYXRlKEZldGNoSGVhZGVyczo6R3VhcmQ6OlJlcXVl
c3QpLCB7IH0pKTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oaW5w
dXQpKSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gcmVxdWVzdC0+aW5pdGlhbGl6ZVdpdGgoV1RG
OjpnZXQ8U3RyaW5nPihpbnB1dCksIFdURk1vdmUoaW5pdCkpOworICAgIGlmIChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4oaW5wdXQpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVx
dWVzdC0+aW5pdGlhbGl6ZVdpdGgoc3RkOjpnZXQ8U3RyaW5nPihpbnB1dCksIFdURk1vdmUoaW5p
dCkpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYXV0
byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aCgqV1RGOjpnZXQ8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
cmVxdWVzdC0+aW5pdGlhbGl6ZVdpdGgoKnN0ZDo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+Pihp
bnB1dCksIFdURk1vdmUoaW5pdCkpOwogICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5oCShyZXZp
c2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVz
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGNsYXNzIFVSTFNlYXJjaFBhcmFt
czsKIGNsYXNzIEZldGNoUmVxdWVzdCBmaW5hbCA6IHB1YmxpYyBGZXRjaEJvZHlPd25lciB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgSW5pdCA9IEZldGNoUmVxdWVzdEluaXQ7Ci0gICAgdXNpbmcgSW5m
byA9IFZhcmlhbnQ8UmVmUHRyPEZldGNoUmVxdWVzdD4sIFN0cmluZz47CisgICAgdXNpbmcgSW5m
byA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8RmV0Y2hSZXF1ZXN0PiwgU3RyaW5nPjsKIAogICAgIHVz
aW5nIENhY2hlID0gRmV0Y2hPcHRpb25zOjpDYWNoZTsKICAgICB1c2luZyBDcmVkZW50aWFscyA9
IEZldGNoT3B0aW9uczo6Q3JlZGVudGlhbHM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4MSw3ICsxODEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRpbnVl
UHJpCiAgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29u
dGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBvciBl
ZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAotICAgIGlmICgh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZSkpCisgICAg
aWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRl
cmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29y
JzogVGhlIGN1cnNvcidzIHNvdXJjZSBpcyBub3QgYW4gaW5kZXguIikgfTsKIAogICAgIGF1dG8g
ZGlyZWN0aW9uID0gbV9pbmZvLmN1cnNvckRpcmVjdGlvbigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJKHJldmlzaW9uIDIyMDkwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5JREJDdXJz
b3IoKTsKIAotICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3Jl
PiwgUmVmUHRyPElEQkluZGV4Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJbmRleD4+OwogCiAgICAgY29uc3QgU291
cmNlJiBzb3VyY2UoKSBjb25zdDsKICAgICBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uKCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsxNTEs
NyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJEYXRhCiAgICAgaWYgKGtl
eVBhdGggJiYgIWlzSURCS2V5UGF0aFZhbGlkKGtleVBhdGgudmFsdWUoKSkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBrZXlQYXRoIG9w
dGlvbiBpcyBub3QgYSB2YWxpZCBrZXkgcGF0aC4iKSB9OwogCi0gICAgaWYgKGtleVBhdGggJiYg
cGFyYW1ldGVycy5hdXRvSW5jcmVtZW50ICYmICgoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KGtleVBhdGgudmFsdWUoKSkgJiYgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkp
LmlzRW1wdHkoKSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5
UGF0aC52YWx1ZSgpKSkpCisgICAgaWYgKGtleVBhdGggJiYgcGFyYW1ldGVycy5hdXRvSW5jcmVt
ZW50ICYmICgoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkg
JiYgc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpLmlzRW1wdHkoKSkgfHwgc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aC52YWx1ZSgpKSkpCiAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
RmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBU
aGUgYXV0b0luY3JlbWVudCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9uIHdh
cyBlbXB0eSBvciBhbiBhcnJheS4iKSB9OwogCiAgICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9iamVj
dFN0b3JlIGludG8gdGhlIGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KQEAgLTE3MSwxMCArMTcxLDEw
IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGEKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0
byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNlIGNv
bm5lY3Rpb24gaXMgY2xvc2luZy4iKSB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0U3Rv
cmVzOwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihzdG9y
ZU5hbWVzKSkKLSAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8
U3RyaW5nPj4oc3RvcmVOYW1lcykpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZl
Y3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkKKyAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RGTW92
ZShzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpOwogICAgIGVsc2UKLSAgICAg
ICAgb2JqZWN0U3RvcmVzLmFwcGVuZChXVEZNb3ZlKFdURjo6Z2V0PFN0cmluZz4oc3RvcmVOYW1l
cykpKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmlu
Zz4oc3RvcmVOYW1lcykpKTsKIAogICAgIGlmIChvYmplY3RTdG9yZXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIHN0
b3JlTmFtZXMgcGFyYW1ldGVyIHdhcyBlbXB0eS4iKSB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCShyZXZpc2lvbiAyMjA5MDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIEV4Y2VwdGlvbk9yPFJlZjxJ
REJPYmplY3RTdG9yZT4+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgT2Jq
ZWN0U3RvcmVQYXJhbWV0ZXJzJiYpOwogCi0gICAgdXNpbmcgU3RyaW5nT3JWZWN0b3JPZlN0cmlu
Z3MgPSBXVEY6OlZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47CisgICAgdXNpbmcgU3Ry
aW5nT3JWZWN0b3JPZlN0cmluZ3MgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5n
Pj47CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gdHJhbnNhY3Rpb24oU3Ry
aW5nT3JWZWN0b3JPZlN0cmluZ3MmJiBzdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbk1vZGUpOwog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAgICAgdm9pZCBjbG9zZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGlzb2xhdGVkQ29weU9mVmFyaWFudChjb25zdCBX
VEY6OlZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51
bGxwdHJfdD4mIHNvdXJjZSwgV1RGOjpWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVjdG9y
PElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiB0YXJnZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB2b2lkIGlzb2xhdGVkQ29weU9mVmFyaWFudChjb25zdCBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElE
QktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4mIHNvdXJjZSwgc3Rk
Ojp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxs
cHRyX3Q+JiB0YXJnZXQpCiB7CiAgICAgdGFyZ2V0ID0gVmVjdG9yPFQ+KCk7Ci0gICAgYXV0byYg
c291cmNlVmVjdG9yID0gV1RGOjpnZXQ8VmVjdG9yPFQ+Pihzb3VyY2UpOwotICAgIGF1dG8mIHRh
cmdldFZlY3RvciA9IFdURjo6Z2V0PFZlY3RvcjxUPj4odGFyZ2V0KTsKKyAgICBhdXRvJiBzb3Vy
Y2VWZWN0b3IgPSBzdGQ6OmdldDxWZWN0b3I8VD4+KHNvdXJjZSk7CisgICAgYXV0byYgdGFyZ2V0
VmVjdG9yID0gc3RkOjpnZXQ8VmVjdG9yPFQ+Pih0YXJnZXQpOwogICAgIHRhcmdldFZlY3Rvci5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvdXJjZVZlY3Rvci5zaXplKCkpOwogICAgIGZvciAoYXV0
byYgZWxlbWVudCA6IHNvdXJjZVZlY3RvcikKICAgICAgICAgdGFyZ2V0VmVjdG9yLnVuY2hlY2tl
ZEFwcGVuZChlbGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBJ
REJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdAogewogICAgIGRlc3RpbmF0aW9uLm1f
dHlwZSA9IHNvdXJjZS5tX3R5cGU7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxz
dGQ6Om51bGxwdHJfdD4oc291cmNlLm1fcmVzdWx0cykpCisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KHNvdXJjZS5tX3Jlc3VsdHMpKQogICAgICAgICByZXR1
cm47CiAKICAgICBzd2l0Y2ggKHNvdXJjZS5tX3R5cGUpIHsKQEAgLTcyLDI5ICs3MiwyOSBAQCB2
b2lkIElEQkdldEFsbFJlc3VsdDo6aXNvbGF0ZWRDb3B5KGNvbnN0CiB2b2lkIElEQkdldEFsbFJl
c3VsdDo6YWRkS2V5KElEQktleURhdGEmJiBrZXkpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJ
bmRleGVkREI6OkdldEFsbFR5cGU6OktleXMpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKSk7Ci0gICAgV1RGOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpLmFwcGVuZChXVEZNb3ZlKGtleSkpOworICAgIEFT
U0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRz
KSk7CisgICAgc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpLmFwcGVuZChX
VEZNb3ZlKGtleSkpOwogfQogCiB2b2lkIElEQkdldEFsbFJlc3VsdDo6YWRkVmFsdWUoSURCVmFs
dWUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlw
ZTo6VmFsdWVzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURC
VmFsdWU+PihtX3Jlc3VsdHMpKTsKLSAgICBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jl
c3VsdHMpLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKSk7CisgICAgc3RkOjpnZXQ8VmVj
dG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCiBj
b25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIElEQkdldEFsbFJlc3VsdDo6a2V5cygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OktleXMpOwotICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1
bHRzKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRz
KTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+
KG1fcmVzdWx0cykpOworICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1f
cmVzdWx0cyk7CiB9CiAKIGNvbnN0IFZlY3RvcjxJREJWYWx1ZT4mIElEQkdldEFsbFJlc3VsdDo6
dmFsdWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxs
VHlwZTo6VmFsdWVzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKLSAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElEQlZh
bHVlPj4obV9yZXN1bHRzKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0
b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElE
QlZhbHVlPj4obV9yZXN1bHRzKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gSURCR2V0QWxsUmVzdWx0
OjphbGxCbG9iRmlsZVBhdGhzKCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGCiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRl
eGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4gcGF0aFNl
dDsKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKSkgeworICAgIGZvciAoYXV0byYgdmFsdWUgOiBzdGQ6OmdldDxWZWN0b3I8SURCVmFs
dWU+PihtX3Jlc3VsdHMpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcGF0aCA6IHZhbHVlLmJsb2JG
aWxlUGF0aHMoKSkKICAgICAgICAgICAgIHBhdGhTZXQuYWRkKHBhdGgpOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3Vs
dC5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJHZXRBbGxSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIGlzb2xhdGVkQ29weShjb25zdCBJREJHZXRBbGxSZXN1bHQm
IHNvdXJjZSwgSURCR2V0QWxsUmVzdWx0JiBkZXN0aW5hdGlvbik7CiAKICAgICBJbmRleGVkREI6
OkdldEFsbFR5cGUgbV90eXBlIHsgSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpLZXlzIH07Ci0gICAg
V1RGOjpWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpu
dWxscHRyX3Q+IG1fcmVzdWx0cyB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9y
PElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4gbV9yZXN1bHRz
IHsgbnVsbHB0ciB9OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTg0LDEwICs4
NCwxMCBAQCB2b2lkIElEQkdldEFsbFJlc3VsdDo6ZW5jb2RlKEVuY29kZXImIGVuCiAKICAgICBz
d2l0Y2ggKG1fcmVzdWx0cy5pbmRleCgpKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBlbmNvZGVy
IDw8IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKKyAgICAgICAgZW5j
b2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxWZWN0b3I8
SURCVmFsdWU+PihtX3Jlc3VsdHMpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFZlY3Rv
cjxJREJWYWx1ZT4+KG1fcmVzdWx0cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAg
ICAgICAgYnJlYWs7CkBAIC0xMDksMTIgKzEwOSwxMiBAQCBib29sIElEQkdldEFsbFJlc3VsdDo6
ZGVjb2RlKERlY29kZXImIGRlCiAgICAgc3dpdGNoIChpbmRleCkgewogICAgIGNhc2UgMDoKICAg
ICAgICAgcmVzdWx0Lm1fcmVzdWx0cyA9IFZlY3RvcjxJREJLZXlEYXRhPigpOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0Lm1f
cmVzdWx0cykpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE6CiAgICAgICAgIHJlc3VsdC5tX3Jlc3VsdHMg
PSBWZWN0b3I8SURCVmFsdWU+KCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpn
ZXQ8VmVjdG9yPElEQlZhbHVlPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQorICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KHJlc3VsdC5tX3Jlc3VsdHMp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAy
OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCShy
ZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgSURCS2V5Ojppc1Zh
bGlkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdHlwZSA9PSBL
ZXlUeXBlOjpBcnJheSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PElEQktl
eVZlY3Rvcj4obV92YWx1ZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxJ
REJLZXlWZWN0b3I+KG1fdmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAoIWtleS0+aXNWYWxpZCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA5LDggKzEw
OSw4IEBAIGludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5JiBvdGhlcikKIAogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAgICAgICBhdXRv
JiBhcnJheSA9IFdURjo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSk7Ci0gICAgICAgIGF1dG8m
IG90aGVyQXJyYXkgPSBXVEY6OmdldDxJREJLZXlWZWN0b3I+KG90aGVyLm1fdmFsdWUpOworICAg
ICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSk7CisgICAg
ICAgIGF1dG8mIG90aGVyQXJyYXkgPSBzdGQ6OmdldDxJREJLZXlWZWN0b3I+KG90aGVyLm1fdmFs
dWUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKSAmJiBpIDwg
b3RoZXJBcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGludCByZXN1bHQgPSBh
cnJheVtpXS0+Y29tcGFyZSgqb3RoZXJBcnJheVtpXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKQEAgLTEyMiwxMyArMTIyLDEzIEBAIGludCBJREJLZXk6OmNvbXBhcmUoY29uc3Qg
SURCS2V5JiBvdGhlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGNhc2UgS2V5VHlw
ZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURhdGEoV1RGOjpnZXQ8
VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4ob3RoZXIubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURh
dGEoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBzdGQ6OmdldDxUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6U3Ry
aW5nOgotICAgICAgICByZXR1cm4gLWNvZGVQb2ludENvbXBhcmUoV1RGOjpnZXQ8U3RyaW5nPihv
dGhlci5tX3ZhbHVlKSwgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVy
biAtY29kZVBvaW50Q29tcGFyZShzdGQ6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpLCBzdGQ6
OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2Fz
ZSBLZXlUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgYXV0byBudW1iZXIgPSBXVEY6OmdldDxkb3Vi
bGU+KG1fdmFsdWUpOwotICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gV1RGOjpnZXQ8ZG91Ymxl
PihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byBudW1iZXIgPSBzdGQ6OmdldDxkb3VibGU+
KG1fdmFsdWUpOworICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPihv
dGhlci5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuIChudW1iZXIgPCBvdGhlck51bWJlcikgPyAt
MSA6ICgobnVtYmVyID4gb3RoZXJOdW1iZXIpID8gMSA6IDApOwogICAgIH0KICAgICBjYXNlIEtl
eVR5cGU6OkludmFsaWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywzMSArMTEzLDMxIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4+JiBhcnJheSgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKLSAgICAgICAgcmV0
dXJuIFdURjo6Z2V0PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+KG1fdmFsdWUpOworICAgICAgICBy
ZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4obV92YWx1ZSk7CiAgICAgfQog
CiAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8U3Ry
aW5nPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CiAgICAgfQogCiAgICAgZG91YmxlIGRhdGUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBLZXlUeXBlOjpEYXRlKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwog
ICAgIH0KIAogICAgIGRvdWJsZSBudW1iZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJU
KG1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7
CiAgICAgfQogCiAgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFyeSgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFyeSk7Ci0gICAg
ICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CisgICAg
ICAgIHJldHVybiBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAgICAg
fQogCiAgICAgaW50IGNvbXBhcmUoY29uc3QgSURCS2V5JiBvdGhlcikgY29uc3Q7CkBAIC0xNzEs
NyArMTcxLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBJREJLZXkoY29uc3QgVGhyZWFkU2Fm
ZURhdGFCdWZmZXImKTsKIAogICAgIGNvbnN0IEtleVR5cGUgbV90eXBlOwotICAgIFZhcmlhbnQ8
VmVjdG9yPFJlZlB0cjxJREJLZXk+PiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVm
ZmVyPiBtX3ZhbHVlOworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8UmVmUHRyPElEQktleT4+LCBT
dHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiAKICAgICBjb25z
dCBzaXplX3QgbV9zaXplRXN0aW1hdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBJREJLZXlEYXRhOjpJREJLZXlEYXRhKGNvbnN0IElEQktleSog
a2V5CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAgICAg
bV92YWx1ZSA9IFZlY3RvcjxJREJLZXlEYXRhPigpOwotICAgICAgICBhdXRvJiBhcnJheSA9IFdU
Rjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5
ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgZm9yIChh
dXRvJiBrZXkyIDoga2V5LT5hcnJheSgpKQogICAgICAgICAgICAgYXJyYXkuYXBwZW5kKElEQktl
eURhdGEoa2V5Mi5nZXQoKSkpOwogICAgICAgICBicmVhazsKQEAgLTgxLDIwICs4MSwyMCBAQCBS
ZWZQdHI8SURCS2V5PiBJREJLZXlEYXRhOjptYXliZUNyZWF0ZUlECiAgICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZUludmFsaWQoKTsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAg
ICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gYXJyYXk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5
RGF0YSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBrZXlEYXRhIDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVl
KSkgewogICAgICAgICAgICAgYXJyYXkuYXBwZW5kKGtleURhdGEubWF5YmVDcmVhdGVJREJLZXko
KSk7CiAgICAgICAgICAgICBBU1NFUlQoYXJyYXkubGFzdCgpKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShhcnJheSk7CiAgICAgfQogICAgIGNhc2UgS2V5
VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVCaW5hcnkoV1RGOjpn
ZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlQmluYXJ5KHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSk7
CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlU3RyaW5nKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5
VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZShXVEY6OmdldDxk
b3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZShzdGQ6
OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoc3RkOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI1LDIwICsxMjUsMjAgQEAgdm9p
ZCBJREJLZXlEYXRhOjppc29sYXRlZENvcHkoY29uc3QgSURCSwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0g
VmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uQXJyYXkgPSBX
VEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGRlc3RpbmF0aW9uLm1fdmFsdWUpOwotICAgICAg
ICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4oc291cmNlLm1f
dmFsdWUpKQorICAgICAgICBhdXRvJiBkZXN0aW5hdGlvbkFycmF5ID0gc3RkOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihkZXN0aW5hdGlvbi5tX3ZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHNvdXJjZS5tX3ZhbHVlKSkKICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uQXJyYXkuYXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIGRl
c3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oc291cmNl
Lm1fdmFsdWUpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gc3RkOjpnZXQ8VGhyZWFk
U2FmZURhdGFCdWZmZXI+KHNvdXJjZS5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gV1RGOjpn
ZXQ8U3RyaW5nPihzb3VyY2UubV92YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAgIGRlc3Rp
bmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxTdHJpbmc+KHNvdXJjZS5tX3ZhbHVlKS5pc29sYXRl
ZENvcHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBj
YXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdURjo6
Z2V0PGRvdWJsZT4oc291cmNlLm1fdmFsdWUpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVl
ID0gc3RkOjpnZXQ8ZG91YmxlPihzb3VyY2UubV92YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTE2MCwyNSAr
MTYwLDI1IEBAIHZvaWQgSURCS2V5RGF0YTo6ZW5jb2RlKEtleWVkRW5jb2RlciYgZW4KICAgICBj
YXNlIEtleVR5cGU6OkludmFsaWQ6CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6
OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURh
dGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBlbmNvZGVyLmVuY29kZU9iamVjdHMoImFycmF5
IiwgYXJyYXkuYmVnaW4oKSwgYXJyYXkuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2Rlciwg
Y29uc3QgSURCS2V5RGF0YSYga2V5KSB7CiAgICAgICAgICAgICBrZXkuZW5jb2RlKGVuY29kZXIp
OwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6
OkJpbmFyeTogewotICAgICAgICBhdXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKKyAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CiAgICAgICAgIGVuY29kZXIuZW5j
b2RlQm9vbCgiaGFzQmluYXJ5IiwgISFkYXRhKTsKICAgICAgICAgaWYgKGRhdGEpCiAgICAgICAg
ICAgICBlbmNvZGVyLmVuY29kZUJ5dGVzKCJiaW5hcnkiLCBkYXRhLT5kYXRhKCksIGRhdGEtPnNp
emUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBXVEY6OmdldDxTdHJpbmc+
KG1fdmFsdWUpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0ZDo6
Z2V0PFN0cmluZz4obV92YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBl
OjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBlbmNvZGVyLmVuY29k
ZURvdWJsZSgibnVtYmVyIiwgV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CisgICAgICAgIGVu
Y29kZXIuZW5jb2RlRG91YmxlKCJudW1iZXIiLCBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5VHlw
ZTo6TWluOgpAQCAtMjIwLDEyICsyMjAsMTIgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoS2V5
ZWREZWNvZGVyJiBkZQogCiAgICAgaWYgKHJlc3VsdC5tX3R5cGUgPT0gS2V5VHlwZTo6U3RyaW5n
KSB7CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgV1RGOjpnZXQ8U3RyaW5nPihyZXN1bHQubV92
YWx1ZSkpOworICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVTdHJpbmcoInN0cmluZyIsIHN0
ZDo6Z2V0PFN0cmluZz4ocmVzdWx0Lm1fdmFsdWUpKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0
Lm1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIgfHwgcmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpE
YXRlKSB7CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gMC4wOwotICAgICAgICByZXR1cm4gZGVj
b2Rlci5kZWNvZGVEb3VibGUoIm51bWJlciIsIFdURjo6Z2V0PGRvdWJsZT4ocmVzdWx0Lm1fdmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRG91YmxlKCJudW1iZXIiLCBzdGQ6
OmdldDxkb3VibGU+KHJlc3VsdC5tX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC5t
X3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KSB7CkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBJREJL
ZXlEYXRhOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZQogICAgIH07CiAgICAgCiAgICAgcmVzdWx0
Lm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICByZXR1cm4gZGVjb2Rlci5kZWNv
ZGVPYmplY3RzKCJhcnJheSIsIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0Lm1f
dmFsdWUpLCBhcnJheUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVPYmplY3Rz
KCJhcnJheSIsIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0Lm1fdmFsdWUpLCBh
cnJheUZ1bmN0aW9uKTsKIH0KIAogaW50IElEQktleURhdGE6OmNvbXBhcmUoY29uc3QgSURCS2V5
RGF0YSYgb3RoZXIpIGNvbnN0CkBAIC0yNzcsOCArMjc3LDggQEAgaW50IElEQktleURhdGE6OmNv
bXBhcmUoY29uc3QgSURCS2V5RGF0YQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAgICAgICBhdXRv
JiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7Ci0gICAgICAg
IGF1dG8mIG90aGVyQXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG90aGVyLm1f
dmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRh
Pj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIG90aGVyQXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG90aGVyLm1fdmFsdWUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGFycmF5LnNpemUoKSAmJiBpIDwgb3RoZXJBcnJheS5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgaWYgKGludCByZXN1bHQgPSBhcnJheVtpXS5jb21wYXJlKG90aGVyQXJyYXlbaV0pKQog
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTAsMTMgKzI5MCwxMyBAQCBpbnQg
SURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRhCiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVC
aW5hcnlLZXlEYXRhKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSwgV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKSwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUpKTsK
ICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBh
cmUoV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSwgV1RGOjpnZXQ8U3RyaW5nPihvdGhlci5tX3Zh
bHVlKSk7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHN0ZDo6Z2V0PFN0cmluZz4o
bV92YWx1ZSksIHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2UgS2V5
VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjogewotICAgICAgICBhdXRvIG51
bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7Ci0gICAgICAgIGF1dG8gb3RoZXJOdW1i
ZXIgPSBXVEY6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAgICAgICBhdXRvIG51bWJl
ciA9IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIGF1dG8gb3RoZXJOdW1iZXIg
PSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogCiAgICAgICAgIGlmIChudW1iZXIg
PT0gb3RoZXJOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTMyNSw3ICszMjUsNyBA
QCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgY2FzZSBLZXlU
eXBlOjpBcnJheTogewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGFycmF5PiAtIHsgIik7Ci0gICAgICAgIGF1dG8mIGFycmF5
ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYg
YXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChhcnJheVtpXS5sb2dnaW5nU3RyaW5nKCkpOwogICAgICAgICAgICAgaWYg
KGkgPCBhcnJheS5zaXplKCkgLSAxKQpAQCAtMzM5LDcgKzMzOSw3IEBAIFN0cmluZyBJREJLZXlE
YXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiPGJpbmFyeT4gLSAiKTsKIAotICAgICAgICBhdXRv
KiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsK
KyAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3Zh
bHVlKS5kYXRhKCk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIihudWxsKSIpOwogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OwpAQCAtMzU3LDEyICszNTcsMTIgQEAgU3RyaW5nIElEQktleURhdGE6OmxvZ2dpbmdTdHJpbmco
KSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6
Ci0gICAgICAgIHJlc3VsdCA9ICI8c3RyaW5nPiAtICIgKyBXVEY6OmdldDxTdHJpbmc+KG1fdmFs
dWUpOworICAgICAgICByZXN1bHQgPSAiPHN0cmluZz4gLSAiICsgc3RkOjpnZXQ8U3RyaW5nPiht
X3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgV1RGOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPGRhdGU+IC0gJWYiLCBz
dGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8bnVtYmVyPiAtICVmIiwgV1RGOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPG51bWJlcj4g
LSAlZiIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6TWF4
OgogICAgICAgICByZXR1cm4gIjxtYXhpbXVtPiI7CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBA
IC00NDIsMTMgKzQ0MiwxMyBAQCBib29sIElEQktleURhdGE6Om9wZXJhdG9yPT0oY29uc3QgSURC
S2V5CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAg
IGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92
YWx1ZSkgPT0gV1RGOjpnZXQ8ZG91YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8ZG91YmxlPihvdGhlci5tX3Zh
bHVlKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0
PFN0cmluZz4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8U3RyaW5n
PihvdGhlci5tX3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgcmV0
dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSA9PSBXVEY6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6
OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Ci0g
ICAgICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpID09IFdU
Rjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVy
biBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFZlY3Rv
cjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5RGF0YS5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMyAr
MTMxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleVR5
cGU6Ok51bWJlcjoKICAgICAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAgICAgICAgaGFz
aENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZX
VEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5k
KFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91YmxlKT4oJnN0ZDo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleVR5cGU6
OlN0cmluZzoKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChX
VEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5k
KFN0cmluZ0hhc2g6Omhhc2goc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgICAgICBh
dXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEo
KTsKKyAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZl
cj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAgICAg
ICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNDUsNyArMTQ1
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKKyAgICAgICAgICAgIGZvciAoYXV0byYga2V5
IDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKICAgICAgICAgICAgICAg
ICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTE1OSwzOCArMTU5LDM4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc3RyaW5nKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6U3RyaW5nKTsK
LSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CisgICAgICAgIHJldHVy
biBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGRvdWJsZSBkYXRlKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6RGF0ZSk7Ci0g
ICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgbnVtYmVyKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6TnVtYmVyKTsK
LSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIHJldHVy
biBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFRocmVhZFNh
ZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlw
ZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxJREJLZXlE
YXRhPiYgYXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlU
eXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Piht
X3ZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgaXNvbGF0ZWRDb3B5
KGNvbnN0IElEQktleURhdGEmIHNvdXJjZSwgSURCS2V5RGF0YSYgZGVzdGluYXRpb24pOwogCiAg
ICAgS2V5VHlwZSBtX3R5cGU7Ci0gICAgVmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0cmlu
ZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKKyAgICBzdGQ6OnZhcmlh
bnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZm
ZXI+IG1fdmFsdWU7CiAKICAgICBib29sIG1faXNOdWxsIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aXNEZWxldGVkVmFsdWUgeyBmYWxzZSB9OwpAQCAtMjQyLDE3ICsyNDIsMTcgQEAgdm9pZCBJREJL
ZXlEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICBlbmNvZGVy
IDw8IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpn
ZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0
ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U3Ry
aW5nPihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxTdHJpbmc+KG1fdmFs
dWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBL
ZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8ZG91YmxlPihtX3Zh
bHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiB9CkBAIC0yNzYsMjMgKzI3NiwyMyBAQCBib29sIElEQktleURh
dGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5
VHlwZTo6QXJyYXk6CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlEYXRh
PigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Rk
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6
CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IFRocmVhZFNhZmVEYXRhQnVmZmVyKCk7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KGtl
eURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6CiAgICAg
ICAgIGtleURhdGEubV92YWx1ZSA9IFN0cmluZygpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKFdURjo6Z2V0PFN0cmluZz4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoc3RkOjpnZXQ8U3RyaW5nPihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRl
OgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAgICAgICBrZXlEYXRhLm1fdmFsdWUgPSAw
LjA7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8ZG91YmxlPihrZXlEYXRh
Lm1fdmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxkb3VibGU+
KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBi
cmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlQYXRoLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw3ICsy
MDUsNyBAQCBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmCiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQo
dmlzaXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0
aCk7CiB9CiAKIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgmIGtleVBh
dGgpCkBAIC0yMjAsNyArMjIwLDcgQEAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURC
S2V5UGF0aAogICAgICAgICByZXR1cm4gdmVjdG9yQ29weTsKICAgICB9KTsKIAotICAgIHJldHVy
biBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZp
c2l0b3IsIGtleVBhdGgpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjQ0LDcgKzI0NCw3IEBA
IFN0cmluZyBsb2dnaW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmIHAKICAgICAgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZp
c2l0b3IsIHBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOwogfQog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIElEQktleVBhdGggPSBXVEY6OlZhcmlhbnQ8U3Ry
aW5nLCBWZWN0b3I8U3RyaW5nPj47Cit1c2luZyBJREJLZXlQYXRoID0gc3RkOjp2YXJpYW50PFN0
cmluZywgVmVjdG9yPFN0cmluZz4+OwogYm9vbCBpc0lEQktleVBhdGhWYWxpZChjb25zdCBJREJL
ZXlQYXRoJik7CiAKIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3IgewpJbmRleDogU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNw
cAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAgRXhj
ZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcgogICAgIGlmIChuYW1lLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKLSAgICBpZiAo
cGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0
cmluZz4+KGtleVBhdGgpKQorICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50cnkgJiYgc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0aCBh
cmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVlLiIp
IH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3RvcmUn
cyBpbmZvLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4LDgg
QEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vyc29yJiBjdQogCiAgICAgbV9zb3Vy
Y2UgPSBTb3VyY2UgeyAmY3Vyc29yIH07CiAgICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+KFt0aGlzXSgpIHsKLSAgICAgICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkp
KTsKLSAgICAgICAgV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkp
LT5kZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworICAgICAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSkp
OworICAgICAgICBzdGQ6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSkt
PmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CiAgICAgfSk7CiB9CiAKQEAgLTIw
Nyw5ICsyMDcsOSBAQCB1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlkCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UudmFs
dWUoKSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9iamVjdFN0
b3JlKSB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKTsgfSwKLSAgICAg
ICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBpbmRleC0+aW5m
bygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29uc3QgUmVmUHRy
PElEQkN1cnNvcj4mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURC
T2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgLT4gdWludDY0X3QgeyByZXR1cm4gb2JqZWN0U3Rv
cmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURC
SW5kZXg+JiBpbmRleCkgLT4gdWludDY0X3QgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RT
dG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+
JikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfQogICAgICk7CiB9CiAKQEAgLTIzOCw3ICsyMzgs
NyBAQCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyCiB7CiAgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQobV9z
b3VyY2UpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRl
eD4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZS52YWx1ZSgpKSk7CiAKICAgICByZXR1cm4gbV9y
ZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDEwICs2NywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7CiAK
LSAgICB1c2luZyBSZXN1bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURC
RGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PjsKKyAgICB1c2luZyBSZXN1bHQg
PSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4sIFJlZlB0cjxJREJEYXRhYmFzZT4sIEpT
Qzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+OwogICAgIEV4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9uYWw8
UmVzdWx0Pj4gcmVzdWx0KCkgY29uc3Q7CiAKLSAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PFJl
ZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJbmRleD4sIFJlZlB0cjxJREJDdXJzb3I+
PjsKKyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3Jl
PiwgUmVmUHRyPElEQkluZGV4PiwgUmVmUHRyPElEQkN1cnNvcj4+OwogICAgIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KIAog
ICAgIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gZXJyb3IoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
aWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNyArNTQsNyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQYXRo
CiAgICAgICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmluZyk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgICAgIFdURjo6dmlzaXQodmlzaXRv
ciwga2V5UGF0aC52YWx1ZSgpKTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRo
LnZhbHVlKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKCJ0eXBl
IiwgS2V5UGF0aFR5cGU6Ok51bGwpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAJKHJldmlz
aW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBTdHJp
bmcgTWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yCiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KFsmcGFn
ZV0oYXV0byYgdHJhY2spIHsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChbJnBhZ2VdKGF1dG8mIHRy
YWNrKSB7CiAgICAgICAgIHJldHVybiBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNlcygp
LmRpc3BsYXlOYW1lRm9yVHJhY2sodHJhY2suZ2V0KCkpOwogICAgIH0sIHRyYWNrLnZhbHVlKCkp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29u
dHJvbHNIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFRleHRU
cmFjaz4+IHNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCYpOwogICAgIFZlY3Rv
cjxSZWZQdHI8QXVkaW9UcmFjaz4+IHNvcnRlZFRyYWNrTGlzdEZvck1lbnUoQXVkaW9UcmFja0xp
c3QmKTsKIAotICAgIHVzaW5nIFRleHRPckF1ZGlvVHJhY2sgPSBXVEY6OlZhcmlhbnQ8UmVmUHRy
PFRleHRUcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPj47CisgICAgdXNpbmcgVGV4dE9yQXVkaW9U
cmFjayA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VGV4dFRyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+
PjsKICAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JUcmFjayhjb25zdCBzdGQ6Om9wdGlvbmFsPFRl
eHRPckF1ZGlvVHJhY2s+Jik7CiAKICAgICBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRlbSgp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVk
aWFEZXZpY2VzLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3
Nyw3IEBAIERvY3VtZW50KiBNZWRpYURldmljZXM6OmRvY3VtZW50KCkgY29uc3QKICAgICByZXR1
cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiB9CiAKLXN0
YXRpYyBNZWRpYUNvbnN0cmFpbnRzIGNyZWF0ZU1lZGlhQ29uc3RyYWludHMoY29uc3QgVmFyaWFu
dDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+JiBjb25zdHJhaW50cykKK3N0YXRpYyBNZWRp
YUNvbnN0cmFpbnRzIGNyZWF0ZU1lZGlhQ29uc3RyYWludHMoY29uc3Qgc3RkOjp2YXJpYW50PGJv
b2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4mIGNvbnN0cmFpbnRzKQogewogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGNvbnN0cmFpbnRzLAogICAgICAgICBbJl0gKGJvb2wgaXNWYWxpZCkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2
aWNlcy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIHB1
YmxpYzoKICAgICB1c2luZyBFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSA9IERPTVByb21pc2VEZWZl
cnJlZDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8TWVkaWFEZXZpY2VJbmZvPj4+OwogCiAgICAg
c3RydWN0IFN0cmVhbUNvbnN0cmFpbnRzIHsKLSAgICAgICAgVmFyaWFudDxib29sLCBNZWRpYVRy
YWNrQ29uc3RyYWludHM+IHZpZGVvOwotICAgICAgICBWYXJpYW50PGJvb2wsIE1lZGlhVHJhY2tD
b25zdHJhaW50cz4gYXVkaW87CisgICAgICAgIHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNr
Q29uc3RyYWludHM+IHZpZGVvOworICAgICAgICBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFj
a0NvbnN0cmFpbnRzPiBhdWRpbzsKICAgICB9OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGdldFVz
ZXJNZWRpYShjb25zdCBTdHJlYW1Db25zdHJhaW50cyYsIFByb21pc2UmJikgY29uc3Q7CiAgICAg
dm9pZCBlbnVtZXJhdGVEZXZpY2VzKEVudW1lcmF0ZURldmljZXNQcm9taXNlJiYpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3Ry
YWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L01lZGlhVHJhY2tDb25zdHJhaW50cy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHN0cnVjdCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVy
cyB7CiB9OwogCiBzdHJ1Y3QgQ29uc3RyYWluRE9NU3RyaW5nUGFyYW1ldGVycyB7Ci0gICAgc3Rk
OjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBleGFjdDsKLSAgICBz
dGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGlkZWFsOworICAg
IHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBleGFj
dDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
Pj4gaWRlYWw7CiB9OwogCiBzdHJ1Y3QgQ29uc3RyYWluRG91YmxlUmFuZ2UgOiBEb3VibGVSYW5n
ZSB7CkBAIC01NiwxMCArNTYsMTAgQEAgc3RydWN0IENvbnN0cmFpbkxvbmdSYW5nZSA6IExvbmdS
YW5nZSB7CiAgICAgc3RkOjpvcHRpb25hbDxpbnQ+IGlkZWFsOwogfTsKIAotdXNpbmcgQ29uc3Ry
YWluQm9vbGVhbiA9IFZhcmlhbnQ8Ym9vbCwgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnM+Owot
dXNpbmcgQ29uc3RyYWluRE9NU3RyaW5nID0gVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+
LCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzPjsKLXVzaW5nIENvbnN0cmFpbkRvdWJsZSA9
IFZhcmlhbnQ8ZG91YmxlLCBDb25zdHJhaW5Eb3VibGVSYW5nZT47Ci11c2luZyBDb25zdHJhaW5M
b25nID0gVmFyaWFudDxpbnQsIENvbnN0cmFpbkxvbmdSYW5nZT47Cit1c2luZyBDb25zdHJhaW5C
b29sZWFuID0gc3RkOjp2YXJpYW50PGJvb2wsIENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzPjsK
K3VzaW5nIENvbnN0cmFpbkRPTVN0cmluZyA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+LCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzPjsKK3VzaW5nIENvbnN0cmFpbkRv
dWJsZSA9IHN0ZDo6dmFyaWFudDxkb3VibGUsIENvbnN0cmFpbkRvdWJsZVJhbmdlPjsKK3VzaW5n
IENvbnN0cmFpbkxvbmcgPSBzdGQ6OnZhcmlhbnQ8aW50LCBDb25zdHJhaW5Mb25nUmFuZ2U+Owog
CiBzdHJ1Y3QgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXQgewogICAgIHN0ZDo6b3B0aW9uYWw8Q29u
c3RyYWluTG9uZz4gd2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0ljZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFJUQ0ljZVNl
cnZlciB7Ci0gICAgVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PiB1cmxzOworICAgIHN0
ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PiB1cmxzOwogICAgIFN0cmluZyBjcmVk
ZW50aWFsOwogICAgIFN0cmluZyB1c2VybmFtZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAko
cmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw4ICsxODQsOCBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6cmVtCiAKIEV4Y2VwdGlvbk9yPFJl
ZjxSVENSdHBUcmFuc2NlaXZlcj4+IFJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZlcihB
ZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kJiYgd2l0aFRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2Nl
aXZlckluaXQmIGluaXQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5n
Pih3aXRoVHJhY2spKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYga2luZCA9IFdURjo6Z2V0PFN0
cmluZz4od2l0aFRyYWNrKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+
KHdpdGhUcmFjaykpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBraW5kID0gc3RkOjpnZXQ8U3Ry
aW5nPih3aXRoVHJhY2spOwogICAgICAgICBpZiAoa2luZCAhPSAiYXVkaW8iICYmIGtpbmQgIT0g
InZpZGVvIikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIApA
QCAtMTkzLDcgKzE5Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IFJU
Q1AKICAgICAgICAgcmV0dXJuIGNvbXBsZXRlQWRkVHJhbnNjZWl2ZXIoV1RGTW92ZShzZW5kZXIp
LCBpbml0LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGtpbmQpOwogICAgIH0KIAotICAg
IFJlZjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9IFdURjo6Z2V0PFJlZlB0cjxNZWRpYVN0cmVh
bVRyYWNrPj4od2l0aFRyYWNrKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIFJlZjxNZWRpYVN0cmVh
bVRyYWNrPiB0cmFjayA9IHN0ZDo6Z2V0PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4od2l0aFRy
YWNrKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgIGNvbnN0IFN0cmluZyYgdHJhY2tJZCA9IHRyYWNr
LT5pZCgpOwogICAgIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kID0gdHJhY2stPmtpbmQoKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+
PiBhZGRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8TWVkaWFTdHJlYW0+PiYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJl
bW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpOwogCi0gICAgdXNpbmcgQWRkVHJhbnNjZWl2ZXJUcmFj
a09yS2luZCA9IFZhcmlhbnQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+LCBTdHJpbmc+OworICAg
IHVzaW5nIEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE1l
ZGlhU3RyZWFtVHJhY2s+LCBTdHJpbmc+OwogICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFu
c2NlaXZlcj4+IGFkZFRyYW5zY2VpdmVyKEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQmJiwgY29u
c3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CiAKICAgICAvLyA2LjEgUGVlci10by1wZWVyIGRh
dGEgQVBJCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nl
c3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
U0RQUHJvY2Vzc29yLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2
MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25zdCBJ
Y2VDYW5kaWRhdGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0OwogCiAgICAgc3Ry
dWN0IFBhcnNpbmdSZXN1bHQgewotICAgICAgICBWYXJpYW50PEljZUNhbmRpZGF0ZSwgUmVzdWx0
PiByZXN1bHQ7CisgICAgICAgIHN0ZDo6dmFyaWFudDxJY2VDYW5kaWRhdGUsIFJlc3VsdD4gcmVz
dWx0OwogCi0gICAgICAgIFJlc3VsdCBwYXJzaW5nU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxJY2VDYW5kaWRhdGU+KHJlc3VsdCkgPyBSZXN1bHQ6OlN1Y2Nl
c3MgOiBXVEY6OmdldDxTRFBQcm9jZXNzb3I6OlJlc3VsdD4ocmVzdWx0KTsgfQotICAgICAgICBJ
Y2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSgpIHsgcmV0dXJuIFdURjo6Z2V0PEljZUNhbmRpZGF0ZT4o
cmVzdWx0KTsgfQorICAgICAgICBSZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpT
dWNjZXNzIDogc3RkOjpnZXQ8U0RQUHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KKyAgICAg
ICAgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUoKSB7IHJldHVybiBzdGQ6OmdldDxJY2VDYW5kaWRh
dGU+KHJlc3VsdCk7IH0KICAgICB9OwogICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRhdGVM
aW5lKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlTGluZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvSURMVHlwZXMuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvSURMVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDExICsyMjgsMTEgQEAg
c3RydWN0IElETEVycm9yIDogSURMVW5zdXBwb3J0ZWRUeXBlIHsgfQogc3RydWN0IElETERPTUV4
Y2VwdGlvbiA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFRzPgotc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxWYXJpYW50PHR5cGVuYW1lIFRzOjpJbXBs
ZW1lbnRhdGlvblR5cGUuLi4+PiB7CitzdHJ1Y3QgSURMVW5pb24gOiBJRExUeXBlPHN0ZDo6dmFy
aWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4gewogICAgIHVzaW5nIFR5
cGVMaXN0ID0gYnJpZ2FuZDo6bGlzdDxUcy4uLj47CiAKLSAgICB1c2luZyBQYXJhbWV0ZXJUeXBl
ID0gY29uc3QgVmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPiY7Ci0g
ICAgdXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gY29uc3Qgc3RkOjpvcHRpb25hbDxWYXJp
YW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiY7CisgICAgdXNpbmcgUGFy
YW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRp
b25UeXBlLi4uPiY7CisgICAgdXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gY29uc3Qgc3Rk
OjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4u
Lj4+JjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBJRExCdWZmZXJTb3VyY2Ug
OiBJRExXcmFwcGVyPFQ+IHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1
ZmZlclNvdXJjZS5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9CdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJ1ZmZlclNvdXJjZSB7CiBwdWJsaWM6Ci0gICAgdXNp
bmcgVmFyaWFudFR5cGUgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3
PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PjsKKyAgICB1c2luZyBWYXJpYW50VHlwZSA9IHN0
ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlcj4+OwogCiAgICAgQnVmZmVyU291cmNlKCkgeyB9CiAgICAgQnVmZmVyU291cmNlKFZh
cmlhbnRUeXBlJiYgdmFyaWFudCkKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhfdCogeworICAgICAgICByZXR1cm4g
c3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpOwog
ICAgICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAogICAgIHNpemVfdCBsZW5ndGgoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBz
aXplX3QgeworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNp
emVfdCB7CiAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAg
IH0sIG1fdmFyaWFudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
Q2FsbFRyYWNlclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQ2FsbFRyYWNlclR5cGVzLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0
Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWYXJpYW50PAordHlwZWRl
ZiBzdGQ6OnZhcmlhbnQ8CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpJbWFnZVNtb290
aGluZ1F1YWxpdHksCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpXaW5kaW5nUnVsZSwK
ICAgICBET01NYXRyaXhJbml0LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURC
QmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzAsMTEgKzI3MCwxMSBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1
ZShFeGVjU3RhCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgImluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZSIpOwogCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQ
YXRoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRo
KSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5UGF0
aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmluZz4o
a2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIElEQlBhcnNlS2V5UGF0aChz
dGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKICAgICBB
U1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAgICAgaWYgKGtl
eVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC0yOTcsOCArMjk3LDggQEAgYm9vbCBpbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YQogCiBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBK
U1ZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpIHsKLSAgICAgICAg
YXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKSB7CisgICAg
ICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogICAg
ICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHJp
bmcgOiBhcnJheSkgewpAQCAtMzEwLDE3ICszMTAsMTcgQEAgUmVmUHRyPElEQktleT4gbWF5YmVD
cmVhdGVJREJLZXlGcm9tU2NyaQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShX
VEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIFdURjo6Z2V0PFN0cmluZz4o
a2V5UGF0aCkpOworICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1
ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCkpOwogfQog
CiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNv
bnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewog
ICAgIExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAK
LSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKKyAg
ICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKICAgICBW
ZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJyb3Ig
ZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtl
eVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIElEQlBhcnNlS2V5UGF0aChzdGQ6OmdldDxTdHJp
bmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKICAgICBBU1NFUlQoZXJyb3Ig
PT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAgICAgaWYgKCFrZXlQYXRoRWxlbWVu
dHMuc2l6ZSgpKQpAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0YT4g
Y3JlYXRlS2V5UGF0aEEKICAgICAgICAgcmV0dXJuIGtleXM7CiAgICAgfSk7CiAKLSAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CisgICAgcmV0dXJuIHN0ZDo6
dmlzaXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOwogfQogCiB2b2lkIGdlbmVyYXRlSW5kZXhL
ZXlGb3JWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywgSlNW
YWx1ZSB2YWx1ZSwgSW5kZXhLZXkmIG91dEtleSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMzg1LDcgKzM4NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBKU0Nv
bnZlcnQKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAgIHVz
aW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8
MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKyAgICB1
c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90
PDA+LCBzdGQ6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CiAKICAg
ICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUmIHZh
cmlhbnQpCiAgICAgewpAQCAtMzk2LDcgKzM5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IHN0cnVjdCBKU0NvbnZlcnQKICAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6OlJl
bW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKICAgICAgICAg
ICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghcmV0
dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjph
dDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVlPih2
YXJpYW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0
PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpnZXQ8STo6dmFsdWU+KHZh
cmlhbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHJldmlzaW9uIDIy
MDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjYsNjYgKzY2LDY2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IEpTVmFsdWUgY29udmVydFRvSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgYW55KQogewogICAgIHJldHVybiBX
VEY6OnN3aXRjaE9uKGFueSwKLSAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSB7CisgICAgICAg
IFtdIChzdGQ6Om51bGxwdHJfdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNO
dWxsKCk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChib29sIHZhbHVlKSB7CisgICAgICAgIFtd
IChib29sIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
dmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAoaW50IHZhbHVlKSB7CisgICAgICAgIFtd
IChpbnQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZh
bHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSB7CisgICAgICAg
IFtdICh1bnNpZ25lZCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNO
dW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAobG9uZyBsb25nIHZhbHVlKSB7
CisgICAgICAgIFtdIChsb25nIGxvbmcgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgW10gKGZsb2F0IHZh
bHVlKSB7CisgICAgICAgIFtdIChmbG9hdCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAg
ICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0
IFN0cmluZyYgdmFsdWUpIHsKKyAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVlKSAtPiBK
U1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUsIHZh
bHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVl
cykgeworICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYgdmFsdWVzKSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpz
Qm9vbGVhbih2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZzdGF0
ZSwgMCwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwogICAgICAgICB9LAot
ICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAgICAg
WyZdIChjb25zdCBSZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwog
ICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50OEFycmF5PiYgYXJyYXkp
IHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDhBcnJheT4mIGFycmF5KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJy
YXkuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50MzJB
cnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQzMkFycmF5PiYg
YXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3Qg
UmVmUHRyPFdlYkdMQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRy
PFdlYkdMQnVmZmVyPiYgYnVmZmVyKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0
b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgfSwKLSAg
ICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgeworICAg
ICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiYgYnVmZmVyKSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYnVm
ZmVyLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xQ
cm9ncmFtPiYgcHJvZ3JhbSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFByb2dy
YW0+JiBwcm9ncmFtKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgcHJvZ3JhbS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiYgYnVmZmVyKSAtPiBKU1ZhbHVlIHsK
ICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYnVmZmVyLmdl
dCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xUZXh0dXJl
PiYgdGV4dHVyZSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFRleHR1cmU+JiB0
ZXh0dXJlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmds
b2JhbE9iamVjdCwgdGV4dHVyZS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+JiBhcnJheSkgeworICAgICAgICBb
Jl0gKGNvbnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiYgYXJyYXkpIC0+IEpT
VmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBh
cnJheS5nZXQoKSk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAsCi0g
ICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3Q+JiBhcnJheSkg
eworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0PiYgYXJy
YXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlz
aW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03MjUxLDcgKzcyNTEsNyBAQCBzdWIgR2VuZXJh
dGVDYWxsVHJhY2VyUGFyYW1ldGVyKCkKICAgICBteSAoJG5hbWUsICR0eXBlLCAkaW5kZW50KSA9
IEBfOwogCiAgICAgaWYgKCR0eXBlLT5pc1VuaW9uKSB7Ci0gICAgICAgIHJldHVybiAkaW5kZW50
IC4gIiAgICBXVEY6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRl
cnMuYXBwZW5kKHZhbHVlKTsgfSwgIiAuICRuYW1lIC4gIik7IjsKKyAgICAgICAgcmV0dXJuICRp
bmRlbnQgLiAiICAgIHN0ZDo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFy
YW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCAiIC4gJG5hbWUgLiAiKTsiOwogICAgIH0KIAogICAg
IHJldHVybiAkaW5kZW50IC4gIiAgICBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQoIiAuICRu
YW1lIC4gIik7IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgJ
KHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0
aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogLy8gRGF0YSBpcyBtdXRhYmxlLCBzbyBhc3luYyBvcGVyYXRpb25zIHNob3Vs
ZCBjb3B5IGl0IGZpcnN0LgogdXNpbmcgQ3J5cHRvT3BlcmF0aW9uRGF0YSA9IHN0ZDo6cGFpcjxj
b25zdCB1aW50OF90Kiwgc2l6ZV90PjsKIAotdXNpbmcgS2V5RGF0YSA9IFZhcmlhbnQ8VmVjdG9y
PHVpbnQ4X3Q+LCBKc29uV2ViS2V5PjsKLXVzaW5nIEtleU9yS2V5UGFpciA9IFZhcmlhbnQ8UmVm
UHRyPENyeXB0b0tleT4sIENyeXB0b0tleVBhaXI+OwordXNpbmcgS2V5RGF0YSA9IHN0ZDo6dmFy
aWFudDxWZWN0b3I8dWludDhfdD4sIEpzb25XZWJLZXk+OwordXNpbmcgS2V5T3JLZXlQYWlyID0g
c3RkOjp2YXJpYW50PFJlZlB0cjxDcnlwdG9LZXk+LCBDcnlwdG9LZXlQYWlyPjsKIAogY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtIDogcHVibGljIFJlZkNvdW50ZWQ8Q3J5cHRvQWxnb3JpdGhtPiB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCShyZXZpc2lvbiAyMjA5MDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5
cHRvS2V5VHlwZTsKLSAgICB1c2luZyBBbGdvcml0aG1WYXJpYW50ID0gVmFyaWFudDxDcnlwdG9L
ZXlBbGdvcml0aG0sIENyeXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0s
IENyeXB0b0htYWNLZXlBbGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5
cHRvUnNhS2V5QWxnb3JpdGhtPjsKKyAgICB1c2luZyBBbGdvcml0aG1WYXJpYW50ID0gc3RkOjp2
YXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRvQWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9F
Y0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29yaXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5
QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+OwogCiAgICAgQ3J5cHRvS2V5KENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIsIFR5cGUsIGJvb2wgZXh0cmFjdGFibGUsIENyeXB0b0tleVVz
YWdlQml0bWFwKTsKICAgICB2aXJ0dWFsIH5DcnlwdG9LZXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9TdWJ0bGVDcnlwdG8uY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTQgKzk2
LDE0IEBAIHN0YXRpYyBFeGNlcHRpb25PcjxzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHQKICAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRl
bnRpZmllcikpIHsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGFsZ29y
aXRobUlkZW50aWZpZXIpKSB7CiAgICAgICAgIGF1dG8gbmV3UGFyYW1zID0gU3Ryb25nPEpTT2Jq
ZWN0Pih2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoJnN0YXRlKSk7Ci0gICAgICAgIG5ld1BhcmFt
cy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIm5hbWUiKSwganNT
dHJpbmcoJnN0YXRlLCBXVEY6OmdldDxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSk7Cisg
ICAgICAgIG5ld1BhcmFtcy0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIm5hbWUiKSwganNTdHJpbmcoJnN0YXRlLCBzdGQ6OmdldDxTdHJpbmc+KGFsZ29yaXRobUlk
ZW50aWZpZXIpKSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9ybWFsaXplQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyhzdGF0ZSwgbmV3UGFyYW1zLCBvcGVyYXRpb24pOwogICAgIH0KIAot
ICAgIGF1dG8mIHZhbHVlID0gV1RGOjpnZXQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4+KGFs
Z29yaXRobUlkZW50aWZpZXIpOworICAgIGF1dG8mIHZhbHVlID0gc3RkOjpnZXQ8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4+KGFsZ29yaXRobUlkZW50aWZpZXIpOwogCiAgICAgYXV0byBwYXJh
bXMgPSBjb252ZXJ0RGljdGlvbmFyeTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPihzdGF0ZSwg
dmFsdWUuZ2V0KCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEV4Y2VwdGlvbiB7
IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IgfSk7CkBAIC04NjcsMTIgKzg2NywxMiBAQCB2b2lkIFN1
YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KEtleUZvcm1hdCBmCiAgICAgICAgIGNhc2UgU3VidGxlQ3J5
cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3Jt
YXQ6OlBrY3M4OgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpSYXc6IHsK
LSAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgcmF3S2V5ID0gV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihrZXkpOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiByYXdLZXkgPSBzdGQ6
OmdldDxWZWN0b3I8dWludDhfdD4+KGtleSk7CiAgICAgICAgICAgICBmdWxmaWxsUHJvbWlzZVdp
dGhBcnJheUJ1ZmZlcihXVEZNb3ZlKGNhcHR1cmVkUHJvbWlzZSksIHJhd0tleS5kYXRhKCksIHJh
d0tleS5zaXplKCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6Okp3azoKLSAgICAgICAgICAgIGNhcHR1cmVkUHJv
bWlzZS0+cmVzb2x2ZTxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+PihXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGtleSkpKTsKKyAgICAgICAgICAgIGNhcHR1cmVkUHJvbWlzZS0+cmVzb2x2
ZTxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+PihXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+
KGtleSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTkzNiwxMSArOTM2LDExIEBAIHZvaWQgU3VidGxlQ3J5cHRvOjp3
cmFwS2V5KEpTQzo6RXhlY1N0YXQKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1h
dDo6U3BraToKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6CiAg
ICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgICAgIGJ5
dGVzID0gV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOworICAgICAgICAgICAgYnl0ZXMg
PSBzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGtleSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6SndrOiB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogQ29udmVydGluZyB0byBKUyBqdXN0IHRvIEpTT04tU3RyaW5naWZ5IHNlZW1zIGlu
ZWZmaWNpZW50LiBXZSBzaG91bGQgZmluZCBhIHdheSB0byBnbyBkaXJlY3RseSBmcm9tIHRoZSBz
dHJ1Y3QgdG8gSlNPTi4KLSAgICAgICAgICAgIGF1dG8gandrID0gdG9KUzxJRExEaWN0aW9uYXJ5
PEpzb25XZWJLZXk+PigqKHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpLCAq
KHByb21pc2UtPmdsb2JhbE9iamVjdCgpKSwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5Pihr
ZXkpKSk7CisgICAgICAgICAgICBhdXRvIGp3ayA9IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2Vi
S2V5Pj4oKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNl
LT5nbG9iYWxPYmplY3QoKSksIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOwog
ICAgICAgICAgICAgU3RyaW5nIGp3a1N0cmluZyA9IEpTT05TdHJpbmdpZnkocHJvbWlzZS0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSwgandrLCAwKTsKICAgICAgICAgICAgIENTdHJpbmcg
andrVXRmOFN0cmluZyA9IGp3a1N0cmluZy51dGY4KFN0cmljdENvbnZlcnNpb24pOwogICAgICAg
ICAgICAgYnl0ZXMuYXBwZW5kKGp3a1V0ZjhTdHJpbmcuZGF0YSgpLCBqd2tVdGY4U3RyaW5nLmxl
bmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgJKHJldmlzaW9u
IDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsOCArNTgsOCBAQCBwdWJsaWM6CiAKICAgICB1c2luZyBLZXlGb3JtYXQg
PSBDcnlwdG9LZXlGb3JtYXQ7CiAKLSAgICB1c2luZyBBbGdvcml0aG1JZGVudGlmaWVyID0gVmFy
aWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPjsKLSAgICB1c2luZyBLZXlE
YXRhVmFyaWFudCA9IFZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+LCBKc29uV2ViS2V5PjsKKyAgICB1c2luZyBBbGdvcml0aG1JZGVu
dGlmaWVyID0gc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+
OworICAgIHVzaW5nIEtleURhdGFWYXJpYW50ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgSnNvbldlYktleT47CiAK
ICAgICB2b2lkIGVuY3J5cHQoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYs
IENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
OwogICAgIHZvaWQgZGVjcnlwdChKU0M6OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlkZW50aWZpZXIm
JiwgQ3J5cHRvS2V5JiwgQnVmZmVyU291cmNlJiYgZGF0YSwgUmVmPERlZmVycmVkUHJvbWlzZT4m
Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0JDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DQkM6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0
b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNp
emVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTEzMCw3ICsxMzAs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleShDCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DRkIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DRkIuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQjo6aW1wb3J0S2V5KEMK
ICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsK
ICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NGQjo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAJKHJldmlz
aW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DVFIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9L
ZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNr
QWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9v
bCB7CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjppbXBv
cnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfR0NNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19HQ006OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0
b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNp
emVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTE2OCw3ICsxNjgs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleShDCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0tXLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAs
MTAgKzkwLDEwIEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0tXOjppbXBvcnRLZXkoQ3IKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRp
ZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMsIFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKKyAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRp
ZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMsIFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKICAg
ICAgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7CiAgICAgICAgICAgICBjYXNlIENyeXB0b0tleUFF
Uzo6c19sZW5ndGgxMjg6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsZy5pc051bGwoKSB8fCBh
bGcgPT0gQUxHMTI4OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtRUNESC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNESC5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1F
Q0RIOjppbXBvcnRLZXkoQ3J5cAogICAgIFJlZlB0cjxDcnlwdG9LZXlFQz4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAg
ICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
OworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOwogCiAgICAgICAgIGJvb2wgaXNVc2FnZXNBbGxvd2VkID0gZmFsc2U7CiAgICAgICAg
IGlmICgha2V5LmQuaXNOdWxsKCkpIHsKQEAgLTE1MCwyMSArMTUwLDIxIEBAIHZvaWQgQ3J5cHRv
QWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KENyeXAKICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxi
YWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVycy5pZGVudGlmaWVy
LCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0
b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5u
YW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6OlNwa2k6CiAgICAgICAgIGlmICh1c2FnZXMpIHsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNh
bGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0U3BraShlY1BhcmFtZXRlcnMuaWRlbnRp
ZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlFQzo6aW1wb3J0U3BraShlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0
ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tl
eUZvcm1hdDo6UGtjczg6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0b0tl
eVVzYWdlRGVyaXZlS2V5KSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZXJpdmVCaXRzKSAm
JiAodXNhZ2VzIF4gKENyeXB0b0tleVVzYWdlRGVyaXZlS2V5IHwgQ3J5cHRvS2V5VXNhZ2VEZXJp
dmVCaXRzKSkpIHsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5u
YW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBr
Y3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUVDRFNBLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NSw3ICs5NSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtleShDcnkKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAg
IGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBX
VEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBr
ZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAo
dXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNp
Z24pKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5
KSkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CkBAIC0x
MjQsMjEgKzEyNCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDRFNBOjppbXBvcnRLZXkoQ3J5
CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9y
dFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdU
Rk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBpZiAodXNhZ2Vz
ICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpIHsKICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0U3BraShlY1BhcmFtZXRlcnMu
aWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVj
dG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0U3BraShlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQ
YXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENy
eXB0b0tleUZvcm1hdDo6UGtjczg6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENy
eXB0b0tleVVzYWdlU2lnbikpIHsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRh
eEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFy
YW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6
OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRD
dXJ2ZSwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtE
Ri5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSEtERjo6aW1wb3J0S2V5KENy
eXAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6
Y3JlYXRlKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIHVzYWdlcykpOworICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6Y3Jl
YXRlKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIHVzYWdlcykpOwogfQogCiBFeGNlcHRpb25PcjxzaXplX3Q+IENyeXB0b0Fs
Z29yaXRobUhLREY6OmdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
JikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUhNQUMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0
S2V5KENyeXAKICAgICBSZWZQdHI8Q3J5cHRvS2V5SE1BQz4gcmVzdWx0OwogICAgIHN3aXRjaCAo
Zm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgcmVzdWx0
ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9v
cigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVj
dG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlITUFDOjppbXBvcnRSYXcoaG1hY1BhcmFtZXRlcnMubGVuZ3RoLnZhbHVl
X29yKDApLCBobWFjUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgYXV0byBjaGVj
a0FsZ0NhbGxiYWNrID0gW10oQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoLCBjb25zdCBT
dHJpbmcmIGFsZykgLT4gYm9vbCB7CkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBDcnlwdG9BbGdv
cml0aG1ITUFDOjppbXBvcnRLZXkoQ3J5cAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlITUFDOjpp
bXBvcnRKd2soaG1hY1BhcmFtZXRlcnMubGVuZ3RoLnZhbHVlX29yKDApLCBobWFjUGFyYW1ldGVy
cy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4
dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykpOworICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlITUFDOjppbXBvcnRKd2soaG1hY1BhcmFtZXRlcnMubGVuZ3RoLnZh
bHVlX29yKDApLCBobWFjUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tB
bGdDYWxsYmFjaykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtUEJLREYyLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUEJLREYyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVBCS0RGMjo6aW1wb3J0S2V5
KENyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6
OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKKyAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNy
ZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKIH0KIAogRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9B
bGdvcml0aG1QQktERjI6OmdldEtleUxlbmd0aChjb25zdCBDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzJikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwCShyZXZp
c2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEw
NCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICBSZWZQ
dHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92
ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0g
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAgICAgICAgIGlmICh1c2FnZXMg
JiYgKCgha2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVjcnlwdCkp
IHx8IChrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkp
KSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FF
U19QS0NTMV92MV81OjppbQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJy
b3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleVJTQTo6aW1wb3J0U3BraShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51bGxv
cHQsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxl
LCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocGFy
YW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODogewpAQCAtMTMzLDcgKzEz
Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShXVEY6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3Rk
OjpudWxsb3B0LCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCShyZXZpc2lvbiAy
MjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAgUmVmUHRyPENy
eXB0b0tleVJTQT4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RG
OjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYg
KCgha2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChr
ZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAg
ICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE1OSw3ICsxNTks
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1
NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1l
dGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdU
Rjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRl
bnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE2OCw3
ICsxNjgsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3Jn
L2IvMTY1NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMt
PmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5j
cHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzEx
Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleSgKICAgICBSZWZQ
dHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92
ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0g
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgYm9vbCBpc1Vz
YWdlc0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKCFrZXkuZC5pc051bGwoKSkgewpAQCAt
MTczLDcgKzE3Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleSgK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtp
dC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3Br
aShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIs
IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFy
YW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3Zl
KHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODog
ewpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9y
dEtleSgKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTog
PHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1w
b3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRp
ZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgo
cGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
UlNBX1BTUy5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw3ICs5OCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KEMKICAg
ICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0g
V1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkg
a2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYg
KHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VT
aWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlm
eSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAt
MTQzLDcgKzE0Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KEMK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtp
dC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3Br
aShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIs
IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFy
YW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3Zl
KHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODog
ewpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0
S2V5KEMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTog
PHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1w
b3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRp
ZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgo
cGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1FY2RzYVBhcmFtcy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29y
aXRobUVjZHNhUGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMg
ewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJ
ZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmlu
Zz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0
cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVy
OwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xh
c3M6OkVjZHNhUGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5oCShyZXZpc2lv
biAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1Ia2RmUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcyBmaW5hbCA6IHB1
YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTog
Q29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50
PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBCdWZmZXJTb3VyY2Ugc2FsdDsK
ICAgICBCdWZmZXJTb3VyY2UgaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1z
LmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGlj
OgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVy
LgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsK
KyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFz
aDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogICAgIHN0
ZDo6b3B0aW9uYWw8c2l6ZV90PiBsZW5ndGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBh
cmFtcy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQCBwdWJsaWM6CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgdW5zaWduZWQg
bG9uZyBpdGVyYXRpb25zOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5k
IGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4s
IFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVu
dGlmaWVyOwogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzYWx0VmVjdG9yKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hl
ZEltcG9ydFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5oCShyZXZpc2lvbiAy
MjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBv
cnRQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7CiBwdWJs
aWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZp
ZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNo
OworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBo
YXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAg
ICBDbGFzcyBwYXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDbGFzczo6UnNh
SGFzaGVkSW1wb3J0UGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNo
ZWRLZXlHZW5QYXJhbXMuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0
b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNp
ZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAgICBDbGFzcyBwYXJhbWV0ZXJzQ2xhc3Mo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBDbGFzczo6UnNhSGFzaGVkS2V5R2VuUGFyYW1zOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lv
biAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgQ1NTUHJvcGVydHlJbmZv
IHBhcnNlSmF2YVNjcmlwdENTCiAKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywg
ZG91YmxlPj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3Vi
bGU+PiBDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCiB7CiAgICAgYXV0byBwcm9wZXJ0eUluZm8gPSBwYXJzZUphdmFTY3JpcHRD
U1NQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SW5mby5wcm9w
ZXJ0eUlEKQpAQCAtMjU5LDE3ICsyNTksMTcgQEAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmlu
ZywgZG91YmxlPj4gQwogICAgIGF1dG8gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJu
YWwocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAg
Ly8gSWYgdGhlIHByb3BlcnR5IGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5IChzdWNoIGFzICJwYWRk
aW5nIiksIGl0IGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHVzaW5nIGdldFByb3BlcnR5VmFsdWUuCi0g
ICAgICAgIHJldHVybiBWYXJpYW50PFN0cmluZywgZG91YmxlPiB7IGdldFByb3BlcnR5VmFsdWVJ
bnRlcm5hbChwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkgfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVy
dHlJbmZvLnByb3BlcnR5SUQpIH07CiAgICAgfQogICAgIAogICAgIGlmIChwcm9wZXJ0eUluZm8u
aGFkUGl4ZWxPclBvc1ByZWZpeCAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewog
ICAgICAgICAvLyBDYWxsIHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2V0dGVyIHNvIHRoYXQsIGUuZy4s
IHBpeGVsVG9wIHJldHVybnMgdG9wIGFzIGEgbnVtYmVyCiAgICAgICAgIC8vIGluIHBpeGVsIHVu
aXRzIGFuZCBwb3NUb3Agc2hvdWxkIGRvZXMgdGhlIHNhbWUgX2lmXyB0aGlzIGlzIGEgcG9zaXRp
b25lZCBlbGVtZW50LgogICAgICAgICAvLyBGSVhNRTogSWYgbm90IGEgcG9zaXRpb25lZCBlbGVt
ZW50LCBNU0lFIGRvY3VtZW50YXRpb24gc2F5cyBwb3NUb3Agc2hvdWxkIHJldHVybiAwOyB0aGlz
IHJ1bGUgaXMgbm90IGltcGxlbWVudGVkLgotICAgICAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcs
IGRvdWJsZT4geyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5mbG9hdFZhbHVl
KENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlh
bnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
ZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSB9OwogICAgIH0KIAotICAgIHJl
dHVybiBWYXJpYW50PFN0cmluZywgZG91YmxlPiB7IHZhbHVlLT5jc3NUZXh0KCkgfTsKKyAgICBy
ZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPiB7IHZhbHVlLT5jc3NUZXh0KCkgfTsK
IH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lLCBTdHJpbmcgdmFsdWUsIGJvb2wmIHBy
b3BlcnR5U3VwcG9ydGVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFy
YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CiAKICAgICAvLyBCaW5kaW5ncyBzdXBwb3J0LgotICAgIHN0ZDo6b3B0aW9u
YWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IG5hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXROYW1l
ZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBTdHJpbmcgdmFsdWUsIGJvb2wmIHByb3Bl
cnR5U3VwcG9ydGVkKTsKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0
eU5hbWVzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXguaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgJKHJldmlzaW9uIDIy
MDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXguaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTU1hdHJpeCA6
IHB1YmxpYyBET01NYXRyaXhSZWFkT25seSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZjxET01NYXRyaXg+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywg
VmVjdG9yPGRvdWJsZT4+PiYmIGluaXQpCisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01N
YXRyaXg+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8
ZG91YmxlPj4+JiYgaW5pdCkKICAgICB7CiAgICAgICAgIGF1dG8gbWF0cml4ID0gYWRvcHRSZWYo
Km5ldyBET01NYXRyaXgpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvRE9NTWF0cml4UmVhZE9ubHkuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgc3RydWN0IERPTVBvaW50SW5pdDsKIGNsYXNzIERPTU1hdHJpeFJlYWRPbmx5IDogcHVibGlj
IFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8RE9NTWF0cml4UmVhZE9ubHk+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0
aW9uT3I8UmVmPERPTU1hdHJpeFJlYWRPbmx5Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8VmFyaWFu
dDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0KQorICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxSZWY8RE9NTWF0cml4UmVhZE9ubHk+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlh
bnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYgaW5pdCkKICAgICB7CiAgICAgICAgIGF1dG8g
bWF0cml4ID0gYWRvcHRSZWYoKm5ldyBET01NYXRyaXhSZWFkT25seSk7CiAgICAgICAgIGlmICgh
aW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CiAgICAgfTsKICAgICAK
LSAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBTb3VyY2UgPSBz
dGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4+OwogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8Rm9udEZhY2U+
PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgU291cmNlJiYsIGNvbnN0
IERlc2NyaXB0b3JzJik7CiAgICAgc3RhdGljIFJlZjxGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRG
YWNlJik7CiAgICAgdmlydHVhbCB+Rm9udEZhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIGVudW0gY2xhc3MgQ3VzdG9tRWxlbWVudE5h
bWVWYWxpZGF0aW9uU3QKICAgICBDb25mbGljdHNXaXRoU3RhbmRhcmRFbGVtZW50TmFtZQogfTsK
IAotdXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IFZhcmlhbnQ8Cit1c2luZyBSZW5kZXJpbmdDb250
ZXh0ID0gc3RkOjp2YXJpYW50PAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiwKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1h
cmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBzdHJ1
Y3QgRHJhZ2dlZENvbnRlbnREYXRhIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IHRhcmdldE5vZGU7
CiAgICAgfTsKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVz
Y3JpcHRpb25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBE
cmFnZ2VkQ29udGVudERhdGE+OworICAgIHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlhbnQ8SXNBY3Rp
dmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0YSwgRGljdGF0aW9uQWx0
ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhPjsKIAogICAgIERvY3VtZW50TWFya2Vy
KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3RpdmVN
YXRjaCk7CiAgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiA9IFN0cmlu
ZygpKTsKQEAgLTE5OCwxMiArMTk4LDEyIEBAIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpz
aGlmdE9mZnNldHMKIAogaW5saW5lIGNvbnN0IFN0cmluZyYgRG9jdW1lbnRNYXJrZXI6OmRlc2Ny
aXB0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KG1fZGF0YSkgPyBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBlbXB0eVN0cmluZygpOwor
ICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKSA/IHN0ZDo6
Z2V0PFN0cmluZz4obV9kYXRhKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIGlubGluZSBib29sIERv
Y3VtZW50TWFya2VyOjppc0FjdGl2ZU1hdGNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxib29sPihtX2RhdGEpICYmIFdURjo6Z2V0PGJvb2w+KG1fZGF0YSk7
CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4obV9kYXRhKSAmJiBzdGQ6
OmdldDxib29sPihtX2RhdGEpOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0
QWN0aXZlTWF0Y2goYm9vbCBpc0FjdGl2ZU1hdGNoKQpAQCAtMjI3LDIyICsyMjcsMjIgQEAgaW5s
aW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYQogCiBpbmxpbmUgY29uc3QgVmVj
dG9yPFN0cmluZz4mIERvY3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMoKSBjb25zdAogewotICAg
IHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLmFsdGVy
bmF0aXZlczsKKyAgICByZXR1cm4gc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4o
bV9kYXRhKS5hbHRlcm5hdGl2ZXM7CiB9CiAKIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpz
ZXRBbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBzaXplX3QgaW5kZXgpCiB7
Ci0gICAgV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5h
dGl2ZXNbaW5kZXhdID0gYWx0ZXJuYXRpdmU7CisgICAgc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJu
YXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNbaW5kZXhdID0gYWx0ZXJuYXRpdmU7CiB9
CiAKIGlubGluZSBpZCBEb2N1bWVudE1hcmtlcjo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIHJl
dHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRh
LmdldCgpOworICAgIHJldHVybiBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPiht
X2RhdGEpLm1ldGFkYXRhLmdldCgpOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6
c2V0TWV0YWRhdGEoaWQgbWV0YWRhdGEpCiB7Ci0gICAgV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJu
YXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOworICAgIHN0ZDo6Z2V0PERp
Y3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEgPSBtZXRhZGF0YTsKIH0K
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDks
NyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyCiAgICAgICAgIHJl
dHVybiB0cnVlOwogI2VuZGlmCiAgICAgaWYgKG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRN
YXJrZXI6OkRyYWdnZWRDb250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBX
VEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0
YSgpKS50YXJnZXROb2RlKQorICAgICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gc3RkOjpnZXQ8
RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFy
Z2V0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiB0YXJnZXROb2RlLT5yZW5kZXJlcigpICYmIHRh
cmdldE5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyUmVwbGFjZWQoKTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAs
NyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluCiAgICAgICAgIGFk
ZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNlTm9uTnVsbCgpLCBjYXB0
dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAg
c3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogdm9pZCBFdmVudFRhcmdldDo6cmVt
b3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgTGlzdGVuZXJPcHRpb25zT3JCb29s
ZWFuJiYgdmFyaWFudCkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1v
dmVFdmVudExpc3RlbmVyRm9yCiAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBl
LCAqbGlzdGVuZXIsIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RGOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogfQogCiBib29s
IEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgTGlzdGVuZXJPcHRpb25zJiBv
cHRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDIyMDkwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
MSw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBvbmNlOwogICAgIH07CiAKLSAgICB1
c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IFZhcmlhbnQ8QWRkRXZlbnRM
aXN0ZW5lck9wdGlvbnMsIGJvb2w+OworICAgIHVzaW5nIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25z
T3JCb29sZWFuID0gc3RkOjp2YXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLCBib29sPjsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYsIEFkZEV2
ZW50TGlzdGVuZXJPcHRpb25zT3JCb29sZWFuJiYpOwotICAgIHVzaW5nIExpc3RlbmVyT3B0aW9u
c09yQm9vbGVhbiA9IFZhcmlhbnQ8TGlzdGVuZXJPcHRpb25zLCBib29sPjsKKyAgICB1c2luZyBM
aXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBzdGQ6OnZhcmlhbnQ8TGlzdGVuZXJPcHRpb25zLCBi
b29sPjsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5k
aW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
JiYsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjxib29sPiBkaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoRXZlbnQmKTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKIAotdXNpbmcgTWVzc2FnZUV2ZW50
U291cmNlID0gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPE1lc3NhZ2VQb3J0Pj47
Cit1c2luZyBNZXNzYWdlRXZlbnRTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRv
dz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwogCiBjbGFzcyBNZXNzYWdlRXZlbnQgZmluYWwgOiBw
dWJsaWMgRXZlbnQgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMjA5MDEp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2
MSw3IEBAIGNsYXNzIFNWR1F1YWxpZmllZE5hbWU7CiBjbGFzcyBTaGFkb3dSb290OwogY2xhc3Mg
VG91Y2hFdmVudDsKIAotdXNpbmcgTm9kZU9yU3RyaW5nID0gVmFyaWFudDxSZWZQdHI8Tm9kZT4s
IFN0cmluZz47Cit1c2luZyBOb2RlT3JTdHJpbmcgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+
LCBTdHJpbmc+OwogCiBjbGFzcyBOb2RlUmFyZURhdGFCYXNlIHsKIHB1YmxpYzoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVy
bmF0aXZlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0
cmluZyA9IFdURjo6Z2V0PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ+KG1fZGV0YWlscyk7Cisg
ICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyA9IHN0ZDo6Z2V0PEF1dG9jb3JyZWN0aW9u
UmVwbGFjZW1lbnQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudFN0cmluZy5p
c0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7
CkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcgogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgICAgICBpZiAoIW1fcmFu
Z2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHVpbnQ2NF90
IGRpY3RhdGlvbkNvbnRleHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+
KG1fZGV0YWlscyk7CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBzdGQ6Omdl
dDxBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmICgh
ZGljdGF0aW9uQ29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2
ZS5nZXQoKSk7CkBAIC01OTIsOSArNTkyLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZXNwb25kVAogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJu
YXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczogewotICAgICAgICBpZiAoIVdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRh
KCkpKQorICAgICAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOworICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0g
c3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwog
ICAgICAgICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3
b3JkUmFuZ2U7CkBAIC02NDIsOSArNjQyLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjppbnNlcnREaQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0
YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikK
IHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEo
KSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpE
aWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSk7CiAgICAgaWYgKGF1dG8qIGNsaWVudCA9IGFs
dGVybmF0aXZlVGV4dENsaWVudCgpKQotICAgICAgICBjbGllbnQtPnJlbW92ZURpY3RhdGlvbkFs
dGVybmF0aXZlcyhXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2Vy
LmRhdGEoKSkuY29udGV4dCk7CisgICAgICAgIGNsaWVudC0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJu
YXRpdmVzKHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0
YSgpKS5jb250ZXh0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hcmtlcik7CiAjZW5kaWYK
QEAgLTY1NSw3ICs2NTUsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgQVNTRVJUKG1hcmtlci50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgaWYg
KGF1dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQotICAgICAgICByZXR1cm4g
Y2xpZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOworICAgICAgICByZXR1cm4gY2xp
ZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOwogICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWFya2VyKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZp
c2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGJvb2wgaXNBY3RpdmU7CiAgICAgICAgIEFsdGVybmF0aXZlVGV4dFR5cGUgdHlwZTsK
ICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dDsKLSAgICAgICAgVmFyaWFudDxBdXRvY29ycmVj
dGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+IGRldGFpbHM7Cisg
ICAgICAgIHN0ZDo6dmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2
ZURpY3RhdGlvbkNvbnRleHQ+IGRldGFpbHM7CiAgICAgfTsKIAogICAgIFN0cmluZyBkaXNtaXNz
U29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKQEAgLTEzNiw3ICsxMzYs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZzsKICAgICBBbHRl
cm5hdGl2ZVRleHRUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9vcmlnaW5hbFRleHQ7Ci0gICAg
VmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNv
bnRleHQ+IG1fZGV0YWlsczsKKyAgICBzdGQ6OnZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFpbHM7CiAKICAgICBTdHJp
bmcgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CiAgICAgUG9z
aXRpb24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0Jsb2IuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLXVzaW5n
IEJsb2JQYXJ0VmFyaWFudCA9IFZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3Piwg
UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4sIFN0cmluZz47Cit1c2luZyBC
bG9iUGFydFZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3
PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4sIFN0cmluZz47CiAKIGNs
YXNzIEJsb2IgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVVJMUmVnaXN0cmFibGUs
IHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBA
IHZvaWQgRmlsZVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0IEF0b21pY1MKICAgICBkaXNwYXRjaEV2
ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBtX2xvYWRlciA/IG1fbG9hZGVy
LT5ieXRlc0xvYWRlZCgpIDogMCwgbV9sb2FkZXIgPyBtX2xvYWRlci0+dG90YWxCeXRlcygpIDog
MCkpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlcj4+PiBGaWxlUmVhZGVyOjpyZXN1bHQoKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6
OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiBGaWxlUmVhZGVyOjpy
ZXN1bHQoKSBjb25zdAogewogICAgIGlmICghbV9sb2FkZXIgfHwgbV9lcnJvcikKICAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5o
CShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgUmVhZHlTdGF0
ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIFJlZlB0cjxGaWxl
RXJyb3I+IGVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIEZpbGVSZWFkZXJMb2FkZXI6
OlJlYWRUeXBlIHJlYWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkVHlwZTsgfQotICAgIHN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+IHJl
c3VsdCgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gcmVzdWx0KCkgY29uc3Q7CiAKICAgICB1c2luZyBSZWZD
b3VudGVkOjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDI4ICs0MywyOCBAQCBpbmxpbmUgSFRNTEFsbENvbGxlY3Rpb246OkhUTUxBbGxDb2xs
ZWN0CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJh
c3RydWN0dXJlLmh0bWwjZG9tLWh0bWxhbGxjb2xsZWN0aW9uLWl0ZW0KLXN0ZDo6b3B0aW9uYWw8
VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVPckluZGV4KSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVk
T3JJbmRleGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29u
c3QKIHsKICAgICBpZiAobmFtZU9ySW5kZXguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IEpTQzo6cGFyc2VJbmRleCgqbmFtZU9y
SW5kZXguaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IGl0ZW0oaW5kZXgudmFs
dWUoKSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZh
bHVlKCkpIH0gfTsKIAogICAgIHJldHVybiBuYW1lZEl0ZW1Pckl0ZW1zKG5hbWVPckluZGV4KTsK
IH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1
Y3R1cmUuaHRtbCNjb25jZXB0LWdldC1hbGwtbmFtZWQKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxsQ29sbGVjdGlv
bjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CitzdGQ6
Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxl
bWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byBuYW1lZEl0ZW1zID0gdGhpcy0+bmFtZWRJ
dGVtcyhuYW1lKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAg
ICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+
PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAg
ICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKIAot
ICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50
Pj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgZG93bmNhc3Q8RG9jdW1lbnQ+KG93bmVyTm9k
ZSgpKS5hbGxGaWx0ZXJlZEJ5TmFtZShuYW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFu
dDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiB7IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVyZWRC
eU5hbWUobmFtZSkgfSB9OwogfQogCiBIVE1MQWxsTmFtZWRTdWJDb2xsZWN0aW9uOjp+SFRNTEFs
bE5hbWVkU3ViQ29sbGVjdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxD
b2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
bGxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgY2xhc3MgSFRN
TEFsbENvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgQQogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
SFRNTEFsbENvbGxlY3Rpb24+IGNyZWF0ZShEb2N1bWVudCYsIENvbGxlY3Rpb25UeXBlKTsKIAot
ICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8
RWxlbWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZU9ySW5kZXgpIGNvbnN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRN
TENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0
b21pY1N0cmluZyYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0
cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkT3JJbmRleGVkSXRlbU9y
SXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1l
bnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVudCYsIENvbGxlY3Rpb25UeXBlKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDIyMDkwMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEyLDcgKzExMiw3IEBAIFJlZjxEb2N1bWVudFBhcnNlcj4gSFRNTERvY3VtZW50OjpjcmVh
dGUKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0
bWwjZG9tLWRvY3VtZW50LW5hbWVkaXRlbQotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxE
T01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+PiBIVE1M
RG9jdW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlv
bmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lLmlzTnVsbCgpIHx8ICFoYXNEb2N1bWVudE5h
bWVkSXRlbSgqbmFtZS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAt
MTIwLDE2ICsxMjAsMTYgQEAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+
LAogICAgIGlmIChVTkxJS0VMWShkb2N1bWVudE5hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVt
ZW50cygqbmFtZS5pbXBsKCkpKSkgewogICAgICAgICBhdXRvIGNvbGxlY3Rpb24gPSBkb2N1bWVu
dE5hbWVkSXRlbXMobmFtZSk7CiAgICAgICAgIEFTU0VSVChjb2xsZWN0aW9uLT5sZW5ndGgoKSA+
IDEpOwotICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVs
ZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
eyBXVEZNb3ZlKGNvbGxlY3Rpb24pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxS
ZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+
PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBXVEZNb3ZlKGNvbGxlY3Rpb24pIH0gfTsKICAg
ICB9CiAKICAgICBhdXRvJiBlbGVtZW50ID0gKmRvY3VtZW50TmFtZWRJdGVtKCpuYW1lLmltcGwo
KSk7CiAgICAgaWYgKFVOTElLRUxZKGlzPEhUTUxJRnJhbWVFbGVtZW50PihlbGVtZW50KSkpIHsK
ICAgICAgICAgaWYgKGF1dG8qIGRvbVdpbmRvdyA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50
PihlbGVtZW50KS5jb250ZW50V2luZG93KCkpCi0gICAgICAgICAgICByZXR1cm4gVmFyaWFudDxS
ZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+
PiB7IFJlZlB0cjxET01XaW5kb3c+IHsgZG9tV2luZG93IH0gfTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9NV2luZG93PiB7IGRvbVdpbmRvdyB9IH07CiAg
ICAgfQogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVu
dCB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRy
PEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxFbGVtZW50PiB7ICZl
bGVtZW50IH0gfTsKIH0KIAogVmVjdG9yPEF0b21pY1N0cmluZz4gSFRNTERvY3VtZW50OjpzdXBw
b3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgaW50IHdpZHRoKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGhlaWdodCgpOwog
ICAgIAotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRy
PEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21p
Y1N0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5k
b3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+PiBuYW1lZEl0ZW0o
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gc3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpIGNvbnN0OwogCiAgICAgRWxlbWVudCogZG9jdW1lbnROYW1lZEl0ZW0o
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudE5h
bWVkSXRlbS5nZXRFbGVtZW50QnlEb2N1bWVudE5hbWVkSXRlbShuYW1lLCAqdGhpcyk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2IEBA
IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjp+SFRNTEZvcm1Db24KIHsKIH0KIAotc3RkOjpv
cHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4g
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFt
ZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byBuYW1l
ZEl0ZW1zID0gdGhpcy0+bmFtZWRJdGVtcyhuYW1lKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobmFtZWRJdGVt
cy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxp
c3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0
ZW1zWzBdKSB9IH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1l
ZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlz
dD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUo
KS5yYWRpb05vZGVMaXN0KG5hbWUpIH0gfTsKKyAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0
cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0
PiB7IG93bmVyTm9kZSgpLnJhZGlvTm9kZUxpc3QobmFtZSkgfSB9OwogfQogCiBjb25zdCBWZWN0
b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpm
b3JtQ29udHJvbEVsZW1lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db250
cm9sc0NvbGxlY3Rpb24oKTsKIAogICAgIEhUTUxFbGVtZW50KiBpdGVtKHVuc2lnbmVkIG9mZnNl
dCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRp
b05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5n
JikgY29uc3Q7CiAKICAgICAvLyBGb3IgQ2FjaGVkSFRNTENvbGxlY3Rpb24uCiAgICAgSFRNTEVs
ZW1lbnQqIGN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
MywxNiArMTYzLDE2IEBAIEhUTUxFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6Oml0ZW0odW5zaWcK
ICAgICByZXR1cm4gZWxlbWVudHMoKS0+aXRlbShpbmRleCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8
VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3Jt
RWxlbWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3N0ZDo6b3B0aW9u
YWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4g
SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewog
ICAgIGF1dG8gbmFtZWRJdGVtcyA9IG5hbWVkRWxlbWVudHMobmFtZSk7CiAKICAgICBpZiAobmFt
ZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYg
KG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxS
YWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1v
dmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0
cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdU
Rk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJh
ZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsg
cmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4g
eyByYWRpb05vZGVMaXN0KG5hbWUpIH0gfTsKIH0KIAogVmVjdG9yPEF0b21pY1N0cmluZz4gSFRN
TEZvcm1FbGVtZW50OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyAr
NTMsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKICAgICBIVE1MRWxlbWVudCogaXRlbSh1bnNpZ25lZCBpbmRleCk7Ci0gICAgc3RkOjpv
cHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4g
bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2
YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVt
KGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRl
ZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIFN0cmluZyBlbmN0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVzLmVuY29kaW5nVHlwZSgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjUs
NyArMTM2NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXIKIAog
ICAgICAgICAgICAgLy8gMi4gRW5kIHRoZSBzeW5jaHJvbm91cyBzZWN0aW9uLCBjb250aW51aW5n
IHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgICAgICAgICAvLyAzLiBSdW4g
dGhlIHJlc291cmNlIGZldGNoIGFsZ29yaXRobSB3aXRoIHRoZSBhc3NpZ25lZCBtZWRpYSBwcm92
aWRlciBvYmplY3QuCi0gICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoCisg
ICAgICAgICAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoCiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKICAgICAgICAgICAgICAgICBbdGhpc10oUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJl
YW0pIHsgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IHN0cmVhbTsgfSwKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMDkwMSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDQsNyArMTA0LDcgQEAgdXNpbmcgQ3VlSW50ZXJ2YWwgPSBDdWVJbnRlcnZhbFRyZWU6Oklu
dAogdXNpbmcgQ3VlTGlzdCA9IFZlY3RvcjxDdWVJbnRlcnZhbD47CiAjZW5kaWYKIAotdXNpbmcg
TWVkaWFQcm92aWRlciA9IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDwKK3VzaW5nIE1lZGlhUHJvdmlk
ZXIgPSBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDwKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOCArNDMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
SXRlbSh1bnNpZ25lZCBpbmRleCwgSFRNTE9wdGlvbkVsZW1lbnQqKTsKICAgICAKLSAgICB1c2lu
ZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVt
ZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVu
dE9ySW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OworICAgIHVzaW5nIE9w
dGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxl
bWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNpbmcgSFRNTEVsZW1l
bnRPckludCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdF
QkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3Vw
RWxlbWVudCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SFRNTEVsZW1lbnRPckludD4mIGJlZm9yZSk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoaW50IGluZGV4KTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMjIwOTAxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdXNlc01lbnVMaXN0KCkgY29uc3Q7
CiAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKLSAgICB1c2lu
ZyBIVE1MRWxlbWVudE9ySW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+Owor
ICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxI
VE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNp
bmcgSFRNTEVsZW1lbnRPckludCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBp
bnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRp
b25Pck9wdEdyb3VwRWxlbWVudCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SFRNTEVsZW1lbnRPcklu
dD4mIGJlZm9yZSk7CiAKICAgICB1c2luZyBOb2RlOjpyZW1vdmU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIy
ICs0MSwyNSBAQCBVUkxTZWFyY2hQYXJhbXM6OlVSTFNlYXJjaFBhcmFtcyhjb25zdCBWCiB7CiB9
CiAKLUV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWFyY2hQYXJhbXM6OmNy
ZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVl
UGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYgdmFyaWFudCkKK0V4Y2VwdGlvbk9yPFJl
ZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWFyY2hQYXJhbXM6OmNyZWF0ZShzdGQ6OnZhcmlhbnQ8
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywg
U3RyaW5nPj4sIFN0cmluZz4mJiB2YXJpYW50KQogewotICAgIGF1dG8gdmlzaXRvciA9IFdURjo6
bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4g
RXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKLSAgICAgICAgVmVjdG9yPFdURjo6
S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4gcGFpcnM7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcGFpciA6IHZlY3RvcikgewotICAgICAgICAgICAgaWYgKHBhaXIuc2l6ZSgpICE9IDIp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgICAg
ICAgICAgcGFpcnMuYXBwZW5kKHtwYWlyWzBdLCBwYWlyWzFdfSk7CisgICAgcmV0dXJuIFdURjo6
c3dpdGNoT24odmFyaWFudCwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgdmVjdG9yKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4geworICAgICAg
ICAgICAgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4gcGFpcnM7Cisg
ICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3IpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocGFpci5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IFR5cGVFcnJvciB9OworICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFp
clswXSwgcGFpclsxXX0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKFdURk1vdmUocGFpcnMpKSk7CisgICAgICAgIH0sCisg
ICAgICAgIFtdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
JiBwYWlycykgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhwYWlycykpOworICAgICAg
ICB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gRXhjZXB0aW9uT3I8UmVm
PFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVS
TFNlYXJjaFBhcmFtcyhzdHJpbmcsIG51bGxwdHIpKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoV1RGTW92ZShwYWlycykpKTsKLSAgICB9
LCBbJl0oY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4mIHBh
aXJzKSB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhwYWly
cykpOwotICAgIH0sIFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxscHRyKSk7Ci0gICAgfSk7
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgKTsKIH0KIAog
U3RyaW5nIFVSTFNlYXJjaFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuaAkocmV2aXNpb24gMjIwOTAxKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVSTFNlYXJjaFBh
cmFtcyA6IHB1YmxpYyBSZWZDb3VudGVkPFVSTFNlYXJjaFBhcmFtcz4gewogcHVibGljOgotICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3JlYXRlKFZhcmlhbnQ8
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywg
U3RyaW5nPj4sIFN0cmluZz4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFy
Y2hQYXJhbXM+PiBjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZl
Y3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYpOwogICAg
IHN0YXRpYyBSZWY8VVJMU2VhcmNoUGFyYW1zPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IERPTVVSTCogYXNzb2NpYXRlZFVSTCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpbmcsIGFzc29jaWF0ZWRVUkwpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBj
bGFzcyBUZXh0TWV0cmljczsKIHN0cnVjdCBET01NYXRyaXhJbml0OwogCiAjaWYgRU5BQkxFKFZJ
REVPKQotdXNpbmcgQ2FudmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VF
bGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1l
bnQ+PjsKK3VzaW5nIENhbnZhc0ltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1M
SW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZh
c0VsZW1lbnQ+PjsKICNlbHNlCi11c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IFZhcmlhbnQ8UmVm
UHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKK3VzaW5n
IENhbnZhc0ltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAogY2xhc3MgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1
YmxpYyBDYW52YXNQYXRoIHsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmKTsKIAotICAgIHVzaW5nIFN0eWxl
ID0gVmFyaWFudDxTdHJpbmcsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPj47CisgICAgdXNpbmcgU3R5bGUgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8
Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OwogICAgIFN0eWxlIHN0cm9r
ZVN0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHlsZSYmKTsKICAgICBT
dHlsZSBmaWxsU3R5bGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEyICsxMzUs
MTIgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogCiBib29sIENh
bnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNv
bnN0CiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYm
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5bGUpKQotICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IFdURjo6Z2V0PENvbG9yPihvdGhlci5t
X3N0eWxlKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkg
JiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4ob3RoZXIubV9zdHlsZSkpCisgICAgICAg
IHJldHVybiBzdGQ6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gc3RkOjpnZXQ8Q29sb3I+KG90aGVy
Lm1fc3R5bGUpOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4o
bV9zdHlsZSkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihvdGhlci5tX3N0
eWxlKSkgewotICAgICAgICBhdXRvJiBhID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7
Ci0gICAgICAgIGF1dG8mIGIgPSBXVEY6OmdldDxDTVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKTsK
KyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSAmJiBz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpKSB7CisgICAg
ICAgIGF1dG8mIGEgPSBzdGQ6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKTsKKyAgICAgICAgYXV0
byYgYiA9IHN0ZDo6Z2V0PENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpOwogICAgICAgICByZXR1
cm4gYS5jID09IGIuYyAmJiBhLm0gPT0gYi5tICYmIGEueSA9PSBiLnkgJiYgYS5rID09IGIuayAm
JiBhLmEgPT0gYi5hOwogICAgIH0KIApAQCAtMTQ5LDE1ICsxNDksMTUgQEAgYm9vbCBDYW52YXNT
dHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnRSR0JBKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6
Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4g
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpnZXQ8Q29sb3I+
KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9OwogfQogCiBib29sIENhbnZhc1N0eWxl
Ojppc0VxdWl2YWxlbnRDTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKSBjb25zdAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNv
bG9yPihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xv
cj4obV9zdHlsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGNoYW5uZWxz
ID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7CisgICAgYXV0byYgY2hhbm5lbHMgPSBz
dGQ6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKTsKICAgICByZXR1cm4gYyA9PSBjaGFubmVscy5j
ICYmIG0gPT0gY2hhbm5lbHMubSAmJiB5ID09IGNoYW5uZWxzLnkgJiYgayA9PSBjaGFubmVscy5r
ICYmIGEgPT0gY2hhbm5lbHMuYTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNTdHlsZS5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMCArNTAsMTAgQEAg
cHVibGljOgogICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0
cmluZyYgY29sb3IpOwogICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nV2l0
aE92ZXJyaWRlQWxwaGEoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOwogCi0gICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SW52
YWxpZD4obV9zdHlsZSk7IH0KLSAgICBib29sIGlzQ3VycmVudENvbG9yKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1fc3R5bGUpOyB9Ci0gICAg
Ym9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNDdXJyZW50Q29sb3IoKSAm
JiBXVEY6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxwaGE7IH0KLSAgICBm
bG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8Q3VycmVudENvbG9y
PihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVlKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsg
fQorICAgIGJvb2wgaXNDdXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEN1cnJlbnRDb2xvcj4obV9zdHlsZSk7IH0KKyAgICBib29sIGhhc092ZXJyaWRl
QWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0N1cnJlbnRDb2xvcigpICYmIHN0ZDo6Z2V0PEN1cnJl
bnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYTsgfQorICAgIGZsb2F0IG92ZXJyaWRlQWxw
aGEoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJy
aWRlQWxwaGEudmFsdWUoKTsgfQogCiAgICAgU3RyaW5nIGNvbG9yKCkgY29uc3Q7CiAgICAgQ2Fu
dmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3Q7CkBAIC05MSw3ICs5MSw3IEBAIHBy
aXZhdGU6CiAKICAgICBDYW52YXNTdHlsZShDdXJyZW50Q29sb3IpOwogCi0gICAgVmFyaWFudDxJ
bnZhbGlkLCBDb2xvciwgQ01ZS0FDb2xvciwgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRy
PENhbnZhc1BhdHRlcm4+LCBDdXJyZW50Q29sb3I+IG1fc3R5bGU7CisgICAgc3RkOjp2YXJpYW50
PEludmFsaWQsIENvbG9yLCBDTVlLQUNvbG9yLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQ
dHI8Q2FudmFzUGF0dGVybj4sIEN1cnJlbnRDb2xvcj4gbV9zdHlsZTsKIH07CiAKIENvbG9yIGN1
cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCopOwpAQCAtMTA0LDIxICsxMDQsMjEgQEAgaW5s
aW5lIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZSgpCiAKIGlubGluZSBDYW52YXNHcmFkaWVudCog
Q2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9zdHlsZSkpCisgICAgaWYg
KCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGOjpnZXQ8UmVmUHRyPENh
bnZhc0dyYWRpZW50Pj4obV9zdHlsZSkuZ2V0KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0
cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpLmdldCgpOwogfQogCiBpbmxpbmUgQ2FudmFzUGF0
dGVybiogQ2FudmFzU3R5bGU6OmNhbnZhc1BhdHRlcm4oKSBjb25zdAogewotICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1fc3R5bGUpKQorICAg
IGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1fc3R5
bGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGOjpnZXQ8UmVmUHRy
PENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKS5nZXQoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8UmVm
UHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKS5nZXQoKTsKIH0KIAogaW5saW5lIFN0cmluZyBD
YW52YXNTdHlsZTo6Y29sb3IoKSBjb25zdAogewotICAgIGF1dG8mIGNvbG9yID0gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgPyBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkg
OiBXVEY6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb2xvcjsKKyAgICBhdXRvJiBjb2xvciA9
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpID8gc3RkOjpnZXQ8Q29sb3I+
KG1fc3R5bGUpIDogc3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29sb3I7CiAgICAgcmV0
dXJuIGNvbG9yLnNlcmlhbGl6ZWQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjIwOTAx
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleElt
YWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwg
R0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpOwogCiAgICAgdm9pZCB0ZXhTdWJJbWFnZTNEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEc2l6ZWkgZGVwdGgsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFy
cmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpOwotICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gV1RG
OjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJl
ZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CisgICAg
dXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJl
ZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiwgUmVmUHRy
PEhUTUxWaWRlb0VsZW1lbnQ+PjsKICAgICB2b2lkIHRleFN1YkltYWdlM0QoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RGludCB6b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFRleEltYWdlU291
cmNlJiYpOwogCiAgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpv
ZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFueS5oCShyZXZpc2lv
biAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFueS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFdlYkdMVGV4dHVyZTsKIGNsYXNzIFdl
YkdMVmVydGV4QXJyYXlPYmplY3Q7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwog
Ci11c2luZyBXZWJHTEFueSA9IFZhcmlhbnQ8Cit1c2luZyBXZWJHTEFueSA9IHN0ZDo6dmFyaWFu
dDwKICAgICBzdGQ6Om51bGxwdHJfdCwKICAgICBib29sLAogICAgIGludCwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4OSw3
ICsxMTg5LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYQogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBXVEY6OnZpc2l0KFsmXShhdXRv
JiBkYXRhKSB7CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAgICBpZiAo
IWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhLmdldCgpKSkgewogICAgICAgICAgICAg
dGhpcy0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMjE4LDcgKzEyMTgsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBXVEY6OnZpc2l0KFsm
XShhdXRvJiBkYXRhKSB7CisgICAgc3RkOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgewogICAgICAg
ICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50
cHRyPihvZmZzZXQpLCBkYXRhLmdldCgpKSkgewogICAgICAgICAgICAgdGhpcy0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRh
IiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTM2NzYs
NyArMzY3Niw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICNl
bmRpZgogICAgICk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UudmFs
dWUoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOwog
fQogCiBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQXJyYXlCdWZmZXJU
eXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdHlwZSwgc3RkOjpvcHRpb25h
bDxKU0M6OlR5cGVkQXJyYXlUeXBlPiBhcnJheVR5cGUpCkBAIC00MjEyLDcgKzQyMTIsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYKICAgICApOwog
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOworICAgIHJl
dHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAogUmVmUHRyPElt
YWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdl
JiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
Myw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rv
ciwgR0MzRGVudW0gZGZhY3Rvcik7CiAgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRz
dEFscGhhKTsKIAotICAgIHVzaW5nIEJ1ZmZlckRhdGFTb3VyY2UgPSBXVEY6OlZhcmlhbnQ8UmVm
UHRyPEFycmF5QnVmZmVyPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4+OworICAgIHVzaW5nIEJ1
ZmZlckRhdGFTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEFycmF5QnVmZmVyPiwgUmVmUHRy
PEFycmF5QnVmZmVyVmlldz4+OwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQs
IGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgc3RkOjpvcHRpb25hbDxCdWZmZXJEYXRhU291cmNlPiYmLCBHQzNEZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBs
b25nIG9mZnNldCwgc3RkOjpvcHRpb25hbDxCdWZmZXJEYXRhU291cmNlPiYmKTsKQEAgLTI0Nyw5
ICsyNDcsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJik7CiAKICNpZiBFTkFCTEUoVklERU8p
Ci0gICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0
YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Piwg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKKyAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IHN0
ZDo6dmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBS
ZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4+OwogI2Vs
c2UKLSAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VE
YXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+
PjsKKyAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SW1hZ2VE
YXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+
PjsKICNlbmRpZgogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gdGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8VGV4SW1hZ2VTb3VyY2U+KTsKQEAg
LTI2Myw3ICsyNjMsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFR5cGVkQXJyYXks
IGNsYXNzIERhdGFUeXBlPgogICAgIGNsYXNzIFR5cGVkTGlzdCB7CiAgICAgcHVibGljOgotICAg
ICAgICB1c2luZyBWYXJpYW50VHlwZSA9IFZhcmlhbnQ8UmVmUHRyPFR5cGVkQXJyYXk+LCBWZWN0
b3I8RGF0YVR5cGU+PjsKKyAgICAgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPFR5cGVkQXJyYXk+LCBWZWN0b3I8RGF0YVR5cGU+PjsKIAogICAgICAgICBUeXBlZExp
c3QoVmFyaWFudFR5cGUmJiB2YXJpYW50KQogICAgICAgICAgICAgOiBtX3ZhcmlhbnQoV1RGTW92
ZSh2YXJpYW50KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCShy
ZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFRyYWNrRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCBX
VEZNb3ZlKHRyYWNrKSkpOwogICAgIH0KIAotICAgIHVzaW5nIFRyYWNrRXZlbnRUcmFjayA9IFZh
cmlhbnQ8UmVmUHRyPFZpZGVvVHJhY2s+LCBSZWZQdHI8QXVkaW9UcmFjaz4sIFJlZlB0cjxUZXh0
VHJhY2s+PjsKKyAgICB1c2luZyBUcmFja0V2ZW50VHJhY2sgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PFZpZGVvVHJhY2s+LCBSZWZQdHI8QXVkaW9UcmFjaz4sIFJlZlB0cjxUZXh0VHJhY2s+PjsKIAog
ICAgIHN0cnVjdCBJbml0IDogcHVibGljIEV2ZW50SW5pdCB7CiAgICAgICAgIHN0ZDo6b3B0aW9u
YWw8VHJhY2tFdmVudFRyYWNrPiB0cmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyhIVE1MQ2FudmFzRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgY3NzQ2FudmFzTmFtZSk7CiAKLSAgICB0eXBlZGVmIFZhcmlh
bnQ8CisgICAgdHlwZWRlZiBzdGQ6OnZhcmlhbnQ8CiAgICAgICAgIENhbnZhc0dyYWRpZW50KiwK
ICAgICAgICAgQ2FudmFzUGF0dGVybiosCiAgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEyICsx
MzEsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9
IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8
fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1
ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CiAg
ICAgICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPnJlcXVlc3RDYWxsYmFjaygpLnNl
bmRGYWlsdXJlKCJVbmV4cGVjdGVkIHJlc3VsdCB0eXBlLiIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IFdURjo6Z2V0PFJl
ZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGRh
dGFiYXNlUmVzdWx0ID0gc3RkOjpnZXQ8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUu
dmFsdWUoKSk7CiAgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+ZXhlY3V0ZSgqZGF0
YWJhc2VSZXN1bHQpOwogICAgICAgICBkYXRhYmFzZVJlc3VsdC0+Y2xvc2UoKTsKICAgICB9CkBA
IC0xODIsNyArMTgyLDcgQEAgc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktl
eQogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIHJl
dHVybiBrZXlQYXRoOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGlk
YktleVBhdGgudmFsdWUoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgaWRiS2V5
UGF0aC52YWx1ZSgpKTsKIH0KIAogc3RhdGljIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb25Gb3JEYXRhYmFzZShJREJEYXRhYmFzZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBJREJUcmFuc2FjdGlvbk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0aW9u
TW9kZTo6UmVhZG9ubHkpCkBAIC0zNzMsMTIgKzM3MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CisgICAgICAg
IGlmICghcmVzdWx0VmFsdWUgfHwgIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkN1
cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBlbmQoZmFsc2UpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjdXJzb3IgPSBX
VEY6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CisgICAgICAg
IGF1dG8gY3Vyc29yID0gc3RkOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZh
bHVlKCkpOwogCiAgICAgICAgIGlmIChtX3NraXBDb3VudCkgewogICAgICAgICAgICAgaWYgKGN1
cnNvci0+YWR2YW5jZShtX3NraXBDb3VudCkuaGFzRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcAkocmV2aXNpb24gMjIwOTAx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDEwICs0MCwxMCBAQCBJbnRlcnNlY3Rpb25PYnNlcnZlcjo6SW50ZXJz
ZWN0aW9uT2JzZXJ2CiAgICAgLCBtX3Jvb3RNYXJnaW4oV1RGTW92ZShpbml0LnJvb3RNYXJnaW4p
KQogICAgICwgbV9jYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSkKIHsKLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KGluaXQudGhyZXNob2xkKSkKLSAgICAgICAgbV90aHJl
c2hvbGRzLmFwcGVuZChXVEY6OmdldDxkb3VibGU+KGluaXQudGhyZXNob2xkKSk7CisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpCisgICAgICAg
IG1fdGhyZXNob2xkcy5hcHBlbmQoc3RkOjpnZXQ8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbV90aHJlc2hvbGRzID0gV1RGOjpnZXQ8VmVjdG9yPGRvdWJsZT4+
KFdURk1vdmUoaW5pdC50aHJlc2hvbGQpKTsKKyAgICAgICAgbV90aHJlc2hvbGRzID0gc3RkOjpn
ZXQ8VmVjdG9yPGRvdWJsZT4+KFdURk1vdmUoaW5pdC50aHJlc2hvbGQpKTsKIH0KIAogdm9pZCBJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6b2JzZXJ2ZShFbGVtZW50JikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IEluaXQgewogICAgICAgICBSZWZQ
dHI8RWxlbWVudD4gcm9vdDsKICAgICAgICAgU3RyaW5nIHJvb3RNYXJnaW47Ci0gICAgICAgIFZh
cmlhbnQ8ZG91YmxlLCBWZWN0b3I8ZG91YmxlPj4gdGhyZXNob2xkOworICAgICAgICBzdGQ6OnZh
cmlhbnQ8ZG91YmxlLCBWZWN0b3I8ZG91YmxlPj4gdGhyZXNob2xkOwogICAgIH07CiAKICAgICBz
dGF0aWMgUmVmPEludGVyc2VjdGlvbk9ic2VydmVyPiBjcmVhdGUoUmVmPEludGVyc2VjdGlvbk9i
c2VydmVyQ2FsbGJhY2s+JiYgY2FsbGJhY2ssIEluaXQmJiBpbml0KQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShy
ZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNyArMTM3LDcgQEAgcHVibGlj
OgogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGdpdmVuIGZyYW1lIHZpZXcg
aGFzIGJlZW4gbGFpZCBvdXQuCiAgICAgdmlydHVhbCB2b2lkIGZyYW1lVmlld0xheW91dFVwZGF0
ZWQoRnJhbWVWaWV3JikgeyB9CiAKLSAgICB1c2luZyBMYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3Zl
cnJpZGVSZWN0ID0gV1RGOjpWYXJpYW50PHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4sIHN0ZDo6
b3B0aW9uYWw8RmxvYXRSZWN0Pj47CisgICAgdXNpbmcgTGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92
ZXJyaWRlUmVjdCA9IHN0ZDo6dmFyaWFudDxzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6
Om9wdGlvbmFsPEZsb2F0UmVjdD4+OwogICAgIHZpcnR1YWwgdm9pZCByZWNvbmNpbGVTY3JvbGxp
bmdTdGF0ZShGcmFtZVZpZXcmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgTGF5b3V0Vmlld3Bv
cnRPcmlnaW5Pck92ZXJyaWRlUmVjdCYsIGJvb2wgLyogcHJvZ3JhbW1hdGljU2Nyb2xsICovLCBW
aWV3cG9ydFJlY3RTdGFiaWxpdHksIFNjcm9sbGluZ0xheWVyUG9zaXRpb25BY3Rpb24pIHsgfQog
CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc2xvdyByZXBhaW50IG9iamVj
dHMgY291bnRlciBjaGFuZ2VzIGJldHdlZW4gemVybyBhbmQgb25lLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDgsNyArMjA4LDcgQEAgY29uc3QgY2hhciogU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6ZAog
I2VuZGlmCiAgICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmRhdGEoKSk7IH0KICAgICApOwotICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CisgICAgcmV0dXJu
IHN0ZDo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogI2lmICFVU0UoQ0Yp
CkBAIC0yMTksMTcgKzIxOSwyNCBAQCB2b2lkIFNoYXJlZEJ1ZmZlcjo6aGludE1lbW9yeU5vdE5l
ZWRlZFNvCiAKIHNpemVfdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpzaXplKCkgY29uc3QK
IHsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKAotICAgICAgICBbXShjb25z
dCBWZWN0b3I8Y2hhcj4mIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9LAorICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKG1faW1tdXRhYmxlRGF0YSwKKyAgICAgICAgW10oY29uc3QgVmVjdG9y
PGNoYXI+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEuc2l6ZSgp
OworICAgICAgICB9LAogI2lmIFVTRShDRikKLSAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENG
RGF0YVJlZj4mIGRhdGEpIHsgcmV0dXJuIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsgfSwK
KyAgICAgICAgW10oY29uc3QgUmV0YWluUHRyPENGRGF0YVJlZj4mIGRhdGEpIC0+IHNpemVfdCB7
CisgICAgICAgICAgICByZXR1cm4gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOworICAgICAg
ICB9LAogI2VuZGlmCiAjaWYgVVNFKFNPVVApCi0gICAgICAgIFtdKGNvbnN0IEdVbmlxdWVQdHI8
U291cEJ1ZmZlcj4mIGRhdGEpIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bGVu
Z3RoKTsgfSwKKyAgICAgICAgW10oY29uc3QgR1VuaXF1ZVB0cjxTb3VwQnVmZmVyPiYgZGF0YSkg
LT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEt
Pmxlbmd0aCk7CisgICAgICAgIH0sCiAjZW5kaWYKLSAgICAgICAgW10oY29uc3QgTWFwcGVkRmls
ZURhdGEmIGRhdGEpIHsgcmV0dXJuIGRhdGEuc2l6ZSgpOyB9CisgICAgICAgIFtdKGNvbnN0IE1h
cHBlZEZpbGVEYXRhJiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuIGRhdGEu
c2l6ZSgpOworICAgICAgICB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9y
LCBtX2ltbXV0YWJsZURhdGEpOwogfQogCiBTaGFyZWRCdWZmZXJEYXRhVmlldzo6U2hhcmVkQnVm
ZmVyRGF0YVZpZXcoUmVmPFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ+JiYgc2VnbWVudCwgc2l6
ZV90IHBvc2l0aW9uV2l0aGluU2VnbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1No
YXJlZEJ1ZmZlci5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDE5ICsxMTYsMjggQEAgcHVi
bGljOgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgRGF0YVNlZ21lbnQoVmVjdG9yPGNoYXI+JiYg
ZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQor
ICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAgewor
ICAgICAgICB9CiAjaWYgVVNFKENGKQogICAgICAgICBEYXRhU2VnbWVudChSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRh
dGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpCisg
ICAgICAgIHsKKyAgICAgICAgfQogI2VuZGlmCiAjaWYgVVNFKFNPVVApCiAgICAgICAgIERhdGFT
ZWdtZW50KEdVbmlxdWVQdHI8U291cEJ1ZmZlcj4mJiBkYXRhKQotICAgICAgICAgICAgOiBtX2lt
bXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1tdXRhYmxl
RGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNlbmRpZgogICAgICAg
ICBEYXRhU2VnbWVudChNYXBwZWRGaWxlRGF0YSYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1t
dXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVE
YXRhKFdURk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogCi0gICAgICAgIFZhcmlh
bnQ8VmVjdG9yPGNoYXI+LAorICAgICAgICBzdGQ6OnZhcmlhbnQ8CisgICAgICAgICAgICBWZWN0
b3I8Y2hhcj4sCiAjaWYgVVNFKENGKQogICAgICAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4s
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBzdHJ1Y3QgUGxhdGZvcm1EZXNjcmlwdGlvbiB7CiAgICAg
ICAgIE5vbmUsCiAgICAgICAgIENBQXVkaW9TdHJlYW1CYXNpY1R5cGUsCiAgICAgfSB0eXBlOwot
ICAgIFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbio+IGRlc2NyaXB0aW9uOworICAgIHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgY29u
c3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4gZGVzY3JpcHRpb247CiB9OwogCiBjbGFz
cyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9D
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgICAgIGlmIChvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSAh
PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHJldHVybiBvcGVyYXRvcj09KCpXVEY6OmdldDxj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0
aW9uKCkuZGVzY3JpcHRpb24pKTsKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yPT0oKnN0ZDo6Z2V0
PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+KG90aGVyLnBsYXRmb3JtRGVzY3Jp
cHRpb24oKS5kZXNjcmlwdGlvbikpOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3Ro
ZXIpOyB9CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6ZGVjb2RlKERlCiBpbmxpbmUgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQogewogICAgIEFTU0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9
PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKLSAgICByZXR1
cm4gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pKTsKKyAgICByZXR1cm4gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKCpzdGQ6OmdldDxj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURl
c2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBAIFNoYXJlZEJ1ZmZlcjo6U2hhcmVkQnVmZmVyKENGRGF0YVJl
ZiBkYXQKIFJldGFpblB0cjxDRkRhdGFSZWY+IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlQ0ZEYXRhKCkg
Y29uc3QKIHsKICAgICBpZiAobV9zZWdtZW50cy5zaXplKCkgPT0gMSkgewotICAgICAgICBpZiAo
YXV0byBkYXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KG1fc2VnbWVudHNb
MF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAgICAgaWYgKGF1dG8gZGF0YSA9IHN0
ZDo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmbV9zZWdtZW50c1swXS5zZWdtZW50LT5t
X2ltbXV0YWJsZURhdGEpKQogICAgICAgICAgICAgcmV0dXJuICpkYXRhOwogICAgIH0KICAgICBy
ZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBVSW50OCo+KGRhdGEoKSksIHNpemUoKSkpOwpAQCAtNjAsNyArNjAsNyBAQCB2b2lkIFNoYXJl
ZEJ1ZmZlcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBl
bnRyeSA6IG1fc2VnbWVudHMpIHsKICAgICAgICAgaWYgKGVudHJ5LnNlZ21lbnQtPmhhc09uZVJl
ZigpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBkYXRhID0gV1RGOjpnZXRfaWY8UmV0YWluUHRy
PENGRGF0YVJlZj4+KGVudHJ5LnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCisgICAgICAgICAg
ICBpZiAoYXV0byBkYXRhID0gc3RkOjpnZXRfaWY8UmV0YWluUHRyPENGRGF0YVJlZj4+KCZlbnRy
eS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQogICAgICAgICAgICAgICAgIE9TQWxsb2NhdG9y
OjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbihjb25zdF9jYXN0PFVJbnQ4Kj4oQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhLT5nZXQoKSkpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YS0+Z2V0KCkpKTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0RlY29k
aW5nT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0RlY29kaW5nT3B0aW9ucy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTcgKzU2LDE3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNOb25lKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBXVEY6OmdldDxEZWNvZGluZ01v
ZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6Ok5vbmU7CisgICAgICAg
IHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBzdGQ6OmdldDxEZWNvZGluZ01vZGU+KG1fZGVj
b2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6Ok5vbmU7CiAgICAgfQogICAgIAogICAg
IGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRGVj
b2RpbmdNb2RlKCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6
ZSkgPT0gRGVjb2RpbmdNb2RlOjpTeW5jaHJvbm91czsKKyAgICAgICAgcmV0dXJuIGhhc0RlY29k
aW5nTW9kZSgpICYmIHN0ZDo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUp
ID09IERlY29kaW5nTW9kZTo6U3luY2hyb25vdXM7CiAgICAgfQogCiAgICAgYm9vbCBpc0FzeW5j
aHJvbm91cygpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkg
JiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2Rp
bmdNb2RlOjpBc3luY2hyb25vdXM7CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAm
JiBzdGQ6OmdldDxEZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGlu
Z01vZGU6OkFzeW5jaHJvbm91czsKICAgICB9CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzQ29t
cGF0aWJsZVdpdGgoY29uc3QgRGVjb2RpbmdPcHRpb25zJiBkZWNvZGluZ09wdGlvbnMpIGNvbnN0
CkBAIC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4g
c2l6ZUZvckRyYXdpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc1NpemUoKSk7
Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxzdGQ6Om9wdGlvbmFsPEludFNpemU+PihtX2RlY29k
aW5nTW9kZU9yU2l6ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxzdGQ6Om9wdGlvbmFsPElu
dFNpemU+PihtX2RlY29kaW5nTW9kZU9yU2l6ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIGludCBt
YXhEaW1lbnNpb24oY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwcml2
YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgYm9vbCBoYXMoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGluZ01v
ZGVPclNpemUpOworICAgICAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxUPihtX2Rl
Y29kaW5nTW9kZU9yU2l6ZSk7CiAgICAgfQogCiAgICAgYm9vbCBoYXNEZWNvZGluZ01vZGUoKSBj
b25zdApAQCAtMTQwLDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgLy8gLSBBc3luY2hyb25vdXMg
KyBhbnlTaXplOiBEZWNvZGluZ01vZGU6OkFzeW5jaHJvbm91cwogICAgIC8vIC0gQXN5bmNocm9u
b3VzICsgaW50cmluc2ljU2l6ZTogYW4gZW1wdHkgc3RkOjpvcHRpb25hbDxJbnRTaXplPj4KICAg
ICAvLyAtIEFzeW5jaHJvbm91cyArIHNpemVGb3JEcmF3aW5nOiBhIG5vbmUgZW1wdHkgc3RkOjpv
cHRpb25hbDxJbnRTaXplPj4KLSAgICB1c2luZyBEZWNvZGluZ01vZGVPclNpemUgPSBWYXJpYW50
PERlY29kaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxJbnRTaXplPj47CisgICAgdXNpbmcgRGVjb2Rp
bmdNb2RlT3JTaXplID0gc3RkOjp2YXJpYW50PERlY29kaW5nTW9kZSwgc3RkOjpvcHRpb25hbDxJ
bnRTaXplPj47CiAgICAgRGVjb2RpbmdNb2RlT3JTaXplIG1fZGVjb2RpbmdNb2RlT3JTaXplOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVG
b250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTcsNyArMTU3LDcgQEAgc3RhdGljIEZvbnRSYW5nZXMgcmVhbGl6ZU5leHRGYWxsYmFjayhj
bwogICAgICAgICAgICAgcmV0dXJuIGZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uLmZvbnRSYW5nZXMo
ZGVzY3JpcHRpb24pOwogICAgICAgICB9KTsKICAgICAgICAgY29uc3QgYXV0byYgY3VycmVudEZh
bWlseSA9IGRlc2NyaXB0aW9uLmVmZmVjdGl2ZUZhbWlseUF0KGluZGV4KyspOwotICAgICAgICBh
dXRvIHJhbmdlcyA9IFdURjo6dmlzaXQodmlzaXRvciwgY3VycmVudEZhbWlseSk7CisgICAgICAg
IGF1dG8gcmFuZ2VzID0gc3RkOjp2aXNpdCh2aXNpdG9yLCBjdXJyZW50RmFtaWx5KTsKICAgICAg
ICAgaWYgKCFyYW5nZXMuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gcmFuZ2VzOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRE
ZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCB0eXBlZGVmIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbCBGb250CiAKICNkZWZpbmUg
VVNFX1BMQVRGT1JNX1NZU1RFTV9GQUxMQkFDS19MSVNUICgoUExBVEZPUk0oSU9TKSAmJiBfX0lQ
SE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKSkKIAotdHlwZWRl
ZiBWYXJpYW50PEF0b21pY1N0cmluZywgRm9udEZhbWlseVBsYXRmb3JtU3BlY2lmaWNhdGlvbj4g
Rm9udEZhbWlseVNwZWNpZmljYXRpb247Cit0eXBlZGVmIHN0ZDo6dmFyaWFudDxBdG9taWNTdHJp
bmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVjaWZpY2F0
aW9uOwogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Rm9udEZhbWlseU5hbWVzOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCShyZXZpc2lvbiAy
MjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvV2ViQXVk
aW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMs
NyBAQCB2b2lkIFdlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjp1bnByCiB2b2lkIFdlYkF1
ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUmLCBjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0
YSYgZGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVf
dCBmcmFtZUNvdW50KQogewogICAgIEFTU0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0
aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBl
KTsKLSAgICBhdXRvJiBiYXNpY0Rlc2NyaXB0aW9uID0gKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5k
ZXNjcmlwdGlvbik7CisgICAgYXV0byYgYmFzaWNEZXNjcmlwdGlvbiA9ICpzdGQ6OmdldDxjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2Ny
aXB0aW9uKCkuZGVzY3JpcHRpb24pOwogICAgIGlmICghbV9pbnB1dERlc2NyaXB0aW9uIHx8IG1f
aW5wdXREZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRpb24oKSAhPSBiYXNpY0Rlc2NyaXB0aW9u
KQogICAgICAgICBwcmVwYXJlKGJhc2ljRGVzY3JpcHRpb24pOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMVmFsdWUuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi11c2luZyBTUUxWYWx1ZSA9IFZhcmlhbnQ8
c3RkOjpudWxscHRyX3QsIFN0cmluZywgZG91YmxlPjsKK3VzaW5nIFNRTFZhbHVlID0gc3RkOjp2
YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGRvdWJsZT47CiAKIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDIyMDkw
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wgZHJhZ2dlZENv
bnRlbnRDb250YWluCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGZvciAoYXV0byogbWFy
a2VyIDogbWFya2VycykgewotICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVudERhdGEgPSBXVEY6
OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJrZXItPmRhdGEoKSk7
CisgICAgICAgIGF1dG8mIGRyYWdnZWRDb250ZW50RGF0YSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFy
a2VyOjpEcmFnZ2VkQ29udGVudERhdGE+KG1hcmtlci0+ZGF0YSgpKTsKICAgICAgICAgaWYgKGRy
YWdnZWRDb250ZW50RGF0YS50YXJnZXROb2RlID09ICZlbGVtZW50KQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVy
c2lvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJz
aW9ucy5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVD
b252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwogICAgICAgICBTdHJpbmcgdHJlYXROdWxsQXNFbXB0
eVN0cmluZ1ZhbHVlOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZXF1ZW5jZVZhbHVlOwotICAg
ICAgICBWYXJpYW50PFJlZlB0cjxOb2RlPiwgVmVjdG9yPFN0cmluZz4sIE90aGVyRGljdGlvbmFy
eT4gdW5pb25WYWx1ZTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgVmVjdG9y
PFN0cmluZz4sIE90aGVyRGljdGlvbmFyeT4gdW5pb25WYWx1ZTsKICAgICAgICAgaW50IGNsYW1w
TG9uZ1ZhbHVlOwogICAgICAgICBpbnQgZW5mb3JjZVJhbmdlTG9uZ1ZhbHVlOwogICAgIH07CkBA
IC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxXVEY6OktleVZhbHVl
UGFpcjxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4mIHRlc3RTZXF1ZW5jZVJlY29yZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2VxdWVuY2VSZWNvcmQ7IH0KICAgICB2b2lkIHNldFRlc3RTZXF1ZW5jZVJl
Y29yZChjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBWZWN0b3I8U3RyaW5n
Pj4+JiB2YWx1ZSkgeyBtX3NlcXVlbmNlUmVjb3JkID0gdmFsdWU7IH0KIAotICAgIHVzaW5nIFRl
c3RVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0cjxOb2RlPiwgVmVjdG9y
PGludD4+OworICAgIHVzaW5nIFRlc3RVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGludCwg
Ym9vbCwgUmVmUHRyPE5vZGU+LCBWZWN0b3I8aW50Pj47CiAgICAgY29uc3QgVGVzdFVuaW9uJiB0
ZXN0VW5pb24oKSBjb25zdCB7IHJldHVybiBtX3VuaW9uOyB9CiAgICAgdm9pZCBzZXRUZXN0VW5p
b24oVGVzdFVuaW9uJiYgdmFsdWUpIHsgbV91bmlvbiA9IHZhbHVlOyB9CiAKQEAgLTEzMCwxNSAr
MTMwLDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRlc3REaWN0aW9uYXJ5KERpY3Rpb25hcnkm
JiBkaWN0aW9uYXJ5KSB7IG1fdGVzdERpY3Rpb25hcnkgPSBkaWN0aW9uYXJ5OyB9CiAgICAgCiAK
LSAgICB1c2luZyBUZXN0Q2xhbXBVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3Rvcjxp
bnQ+PjsKKyAgICB1c2luZyBUZXN0Q2xhbXBVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGlu
dCwgVmVjdG9yPGludD4+OwogICAgIGNvbnN0IFRlc3RDbGFtcFVuaW9uJiB0ZXN0Q2xhbXBVbmlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2xhbXBVbmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdENsYW1w
VW5pb24oY29uc3QgVGVzdENsYW1wVW5pb24mIHZhbHVlKSB7IG1fY2xhbXBVbmlvbiA9IHZhbHVl
OyB9CiAKLSAgICB1c2luZyBUZXN0RW5mb3JjZVJhbmdlVW5pb24gPSBWYXJpYW50PFN0cmluZywg
aW50LCBWZWN0b3I8aW50Pj47CisgICAgdXNpbmcgVGVzdEVuZm9yY2VSYW5nZVVuaW9uID0gc3Rk
Ojp2YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CiAgICAgY29uc3QgVGVzdEVuZm9y
Y2VSYW5nZVVuaW9uJiB0ZXN0RW5mb3JjZVJhbmdlVW5pb24oKSBjb25zdCB7IHJldHVybiBtX2Vu
Zm9yY2VSYW5nZVVuaW9uOyB9CiAgICAgdm9pZCBzZXRUZXN0RW5mb3JjZVJhbmdlVW5pb24oY29u
c3QgVGVzdEVuZm9yY2VSYW5nZVVuaW9uJiB2YWx1ZSkgeyBtX2VuZm9yY2VSYW5nZVVuaW9uID0g
dmFsdWU7IH0KIAotICAgIHVzaW5nIFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24gPSBW
YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8U3RyaW5nPj47CisgICAgdXNpbmcgVGVzdFRyZWF0
TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9y
PFN0cmluZz4+OwogICAgIGNvbnN0IFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24mIHRl
c3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24oKSBjb25zdCB7IHJldHVybiBtX3RyZWF0TnVs
bEFzRW1wdHlTdHJpbmdVbmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdFRyZWF0TnVsbEFzRW1wdHlT
dHJpbmdVbmlvbihjb25zdCBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB2YWx1ZSkg
eyBtX3RyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiA9IHZhbHVlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJm
YWNlVHlwZTsgfQogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsgfQogCi0gICAgdXNpbmcgU2VuZFR5cGVzID0gVmFyaWFudDxSZWZQ
dHI8RG9jdW1lbnQ+LCBSZWZQdHI8QmxvYj4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4s
IFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgU3RyaW5nPjsK
KyAgICB1c2luZyBTZW5kVHlwZXMgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERvY3VtZW50PiwgUmVm
UHRyPEJsb2I+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlcj4sIFJlZlB0cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CiAKICAgICBjb25zdCBVUkwm
IHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CiAgICAgU3RyaW5nIHN0YXR1c1RleHQoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA4LTE3ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6
dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrQ2FwdHVyZTo6ZXZlbnRUb1N0cmluZyk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmg6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OlJlc291cmNlOjp1cmwpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6Ok5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZW5xdWV1ZUV2ZW50
SGFuZGxlcik6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHA6Cisg
ICAgICAgIChJUEM6OkFyZ3VtZW50Q29kZXI8SURCS2V5UGF0aD46OmVuY29kZSk6CisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50
LmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQpOgorCiAy
MDE3LTA4LTE1ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXBkYXRlIHRvIGNoYW5nZVNlbGVjdGlvbldpdGhUb3VjaEF0OmJhc2VJc1N0YXJ0Ondp
dGhGbGFnczoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHJldmlzaW9uIDIyMDkwMSkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHN0ZDo6c3RyaW5nIGV2
ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVyZUUKIHsKICAgICBqc29uIHJlc3VsdDsKIAotICAgIFdU
Rjo6dmlzaXQoWyZyZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgc3RkOjp2aXNpdChb
JnJlc3VsdF0oY29uc3QgYXV0byYgZXZlbnQpIHsKICAgICAgICAgdXNpbmcgRXZlbnRUeXBlID0g
c3RkOjpkZWNheV90PGRlY2x0eXBlKGV2ZW50KT47CiAgICAgICAgIHJlc3VsdCA9IEpTT05Db2Rl
cjxFdmVudFR5cGU+OjplbmNvZGUoZXZlbnQpOwogICAgIH0sIGV2ZW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuaAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7CiBzdHJ1Y3QgRGF0YVJlY2Vp
dmVkRXZlbnQ7CiBzdHJ1Y3QgRmluaXNoZWRFdmVudDsKIAotdXNpbmcgQ2FwdHVyZUV2ZW50ID0g
V1RGOjpWYXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVk
aXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQs
IEZpbmlzaGVkRXZlbnQ+OwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gc3RkOjp2YXJpYW50PFJlcXVl
c3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50
LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+Owog
dXNpbmcgT3B0aW9uYWxDYXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47
CiB1c2luZyBDYXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0
dXJlQ2xvY2tUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmNwcAkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMCArNDgsMTAgQEAgY29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJjZTo6dXJsKCkK
ICAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKICAgICAgICAgaWYgKCFl
dmVudCkKICAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90
IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9l
dmVudEZpbGVQYXRoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCisgICAgICAgIGVsc2UgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICBERUJV
R19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBoYXZlIGEgcmVxdWVzdFNlbnQgZXZl
bnQ6IGZpbGUgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJlcXVlc3RTZW50RXZlbnQgPSBX
VEY6OmdldDxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpOworICAgICAgICAgICAgYXV0byByZXF1
ZXN0U2VudEV2ZW50ID0gc3RkOjpnZXQ8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKICAgICAg
ICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0
LnVybCk7CiAgICAgICAgICAgICBtX3VybCA9IHBhcnNlci5yZXN1bHQoKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OmVucXVldWVFdmVudAogICAgICAgICAgICAgICAgIHJlcGxheUZpbmlzaGVkKGV2
ZW50KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwgKmV2
ZW50KTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCAqZXZlbnQpOwogICAgIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAJKHJldmlzaW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEsMTIgKzIzNzEsMTIgQEAgYm9v
bCBBcmd1bWVudENvZGVyPENhcHR1cmVEZXZpY2U+OjpkZWNvZAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogdm9pZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBib29sIGlzU3Ry
aW5nID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOworICAgIGJvb2wg
aXNTdHJpbmcgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCk7CiAgICAg
ZW5jb2RlciA8PCBpc1N0cmluZzsKICAgICBpZiAoaXNTdHJpbmcpCi0gICAgICAgIGVuY29kZXIg
PDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Omdl
dDxTdHJpbmc+KGtleVBhdGgpOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6Omdl
dDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SURCS2V5
UGF0aD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDIyMDkwMSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RydWN0IE1lZGlhQ29uc3Ry
YWludHM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLXVzaW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+Owor
dXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24g
MjIwOTAxKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGltZSYgdGltZSwg
Y29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBudW1iZXJPZkZyYW1lcykgZmluYWwgewogICAg
ICAgICBpZiAobV9kZXNjcmlwdGlvbiAhPSBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVz
Y3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgICAgICAgICAgbV9kZXNjcmlw
dGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgICAgICAgICAg
bV9kZXNjcmlwdGlvbiA9ICpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOwogCiAg
ICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIHJpbmcgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250
YWluIDIgc2Vjb25kcyBvZiBhdWRpby4KICAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmFtZXMgPSBt
X2Rlc2NyaXB0aW9uLnNhbXBsZVJhdGUoKSAqIDI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDIyMDkwMSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OSw3ICszNTksNyBAQCB2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQo
CiAgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6
OmNvcmUoZWxlbWVudCk7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEJlZm9y
ZSA9IFdlYktpdDo6Y29yZShiZWZvcmUpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50
RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNvbnZlcnRl
ZEVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZkb3duY2FzdDxXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudD4oKmNvbnZlcnRlZEVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGlzPFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTAxKQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQg
YSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIERPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbToKKyAgICAgICAgKC1b
RE9NSFRNTFNlbGVjdEVsZW1lbnQgYWRkOmJlZm9yZTpdKToKKwogMjAxNy0wOC0xNyAgRG9uIE9s
bXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtQQUxdIFJlbG9jYXRl
IFNlc3Npb25JRCB0byByb290CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTFNlbGVjdEVsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCShyZXZpc2lvbiAyMjA5MDEpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCAtICh2b2lkKWFkZDooRE9NSFRNTEVsZW1lbnQgKill
bGVtZW50IGJlCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7CiAKICAgICBhdXRv
JiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1l
bnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNv
cmVFbGVtZW50KSkKICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93bmNhc3Q8V2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ+KGNvcmVFbGVtZW50KTsKICAgICBlbHNlIGlmIChpczxXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50Pihjb3JlRWxlbWVudCkpCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5MDEpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0wOC0x
NyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJldHRl
ciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wOC0xNyAgWW9zaGlha2kgSml0c3VrYXdhICA8
WW9zaGlha2kuSml0c3VrYXdhQHNvbnkuY29tPgogCiAgICAgICAgIGNoZWNrLXdlYmtpdC1zdHls
ZSBzaG91bGRuJ3QgY2hlY2sgc3BhY2luZyBpbiAjZWxpZiBwcmVwcm9jZXNzb3IgbGluZXMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAy
MjA5MDEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMzcgKzM3LDM3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKIHsKLSAgICBWYXJpYW50PGludCwgZG91Ymxl
PiB2MTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOwogICAgIEVYUEVDVF9UUlVF
KHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50Pih2MSkgPT0g
MCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CiAKICAgICBzdHJ1
Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0KICAgICAgICAgaW50IHZhbHVlOwog
ICAgIH07CiAKLSAgICBWYXJpYW50PFQsIGludD4gdjI7CisgICAgc3RkOjp2YXJpYW50PFQsIGlu
dD4gdjI7CiAgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJV
RShXVEY6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0
PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewot
ICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIHN0ZDo6dmFyaWFudDxp
bnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgp
ID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7Ci0g
ICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBF
WFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwotICAgIEVY
UEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAg
IEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RS
VUUoKnN0ZDo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoc3Rk
OjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwogCiAgICAgdmFyaWFudCA9
IDEuMDsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMSk7Ci0gICAgRVhQRUNU
X1RSVUUoV1RGOjpnZXQ8ZG91YmxlPih2YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgq
V1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSAxLjApOwotICAgIEVYUEVDVF9UUlVFKFdU
Rjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gbnVsbHB0cik7Ci0gICAgRVhQRUNUX1RSVUUoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKLSAgICBFWFBFQ1RfRkFMU0Uo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfVFJVRShz
dGQ6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKCpzdGQ6Omdl
dF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXRf
aWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBC
YXNpY1Zpc2l0b3IpCkBAIC05NCwxMyArOTQsMTMgQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNW
aXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAgIFZhcmlhbnQ8aW50
LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3IodHlw
ZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlh
bnQgPSA4OworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQ
RUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAg
ICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlz
aXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlw
ZSk7CiAKIApAQCAtMTI3LDEyICsxMjcsMTIgQEAgVEVTVChXVEZfVmFyaWFudCwgUmV0YWluUHRy
KQogICAgIAogICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZlB0cjsKICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiByZXRhaW5QdHI7Ci0gICAgVmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgUmV0YWlu
UHRyPENGRGF0YVJlZj4+IHZhcmlhbnQoV1RGTW92ZShyZWZQdHIpKTsKLSAgICBXVEY6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwg
UmV0YWluUHRyPENGRGF0YVJlZj4+IHZhcmlhbnQoV1RGTW92ZShyZWZQdHIpKTsKKyAgICBzdGQ6
OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlJlZlB0ciA9
PSB0eXBlKTsKICAgICAKICAgICB2YXJpYW50ID0gV1RGTW92ZShyZXRhaW5QdHIpOwotICAgIFdU
Rjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJp
YW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpSZXRhaW5QdHIgPT0gdHlwZSk7CiB9CiAjZW5k
aWYKQEAgLTE1NCwxOCArMTU0LDE4IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFZpc2l0b3JVc2luZ01h
a2VWaXNpdG8KICAgICAgICAgWyZdKFN0cmluZykgeyB0eXBlID0gVHlwZTo6U3RyaW5nOyB9CiAg
ICAgKTsKIAotICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAg
ICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZs
b2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50
ID0gMS4wZjsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlz
aXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlw
ZSk7CiAKIAogICAgIHZhcmlhbnQgPSAiaGVsbG8iOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1Rf
VFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKQEAgLTE4MCw3ICsxODAsNyBAQCBURVNU
KFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdTd2l0Y2hPbikKIAogICAgIFR5cGUgdHlwZSA9IFR5
cGU6Ok5vbmU7CiAKLSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7
CisgICAgc3RkOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7CiAgICAg
dHlwZSA9IFdURjo6c3dpdGNoT24odmFyaWFudCwKICAgICAgICAgW10oaW50KSB7IHJldHVybiBU
eXBlOjpJbnQ7IH0sCiAgICAgICAgIFtdKGZsb2F0KSB7IHJldHVybiBUeXBlOjpGbG9hdDsgfSwK
QEAgLTIxMyw3ICsyMTMsNyBAQCBURVNUKFdURl9WYXJpYW50LCBDb25zdHJ1Y3RvckRlc3RydWN0
b3IpCiAKICAgICB7CiAgICAgICAgIGF1dG8gdW5pcXVlUHRyID0gc3RkOjptYWtlX3VuaXF1ZTxD
b25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPigpOwotICAgICAgICBWYXJpYW50PHN0ZDo6dW5p
cXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1
bmlxdWVQdHIpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7CiAKICAg
ICAgICAgRVhQRUNUX0VRKDF1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpjb25zdHJ1
Y3Rpb25Db3VudCk7CiAgICAgICAgIEVYUEVDVF9FUSgwdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcjo6ZGVzdHJ1Y3Rpb25Db3VudCk7CkBAIC0yMjgsNyArMjI4LDcgQEAgVEVTVChXVEZf
VmFyaWFudCwgUmVmUHRyKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAg
ICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudDxSZWZQdHI8UmVm
TG9nZ2VyPiwgaW50PiB2ID0gcmVmOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxv
Z2dlcj4sIGludD4gdiA9IHJlZjsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBy
ZWYoYSkgZGVyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMjM2
LDcgKzIzNiw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAgICAgIFJl
ZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAg
ICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAg
ICAgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJl
Zik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxv
Z1N0cigpLmNfc3RyKCkpOwpAQCAtMjQ3LDcgKzI0Nyw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJl
ZikKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZjxSZWZMb2dn
ZXI+IHJlZihhKTsKLSAgICAgICAgVmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RG
TW92ZShyZWYpOworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4sIGludD4gdiA9
IFdURk1vdmUocmVmKTsKICAgICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihh
KSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0yNjUsMTEgKzI2NSwxMSBAQCBwdWJsaWM6
CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIE9wZXJhdG9yQW1wZXJzYW5kKQogewotICAgIFZhcmlhbnQ8
SG9sZGVyPGludD4sIGludD4gdiA9IEhvbGRlcjxpbnQ+KDEwKTsKLSAgICBFWFBFQ1RfVFJVRShX
VEY6OmdldDxIb2xkZXI8aW50Pj4odikuZGF0YSA9PSAxMCk7CisgICAgc3RkOjp2YXJpYW50PEhv
bGRlcjxpbnQ+LCBpbnQ+IHYgPSBIb2xkZXI8aW50PigxMCk7CisgICAgRVhQRUNUX1RSVUUoc3Rk
OjpnZXQ8SG9sZGVyPGludD4+KHYpLmRhdGEgPT0gMTApOwogCiAgICAgdiA9IDIwOwotICAgIEVY
UEVDVF9UUlVFKFdURjo6Z2V0PGludD4odikgPT0gMjApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6
Z2V0PGludD4odikgPT0gMjApOwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318493</attachid>
            <date>2017-08-18 07:11:44 -0700</date>
            <delta_ts>2017-08-18 07:13:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170818071143.patch</filename>
            <type>text/plain</type>
            <size>364115</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5OiBjb25zdCBpbiB1bnJlYWNoYWJsZSBjb2RlIGRl
Y29kZWQgaW5jb3JyZWN0bHksIGVycm9uZW91c2x5IHJlamVjdHMgYmluYXJ5IGFzIGludmFsaWQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3Nyw3ICs4MDc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwgZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiBy
ZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3BlcmFuZHM7CisgICAgVmVjdG9y
PHN0ZDo6dmFyaWFudDxTcGVjdWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5k
LCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdV
TUVOVFNfSU5DTFVESU5HX1RISVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxHUFJSZWcsIEpTQ19E
T01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IHJlZ3M7CiAKICAg
ICBhdXRvIGFwcGVuZENlbGwgPSBbJl0oRWRnZSYgZWRnZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zODg4LDcgKzM4ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGVDZWxs
T3BlcmFuZCYmIG90aGVyKQorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kJiYgb3RoZXIpCiAgICAgewogICAgICAgICBtX2ppdCA9IG90aGVyLm1faml0OwogICAg
ICAgICBtX2VkZ2UgPSBvdGhlci5tX2VkZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NuaXBwZXRSZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NuaXBwZXRSZWcuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbmlwcGV0UmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIxICs3MiwyMSBAQCBwdWJs
aWM6CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNHUFIo
KSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CisgICAgICAg
IHJldHVybiBzdGQ6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CiAgICAgfQogICAgIEZQUlJlZyBm
cHIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRlBSKCkpOwotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVncygpKTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8SlNWYWx1ZVJlZ3M+KG1fdmFyaWFudCk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZhcmlhbnQ8R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgc3Rk
Ojp2YXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVncz4gbV92YXJpYW50OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIxIEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAq
IHd0Zi9JblBsYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAg
ICAqIHd0Zi9WYXJpYW50Lmg6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNDo6YXJyYXk6Om9w
ZXJhdG9yW10gY29uc3QpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6aW52
b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6
OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNzo6ZGV0YWlsOjpoYXNfYWRk
cmVzc29mX2ltcGw6OmltcGwpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6
YWRkcmVzc29mKToKKyAgICAgICAgKG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X2ltcGw6
OmRlY2x0eXBlKToKKyAgICAgICAgKHN0ZDo6dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjphbGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5k
ZXgpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5kZXhfaW1wbCk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6dHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFpdCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29tbW9uX3RyYWl0X2ltcGwpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6Z2V0X2FsdF9pbXBsOjpBVVRPX1JF
RlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3Vu
aW9uOjpBVVRPX1JFRlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6
YmFzZTo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0
aW9uOjpiYXNlOjphdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6
dmlzaXRfdmlzaXRvcl9yZXR1cm5fdHlwZV9jaGVjayk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
dmlzaXRhdGlvbjo6YmFzZTo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OmJhc2U6Om1ha2VfZmRpYWdvbmFsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2
aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbDo6aW1wbDxtcGFyazo6bGliOjpp
bmRleF9zZXF1ZW5jZTxJczo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ6OnZhbHVlX3Zpc2l0b3I6OkRFQ0xUWVBFX0FVVE9fUkVUVVJOKToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OjpBVVRPX1JFVFVSTik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWx0OjphbHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Ok1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpiYXNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjppbmRleF8pOgorICAgICAg
ICAoc3RkOjpkZXRhaWw6OmJhc2U6OmFzX2Jhc2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJh
c2U6OmRhdGEpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJhc2U6OnNpemUpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRl
dGFpbDo6Y29uc3RydWN0b3I6OmN0b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RfYWx0KToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpjb25zdHJ1Y3Rvcjo6Z2VuZXJpY19jb25zdHJ1Y3QpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6Ok1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojphc3NpZ25tZW50OjplbXBsYWNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphc3NpZ25tZW50
Ojphc3NpZ25lcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNz
aWdubWVudDo6YXNzaWduX2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6
Z2VuZXJpY19hc3NpZ24pOgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfTU9W
RV9BU1NJR05NRU5UKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0NPUFlf
QVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6YXNzaWduKToKKyAgICAg
ICAgKHN0ZDo6ZGV0YWlsOjppbXBsOjpzd2FwKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojpzd2FwcGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojptb3ZlX25vdGhyb3cgY29uc3QpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Om92ZXJsb2FkPD46
Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3RkOjp2YXJpYW50Ojpub2V4Y2VwdCk6Cisg
ICAgICAgIChzdGQ6OnZhcmlhbnQ6OmVtcGxhY2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omdl
bmVyaWNfZ2V0X2ltcGw6OmdlbmVyaWNfZ2V0X2ltcGwpOgorICAgICAgICAoc3RkOjpnZXQpOgor
ICAgICAgICAoc3RkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChzdGQ6Om9wZXJhdG9yPCk6CisgICAgICAgIChzdGQ6Om9wZXJhdG9yPik6CisgICAg
ICAgIChzdGQ6Om9wZXJhdG9yPD0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcj49KToKKyAgICAg
ICAgKHN0ZDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omhhc2g6Om1lZXRzX3Jl
cXVpcmVtZW50cyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZCk6Cisg
ICAgICAgIChXVEY6OnN3aXRjaE9uKToKKyAgICAgICAgKFdURjo6aW5fcGxhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Oj0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFn
ZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19n
ZXRfcnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2Rl
c3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19jb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19zdG9y
YWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6
X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19kZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6Ol9f
c3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50
X2Jhc2U6On5fX3ZhcmlhbnRfYmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2Vfb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19kZXN0cm95X2Z1bmMpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6fl9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpWYXJpYW50PD46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX05PRVhDRVBUXyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9hY2Nlc3Nv
cjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Z2V0X2lmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdG9yX3RhYmxlOjpf
X3RyYW1wb2xpbmVfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnZpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19oYXNoX3Zpc2l0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHd0Zi90ZXh0
L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tOgorICAgICAgICAoV1RGOjpt
YXBNb2RlVG9CYWNraW5nSXRlcmF0b3IpOgorCiAyMDE3LTA4LTE3ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmx5IHVzZSAxNiBWRlAgcmVnaXN0ZXJzIGlmICFD
UFUoQVJNX05FT04pLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAKIAkJN0FGRUM2QUUx
RUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZFQzZCMDFFQjIyQjU5
MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjcyMzkxRDc4ODEx
OTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg2OTYxQjFGNDU0NEY3
MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBsYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVj
dFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyog
VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBT
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFz
aFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIu
aCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKKwkJ
CQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovLAogCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIHZhcmlhbnQ7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBj
bGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTczLDUgKzczLDQgQEAgdXNp
bmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwogdXNpbmcgV1RG
OjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11c2luZyBXVEY6OlZhcmlh
bnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luUGxhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVz
cGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdCgp
ID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KKyAgc3RydWN0IGlu
X3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90KCkgPSBkZWZhdWx0OyB9
OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5fcGxhY2VfdHlwZV90IHsg
ZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9OworCisgIGNvbnN0ZXhwciBp
bl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+IGNvbnN0
ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307CisKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4gaW5fcGxhY2VfdHlwZXt9
OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0
ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1dGlsaXR5PgotIyBpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KICMgaW5jbHVk
ZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRlIDxpbml0aWFsaXplcl9s
aXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGluY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBpbmNsdWRlIDx3dGYvSW5Q
bGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICMgZGVmaW5lIFRSMl9P
UFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19f
Ojp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4NCw4IEBAIGNvbnN0ZXhw
ciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAyMC41LjYsIEluLXBsYWNl
IGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsK
LQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsKKy8vIGluX3Bs
YWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNvIGl0IGNhbiBiZSBzaGFy
ZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5nYWdlZCBzdGF0ZSBpbmRp
Y2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDc5ICsx
LDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0d2FyZSBTb2x1dGlvbnMg
THRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFyaWFudAogLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IK
LS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
Ci0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29weXJpZ2h0IE1pY2hhZWwg
UGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWltZXIuCisvLyBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwogLy8KLS8v
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9y
IG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFj
Y29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRoaXMgbGljZW5zZSAodGhl
ICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorLy8g
ZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZh
dGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRp
ZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisvLyBkbyBzbywgYWxsIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0vLyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLS8vIHBlcm1p
c3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlz
IGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQs
IHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKy8vIG11c3Qg
YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGlu
IHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxl
c3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJlIHNvbGVseSBpbiB0aGUg
Zm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CisvLyBh
IHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotLy8gSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0vLyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAotLy8gRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKy8vIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FS
RSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGllZCBmcm9tIGh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhmNzllNWVh
MWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9t
cGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFyaWFudC5ocHAgKGMyNmI4
NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8vIE1vZGlmaWVkIHRvIG1h
a2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisvLyBNb2RpZmllZCB0byB1
c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgsIGFuZCBpbmNsdWRlIFdU
Rjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoKKyAgIHZhcmlhbnQgc3lu
b3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBjbGFzcyB0ZW1wbGF0ZSB2
YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xhc3MgdmFyaWFudCB7Cisg
IHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMKKyAgICBjb25zdGV4cHIg
dmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFudChjb25zdCB2YXJpYW50
Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBub2V4Y2VwdChzZWUgYmVs
b3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBBcmdzJiYuLi4pOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwgaW5pdGlh
bGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xh
c3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudChpbl9wbGFjZV9pbmRl
eF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBVLCBj
bGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJpYW50KAorICAgICAgICBp
bl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgpOworCisgICAgLy8gMjAu
Ny4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgdmFyaWFudCYp
OworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0b3I9KFQmJikgbm9leGNl
cHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmllcnMKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNlKEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBl
bXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8
c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJp
YW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0aXZlPEksIHZhcmlhbnQ+
JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICAvLyAyMC43
LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXplX3QgaW5kZXgoKSBjb25z
dCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAgdm9pZCBzd2FwKHZhcmlh
bnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIwLjcuMywgdmFyaWFudCBo
ZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTsg
Ly8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNvbnN0ZXhwciBzaXplX3Qg
dmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworCisgIHRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisKKyAgdGVtcGxhdGUgPGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHlwZXMuLi4+PjsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0
aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+CisgIHVz
aW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBUPjsKKyAgdGVtcGxh
dGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25z
dCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5cGVzLi4uPj47CisKKyAg
Y29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAvLyAyMC43LjQsIHZhbHVl
IGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jikgbm9leGNl
cHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHBy
IHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4mCisgIGdldCh2YXJp
YW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+
CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+
JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBjb25zdCYmCisgIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mu
Li4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgVCYmIGdldCh2
YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25z
dCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXpl
X3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PHZhcmlhbnRf
YWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZih2YXJpYW50PFR5
cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUeXBlcz4KKyAg
Y29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHlwZXMuLi4+Kikg
bm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9uYWwgb3BlcmF0b3JzCisg
IHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBs
YXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxh
dGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHZh
cmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICAvLyAyMC43
LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3IsIGNsYXNzLi4uIFZhcmlh
bnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3ImJiwgVmFyaWFudHMmJi4u
Lik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3RydWN0IG1vbm9zdGF0ZTsK
KworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJhdG9ycworICBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsK
KyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNl
cHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFsZ29yaXRobXMKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFudDxUeXBlcy4uLj4mLCB2
YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgLy8gMjAuNy4xMCwg
Y2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2VzczsKKwor
ICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBo
YXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBoYXNoPHZhcmlhbnQ8VHlw
ZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0YXRlPjsKKworfSAvLyBu
YW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGV4Y2Vw
dGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG5ldz4K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIENP
TVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisKKy8vIE1TVkMg
MjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wgJiYgKCFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vycm9yICJNUGFyay5WYXJp
YW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIoQ0xB
TkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hhc19idWlsdGluCisjZGVm
aW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgeworI2lmbmRl
ZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCiAKLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9l
eGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0
aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsg
KHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhD
RVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRp
bl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0g
NykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJTFRJTl9BRERSRVNTT0YK
ICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFzX2J1aWx0aW4oX190eXBl
X3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Cisj
aWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0ZXhwciA+PSAyMDEzMDQK
KyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAorI2lmIF9faGFzX2ZlYXR1
cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykKKyNkZWZpbmUg
TVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFjZV90YWcgewotICAgIGlu
X3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9fY3BwX2dlbmVyaWNfbGFt
YmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfR0VORVJJQ19MQU1CREFT
CisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNl
X3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2VyX3NlcXVlbmNlKQorI2Rl
ZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVtcGxhdGUgPGNsYXNzIF9U
eXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZpbmVkKF9fY3BwX3JldHVy
bl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfUkVU
VVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci11
c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0
ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQoX19jcHBfbGliX3RyYW5z
cGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfVFJB
TlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5f
cGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFibGVfdGVtcGxhdGVzKSB8
fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJMRV9URU1QTEFURVMKKyNl
bmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19p
bl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAgX19USFJPV19F
WENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFkZWZpbmVkKF9fR0xJQkNY
WF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRTCisjZWxpZiBkZWZpbmVk
KF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+KSAgLy8gPj0gbGlic3Rk
YysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlUUworI2VuZGlmCiAKLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3M6
IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0IGJhZF92YXJp
YW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAgICBzdGQ6Omxv
Z2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNj
ZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0
X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciog
d2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0
X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVtZW50YXRpb24gbW92ZWQg
dG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI7Cisj
ZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+IGRlY2x0eXBlKF9fVkFf
QVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJrIHsKKyAgbmFtZXNwYWNl
IGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlkZW50aXR5IHsg
dXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNlIGNwcDE0IHsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IGFycmF5
IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgaW5k
ZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07CisgICAgICAgIH0KIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxf
VHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192
YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09m
ZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTww
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRf
dHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9U
eXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMp
LTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
bGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3NpemU7
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
X1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9U
eXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8
X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9z
aXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlhbnQ8
X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2Yu
Li4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXplX3Qg
X0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50
X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9J
bmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgs
IHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFy
aWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVf
dCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0lu
ZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xh
dGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlw
ZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Y29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAgVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0
eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5
cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNpemVf
dCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NI
QVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgp
LAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlw
ZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWlu
YXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBfX3R5
cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9y
X3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90
eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFs
dWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1l
IF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+Ojpf
X3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0
aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQot
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBl
bmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwtMSxf
SGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6X192
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxf
SGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9z
dG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAg
ICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYmCi0g
ICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0
cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBf
c3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0g
ICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFs
dWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgr
MSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdl
X3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFudDxf
VHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19h
bnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9UeXBl
cy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotdW5p
b24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2w9c3RkOjpp
c19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZXsK
LSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRhW04gPT0gMCA/IDEgOiBO
XTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0eXBlbmFtZSBzdGQ6OmFk
ZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBf
X3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3Ry
dWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5
cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlwZV90ID0gdHlwZW5hbWUg
c3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZh
bHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxs
cHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0eXBlbmFtZSBzdGQ6OmRl
Y2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgot
ICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwh
c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZv
aWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19m
aXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVzaW5nIGVuYWJsZV9pZl90
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAKLSAgICBfVHlwZSYgX19n
ZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZv
aWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0
YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19k
ZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2NvbnN0X3QgPSB0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92ZV9yZWZlcmVuY2VfdCA9
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsKIAotICAgIF9UeXBlJiBf
X2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsK
LSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29u
c3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAmdCkgbm9leGNlcHQgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsK
LSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5cGU7CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVt
b3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1ZSIpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9f
Z2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29u
c3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIF9fdmFsLl9f
ZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAg
IGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmbW92ZShUICYmdCkgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSog
X190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9zZXF1ZW5jZSA9IHN0ZDo6
aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElz
PgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4u
PjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5j
ZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5
cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0
KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUm
Jj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlw
ZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5nIGluZGV4
X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRzLi4uPjsKKyNlbHNlCisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAgIHN0cnVjdCBpbnRlZ2Vy
X3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsgcmV0dXJuIHNpemVvZi4u
LihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4K
KyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1ZW5jZTxzdGQ6OnNpemVf
dCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7CisKKyAgICAgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJocz4KKyAgICAgIHN0cnVj
dCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5jZTxMaHMuLi4+LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3NlcXVlbmNlPFJocy4u
Lj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxMaHMuLi4sIChzaXplb2Yu
Li4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOworCisgICAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhfc2VxdWVuY2UgPSB0eXBl
bmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbAor
ICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2lu
ZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRlPD4KLXVuaW9uIF9fdmFy
aWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7Ci0gICAgc3Ry
dWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4u
IF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2lt
cGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAotICAgIF9UeXBlJiBfX2dl
dChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRf
cnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7
Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9z
ZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8MD4+IHt9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJj57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBlIF9fdmFsOwotICAgIHN0
cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4u
IFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFrZV9pbmRleF9zZXF1ZW5j
ZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lmZGVmIE1QQVJLX1RSQU5T
UEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBzdGQ6OmVxdWFsX3RvPD47
CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3Bl
cmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGli
Ojpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsK
KyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6
Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKyNpZmRl
ZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIG5vdF9lcXVhbF90byA9
IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IG5vdF9lcXVhbF90byB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNv
bnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgIT0gbGliOjpmb3J3
YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Jj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47CisjZWxzZQorICAgICAg
c3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBS
aHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywg
UmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMp
IDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBl
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0
ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAg
ICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9
Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZ3Jl
YXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVjdCBncmVhdGVyIHsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QK
KyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+IGxpYjo6Zm9yd2FyZDxS
aHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
dW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgbGVz
c19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4K
KyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMg
JiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPD0g
bGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3RkOjpncmVhdGVyX2VxdWFs
PD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgeworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIg
YXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJF
VFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisg
ICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4s
X0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9CisgICAgaW5saW5lIG5hbWVz
cGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsK
LSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQo
X192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJl
ZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6
X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5cGVfdHJhaXRzPgorICAg
ICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29uc3RhbnQgPSBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVz
dC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6Ci0gICAgICAg
IF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25z
dGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2Fy
Z3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+IHt9OwogCi0gICAgX0hl
YWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9f
Z2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+
CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMuLi4+Ojp0eXBlOwogCi0g
ICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7
Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQot
ICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDww
PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAg
IH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1lc3BhY2Ugc3dhcHBhYmxl
IHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAot
ICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVy
biBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9pbXBsIHsKKyAgICAgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwKKyAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3RkOjpkZWNsdmFsPFUgJj4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpk
ZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OnRydWVfdHlw
ZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+
KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4p
OwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4uKTsKIAorICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0eXBlKHRlc3Q8VD4oMCkp
OworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9pbmRp
Y2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
dHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFyaWFu
dDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
LSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50
KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
bGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2Vf
Y29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19y
aHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAg
IHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJsZV9pbXBsPFQ+Ojp0eXBl
OwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sID0gaXNfc3dh
cHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90aHJvd19zd2FwcGFibGUg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgICAg
ICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0ZDo6ZGVjbHZhbDxUICY+
KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUK
LV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19ub3Rocm93X3N3YXBwYWJs
ZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19s
aHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1v
dmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0gIC8vIG5hbWVzcGFjZSBz
d2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBhYmxlID0gZGV0YWlsOjpz
d2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2FwcGFibGUgPSBkZXRhaWw6
OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdl
dDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0aW9uYWw+CisjaWZkZWYg
X01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUg
OiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYgJiZmLCBBcyAmJi4uLiBh
cykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxpYjo6Zm9yd2FyZDxBcz4o
YXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgog
Ci0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2Vz
KV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtdiwgRCAmJmQp
CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12KQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwgdHlwZW5hbWUgUHRyPgor
ICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12LCBQdHIgJiZwdHIpCisg
ICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSkuKnBtdikKIAotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNz
aWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVu
Y190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAg
ICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBn
ZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUuLi4gQXM+
CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtZiwgRCAmJmQsIEFz
ICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJkPEQ+KGQpLipwbWYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3Rl
eHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYuLi4gYXMpCisgICAgICAg
ICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYpKGxpYjo6Zm9yd2FyZDxB
cz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNz
aWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWdu
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxm
KXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+
X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4K
KyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBzdHJ1Y3QgaW52b2tl
X3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4p
KT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5PGRlY2x0eXBlKAorICAg
ICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+KCksIHN0ZDo6ZGVjbHZh
bDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19kZXN0
cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2Rlc3Ryb3lfZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fc3dh
cF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShf
VmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBfVmFyaWFudCAmIF9fbGhz
LF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5kZXg+KF9fbGhzKSxnZXQ8
X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9IGRldGFpbDo6aW52b2tl
X3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlw
ZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdF90ID0g
dHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
c3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ogot
X19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRh
aWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9J
bmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3Ry
dWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29u
c3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0
JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRl
eD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3QgaXNf
aW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBf
X2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9yZXN1bHRfdDxGLCBBcmdz
Li4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2Nv
bXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9W
YXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBh
cmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19y
aHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0
eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNf
dHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90PEYsIEFy
Z3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
Lj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZva2VfcmVzdWx0X3Q8Riwg
QXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190
eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07
CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlzX2ludm9jYWJsZSA9IGRl
dGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9i
YXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJp
dmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcg
aXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZvaWQsIFIsIEYsIEFyZ3Mu
Li4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFz
ZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBfVHlwZSxf
VHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBl
cjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sX09mZnNl
dD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAg
IHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4uPjo6X190
eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9D
dXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxw
ZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9DdXJyZW50
U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVjdCBfX2Nv
bWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uPixfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmluZV9zZXF1
ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmlu
ZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21i
aW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+PnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4OwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAg
ICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBl
ZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQscHRyZGlm
Zl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVkZWYgX19p
bmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRW50cnk+
Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlwZWRlZiBf
X2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25zdHJ1Y3Rp
YmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5cGVuYW1l
IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNlLAotICAg
ICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhf
c2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAot
ICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQot
ICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+
OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0
aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwK
LSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25z
dHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3Ry
dWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJs
ZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAg
ICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0g
ICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxf
bWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJv
b2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFz
X25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19t
b3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQot
dGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNf
aGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
aGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93
X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9J
bmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1lbW9yeT4KKyNpZmRlZiBN
UEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJu
IF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBuYW1lc3Bh
Y2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3Zl
LAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9f
dHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9f
di50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2UgaGFzX2FkZHJlc3NvZl9p
bXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZm
X3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwK
LSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQgJiYpOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2
b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGJvb2wgaW1wbCgp
IHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6dmFsdWUgfHwgc3RkOjpp
c191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1ZTsKKyAgICAgICAgICB9
CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19h
cmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6
OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07CisgICAgICAgIH0gIC8vIG5h
bWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJp
YW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVw
bGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0g
ICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9IGJvb2xfY29uc3RhbnQ8
aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRl
bXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0luZGV4PihfX3JocykpOwot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNz
aWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2NvcHlfZnVuY190
eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190eXBlCi1fX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIFQg
KmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAgICAgICAgcmV0dXJuIHN0
ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNzb2YoVCAm
YXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4gJmFyZzsKKyAgICAgICAg
fQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVu
YW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0
b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9f
Z2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAog
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBU
SU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWlsOjpoYXNfYWRkcmVzc29m
PFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4
LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0
b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGlu
ZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVsZXRlOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9f
c291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFn
ZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVj
dCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9ICAvLyBuYW1lc3BhY2Ug
Y3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUg
X19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5k
ZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNf
dHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdl
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6
Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50aXR5PFQ+IHt9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CisgICAgc3RydWN0IHJlbW92
ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4dGVudHM8VD4ge307CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1vdmVfYWxsX2V4dGVudHNf
dCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsKKworICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQgPSBzdGQ6OmludGVncmFs
X2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVu
YW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2Jh
Y2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lf
ZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVzaW5nIGJvb2xfc2VxdWVu
Y2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVkX3R5cGUgOiBzaXplX2Nv
bnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgor
ICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29sX3NlcXVlbmNlPHRydWUs
IEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisjaWZkZWYgTVBBUktfVFlQ
RV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlwZV9wYWNrX2VsZW1lbnQ8
SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUu
Li4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwgeworICAgICAgcHJpdmF0
ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBzZXQ7CisKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVjdCBzZXQ8aW5kZXhfc2Vx
dWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9OworCisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8dHJ1
ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIHVz
aW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5jZV9mb3I8VHMuLi4+Pnt9
KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190
eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQot
ICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZl
X3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9z
dG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3Rv
cmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3Rv
cmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAot
ICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBf
X29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rl
c3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29w
X3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAg
ICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAK
LSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAg
ICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVfcGFja19lbGVtZW50ID0g
dHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46OnR5cGU7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
OworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2lu
ZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnQ8SSwgVHMu
Li4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+
Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4u
Pjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQRV9UUkFJVFMKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfY29weV9jb25zdHJ1
Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFQ+
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21v
dmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfY29uc3Ry
dWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUKKyAgICAgICAgOiBib29s
X2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlIDogYm9v
bF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGUKKyAgICAgICAgOiBi
b29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6
OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBz
dHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xfY29uc3RhbnQ8X19pc190
cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAgLy8gbmFtZXNwYWNlIGxp
YgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJFVFVSTgogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9f
YWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFj
ZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Pgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgot
c3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNs
dHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090
aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVzcGFjZSBzdGQgewogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2Rl
dGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4u
KSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgot
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyNkZWZpbmUg
QVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9SRVRVUk4oLi4uKSB7IHJl
dHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxl
PD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0cnVj
dGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRy
dWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9j
b25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRl
bXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAgIDog
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMuLi4+
IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8pCisjZGVmaW5lIERFQ0xU
WVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Cisj
ZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsK
KyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4uLikgXAorICAtPiBtcGFy
azo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyByZXR1cm4gX19WQV9BUkdT
X187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5lIEFVVE9fUkVGUkVGX1JF
VFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
LT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19yZWZlcmVuY2U8ZGVj
bHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmluZSBERUNMVFlQRV9BVVRP
X1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18pIHsgcmV0dXJuIF9fVkFf
QVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0
aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYm
IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3Qu
Li4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92
YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5
Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFs
PF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMu
Li4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQm
PigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3Zhcmlh
bnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRf
c3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAg
ICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICB0eXBl
ZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBf
X2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8
VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlh
bnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0g
ICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmll
bmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBl
cy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAg
IHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5
cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAg
cmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsK
LSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
dGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBf
X21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29u
c3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5k
ZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3Ro
ZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3QgX19jb3B5X2NvbnN0cnVj
dChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3Ro
ZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJs
ZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAg
ICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2Vz
cyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgorICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJiYWRfdmFyaWFudF9hY2Nl
c3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lkIHRocm93X2JhZF92YXJp
YW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3Zh
cmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRlKCk7CisjZW5kaWYKKyAg
fQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
dm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVy
PAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29u
c3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAg
IChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19v
dGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAg
IF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUo
KnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFj
ZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3Zhcmlh
bnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
X19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0g
ICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xvY2FsX2JhY2t1cF9y
ZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2U8X0lu
ZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwotICAgICAgICBfX2Vt
cGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9fZGVzdHJveSgpOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKSB7Ci0gICAg
ICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRl
eDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVTCisgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJp
YW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7
fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
VD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFu
dCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+
KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAg
IHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIp
Ci0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVj
dChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29u
c3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9f
Y29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhl
cik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8
X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAg
ICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAg
ICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5k
ZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZh
bHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIFQ+IDog
dmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9f
aW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3Rl
eHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAg
ICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9f
eCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
Ci0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVz
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0
aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3Rk
Ojppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0o
X1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsK
LSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0
aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9f
YWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJp
YW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNv
bnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAg
ICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHMuLi4+PiA6IG1wYXJr
OjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisKKyAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwor
CisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICB1c2luZyB2YXJpYW50
X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPEksIFQ+Ojp0eXBl
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6OmFkZF9jb25zdDx2YXJp
YW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
LCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBU
PgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+
IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3Qg
dmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFk
ZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6OmlkZW50aXR5PG1wYXJrOjps
aWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAgc3RhdGljX2Fzc2VydChJ
IDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFyaWFudF9hbHRlcm5hdGl2
ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0ZXhwciBzdGQ6OnNpemVf
dCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpOworCisgIG5hbWVz
cGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGFsbCgpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4KKyAgICBpbmxpbmUgY29u
c3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiICYmIGFs
bChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG5vdF9mb3VuZCA9
IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90
IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7CisKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAg
ICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVvZi4uLihUcyk+IG1hdGNo
ZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4ufQorICAgICAg
fTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsKKyAgICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsKKyAgICAgICAgaWYgKG1h
dGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9mb3VuZCkgeworICAgICAg
ICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ID0g
aTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVy
YXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBf
X2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAg
ICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAg
ICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgo
KT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAgICAg
X19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBl
cy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21vdmVf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3Rh
YmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5k
ZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Cisj
ZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleF9pbXBsKHN0
ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGlkeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnMuLi4gYnMp
IHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQgPyBhbWJpZ3VvdXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5kX2luZGV4X2ltcGwoaWR4
LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRfaW5kZXhfaW1wbChyZXN1
bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2lu
ZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3RfZm91bmQsIDAsIHN0ZDo6
aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09
LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1wbCA9CisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkgIT0gYW1iaWd1b3VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4+Owor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZp
bmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxmaW5kX2luZGV4PFQsIFRz
Li4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgorICAgIHN0cnVjdCBmaW5k
X2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4geworICAg
ICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVjaWZpZWQgdHlwZSBpcyBu
b3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1iaWd1b3VzLCAidGhlIHNw
ZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRfaW5kZXhfY2hlY2tlZCA9
IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMuLi4+KCk+OworCisgICAg
c3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50
X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9
PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgp
XSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAg
VmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAgICAgIF9fb3RoZXIu
X19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAgICAgICAgICAgX19p
bmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBjbGFzcyBUcmFpdCB7IFRy
aXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9OworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg
SXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4g
Y2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCB0cmFpdCgpIHsK
KyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFsdWUKKyAgICAgICAgICAg
ICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIDogSXNB
dmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJsZTsKKyAgICB9CisKKyNp
ZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJh
aXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0
cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGU7
CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkgeworICAgICAgICAgIHJl
c3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXRfaW1w
bChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1wbGF0ZTw+Ci1jbGFzcyBW
YXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25z
dGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRyYWl0cz4KKyAg
ICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0IHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWl0IHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFpdHMuLi4gdHMp
IHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2ltcGwodCwgdHMuLi4pCisg
ICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0LCB0cy4uLik7CiAgICAg
fQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAg
IGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0cykgeworICAg
ICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsIHRz
Li4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICBz
dGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAg
ICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZT4oKS4uLik7CisKKyAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0ID0KKyAg
ICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVjdGlibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPigpLi4uKTsK
KworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2lnbmFibGVfdHJhaXQgPQor
ICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4uLik7CisKKyAgICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0ID0KKyAgICAgICAgICBj
b21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAgICAgICAgICAgICAgICAg
ICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMgY29uc3Rl
eHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRy
YWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfZGVzdHJ1
Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgot
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUK
LXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jo
cykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6
dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBuYW1lc3BhY2UgYWNjZXNz
IHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9fdHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLX07Cisg
ICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9E
RURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgIGlubGluZSBz
dGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9wbGFjZV9pbmRleF90PDA+
KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVhZF87Cisg
ICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1
cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3QgST4KKyAgICAgICAgaW5s
aW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4
X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6bGliOjpmb3J3YXJkPFY+
KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVtbXkgPSB0cnVlPgorICAg
ICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Vj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVGIG9wZXJhdG9yKCkoViAm
JnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEkg
LSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQorICAgICAgICB9OworCisg
ICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBs
PDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAg
ICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVh
ZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFYsIHN0ZDo6c2l6
ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE9fUkVGUkVGIGdldF9h
bHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAgQVVUT19SRUZSRUZfUkVU
VVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpKQorI2VuZGlm
CisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBkYXRhKG1wYXJrOjpsaWI6
OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQorICAgICAgfTsKKworICAg
ICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlw
ZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0
X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oYmFzZTo6Z2V0X2FsdDxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAgIH07CisKKyAgICB9ICAv
LyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRhdGlvbiB7CisKKyAgICAg
IHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNvbnN0IFQgJmF0KGNvbnN0
IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNv
bnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZS4uLiBJcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6OmxpYjo6cmVtb3ZlX2Fs
bF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBhcms6OmxpYjo6YXJyYXk8
VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgeworICAgICAgICAgIHJldHVy
biBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2soKSB7Cisg
ICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYsIEZzPjo6dmFsdWUuLi4p
LAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRgIHJlcXVpcmVzIHRoZSB2
aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJldHVy
biB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmNvbW1vbl90eXBlX3Q8
bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT4K
KyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAgICAgICB1c2luZyByZXN1
bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25fdHlwZV90PG1wYXJrOjps
aWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92aXNpdG9yX3JldHVybl90
eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAorICAgICAgICAgICAgICAg
ICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19OworICAgICAgICB9CiAK
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAqKAotICAg
ICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2Yo
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkK
LSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgICAgc3RydWN0IGltcGwg
eworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyBkaXNw
YXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTiht
cGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGPihmKSwK
KyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJcz4oc3RhdGljX2Nhc3Q8
VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAg
ICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3BhdGNoKG1wYXJrOjpsaWI6
OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JFVFVSTigmZGlzcGF0Y2hl
cjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRjaCkKKworICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAg
ICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlhZ29uYWxfaW1wbCgpCisg
ICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4oCisgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmluZGV4ZWRfdHlwZTxJ
LCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlw
ZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGli
OjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJy
YXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4pKQorCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAg
aW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8gbWFrZV9mZGlhZ29uYWwo
KQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBWLCBWcy4u
Lj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFy
azo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCkgPT0g
bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAgICAgICAgICAgICAiYWxs
IG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7CisgICAgICAgICAgcmV0
dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46OnNpemUo
KT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJu
ICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFk
ZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIp
KQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4
LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBW
cywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1
dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0
dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAo
KChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4o
IkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7
Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdC4uLiBJcywKKyAgICAg
ICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0
cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4s
IG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4gbHMpIHsKKyAgICAgICAg
ICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+e30sIGxzLi4uKS4u
Lik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsK
LSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0g
ICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikp
Ci0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1ha2VfZm1hdHJpeCgpIHsK
KyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAgICAgICAgICAgIG1wYXJr
OjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUo
KT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1hdHJpeF9pbXBsIHsKKyAg
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAgc3RydWN0IGltcGw7CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgICAgc3RydWN0
IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7CisgICAgICAgICAgICBp
bmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAgIEFV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4obXBh
cms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAgICAgIH07CisKKyAgICAg
ICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6ZV90Li4uIEpzLCB0eXBl
bmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5kZXhfc2Vx
dWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4uPiB7CisgICAgICAgICAg
ICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAg
IEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAgICAgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgpLi4uKSkKKyAgICAgICAg
ICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFt
ZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2ZtYXRy
aXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtl
X2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8CisgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgp
Pi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdl
dDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVfdCBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25hbDxWaXNpdG9yICYmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShhc19iYXNlKG1wYXJrOjps
aWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAgICAgICBpbmRleCkobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlz
aXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAg
ICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykp
KS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLikobXBhcms6OmxpYjo6Zm9y
d2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkKKyAgICAgIH07CisKKyAg
ICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAgICAgICAgc3RydWN0IHZp
c2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydCgK
KyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZpc2l0b3IsIFZhbHVlcy4u
Lj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAgcmVxdWlyZXMgdGhlIHZp
c2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29u
c3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIChf
X3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxw
dHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNpZmRlZiBfTVNDX1ZFUgor
I3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDApCisj
ZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3Io
KShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25zdAorICAgICAgICAgICAg
REVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1wYXJrOjpsaWI6OmZvcndh
cmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFsdWVzKS4uLikpCisjaWZk
ZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyAgICAgICAgfTsKIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVy
biAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29m
KF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHN0cnVjdCB2YWx1ZV92
aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xU
WVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0CisgICAgICAgICAgICBE
RUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNpdF9leGhhdXN0aXZlX3Zp
c2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IsCisgICAgICAgICAgICAg
ICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlKSku
Li4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4o
dmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX3Zh
bHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAgQVVUT19SRVRVUk4odmFs
dWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3Ip
fSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9y
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZ
UEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNp
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAg
ICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZz
KS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVu
YW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRP
IHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVD
TFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vmlz
aXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3ZhbHVlX2F0KHN0ZDo6c2l6
ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAg
ICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHRfYXQo
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ZhbHVlX3Zpc2l0b3IobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQorCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShWaXNpdG9yICYmdmlzaXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAg
ICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJk
PFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAgLy8gbmFtZXNwYWNlIHZp
c2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjph
ZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3Rk
OjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192
KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIGFsdChpbl9wbGFjZV90
LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9w
KQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2YWx1ZTsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxl
VHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1bmlvbiByZWN1
cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBl
cy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0
dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAg
dHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRf
dHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0
dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRf
dHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90
IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwgSW5k
ZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKGRlc3RydWN0
aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
bmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICBcCisgIHVu
aW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4LCBULCBUcy4uLj4g
eyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0
IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5vZXhjZXB0ICAgICAgICBc
CisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5f
cGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAg
IDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5k
ZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAgIDogdGFpbF8o
aW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihjb25z
dCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KGNv
bnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAorICAgIHJlY3Vyc2l2
ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNo
YXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbjxk
ZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxfOyAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpyZWN1cnNpdmVf
dW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFS
S19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9IGRlZmF1
bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSB7
fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJhaXQ6OlVuYXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9
IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04KKworICAg
IHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVz
dHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNzIGJhc2UgeworICAgICAg
cHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKHZhbHVlbGVzc190
IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGluZGV4XyhzdGF0aWNfY2Fz
dDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKGluX3Bs
YWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICA6IGRhdGFfKGluX3Bs
YWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiksCisg
ICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIHZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBp
bmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgfQorCisgICAgICBpbmxp
bmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNlcHQgeworICAgICAg
ICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFudF9ucG9zIDogaW5kZXhf
OworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2luZyBkYXRhX3QgPSByZWN1
cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsKKworICAgICAgZnJpZW5k
IGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7IHJldHVybiBiOyB9Cisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZhc19iYXNlKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGJhc2Ug
JiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3ZlKGIpOyB9CisgICAg
ICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNfYmFzZShjb25zdCBiYXNl
ICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisgICAgICBmcmllbmQgaW5s
aW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQor
ICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90ICZkYXRhKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHBy
IGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0
YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGRhdGFfdCAmJmRhdGEo
Y29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0YV87IH0KKwor
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIHsgcmV0dXJu
IHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1w
b2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFfdCBkYXRhXzsKKyAgICAg
IGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBl
cy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBvbGluZV9m
dW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpiYXNlOworICAgICAg
ZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX192
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zp
c2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAo
X192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVz
Li4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpCi0gICAgICAgIDogX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgo
KV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3IgeworI2lmZGVmIF9NU0NfVkVS
CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMCkK
KyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSB2b2lk
IG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0Ln5BbHQoKTsgfQorI2lm
ZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikp
Ci0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5h
bWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zp
c2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07CisjaWYgZGVm
aW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RP
Uih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHR5
cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RPUih0eXBlLCBi
YXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3RydWN0aWJsZV90cmFpdD4K
KyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9ERVNUUlVD
VE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJveSkgXAorICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4uPiwgZGVzdHJ1Y3RpYmxl
X3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGJhc2U8ZGVzdHJ1
Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVz
aW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPjsgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yICYmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVjdG9yICYpID0gZGVmYXVs
dDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGRlc3RydWN0
b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisgICAg
TVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxh
YmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisgICAgICAgIGlubGluZSB2
b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+aW5kZXhfID0gc3RhdGlj
X2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfREVT
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgfmRlc3RydWN0b3Io
KSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0
IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7fSwgKnRoaXMpOworICAg
ICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90Pigt
MSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAg
ICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBkZWxldGU7LAor
ICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBkZWxldGU7KTsKKworI3Vu
ZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRy
YWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0cnVjdG9yPFRyYWl0cz4g
eworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47CisKKyAgICAgIHB1Ymxp
YzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3VwZXIpCisgICAgICB1c2lu
ZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6CisjaWZuZGVmIE1QQVJLX0dF
TkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJh
dG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBjb25zdCB7CisgICAgICAg
ICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJoc0FsdD4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAg
cmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgc3RhdGljIFQgJmNv
bnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgICAgOjpu
ZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVzc29mKGEpKSkKKyAgICAg
ICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAgIH0KKworICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZCBnZW5lcmljX2Nv
bnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAgICAgICAgbGhzLmRlc3Ry
b3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAgICAgICAgICAgICByaHMu
aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAgICAgICAgICAgICAgW10o
YXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAgbGhzX2FsdCwgbXBhcms6
OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCkudmFsdWUpOworICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNlbmRpZgorICAgICAgICAg
ICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9y
d2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSByaHMuaW5kZXhfOworICAg
ICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3Jf
dDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJl
dHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0
Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9jb25zdHJ1
Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUm
JiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZv
cndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+
KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9f
YXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IobW92
ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+LCBtb3ZlX2NvbnN0cnVj
dGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgY29uc3RydWN0b3I8dHJh
aXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNp
bmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25zdCBtb3ZlX2NvbnN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3RvciAmb3BlcmF0
b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBt
b3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0
OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNU
T1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVsdDspOworCisgICAgTVBB
UktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAor
ICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3IgJiZ0aGF0KSBub2V4Y2Vw
dCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRz
Pjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVjdG9yKHZhbHVlbGVzc190
e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgbXBhcms6Omxp
Yjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NP
TlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJL
X1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0
cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBj
b3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RP
Uihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwKKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4sIGNvcHlfY29u
c3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBtb3ZlX2NvbnN0
cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHVibGljOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1Y3Rvciwgc3VwZXIpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRv
cj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfY29u
c3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5X2NvbnN0cnVjdG9yICZv
cGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAor
ICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0cnVjdG9yICYmKSA9IGRl
ZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05T
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAgY29w
eV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0KSA9IGRlZmF1bHQ7KTsK
KworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2
YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9y
ICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZhbHVlbGVzc190e30pIHsK
KyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgdGhhdCk7CisgICAgICAg
IH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3IoY29uc3QgY29weV9jb25z
dHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNU
UlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIGFzc2ln
bm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsKKyAgICAgIHVzaW5nIHN1
cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBwdWJsaWM6CisgICAgICBJ
TkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNlKEFyZ3MgJiYuLi4gYXJn
cykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3RfYWx0KGFjY2Vzczo6YmFz
ZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkgeworICAgICAgICB0
aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRoaXMtPmNvbnN0cnVjdF9h
bHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3RydWN0IGFzc2lnbmVyIHsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVuYW1lIFRoYXRBbHQ+Cisg
ICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhpc19hbHQsIFRoYXRBbHQg
JiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2lnbl9hbHQodGhpc19hbHQs
IG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJpYW50SW5kZXgtMT4oX192
Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlzaXRfaGVscGVyPF9WYXJp
YW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNlcy4uLj4+OjpfX3Zpc2l0
KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKQotICAgICAgICAgICAg
OiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotICAgIH0K
LX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
QXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwgVD4gJmEsIEFyZyAmJmFy
ZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7CisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MjQ0KQor
I2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcp
OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29uc3QgeworICAgICAgICAg
ICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmdfKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAqdGhpc187CisgICAgICAg
ICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBtcGFyazo6bGliOjpmb3J3
YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGliOjpib29sX2NvbnN0YW50
PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFy
Zz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAgICAgfQogCi10ZW1wbGF0
ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
dmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4u
Lil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNfYXNzaWduKFRoYXQg
JiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYg
dGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5n
LgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZp
c2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAgICAgdGhhdC5pbmRleCgp
LAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICBbdGhpc10oYXV0
byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAgICAgICAgIHRoaXMtPmFz
c2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBtcGFyazo6bGliOjpmb3J3
YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhpc30KKyNlbmRpZgorICAg
ICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAgICBtcGFyazo6
bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2Fz
c2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2Yu
Li4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9
X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zp
c2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYg
X192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9o
ZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1Zhcmlh
bnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAg
IF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9f
dmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Cisj
ZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVfYXNzaWduYWJsZV90cmFp
dCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9hc3NpZ25t
ZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4gICAgICAgICAgICBcCisg
ICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdubWVudDx0cmFpdHM8VHMu
Li4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3ZlX2Fzc2lnbm1lbnQsIHN1
cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25zdCBtb3ZlX2Fzc2lnbm1l
bnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBtb3ZlX2Fzc2lnbm1lbnQo
bW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IG1v
dmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9yPSht
b3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRf
TU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBtb3Zl
X2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3NpZ25tZW50ICYmdGhhdCkg
bm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNf
YXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCgKKyAgICAg
ICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9y
PShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5U
X01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQg
PSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFzcyBjb3B5X2Fzc2lnbm1l
bnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoY29weV9hc3NpZ25h
YmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5
X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxlX3RyYWl0PiAgICAgICAg
ICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBtb3ZlX2Fzc2lnbm1l
bnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKGNvcHlfYXNzaWdu
bWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1
cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvbnN0IGNvcHlf
YXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAgICAg
IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZhdWx0Oyk7CisKKyAgICBN
UEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwK
KyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25tZW50
ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24odGhhdCk7CisgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9B
U1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlbGV0ZTspOwor
CisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNvcHlfYXNzaWdubWVudDx0
cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19DVE9SKGltcGws
IHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGluZSB2b2lkIGFzc2lnbihB
cmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nlc3M6OmJhc2U6OmdldF9h
bHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgc3dhcChpbXBsICZ0
aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYgdGhh
dC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5nLgor
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5pbmRleCgpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMtPmluZGV4KCksCisjaWZk
ZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdF9h
bHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisj
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVye30K
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwgKnJocyA9IG1wYXJrOjps
aWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5tb3ZlX25vdGhyb3coKSAm
JiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKGxocywgcmhz
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6OmxpYjo6bW92ZSgqcmhz
KSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8vIEVYVEVOU0lPTjogV2hl
biB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhzYCB0aHJvd3MKKyAgICAg
ICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVjdGlibGUgdGhlbiB3ZSBt
b3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFuZCBwcm92aWRlIHRoZSBz
dHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUoKmxo
cykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAgICAgaWYgKHRtcC5tb3Zl
X25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqcmhz
LCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhy
b3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVj
dCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgorICAgICAgICAgIHRoaXMt
PmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUodG1wKSk7CisgICAgICAg
IH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRv
cixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8c2l6ZW9m
Li4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNpdCgKLSAgICAgICAgX192
aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotfQorICAgICAgcHJpdmF0
ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBzdHJ1Y3Qgc3dhcHBlciB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBlbmFtZSBUaGF0QWx0Pgor
ICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRoaXNfYWx0LCBUaGF0QWx0
ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAgICAg
ICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
IH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhz
LmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAgICAgICBf
X2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFy
ZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQorICAgICAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAgICAgICAgICAgICAgICAg
e3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZS4uLn0KKyAgICAg
ICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jo
cy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKLSAgICAgICAg
ICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjoKLSAgICAgICAgICBf
X2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOwotfQorICAg
IHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lkIG9wZXJhdG9yKCkoKSBj
b25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ8
VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5nIG92ZXJsb2FkPFRzLi4u
Pjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5PFQ+IG9wZXJhdG9yKCko
VCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAh
KF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlwZW5hbWUgbXBhcms6Omxp
Yjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46OnR5cGU7CisKKyAgfSAg
Ly8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBjbGFzcyB2YXJpYW50
IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAorICAgICAgICAgICAgICAg
ICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBhbHRlcm5hdGl2ZS4iKTsK
KworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6OmlzX2FycmF5PFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2Vy
dChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6dmFsdWUuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2ZSBhIHJlZmVyZW5jZSB0
eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGli
OjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAg
ICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMgYW4gYWx0ZXJuYXRpdmUu
Iik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBGcm9u
dCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMuLi4+LAorICAgICAgICBt
cGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnQoKSBub2V4
Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8MD57fSkge30KKwor
ICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7CisgICAgdmFyaWFudCh2YXJp
YW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPG1wYXJrOjpsaWI6
OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBUID0gZGV0YWlsOjpiZXN0
X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRh
aWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50KEFyZyAmJmFyZykgbm9l
eGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6
ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBt
cGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6
OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAg
ICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhj
ZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgc3Rk
OjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFy
Z3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90
PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFu
dCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXpl
cl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVj
dGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9s
aXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
cy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWws
IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8
CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFs
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25z
dGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+LAorICAgICAgICBBcmdz
ICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8
ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBs
YXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRf
aW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwKKyAgICAg
ICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdz
KSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNl
X2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9
CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPShj
b25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZvcGVyYXRvcj0odmFyaWFu
dCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZywKKyAgICAgICAg
ICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxtcGFyazo6bGliOjpk
ZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9IGRldGFpbDo6YmVzdF9t
YXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWls
OjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQgJiwgQXJnPjo6dmFsdWUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxl
PFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0g
MD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFyZykgbm9leGNlcHQoCisg
ICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFyZz46OnZhbHVlICYmCisg
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSkpIHsK
KyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4o
YXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0
eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisg
ICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBB
cmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZlbXBsYWNlKEFyZ3MgJiYu
Li4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4obXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAor
ICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBVcCwKKyAgICAgICAgdHlw
ZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFj
a19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5lIFQgJmVtcGxhY2Uoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICByZXR1
cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBU
LAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0
YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICBtcGFyazo6
bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVl
LCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYmLi4uIGFyZ3MpIHsKKyAg
ICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5h
bWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisg
ICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4u
Pjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1w
bGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5pbmRleCgpOworICAgIH0K
KworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRydWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1teSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpp
c19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlhbnQgJnRoYXQpIG5vZXhj
ZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNf
bm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkgeworICAgICAgaW1wbF8u
c3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgorICAgIGRldGFpbDo6aW1w
bDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFpbDo6YWNjZXNzOjp2YXJp
YW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICB9
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5l
IGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOworICB9CisKKyAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wg
aG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwg
VHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1Y3QgZ2VuZXJpY19nZXRf
aW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChpbnQpIHt9CisKKyAgICAg
IGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAgICAgICBB
VVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZhcmlhbnQ6OmdldF9hbHQ8
ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZW5lcmlj
X2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5lcmljX2dldF9pbXBsPEks
IFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8gMCA6ICh0aHJvd19iYWRf
dmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4o
dikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICZ2KSB7
CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJr
OjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVu
YW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAg
ICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIFQgJmdldCh2YXJpYW50
PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8
VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2YXJpYW50PFRzLi4uPiAm
JnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4u
Pjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IFQgJmdldChj
b25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgY29uc3QgVCAmJmdl
dChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6Zmlu
ZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOwor
ICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1dG8gKiAqLyBBVVRPIGdl
bmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JFVFVSTih2ICYmIGhvbGRz
X2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAgID8gbXBhcms6OmxpYjo6
YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdikudmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKwor
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25z
dGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwg
dmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsKKyAgfQorCisgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2
ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXRfaWY8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBj
b25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBnZXRfaWYodmFyaWFudDxU
cy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRldGFpbDo6ZmluZF9pbmRl
eF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFk
ZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2KSBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxU
LCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4K
KyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgdmFyaWFudDxUcy4uLj4g
JmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVY
UFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBlcXVhbF90b3t9LCBsaHMs
IHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgor
ICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAg
dmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFsX3Rve30sIGxocywgcmhz
KSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307CisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgdmFy
aWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxfdG87CisjaWZkZWYgTVBB
UktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwg
bm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy5pbmRleCgp
ICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCks
IG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0KIAotY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsg
cmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRl
IGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBj
b25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0
JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3RydWN0IF9faGFzaF92aXNp
dG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigp
KF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9f
eCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgewor
ICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6
bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgo
KSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMu
aW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiAhcmhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhz
LmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAK
LS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZs
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4u
Lj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1
c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJocyk7CisjZWxzZQorICAg
IHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAocmhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpIHx8
CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNsYXNzLi4uIEY+Ci1hdXRv
IHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlzaXQobWFrZVZpc2l0b3Io
c3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKLXsKLSAgICByZXR1
cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJk
PFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxo
cy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgp
IDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5p
bmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0
KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJu
IGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFyaHMudmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPCByaHMuaW5k
ZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAg
ICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc19lcXVh
bHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXJfZXF1
YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4
KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSB8fAor
ICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAgICAgIGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9CiAKLW5hbWVzcGFj
ZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+Cisg
IGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNpdG9yICYmdmlzaXRvciwg
VnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgIChkZXRhaWw6
OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAgICAgICAgICAgID8gKHZv
aWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCkpLAorICAgICAg
ICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVlKG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKworICBz
dHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
bW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG1v
bm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKwor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkg
bm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBh
dXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICB2YXJpYW50
PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChyaHMpKSkKKyAgICAgIC0+
IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChyaHMpOworICB9CisKKyAg
bmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5hbWVzcGFjZSBoYXNoIHsK
KworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+CisgICAgICBjb25zdGV4
cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX2Nv
cHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92
ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46OnZhbHVlOworICAgICAg
fQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIGlz
X2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8Sz47CisgICAgICAgIHJl
dHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAgICAgICAgICAgc3RkOjpp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNf
bW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAgIH0gIC8vIG5hbWVzcGFj
ZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5kZWYgQVVUTworI3VuZGVm
IEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVmIEFVVE9fUkVGUkVGX1JF
VFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xUWVBFX0FVVE9fUkVUVVJO
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgaGFzaDxkZXRhaWw6OmVu
YWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAgbXBhcms6OmxpYjo6ZW5h
YmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZDwKKyAgICAg
ICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+Ojp2YWx1ZT4+PiB7Cisg
ICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+OworICAgIHVzaW5nIHJlc3Vs
dF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1c2luZyBkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPQorICAgICAgICAg
IHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgID8gMjk5NzkyNDU4ICAv
LyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9uIGNyZWF0aW9uCisgICAg
ICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFN
QkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZhbHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6OmRlY2F5X3Q8ZGVjbHR5
cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IG1wYXJr
OjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisjZWxz
ZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1cm4gaGFzaF9jb21iaW5l
KHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsKKyAgICB9CiAKLXRlbXBs
YXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOworICAgIHBy
aXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgIHN0cnVjdCBoYXNoZXIg
eworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSBzdGQ6OnNpemVf
dCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAgICAgIHVzaW5nIGFsdF90
eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1c2luZyB2YWx1ZV90eXBl
ID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PHR5cGVuYW1lIGFsdF90
eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQu
dmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0YXRpYyBzdGQ6OnNpemVf
dCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVfdCByaHMpIHsKKyAgICAg
IHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwgNikgKyAobGhzID4+IDIp
OwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3RydWN0IGhhc2g8bW9ub3N0
YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0ZTsKKyAgICB1c2luZyBy
ZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVy
YXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlz
aXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJl
dHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkgYXR0cmFjdGl2ZSByYW5k
b20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3BhY2Ugc3RkCit9ICAvLyBu
YW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNpbmcgV1RGOjpWYXJpYW50
OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9D
UFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KK2F1dG8gc3dp
dGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6
OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQoreworICAgIHJldHVybiBz
dGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2Fy
ZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkK
LSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAotc3RhdGljIFZhcmlh
bnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1v
ZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6
Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMgc3RkOjp2YXJp
YW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBN
b2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9y
OjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9sb2NhbGU7CiAg
ICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0
b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVyYXRv
cklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOwogICAgIE1vZGUgbV9t
b2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VN
YWMubW0JKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50PFRleHRCcmVha0l0ZXJh
dG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0
b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVy
YXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNl
IFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjc4IEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9jcmVkZW50aWFscy9DcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRyYWN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5
Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFyY2hQYXJhbXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZv
cm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVm
ZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVy
Vmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0Qm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJl
cXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlLZXkpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6
OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0
QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YXJyYXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6bnVtYmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmJpbmFyeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJheSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0aFZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dnaW5nU3Ry
aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdGVk
SW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRyYWNrKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFU
cmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VT
ZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZl
cik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNpbmdTdGF0dXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5nUmVzdWx0OjpjYW5kaWRh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1heWJlQ3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0
aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2VyUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAgICogY3J5cHRvL0NyeXB0
b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVD
cnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaDoKKyAgICAg
ICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkpOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6CisgICAgICAgICogY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1I
S0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1w
b3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktE
RjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL3Bh
cmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAgICAgICAgKiBjcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oOgorICAgICAgICAqIGNy
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oOgorICAgICAgICAq
IGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtl
eUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkSXRlbSk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0RP
TU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXhSZWFkT25seTo6
Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRh
cmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MpOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZXN1bHQgY29u
c3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAqIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwv
SFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2Up
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1VSTFNlYXJjaFBhcmFt
cy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNW
YWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNDdXJyZW50Q29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Omhhc092ZXJyaWRlQWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Om92ZXJyaWRlQWxwaGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52YXNQYXR0ZXJuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBjb25zdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbiBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
YWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldlYkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVt
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE4ICBNczJnZXIgIDxNczJnZXJAZ21haWwu
Y29tPgogCiAgICAgICAgIFtHVEtdIFNob3cgY29udHJvbHMgaWYgYSB2aWRlbyBlbGVtZW50IGlz
bid0IGFsbG93ZWQgdG8gcGxheSBpbmxpbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBD
YWNoZTo6ZG9NYXRjaChzdGQ6Om9wdGlvbmFsPFJlcXVlcwogewogICAgIFJlZlB0cjxGZXRjaFJl
cXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAg
ICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1
ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVx
dWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVh
c2VOb25OdWxsKCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIg
JiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoVHlw
ZSA9PSBNYXRjaFR5cGU6Ok9ubHlGaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBwcm9taXNl
LT5yZXNvbHZlKCk7CkBAIC0xMjIsOCArMTIyLDggQEAgdm9pZCBDYWNoZTo6YWRkQWxsKFZlY3Rv
cjxSZXF1ZXN0SW5mbz4mJgogdm9pZCBDYWNoZTo6cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVm
PEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHBy
b21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykpIHsKLSAgICAg
ICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKS5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJl
cXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5t
ZXRob2QoKSAhPSAiR0VUIikgewogICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3QgbWV0aG9kIGlzIG5vdCBHRVQiKSB9
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MCw4ICsxODAsOCBAQCB2b2lkIENhY2hlOjpw
dXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8CiB2b2lkIENhY2hlOjpyZW1vdmUoUmVxdWVzdElu
Zm8mJiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIERPTVByb21pc2VEZWZlcnJl
ZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVx
dWVzdDsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0
Pj4oaW5mbykpIHsKLSAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVl
c3Q+PihpbmZvKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3Rk
OjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRo
b2QpIHsKICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMDEsOCArMjAxLDggQEAgdm9pZCBDYWNoZTo6a2V5cyhzdGQ6Om9wdGlvbmFs
PFJlcXVlc3RJbgogewogICAgIFJlZlB0cjxGZXRjaFJlcXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYg
KGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAgICAgICAgIHJlcXVlc3QgPSBXVEY6Omdl
dDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4o
aW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVxdWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxG
ZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAg
ICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9k
KSB7CiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKFZlY3RvcjxSZWY8RmV0Y2hSZXF1
ZXN0Pj4geyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jcmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMgewotICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBW
YXJpYW50PFBhc3N3b3JkQ3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsK
KyAgICB1c2luZyBQYXNzd29yZENyZWRlbnRpYWxJbml0ID0gc3RkOjp2YXJpYW50PFBhc3N3b3Jk
Q3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8UGFzc3dvcmRDcmVkZW50aWFsSW5pdD4gcGFzc3dvcmQ7CiAgICAgc3RkOjpvcHRpb25h
bDxGZWRlcmF0ZWRDcmVkZW50aWFsSW5pdD4gZmVkZXJhdGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwzNiArNDIsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGZXRjaEJvZHkgRmV0Y2hC
b2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEluaXQmJiB2YWx1
ZSwgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQmxvYj4gYmxvYiA9
IFdURjo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEJsb2I+Pih2YWx1ZSkpIHsKKyAgICAgICAg
UmVmPGNvbnN0IEJsb2I+IGJsb2IgPSBzdGQ6OmdldDxSZWZQdHI8QmxvYj4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IGJsb2ItPnR5cGUoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJsb2IpKTsKICAgICB9Ci0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFsdWUpKSB7Ci0gICAgICAg
IFJlZjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBXVEY6OmdldDxSZWZQdHI8RE9NRm9ybURh
dGE+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPERPTUZvcm1E
YXRhPiBkb21Gb3JtRGF0YSA9IHN0ZDo6Z2V0PFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKS5y
ZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBhdXRvIGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksICZz
dGF0aWNfY2FzdDxEb2N1bWVudCY+KGNvbnRleHQpKTsKICAgICAgICAgY29udGVudFR5cGUgPSBt
YWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLCBmb3JtRGF0YS0+Ym91
bmRhcnkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoZm9ybURh
dGEpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IFdURjo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IHN0ZDo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgY29udGVudFR5cGUgPSBIVFRQSGVhZGVyVmFsdWVzOjpm
b3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKCk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RG
TW92ZShwYXJhbXMpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBXVEY6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlC
dWZmZXI+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiBidWZmZXIg
PSBzdGQ6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsK
ICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KLSAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7Ci0gICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IFdURjo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IHN0ZDo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsKKyAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CiAgICAgY29udGVudFR5cGUgPSBI
VFRQSGVhZGVyVmFsdWVzOjp0ZXh0UGxhaW5Db250ZW50VHlwZSgpOwotICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHZhbHVlKSkpOworICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHZhbHVlKSkpOwogfQogCiBGZXRjaEJvZHkg
RmV0Y2hCb2R5OjpyZWFkYWJsZVN0cmVhbUJvZHkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiwg
RmV0Y2hSZXNwb25zZVNvdXJjZSYpOwogI2VuZGlmCiAKLSAgICBib29sIGlzQmxvYigpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEp
OyB9Ci0gICAgYm9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlC
dWZmZXI+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+
KG1fZGF0YSk7IH0KLSAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRh
KTsgfQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9CisgICAg
Ym9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+Piht
X2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSk7
IH0KKyAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQorICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KG1fZGF0YSk7IH0KICAgICBib29sIGlzUmVhZGFibGVTdHJlYW0oKSBjb25zdCB7IHJldHVy
biBtX2lzUmVhZGFibGVTdHJlYW07IH0KIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFJlZlB0
cjxCbG9iPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJl
ZlB0cjxET01Gb3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAg
IHVzaW5nIEluaXQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiwgUmVmUHRyPEFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgUmVmUHRy
PFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAgc3RhdGljIEZldGNoQm9keSBleHRyYWN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJbml0JiYsIFN0cmluZyYpOwogICAgIHN0YXRpYyBG
ZXRjaEJvZHkgbG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KICAgICBzdGF0aWMgRmV0Y2hC
b2R5IHJlYWRhYmxlU3RyZWFtQm9keSgpOwpAQCAtOTUsMTYgKzk1LDE2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIGNvbnN1bWVCbG9iKEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAKLSAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIEZvcm1EYXRhJiBm
b3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdl
dCgpOyB9Ci0gICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJh
eUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNv
bnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIGNvbnN0IEFycmF5QnVmZmVy
VmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxj
b25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgU3RyaW5nJiB0ZXh0
Qm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0
cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7
IH0KLSAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25z
dCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5n
ZXQoKTsgfQorICAgIGNvbnN0IEJsb2ImIGJsb2JCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpn
ZXQ8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpLmdldCgpOyB9CisgICAgRm9ybURhdGEmIGZvcm1E
YXRhQm9keSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7
IH0KKyAgICBjb25zdCBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgY29uc3QgeyByZXR1cm4gc3Rk
OjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVm
ZmVyJiBhcnJheUJ1ZmZlckJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3Qg
QXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3
JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0
IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBTdHJpbmcmIHRleHRCb2R5
KCkgeyByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9CisgICAgY29uc3QgU3RyaW5n
JiB0ZXh0Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQor
ICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpLmdldCgp
OyB9CiAKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0
IEJsb2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3Qg
QXJyYXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47Cisg
ICAgdXNpbmcgRGF0YSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0IEJs
b2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3QgQXJy
YXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAg
RGF0YSBtX2RhdGEgeyBudWxscHRyIH07CiAKICAgICBGZXRjaEJvZHlDb25zdW1lciBtX2NvbnN1
bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gYXBwZW5k
VG9IZWFkZXJNCiAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFk
ZXJzLWZpbGwKIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMsIGNvbnN0IEZldGNoSGVhZGVyczo6SW5pdCYgaGVhZGVyc0luaXQsIEZl
dGNoSGVhZGVyczo6R3VhcmQgZ3VhcmQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpKSB7Ci0gICAgICAgIGF1dG8m
IHNlcXVlbmNlID0gV1RGOjpnZXQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQp
OworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KSkgeworICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IHN0ZDo6Z2V0PFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFk
ZXIgOiBzZXF1ZW5jZSkgewogICAgICAgICAgICAgaWYgKGhlYWRlci5zaXplKCkgIT0gMikKICAg
ICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiSGVhZGVyIHN1Yi1z
ZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMiIH07CkBAIC04Nyw3ICs4Nyw3
IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEgKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGF1dG8mIHJlY29yZCA9IFdURjo6Z2V0PFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CisgICAgICAgIGF1dG8mIHJl
Y29yZCA9IHN0ZDo6Z2V0PFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
PihoZWFkZXJzSW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogcmVjb3JkKSB7CiAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZFRvSGVhZGVyTWFwKGhlYWRlci5rZXksIGhl
YWRlci52YWx1ZSwgaGVhZGVycywgZ3VhcmQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJlc3BvbnNlCiAgICAgfTsKIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+PjsKKyAgICB1c2luZyBJbml0ID0gc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3Ry
aW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PjsKICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPEZldGNoSGVhZGVycz4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFs
PEluaXQ+JiYpOwogCiAgICAgc3RhdGljIFJlZjxGZXRjaEhlYWRlcnM+IGNyZWF0ZShHdWFyZCBn
dWFyZCA9IEd1YXJkOjpOb25lLCBIVFRQSGVhZGVyTWFwJiYgaGVhZGVycyA9IHsgfSkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGZXRjaEhlYWRlcnMgeyBndWFyZCwgV1RGTW92ZShoZWFkZXJzKSB9
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0
LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBFeGNl
cHRpb25PcjxSZWY8RmV0Y2hSZXF1ZXN0Pj4gRmV0Y2hSZXF1CiB7CiAgICAgYXV0byByZXF1ZXN0
ID0gYWRvcHRSZWYoKm5ldyBGZXRjaFJlcXVlc3QoY29udGV4dCwgc3RkOjpudWxsb3B0LCBGZXRj
aEhlYWRlcnM6OmNyZWF0ZShGZXRjaEhlYWRlcnM6Okd1YXJkOjpSZXF1ZXN0KSwgeyB9KSk7CiAK
LSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgewotICAgICAg
ICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKFdURjo6Z2V0PFN0cmluZz4o
aW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGlucHV0KSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxp
emVXaXRoKHN0ZDo6Z2V0PFN0cmluZz4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gcmVx
dWVzdC0+aW5pdGlhbGl6ZVdpdGgoKldURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbnB1
dCksIFdURk1vdmUoaW5pdCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRp
YWxpemVXaXRoKCpzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZNb3Zl
KGluaXQpKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBVUkxTZWFyY2hQYXJhbXM7CiBjbGFzcyBGZXRj
aFJlcXVlc3QgZmluYWwgOiBwdWJsaWMgRmV0Y2hCb2R5T3duZXIgewogcHVibGljOgogICAgIHVz
aW5nIEluaXQgPSBGZXRjaFJlcXVlc3RJbml0OwotICAgIHVzaW5nIEluZm8gPSBWYXJpYW50PFJl
ZlB0cjxGZXRjaFJlcXVlc3Q+LCBTdHJpbmc+OworICAgIHVzaW5nIEluZm8gPSBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPEZldGNoUmVxdWVzdD4sIFN0cmluZz47CiAKICAgICB1c2luZyBDYWNoZSA9IEZl
dGNoT3B0aW9uczo6Q2FjaGU7CiAgICAgdXNpbmcgQ3JlZGVudGlhbHMgPSBGZXRjaE9wdGlvbnM6
OkNyZWRlbnRpYWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250aW51ZVByaQogICAgIGlmIChz
b3VyY2VzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtl
eScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UpKQorICAgIGlmICghc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZSkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3In
cyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CiAKICAgICBhdXRvIGRpcmVjdGlvbiA9IG1f
aW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+SURCQ3Vyc29yKCk7CiAKLSAgICB1
c2luZyBTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4+OworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+PjsKIAogICAgIGNvbnN0IFNvdXJjZSYgc291cmNlKCkg
Y29uc3Q7CiAgICAgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgRXhjZXB0aW9u
T3I8UmVmPElEQk9iamVjdFN0b3JlPj4gSURCRGF0YQogICAgIGlmIChrZXlQYXRoICYmICFpc0lE
QktleVBhdGhWYWxpZChrZXlQYXRoLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9i
amVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBvcHRpb24gaXMgbm90IGEg
dmFsaWQga2V5IHBhdGguIikgfTsKIAotICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0
b0luY3JlbWVudCAmJiAoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZh
bHVlKCkpICYmIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkp
KQorICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0b0luY3JlbWVudCAmJiAoKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpICYmIHN0ZDo6Z2V0PFN0
cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8IHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGF1dG9JbmNyZW1l
bnQgb3B0aW9uIHdhcyBzZXQgYnV0IHRoZSBrZXlQYXRoIG9wdGlvbiB3YXMgZW1wdHkgb3IgYW4g
YXJyYXkuIikgfTsKIAogICAgIC8vIEluc3RhbGwgdGhlIG5ldyBPYmplY3RTdG9yZSBpbnRvIHRo
ZSBjb25uZWN0aW9uJ3MgbWV0YWRhdGEuCkBAIC0xNzEsMTAgKzE3MSwxMCBAQCBFeGNlcHRpb25P
cjxSZWY8SURCVHJhbnNhY3Rpb24+PiBJREJEYXRhCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJh
bnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNs
b3NpbmcuIikgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCi0gICAg
ICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KHN0b3Jl
TmFtZXMpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4o
c3RvcmVOYW1lcykpCisgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVj
dG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKTsKICAgICBlbHNlCi0gICAgICAgIG9iamVjdFN0b3Jl
cy5hcHBlbmQoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSk7CisgICAgICAg
IG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMp
KSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFt
ZXRlciB3YXMgZW1wdHkuIikgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+
PiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIE9iamVjdFN0b3JlUGFyYW1l
dGVycyYmKTsKIAotICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZTdHJpbmdzID0gV1RGOjpWYXJp
YW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OworICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwogICAgIEV4Y2Vw
dGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IHRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzJiYgc3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb25Nb2RlKTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQg
Y2xvc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBpc29sYXRlZENvcHlPZlZhcmlhbnQoY29uc3QgV1RGOjpWYXJpYW50PFZl
Y3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3Vy
Y2UsIFdURjo6VmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0
ZDo6bnVsbHB0cl90PiYgdGFyZ2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBpc29sYXRl
ZENvcHlPZlZhcmlhbnQoY29uc3Qgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVj
dG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3VyY2UsIHN0ZDo6dmFyaWFudDxWZWN0
b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgdGFyZ2V0
KQogewogICAgIHRhcmdldCA9IFZlY3RvcjxUPigpOwotICAgIGF1dG8mIHNvdXJjZVZlY3RvciA9
IFdURjo6Z2V0PFZlY3RvcjxUPj4oc291cmNlKTsKLSAgICBhdXRvJiB0YXJnZXRWZWN0b3IgPSBX
VEY6OmdldDxWZWN0b3I8VD4+KHRhcmdldCk7CisgICAgYXV0byYgc291cmNlVmVjdG9yID0gc3Rk
OjpnZXQ8VmVjdG9yPFQ+Pihzb3VyY2UpOworICAgIGF1dG8mIHRhcmdldFZlY3RvciA9IHN0ZDo6
Z2V0PFZlY3RvcjxUPj4odGFyZ2V0KTsKICAgICB0YXJnZXRWZWN0b3IucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzb3VyY2VWZWN0b3Iuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBz
b3VyY2VWZWN0b3IpCiAgICAgICAgIHRhcmdldFZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZWxlbWVu
dC5pc29sYXRlZENvcHkoKSk7CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0
Ojppc29sYXRlZENvcHkoY29uc3QKIHsKICAgICBkZXN0aW5hdGlvbi5tX3R5cGUgPSBzb3VyY2Uu
bV90eXBlOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+
KHNvdXJjZS5tX3Jlc3VsdHMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6
bnVsbHB0cl90Pihzb3VyY2UubV9yZXN1bHRzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dp
dGNoIChzb3VyY2UubV90eXBlKSB7CkBAIC03MiwyOSArNzIsMjkgQEAgdm9pZCBJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZEtleShJ
REJLZXlEYXRhJiYga2V5KQogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRB
bGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRh
Pj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6
Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsK
IH0KIAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKElEQlZhbHVlJiYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7Ci0g
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1
bHRzKSk7Ci0gICAgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKS5hcHBlbmQo
V1RGTW92ZSh2YWx1ZSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+
KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0KIAogY29uc3QgVmVjdG9yPElE
QktleURhdGE+JiBJREJHZXRBbGxSZXN1bHQ6OmtleXMoKSBjb25zdAogewogICAgIEFTU0VSVCht
X3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIHJl
dHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgQVNTRVJU
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsK
KyAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogfQog
CiBjb25zdCBWZWN0b3I8SURCVmFsdWU+JiBJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7
Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0
cyk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4o
bV9yZXN1bHRzKSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVz
dWx0cyk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkZpbGVQ
YXRocygpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPFN0cmluZz4gSURCR2V0QWxs
UmVzdWx0OjphbGxCbG9iRgogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxU
eXBlOjpWYWx1ZXMpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IHBhdGhTZXQ7Ci0gICAgZm9yIChh
dXRvJiB2YWx1ZSA6IFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpIHsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRz
KSkgewogICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpCiAg
ICAgICAgICAgICBwYXRoU2V0LmFkZChwYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVz
dWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBpc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0JiBzb3VyY2UsIElEQkdl
dEFsbFJlc3VsdCYgZGVzdGluYXRpb24pOwogCiAgICAgSW5kZXhlZERCOjpHZXRBbGxUeXBlIG1f
dHlwZSB7IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyB9OwotICAgIFdURjo6VmFyaWFudDxW
ZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiBtX3Jl
c3VsdHMgeyBudWxscHRyIH07CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwg
VmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+IG1fcmVzdWx0cyB7IG51bGxwdHIgfTsK
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC04NCwxMCArODQsMTAgQEAgdm9pZCBJ
REJHZXRBbGxSZXN1bHQ6OmVuY29kZShFbmNvZGVyJiBlbgogCiAgICAgc3dpdGNoIChtX3Jlc3Vs
dHMuaW5kZXgoKSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIDE6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+Piht
X3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGJyZWFrOwpA
QCAtMTA5LDEyICsxMDksMTIgQEAgYm9vbCBJREJHZXRBbGxSZXN1bHQ6OmRlY29kZShEZWNvZGVy
JiBkZQogICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJlc3VsdC5t
X3Jlc3VsdHMgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJl
c3VsdC5tX3Jlc3VsdHMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSAxOgogICAgICAgICByZXN1bHQubV9yZXN1bHRzID0gVmVjdG9yPElEQlZh
bHVlPigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJW
YWx1ZT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihyZXN1bHQubV9yZXN1bHRzKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBib29sIElEQktleTo6aXNWYWxpZCgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBXVEY6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFs
dWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8SURCS2V5VmVjdG9yPiht
X3ZhbHVlKSkgewogICAgICAgICAgICAgaWYgKCFrZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwOSw4ICsxMDksOCBAQCBpbnQgSURC
S2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0g
V1RGOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJy
YXkgPSBzdGQ6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBvdGhl
ckFycmF5ID0gc3RkOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQgcmVzdWx0ID0gYXJyYXlbaV0tPmNvbXBh
cmUoKm90aGVyQXJyYXlbaV0pKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0x
MjIsMTMgKzEyMiwxMyBAQCBpbnQgSURCS2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRh
QnVmZmVyPihtX3ZhbHVlKSwgV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1f
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZm
ZXI+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAg
cmV0dXJuIC1jb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSks
IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gLWNvZGVQb2ludENv
bXBhcmUoc3RkOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKSwgc3RkOjpnZXQ8U3RyaW5nPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVt
YmVyOiB7Ci0gICAgICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsK
LSAgICAgICAgYXV0byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1
ZSk7CisgICAgICAgIGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAg
ICAgICAgYXV0byBvdGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7
CiAgICAgICAgIHJldHVybiAobnVtYmVyIDwgb3RoZXJOdW1iZXIpID8gLTEgOiAoKG51bWJlciA+
IG90aGVyTnVtYmVyKSA/IDEgOiAwKTsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpJbnZhbGlk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzEgKzExMywzMSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJREJLZXk+PiYgYXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxW
ZWN0b3I8UmVmUHRyPElEQktleT4+PihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGRvdWJsZSBkYXRlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6RGF0ZSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBk
b3VibGUgbnVtYmVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwotICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3Rk
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGludCBj
b21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpIGNvbnN0OwpAQCAtMTcxLDcgKzE3MSw3IEBAIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgSURCS2V5KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7
CiAKICAgICBjb25zdCBLZXlUeXBlIG1fdHlwZTsKLSAgICBWYXJpYW50PFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsK
KyAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+PiwgU3RyaW5nLCBkb3VibGUs
IFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogCiAgICAgY29uc3Qgc2l6ZV90IG1fc2l6
ZUVzdGltYXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgSURCS2V5RGF0YTo6SURCS2V5RGF0YShjb25zdCBJREJLZXkqIGtleQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAgIG1fdmFsdWUgPSBWZWN0
b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGZvciAoYXV0byYga2V5MiA6IGtl
eS0+YXJyYXkoKSkKICAgICAgICAgICAgIGFycmF5LmFwcGVuZChJREJLZXlEYXRhKGtleTIuZ2V0
KCkpKTsKICAgICAgICAgYnJlYWs7CkBAIC04MSwyMCArODEsMjAgQEAgUmVmUHRyPElEQktleT4g
SURCS2V5RGF0YTo6bWF5YmVDcmVhdGVJRAogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJ
bnZhbGlkKCk7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBWZWN0b3I8UmVm
UHRyPElEQktleT4+IGFycmF5OwotICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBXVEY6Omdl
dDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5
RGF0YSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpIHsKICAgICAgICAg
ICAgIGFycmF5LmFwcGVuZChrZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCkpOwogICAgICAgICAg
ICAgQVNTRVJUKGFycmF5Lmxhc3QoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlQXJyYXkoYXJyYXkpOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToK
LSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQmluYXJ5KFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUJpbmFy
eShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5
VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoV1RGOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmlu
ZyhzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVl
KSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoc3RkOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAg
IGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyNSwyMCArMTI1LDIwIEBAIHZvaWQgSURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KGNvbnN0IElEQksKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlw
ZTo6QXJyYXk6IHsKICAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlE
YXRhPigpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvbkFycmF5ID0gV1RGOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihkZXN0aW5hdGlvbi5tX3ZhbHVlKTsKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHNvdXJjZS5tX3ZhbHVlKSkKKyAgICAg
ICAgYXV0byYgZGVzdGluYXRpb25BcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4o
ZGVzdGluYXRpb24ubV92YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+Pihzb3VyY2UubV92YWx1ZSkpCiAgICAgICAgICAgICBkZXN0aW5h
dGlvbkFycmF5LmFwcGVuZChrZXkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KHNvdXJjZS5tX3ZhbHVlKTsKKyAg
ICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVy
Pihzb3VyY2UubV92YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdURjo6Z2V0PFN0cmluZz4oc291
cmNlLm1fdmFsdWUpLmlzb2xhdGVkQ29weSgpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVl
ID0gc3RkOjpnZXQ8U3RyaW5nPihzb3VyY2UubV92YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpO
dW1iZXI6Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxkb3VibGU+KHNv
dXJjZS5tX3ZhbHVlKTsKKyAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PGRv
dWJsZT4oc291cmNlLm1fdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBl
OjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBAIC0xNjAsMjUgKzE2MCwyNSBAQCB2b2lk
IElEQktleURhdGE6OmVuY29kZShLZXllZEVuY29kZXImIGVuCiAgICAgY2FzZSBLZXlUeXBlOjpJ
bnZhbGlkOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAg
ICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7
CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Zh
bHVlKTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVPYmplY3RzKCJhcnJheSIsIGFycmF5LmJlZ2lu
KCksIGFycmF5LmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElEQktleURh
dGEmIGtleSkgewogICAgICAgICAgICAga2V5LmVuY29kZShlbmNvZGVyKTsKICAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAg
ICAgICAgYXV0byogZGF0YSA9IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVl
KS5kYXRhKCk7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICBlbmNvZGVyLmVuY29kZUJvb2woImhhc0Jp
bmFyeSIsICEhZGF0YSk7CiAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVCeXRlcygiYmluYXJ5IiwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+KG1f
dmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBj
YXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm51bWJl
ciIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAgICBlbmNvZGVyLmVuY29kZURv
dWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTIy
MCwxMiArMjIwLDEyIEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2RlKEtleWVkRGVjb2RlciYgZGUK
IAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5cGU6OlN0cmluZykgewogICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVT
dHJpbmcoInN0cmluZyIsIFdURjo6Z2V0PFN0cmluZz4ocmVzdWx0Lm1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+
KHJlc3VsdC5tX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC5tX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyIHx8IHJlc3VsdC5tX3R5cGUgPT0gS2V5VHlwZTo6RGF0ZSkgewogICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IDAuMDsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRG91
YmxlKCJudW1iZXIiLCBXVEY6OmdldDxkb3VibGU+KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihy
ZXN1bHQubV92YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5
cGU6OkJpbmFyeSkgewpAQCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2Rl
KEtleWVkRGVjb2RlciYgZGUKICAgICB9OwogICAgIAogICAgIHJlc3VsdC5tX3ZhbHVlID0gVmVj
dG9yPElEQktleURhdGE+KCk7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJy
YXkiLCBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlG
dW5jdGlvbik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJyYXkiLCBzdGQ6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlGdW5jdGlvbik7
CiB9CiAKIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBj
b25zdApAQCAtMjc3LDggKzI3Nyw4IEBAIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElE
QktleURhdGEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFy
cmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKKyAgICAg
ICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwor
ICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihv
dGhlci5tX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXpl
KCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQg
cmVzdWx0ID0gYXJyYXlbaV0uY29tcGFyZShvdGhlckFycmF5W2ldKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMjkwLDEzICsyOTAsMTMgQEAgaW50IElEQktleURhdGE6OmNv
bXBhcmUoY29uc3QgSURCS2V5RGF0YQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgY2Fz
ZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShX
VEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIFdURjo6Z2V0PFRocmVhZFNh
ZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBjb21wYXJlQmlu
YXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0ZDo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlU
eXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0
cmluZz4obV92YWx1ZSksIFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSkpOworICAgICAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpLCBzdGQ6
OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAg
ICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgYXV0byBudW1iZXIgPSBXVEY6Omdl
dDxkb3VibGU+KG1fdmFsdWUpOwotICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gV1RGOjpnZXQ8
ZG91YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byBudW1iZXIgPSBzdGQ6OmdldDxk
b3VibGU+KG1fdmFsdWUpOworICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gc3RkOjpnZXQ8ZG91
YmxlPihvdGhlci5tX3ZhbHVlKTsKIAogICAgICAgICBpZiAobnVtYmVyID09IG90aGVyTnVtYmVy
KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMjUsNyArMzI1LDcgQEAgU3RyaW5nIElEQktl
eURhdGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjxhcnJheT4gLSB7ICIpOwotICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXJyYXlbaV0ubG9nZ2luZ1N0cmluZygpKTsKICAgICAgICAgICAgIGlmIChpIDwgYXJyYXkuc2l6
ZSgpIC0gMSkKQEAgLTMzOSw3ICszMzksNyBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0
cmluZygpIGNvbnN0CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIjxiaW5hcnk+IC0gIik7CiAKLSAgICAgICAgYXV0byogZGF0YSA9IFdURjo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgIGF1dG8q
IGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwog
ICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIobnVsbCki
KTsKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTM1NywxMiAr
MzU3LDEyIEBAIFN0cmluZyBJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXN1
bHQgPSAiPHN0cmluZz4gLSAiICsgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAg
cmVzdWx0ID0gIjxzdHJpbmc+IC0gIiArIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiPG51bWJlcj4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxudW1iZXI+IC0gJWYiLCBzdGQ6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICAgICAgcmV0
dXJuICI8bWF4aW11bT4iOwogICAgIGNhc2UgS2V5VHlwZTo6TWluOgpAQCAtNDQyLDEzICs0NDIs
MTMgQEAgYm9vbCBJREJLZXlEYXRhOjpvcGVyYXRvcj09KGNvbnN0IElEQktleQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKICAgICBjYXNlIEtleVR5cGU6
OkRhdGU6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpID09IFdURjo6
Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3Vi
bGU+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CiAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fdmFs
dWUpID09IFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBz
dGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1
ZSk7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihv
dGhlci5tX3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG90aGVyLm1fdmFsdWUpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAg
ICAgICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAg
ICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goV1RGOjpnZXQ8U3RyaW5n
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpo
YXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IFdU
Rjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgICAg
ICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRh
dGEoKTsKICAgICAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgICAgICBoYXNoQ29kZXMu
YXBwZW5kKDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJy
YXk6Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4obV92YWx1ZSkpCisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCiAgICAgICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChrZXkuaGFzaCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTks
MzggKzE1OSwzOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3Ry
aW5nPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgZGF0ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkRhdGUpOwotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIG51bWJlcigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6Ok51bWJlcik7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
YmluYXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6
QmluYXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGFycmF5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlE
YXRhJiBzb3VyY2UsIElEQktleURhdGEmIGRlc3RpbmF0aW9uKTsKIAogICAgIEtleVR5cGUgbV90
eXBlOwotICAgIFZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhy
ZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJL
ZXlEYXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwog
CiAgICAgYm9vbCBtX2lzTnVsbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGVsZXRlZFZhbHVl
IHsgZmFsc2UgfTsKQEAgLTI0MiwxNyArMjQyLDE3IEBAIHZvaWQgSURCS2V5RGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
S2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxUaHJlYWRT
YWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlw
ZTo6U3RyaW5nOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVy
OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpAQCAtMjc2LDIzICsyNzYsMjMgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcgogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5Ogog
ICAgICAgICBrZXlEYXRhLm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGtleURhdGEu
bV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgogICAgICAgICBrZXlE
YXRhLm1fdmFsdWUgPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihrZXlEYXRhLm1fdmFsdWUp
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgogICAgICAgICBrZXlEYXRhLm1f
dmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxT
dHJpbmc+KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0
ZDo6Z2V0PFN0cmluZz4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtl
eVR5cGU6Ok51bWJlcjoKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gMC4wOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVlKSkpCisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8ZG91YmxlPihrZXlEYXRhLm1fdmFs
dWUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBp
c0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQYXRoJgogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBh
dGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiBJREJL
ZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQpAQCAtMjIwLDcg
KzIyMCw3IEBAIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgKICAgICAg
ICAgcmV0dXJuIHZlY3RvckNvcHk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2
aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRo
KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTI0NCw3ICsyNDQsNyBAQCBTdHJpbmcgbG9nZ2lu
Z1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwCiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBJREJLZXlQYXRoID0gV1RGOjpWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0
cmluZz4+OwordXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+PjsKIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYpOwogCiBl
bnVtIGNsYXNzIElEQktleVBhdGhQYXJzZUVycm9yIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDIy
MDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJ
REJJbmRleD4+IElEQk9iamVjdFN0b3IKICAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCi0gICAgaWYgKHBhcmFtZXRlcnMubXVs
dGlFbnRyeSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRo
KSkKKyAgICBpZiAocGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVh
dGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgd2FzIGFu
IGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKSB9OwogCiAgICAgLy8g
SW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0U291cmNlKElEQkN1cnNvciYgY3UKIAogICAgIG1fc291cmNlID0gU291cmNlIHsg
JmN1cnNvciB9OwogICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKSk7Ci0gICAgICAgIFdU
Rjo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0
c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgc3Rk
OjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRz
dGFuZGluZ1JlcXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDcsOSArMjA3LDkgQEAg
dWludDY0X3QgSURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZAogICAgICAgICByZXR1cm4g
MDsKIAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCi0gICAgICAg
IFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4g
b2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKTsgfSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+Jikg
eyByZXR1cm4gMDsgfQorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYg
b2JqZWN0U3RvcmUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRl
bnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgp
IC0+IHVpbnQ2NF90IHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIC0+IHVpbnQ2NF90
IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cgogewogICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZS52
YWx1ZSgpKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQklu
ZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOwogCiAgICAgcmV0dXJuIG1fcmVxdWVzdGVkSW5kZXhS
ZWNvcmRUeXBlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAgdXNpbmcgUmVz
dWx0ID0gVmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj47CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+PjsKICAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJlc3VsdD4+IHJlc3Vs
dCgpIGNvbnN0OwogCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CisgICAgdXNpbmcg
U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4sIFJlZlB0cjxJREJDdXJzb3I+PjsKICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJj
ZT4mIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKICAgICBFeGNlcHRpb25P
cjxET01FcnJvcio+IGVycm9yKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5UGF0aAogICAgICAgICAgICAg
ICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFs
dWUoKSk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBl
OjpOdWxsKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgU3RyaW5nIE1lZGlhQ29udHJv
bHNIb3N0OjpkaXNwbGF5TmFtZUZvcgogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbJnBhZ2VdKGF1dG8mIHRyYWNr
KSB7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykgewogICAgICAg
ICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5kaXNwbGF5TmFtZUZv
clRyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9LCB0cmFjay52YWx1ZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBzb3J0ZWRU
cmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QmKTsKICAgICBWZWN0b3I8UmVmUHRyPEF1ZGlv
VHJhY2s+PiBzb3J0ZWRUcmFja0xpc3RGb3JNZW51KEF1ZGlvVHJhY2tMaXN0Jik7CiAKLSAgICB1
c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gV1RGOjpWYXJpYW50PFJlZlB0cjxUZXh0VHJhY2s+LCBS
ZWZQdHI8QXVkaW9UcmFjaz4+OworICAgIHVzaW5nIFRleHRPckF1ZGlvVHJhY2sgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPFRleHRUcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPj47CiAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0T3JBdWRpb1RyYWNr
PiYpOwogCiAgICAgVGV4dFRyYWNrKiBjYXB0aW9uTWVudU9mZkl0ZW0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBEb2N1bWVu
dCogTWVkaWFEZXZpY2VzOjpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCi1zdGF0aWMgTWVkaWFDb25z
dHJhaW50cyBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IFZhcmlhbnQ8Ym9vbCwgTWVkaWFU
cmFja0NvbnN0cmFpbnRzPiYgY29uc3RyYWludHMpCitzdGF0aWMgTWVkaWFDb25zdHJhaW50cyBj
cmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNr
Q29uc3RyYWludHM+JiBjb25zdHJhaW50cykKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihj
b25zdHJhaW50cywKICAgICAgICAgWyZdIChib29sIGlzVmFsaWQpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURl
dmljZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgRW51bWVyYXRlRGV2aWNlc1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMU2VxdWVu
Y2U8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlSW5mbz4+PjsKIAogICAgIHN0cnVjdCBTdHJlYW1D
b25zdHJhaW50cyB7Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRz
PiB2aWRlbzsKLSAgICAgICAgVmFyaWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1
ZGlvOworICAgICAgICBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiB2
aWRlbzsKKyAgICAgICAgc3RkOjp2YXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4g
YXVkaW87CiAgICAgfTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBnZXRVc2VyTWVkaWEoY29uc3Qg
U3RyZWFtQ29uc3RyYWludHMmLCBQcm9taXNlJiYpIGNvbnN0OwogICAgIHZvaWQgZW51bWVyYXRl
RGV2aWNlcyhFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29u
c3RyYWludHMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OCArNDIsOCBAQCBzdHJ1Y3QgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnMgewogfTsKIAogc3Ry
dWN0IENvbnN0cmFpbkRPTVN0cmluZ1BhcmFtZXRlcnMgewotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7Ci0gICAgc3RkOjpvcHRpb25hbDxW
YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBpZGVhbDsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGlkZWFsOwogfTsK
IAogc3RydWN0IENvbnN0cmFpbkRvdWJsZVJhbmdlIDogRG91YmxlUmFuZ2UgewpAQCAtNTYsMTAg
KzU2LDEwIEBAIHN0cnVjdCBDb25zdHJhaW5Mb25nUmFuZ2UgOiBMb25nUmFuZ2UgewogICAgIHN0
ZDo6b3B0aW9uYWw8aW50PiBpZGVhbDsKIH07CiAKLXVzaW5nIENvbnN0cmFpbkJvb2xlYW4gPSBW
YXJpYW50PGJvb2wsIENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzPjsKLXVzaW5nIENvbnN0cmFp
bkRPTVN0cmluZyA9IFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3RyYWluRE9N
U3RyaW5nUGFyYW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5Eb3VibGUgPSBWYXJpYW50PGRvdWJs
ZSwgQ29uc3RyYWluRG91YmxlUmFuZ2U+OwotdXNpbmcgQ29uc3RyYWluTG9uZyA9IFZhcmlhbnQ8
aW50LCBDb25zdHJhaW5Mb25nUmFuZ2U+OwordXNpbmcgQ29uc3RyYWluQm9vbGVhbiA9IHN0ZDo6
dmFyaWFudDxib29sLCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJh
aW5ET01TdHJpbmcgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3Ry
YWluRE9NU3RyaW5nUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJhaW5Eb3VibGUgPSBzdGQ6OnZh
cmlhbnQ8ZG91YmxlLCBDb25zdHJhaW5Eb3VibGVSYW5nZT47Cit1c2luZyBDb25zdHJhaW5Mb25n
ID0gc3RkOjp2YXJpYW50PGludCwgQ29uc3RyYWluTG9uZ1JhbmdlPjsKIAogc3RydWN0IE1lZGlh
VHJhY2tDb25zdHJhaW50U2V0IHsKICAgICBzdGQ6Om9wdGlvbmFsPENvbnN0cmFpbkxvbmc+IHdp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0ljZVNlcnZlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0ljZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBSVENJY2VTZXJ2ZXIgewotICAgIFZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKKyAgICBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKICAgICBTdHJpbmcgY3JlZGVudGlhbDsKICAgICBT
dHJpbmcgdXNlcm5hbWU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOCArMTg0LDggQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gUlRDUGVlckNvbm5lY3Rpb246OnJlbQogCiBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNj
ZWl2ZXI+PiBSVENQZWVyQ29ubmVjdGlvbjo6YWRkVHJhbnNjZWl2ZXIoQWRkVHJhbnNjZWl2ZXJU
cmFja09yS2luZCYmIHdpdGhUcmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0
KQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkg
ewotICAgICAgICBjb25zdCBTdHJpbmcmIGtpbmQgPSBXVEY6OmdldDxTdHJpbmc+KHdpdGhUcmFj
ayk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih3aXRoVHJhY2spKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYga2luZCA9IHN0ZDo6Z2V0PFN0cmluZz4od2l0aFRyYWNr
KTsKICAgICAgICAgaWYgKGtpbmQgIT0gImF1ZGlvIiAmJiBraW5kICE9ICJ2aWRlbyIpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBSVENQCiAgICAgICAgIHJl
dHVybiBjb21wbGV0ZUFkZFRyYW5zY2VpdmVyKFdURk1vdmUoc2VuZGVyKSwgaW5pdCwgY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpLCBraW5kKTsKICAgICB9CiAKLSAgICBSZWY8TWVkaWFTdHJl
YW1UcmFjaz4gdHJhY2sgPSBXVEY6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhU
cmFjaykucmVsZWFzZU5vbk51bGwoKTsKKyAgICBSZWY8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sg
PSBzdGQ6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhUcmFjaykucmVsZWFzZU5v
bk51bGwoKTsKICAgICBjb25zdCBTdHJpbmcmIHRyYWNrSWQgPSB0cmFjay0+aWQoKTsKICAgICBj
b25zdCBTdHJpbmcmIHRyYWNrS2luZCA9IHRyYWNrLT5raW5kKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gYWRkVHJhY2soUmVm
PE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PE1lZGlhU3RyZWFtPj4mKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVUcmFjayhSVENS
dHBTZW5kZXImKTsKIAotICAgIHVzaW5nIEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQgPSBWYXJp
YW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiwgU3RyaW5nPjsKKyAgICB1c2luZyBBZGRUcmFu
c2NlaXZlclRyYWNrT3JLaW5kID0gc3RkOjp2YXJpYW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
PiwgU3RyaW5nPjsKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRU
cmFuc2NlaXZlcihBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kJiYsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYpOwogCiAgICAgLy8gNi4xIFBlZXItdG8tcGVlciBkYXRhIEFQSQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5o
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTAgQEAgcHVibGlj
OgogICAgIFJlc3VsdCBnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiwg
U3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYXJzaW5nUmVz
dWx0IHsKLSAgICAgICAgVmFyaWFudDxJY2VDYW5kaWRhdGUsIFJlc3VsdD4gcmVzdWx0OworICAg
ICAgICBzdGQ6OnZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKIAotICAgICAg
ICBSZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8
U0RQUHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBj
YW5kaWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KKyAg
ICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6IHN0ZDo6
Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9CisgICAgICAgIEljZUNhbmRpZGF0
ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gc3RkOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9
CiAgICAgfTsKICAgICBQYXJzaW5nUmVzdWx0IHBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJp
bmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9JRExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMSArMjI4LDExIEBAIHN0cnVjdCBJRExFcnJv
ciA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH0KIHN0cnVjdCBJRExET01FeGNlcHRpb24gOiBJRExV
bnN1cHBvcnRlZFR5cGUgeyB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUcz4KLXN0cnVjdCBJ
RExVbmlvbiA6IElETFR5cGU8VmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBl
Li4uPj4geworc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUg
VHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+IHsKICAgICB1c2luZyBUeXBlTGlzdCA9IGJyaWdh
bmQ6Omxpc3Q8VHMuLi4+OwogCi0gICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZhcmlh
bnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwotICAgIHVzaW5nIE51bGxh
YmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDx0eXBlbmFtZSBU
czo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4mOworICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBj
b25zdCBzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwor
ICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8c3Rk
Ojp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiY7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMQnVmZmVyU291cmNlIDogSURMV3JhcHBlcjxU
PiB7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCdWZmZXJTb3VyY2UgewogcHVibGljOgotICAgIHVzaW5nIFZhcmlhbnRUeXBl
ID0gV1RGOjpWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyPj47CisgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PjsKIAog
ICAgIEJ1ZmZlclNvdXJjZSgpIHsgfQogICAgIEJ1ZmZlclNvdXJjZShWYXJpYW50VHlwZSYmIHZh
cmlhbnQpCkBAIC00NSwxNCArNDUsMTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgdWludDhfdCog
ZGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBi
dWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10o
YXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKTsKICAgICAgICAgfSwgbV92
YXJpYW50KTsKICAgICB9CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXplX3QgewogICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICB9LCBtX3ZhcmlhbnQp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJU
eXBlcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9D
YWxsVHJhY2VyVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmFyaWFudDwKK3R5cGVkZWYgc3RkOjp2YXJpYW50
PAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6SW1hZ2VTbW9vdGhpbmdRdWFsaXR5LAog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6V2luZGluZ1J1bGUsCiAgICAgRE9NTWF0cml4
SW5pdCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDEx
ICsyNzAsMTEgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YQogewog
ICAgIExPRyhJbmRleGVkREIsICJpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOworICAgIEFT
U0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVy
cm9yOwotICAgIElEQlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQ
YXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5n
PihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09
IElEQktleVBhdGhQYXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmIChrZXlQYXRoRWxlbWVudHMu
aXNFbXB0eSgpKQpAQCAtMjk3LDggKzI5Nyw4IEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKEV4ZWNTdGEKIAogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFsdWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKSB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0g
V1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkgeworICAgICAgICBhdXRvJiBhcnJh
eSA9IHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKICAgICAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+PiByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFycmF5LnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogYXJyYXkpIHsK
QEAgLTMxMCwxNyArMzEwLDE3IEBAIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJv
bVNjcmkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoV1RGTW92ZShyZXN1bHQp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKKyAg
ICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4
ZWMsIHZhbHVlLCBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKIH0KIAogYm9vbCBjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiBz
Y3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCi0gICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CisgICAgQVNTRVJUKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAgIElE
QlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMs
IGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKQEAg
LTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgVmVjdG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhB
CiAgICAgICAgIHJldHVybiBrZXlzOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQo
dmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3Is
IGluZm8ua2V5UGF0aCgpKTsKIH0KIAogdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhl
Y1N0YXRlJiBleGVjLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEpTVmFsdWUgdmFsdWUsIElu
ZGV4S2V5JiBvdXRLZXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw3ICsz
ODUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKLSAgICB1c2luZyBTZXF1ZW5jZSA9
IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlh
bnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisgICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgc3RkOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQogICAgIHsK
QEAgLTM5Niw3ICszOTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252
ZXJ0CiAgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6dmFs
dWUgPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDY2ICs2Niw2NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIGNvbnZl
cnRUb0pTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihh
bnksCi0gICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgeworICAgICAgICBbXSAoc3RkOjpudWxs
cHRyX3QpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAg
ICB9LAotICAgICAgICBbXSAoYm9vbCB2YWx1ZSkgeworICAgICAgICBbXSAoYm9vbCB2YWx1ZSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhbHVlKTsKICAgICAg
ICAgfSwKLSAgICAgICAgW10gKGludCB2YWx1ZSkgeworICAgICAgICBbXSAoaW50IHZhbHVlKSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFtdICh1bnNpZ25lZCB2YWx1ZSkgeworICAgICAgICBbXSAodW5zaWduZWQg
dmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsK
ICAgICAgICAgfSwKLSAgICAgICAgW10gKGxvbmcgbG9uZyB2YWx1ZSkgeworICAgICAgICBbXSAo
bG9uZyBsb25nIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChmbG9hdCB2YWx1ZSkgeworICAgICAg
ICBbXSAoZmxvYXQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVl
KSB7CisgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIHsKKyAgICAgICAg
WyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxP
YmplY3QsIGxpc3QpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9h
dDMyQXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJy
YXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChj
b25zdCBSZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPEludDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAg
ICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDhBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDMyQXJyYXk+JiBhcnJheSkg
eworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50MzJBcnJheT4mIGFycmF5KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJy
YXkuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1
ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1ZmZlcj4m
IGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25z
dCBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4mIHByb2dy
YW0pIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xQcm9ncmFtPiYgcHJvZ3JhbSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHByb2dyYW0uZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVGV4dHVyZT4mIHRleHR1cmUpIHsK
KyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xUZXh0dXJlPiYgdGV4dHVyZSkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHRl
eHR1cmUuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTPiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwog
ICAgICAgICB9CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgLAotICAgICAgICBbJl0gKGNv
bnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0PiYgYXJyYXkpIHsKKyAgICAgICAgWyZd
IChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdD4mIGFycmF5KSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXku
Z2V0KCkpOwogICAgICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtNzI1MSw3ICs3MjUxLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbFRyYWNlclBh
cmFtZXRlcigpCiAgICAgbXkgKCRuYW1lLCAkdHlwZSwgJGluZGVudCkgPSBAXzsKIAogICAgIGlm
ICgkdHlwZS0+aXNVbmlvbikgewotICAgICAgICByZXR1cm4gJGluZGVudCAuICIgICAgV1RGOjp2
aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1
ZSk7IH0sICIgLiAkbmFtZSAuICIpOyI7CisgICAgICAgIHJldHVybiAkaW5kZW50IC4gIiAgICBz
dGQ6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5k
KHZhbHVlKTsgfSwgIiAuICRuYW1lIC4gIik7IjsKICAgICB9CiAKICAgICByZXR1cm4gJGluZGVu
dCAuICIgICAgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKCIgLiAkbmFtZSAuICIpOyI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMjA5
MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDggKzUwLDggQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIC8v
IERhdGEgaXMgbXV0YWJsZSwgc28gYXN5bmMgb3BlcmF0aW9ucyBzaG91bGQgY29weSBpdCBmaXJz
dC4KIHVzaW5nIENyeXB0b09wZXJhdGlvbkRhdGEgPSBzdGQ6OnBhaXI8Y29uc3QgdWludDhfdCos
IHNpemVfdD47CiAKLXVzaW5nIEtleURhdGEgPSBWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgSnNv
bldlYktleT47Ci11c2luZyBLZXlPcktleVBhaXIgPSBWYXJpYW50PFJlZlB0cjxDcnlwdG9LZXk+
LCBDcnlwdG9LZXlQYWlyPjsKK3VzaW5nIEtleURhdGEgPSBzdGQ6OnZhcmlhbnQ8VmVjdG9yPHVp
bnQ4X3Q+LCBKc29uV2ViS2V5PjsKK3VzaW5nIEtleU9yS2V5UGFpciA9IHN0ZDo6dmFyaWFudDxS
ZWZQdHI8Q3J5cHRvS2V5PiwgQ3J5cHRvS2V5UGFpcj47CiAKIGNsYXNzIENyeXB0b0FsZ29yaXRo
bSA6IHB1YmxpYyBSZWZDb3VudGVkPENyeXB0b0FsZ29yaXRobT4gewogcHVibGljOgpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0tleS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBA
IHByaXZhdGU6CiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q3J5cHRvS2V5PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENyeXB0b0tleVR5cGU7Ci0g
ICAgdXNpbmcgQWxnb3JpdGhtVmFyaWFudCA9IFZhcmlhbnQ8Q3J5cHRvS2V5QWxnb3JpdGhtLCBD
cnlwdG9BZXNLZXlBbGdvcml0aG0sIENyeXB0b0VjS2V5QWxnb3JpdGhtLCBDcnlwdG9IbWFjS2V5
QWxnb3JpdGhtLCBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0sIENyeXB0b1JzYUtleUFsZ29y
aXRobT47CisgICAgdXNpbmcgQWxnb3JpdGhtVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxDcnlwdG9L
ZXlBbGdvcml0aG0sIENyeXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0s
IENyeXB0b0htYWNLZXlBbGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5
cHRvUnNhS2V5QWxnb3JpdGhtPjsKIAogICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyLCBUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAg
ICAgdmlydHVhbCB+Q3J5cHRvS2V5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3Vi
dGxlQ3J5cHRvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxl
Q3J5cHRvLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1
YnRsZUNyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE0ICs5NiwxNCBAQCBzdGF0aWMg
RXhjZXB0aW9uT3I8c3RkOjp1bmlxdWVfcHRyPENyeXB0CiAgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7Cisg
ICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVy
KSkgewogICAgICAgICBhdXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNvbnN0
cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwg
V1RGOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQYXJh
bXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpz
U3RyaW5nKCZzdGF0ZSwgc3RkOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOwog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRl
cnMoc3RhdGUsIG5ld1BhcmFtcywgb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBhdXRvJiB2YWx1
ZSA9IFdURjo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlm
aWVyKTsKKyAgICBhdXRvJiB2YWx1ZSA9IHN0ZDo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKIAogICAgIGF1dG8gcGFyYW1zID0gY29udmVydERp
Y3Rpb25hcnk8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oc3RhdGUsIHZhbHVlLmdldCgpKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2Vw
dGlvbkVycm9yIH0pOwpAQCAtODY3LDEyICs4NjcsMTIgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OmV4
cG9ydEtleShLZXlGb3JtYXQgZgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0
OjpTcGtpOgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAg
ICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UmF3OiB7Ci0gICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4mIHJhd0tleSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsK
KyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgcmF3S2V5ID0gc3RkOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihrZXkpOwogICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIo
V1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCByYXdLZXkuZGF0YSgpLCByYXdLZXkuc2l6ZSgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0
bzo6S2V5Rm9ybWF0OjpKd2s6Ci0gICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8
SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5Pihr
ZXkpKSk7CisgICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFy
eTxKc29uV2ViS2V5Pj4oV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC05MzYsMTEgKzkzNiwxMSBAQCB2b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6OkV4
ZWNTdGF0CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAg
ICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBjYXNlIFN1
YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgICAgICBieXRlcyA9IFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsKKyAgICAgICAgICAgIGJ5dGVzID0gc3RkOjpnZXQ8VmVj
dG9yPHVpbnQ4X3Q+PihrZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3Vi
dGxlQ3J5cHRvOjpLZXlGb3JtYXQ6Okp3azogewogICAgICAgICAgICAgLy8gRklYTUU6IENvbnZl
cnRpbmcgdG8gSlMganVzdCB0byBKU09OLVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4gV2Ug
c2hvdWxkIGZpbmQgYSB3YXkgdG8gZ28gZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpTT04u
Ci0gICAgICAgICAgICBhdXRvIGp3ayA9IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4o
Kihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNlLT5nbG9i
YWxPYmplY3QoKSksIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAgICAg
ICAgICAgYXV0byBqd2sgPSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJvbWlz
ZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCkpLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKICAgICAgICAgICAgIFN0
cmluZyBqd2tTdHJpbmcgPSBKU09OU3RyaW5naWZ5KHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5n
bG9iYWxFeGVjKCksIGp3aywgMCk7CiAgICAgICAgICAgICBDU3RyaW5nIGp3a1V0ZjhTdHJpbmcg
PSBqd2tTdHJpbmcudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgICAgIGJ5dGVzLmFw
cGVuZChqd2tVdGY4U3RyaW5nLmRhdGEoKSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDggKzU4LDggQEAgcHVibGljOgogCiAgICAgdXNpbmcgS2V5Rm9ybWF0ID0gQ3J5cHRvS2V5Rm9y
bWF0OwogCi0gICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz47Ci0gICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQgPSBW
YXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyPiwgSnNvbldlYktleT47CisgICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IHN0ZDo6
dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBL
ZXlEYXRhVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIEpzb25XZWJLZXk+OwogCiAgICAgdm9pZCBlbmNy
eXB0KEpTQzo6RXhlY1N0YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBC
dWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIGRl
Y3J5cHQoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYs
IEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQy5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRL
ZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1h
dCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RG
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlm
aWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3
azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0Nh
bGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENy
eXB0b0tleUFFUz4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRS
YXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0
b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8g
Y2hlY2tBbGdDYWxsYmFjayA9IFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAt
PiBib29sIHsKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6
OmltcG9ydEtleShDCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH07Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMs
IFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DVFIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RS
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3Jp
dGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3Ogot
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXco
cGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+
KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0g
W10oc2l6ZV90IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTI4LDcg
KzEyOCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMs
IFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0Nh
bGxiYWNrKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTS5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRL
ZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1h
dCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RG
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlm
aWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3
azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBj
b25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0Nh
bGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19LVy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEwICs5MCwxMCBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KENyCiAgICAgUmVmUHRyPENyeXB0
b0tleUFFUz4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXco
cGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+
KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXpl
X3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CisgICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
c3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXpl
X3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CiAgICAgICAgICAgICBzd2l0
Y2ggKGxlbmd0aCkgewogICAgICAgICAgICAgY2FzZSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTI4
OgogICAgICAgICAgICAgICAgIHJldHVybiBhbGcuaXNOdWxsKCkgfHwgYWxnID09IEFMRzEyODsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVD
REguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUVDREguY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5
KENyeXAKICAgICBSZWZQdHI8Q3J5cHRvS2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1h
dCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktl
eSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNv
bldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAg
ICAgICBib29sIGlzVXNhZ2VzQWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBpZiAoIWtleS5kLmlz
TnVsbCgpKSB7CkBAIC0xNTAsMjEgKzE1MCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6
OmltcG9ydEtleShDcnlwCiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJv
cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJz
Lm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4
dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0
UmF3KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgogICAg
ICAgICBpZiAodXNhZ2VzKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1l
dGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6Omlt
cG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZl
LCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4
OgogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUtl
eSkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykgJiYgKHVzYWdlcyBeIChD
cnlwdG9LZXlVc2FnZURlcml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykpKSB7CiAg
ICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBr
Y3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RG
TW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRl
cnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUVDRFNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobUVDRFNBOjppbXBvcnRLZXkoQ3J5CiAgICAgUmVmUHRyPENyeXB0
b0tleUVDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tl
eUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShz
dGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFr
ZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5k
LmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTI0LDIxICsxMjQsMjEg
QEAgdm9pZCBDcnlwdG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgICAgICAgICAg
ZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0
ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwg
ZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6U3BraToKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4g
Q3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
eW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVj
UGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1l
ZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6
OlBrY3M4OgogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNp
Z24pKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6
OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRD
dXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChl
Y1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUo
c3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhL
REYuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhLREY6OmltcG9ydEtleShDcnlwCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0
ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCB1c2FnZXMpKTsKKyAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1
c2FnZXMpKTsKIH0KIAogRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1IS0RGOjpn
ZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1ITUFDLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3
ICsxMTUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShDcnlwCiAgICAg
UmVmUHRyPENyeXB0b0tleUhNQUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAg
IGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhN
QUM6OmltcG9ydFJhdyhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
SE1BQzo6aW1wb3J0UmF3KGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1Bh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9
IFtdKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+
IGJvb2wgewpAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1w
b3J0S2V5KENyeXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQ
YXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZp
ZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1h
Y1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RG
Mi5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleShDcgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgdXNhZ2VzKSk7CisgICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVy
cy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwg
dXNhZ2VzKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtUEJLREYy
OjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NT
MV92MV81LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGht
cy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNf
UEtDUzFfdjFfNS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgUmVmUHRyPENyeXB0b0tleVJT
QT4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNv
bldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpn
ZXQ8SnNvbldlYktleT4oZGF0YSkpOwogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlz
TnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlY3J5cHQpKSB8fCAoa2V5LmQuaXNO
dWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRW5jcnlwdCkpKSkgewogICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6
aW0KICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6Omlt
cG9ydFNwa2kocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdU
Rjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50
aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlS
U0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1Mx
X3YxXzUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJl
c3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpK
d2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJL
ZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVs
bCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxsKCkg
JiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7CiAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmll
ciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8
dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCShyZXZpc2lvbiAy
MjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FfT0FFUC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgUmVmUHRyPENyeXB0b0tleVJT
QT4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNv
bldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpn
ZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGJvb2wgaXNVc2FnZXNBbGxvd2VkID0g
ZmFsc2U7CiAgICAgICAgIGlmICgha2V5LmQuaXNOdWxsKCkpIHsKQEAgLTE3Myw3ICsxNzMsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2
PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRp
ZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE4Miw3ICsx
ODIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2Iv
MTY1NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1SU0FfUFNTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0
b0tleVJTQT4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpn
ZXQ8SnNvbldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUo
c3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgh
a2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXku
ZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAg
ICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2
PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRp
ZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE1Miw3ICsx
NTIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2Iv
MTY1NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9w
YXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUVjZHNhUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMu
aAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMv
Q3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFt
cyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAg
ICAvLyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAg
ICBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAg
c3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAg
ICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIENsYXNz
IHBhcmFtZXRlcnNDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENsYXNzOjpFY2RzYVBhcmFt
czsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3Jp
dGhtSGtkZlBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJh
bWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhrZGZQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFt
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIENyeXB0b0FsZ29yaXRobUhrZGZQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxn
b3JpdGhtUGFyYW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdp
bmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6
OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXIgaGFzaElkZW50aWZpZXI7CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgQnVmZmVyU291
cmNlIGluZm87CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9B
bGdvcml0aG1IbWFjS2V5UGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oCShyZXZpc2lvbiAy
MjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1IbWFjS2V5UGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcyBmaW5hbCA6
IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50
PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJp
YW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBzdGQ6Om9wdGlvbmFsPHNp
emVfdD4gbGVuZ3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9D
cnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtUGJrZGYyUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVi
bGljOgogICAgIEJ1ZmZlclNvdXJjZSBzYWx0OwogICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9u
czsKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmll
ci4KLSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7
CisgICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhh
c2g7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAg
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgc2FsdFZlY3RvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9B
bGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1w
b3J0UGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zIGZpbmFs
IDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJ
WE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlh
bnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZh
cmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1l
dGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6OlJzYUhhc2hlZEltcG9ydFBh
cmFtczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1z
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtleUdlblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRo
bVJzYUhhc2hlZEtleUdlblBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Sc2FL
ZXlHZW5QYXJhbXMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhh
c2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09i
amVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhh
c2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gQ2xhc3M6OlJzYUhhc2hlZEtleUdlblBhcmFtczsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyBwYXJzZUphdmFTY3Jp
cHRDUwogCiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IENTU1N0
eWxlRGVjbGFyYXRpb246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFt
ZSkKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQog
ewogICAgIGF1dG8gcHJvcGVydHlJbmZvID0gcGFyc2VKYXZhU2NyaXB0Q1NTUHJvcGVydHlOYW1l
KHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKQEAgLTI1
OSwxNyArMjU5LDE3IEBAIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IEMK
ICAgICBhdXRvIHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SW5m
by5wcm9wZXJ0eUlEKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIC8vIElmIHRoZSBwcm9w
ZXJ0eSBpcyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAoc3VjaCBhcyAicGFkZGluZyIpLCBpdCBjYW4g
b25seSBiZSBhY2Nlc3NlZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgotICAgICAgICByZXR1cm4g
VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVy
dHlJbmZvLnByb3BlcnR5SUQpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5n
LCBkb3VibGU+IHsgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0
eUlEKSB9OwogICAgIH0KICAgICAKICAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVsT3JQb3NQ
cmVmaXggJiYgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKICAgICAgICAgLy8gQ2Fs
bCB0aGlzIHZlcnNpb24gb2YgdGhlIGdldHRlciBzbyB0aGF0LCBlLmcuLCBwaXhlbFRvcCByZXR1
cm5zIHRvcCBhcyBhIG51bWJlcgogICAgICAgICAvLyBpbiBwaXhlbCB1bml0cyBhbmQgcG9zVG9w
IHNob3VsZCBkb2VzIHRoZSBzYW1lIF9pZl8gdGhpcyBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4K
ICAgICAgICAgLy8gRklYTUU6IElmIG5vdCBhIHBvc2l0aW9uZWQgZWxlbWVudCwgTVNJRSBkb2N1
bWVudGF0aW9uIHNheXMgcG9zVG9wIHNob3VsZCByZXR1cm4gMDsgdGhpcyBydWxlIGlzIG5vdCBp
bXBsZW1lbnRlZC4KLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYKSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91
YmxlPiB7IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmZsb2F0VmFsdWUoQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4gVmFyaWFudDxT
dHJpbmcsIGRvdWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CisgICAgcmV0dXJuIHN0ZDo6dmFy
aWFudDxTdHJpbmcsIGRvdWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IENTU1N0eWxlRGVjbGFyYXRpb246OnNldE5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIHByb3BlcnR5TmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRl
ZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NT
dHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQog
CiAgICAgLy8gQmluZGluZ3Mgc3VwcG9ydC4KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3Ry
aW5nLCBkb3VibGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRv
bWljU3RyaW5nJik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZWRJdGVtKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCk7
CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01NYXRyaXggOiBwdWJsaWMgRE9NTWF0
cml4UmVhZE9ubHkgewogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0
cml4Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+
Pj4mJiBpbml0KQorICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRl
KHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYmIGlu
aXQpCiAgICAgewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0cml4
KTsKICAgICAgICAgaWYgKCFpbml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJp
eFJlYWRPbmx5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJl
YWRPbmx5LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRy
aXhSZWFkT25seS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBET01Q
b2ludEluaXQ7CiBjbGFzcyBET01NYXRyaXhSZWFkT25seSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFi
bGUsIHB1YmxpYyBSZWZDb3VudGVkPERPTU1hdHJpeFJlYWRPbmx5PiB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01N
YXRyaXhSZWFkT25seT4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0
b3I8ZG91YmxlPj4+JiYgaW5pdCkKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJp
eFJlYWRPbmx5Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVj
dG9yPGRvdWJsZT4+PiYmIGluaXQpCiAgICAgewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0
UmVmKCpuZXcgRE9NTWF0cml4UmVhZE9ubHkpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvRm9udEZhY2UuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0ZvbnRGYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAg
ICAgICBTdHJpbmcgZmVhdHVyZVNldHRpbmdzOwogICAgIH07CiAgICAgCi0gICAgdXNpbmcgU291
cmNlID0gVmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PFN0
cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+PjsKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEZvbnRGYWNlPj4gY3JlYXRlKERvY3Vt
ZW50JiwgY29uc3QgU3RyaW5nJiBmYW1pbHksIFNvdXJjZSYmLCBjb25zdCBEZXNjcmlwdG9ycyYp
OwogICAgIHN0YXRpYyBSZWY8Rm9udEZhY2U+IGNyZWF0ZShDU1NGb250RmFjZSYpOwogICAgIHZp
cnR1YWwgfkZvbnRGYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4Miw3ICsyODIsNyBAQCBlbnVtIGNsYXNzIEN1c3RvbUVsZW1lbnROYW1lVmFsaWRhdGlvblN0
CiAgICAgQ29uZmxpY3RzV2l0aFN0YW5kYXJkRWxlbWVudE5hbWUKIH07CiAKLXVzaW5nIFJlbmRl
cmluZ0NvbnRleHQgPSBWYXJpYW50PAordXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dmFy
aWFudDwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4
dD4sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IERyYWdnZWRDb250
ZW50RGF0YSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlOwogICAgIH07Ci0gICAg
dXNpbmcgRGF0YSA9IFZhcmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwg
RGljdGF0aW9uRGF0YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnRE
YXRhPjsKKyAgICB1c2luZyBEYXRhID0gc3RkOjp2YXJpYW50PElzQWN0aXZlTWF0Y2hEYXRhLCBE
ZXNjcmlwdGlvbkRhdGEsIERpY3RhdGlvbkRhdGEsIERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEs
IERyYWdnZWRDb250ZW50RGF0YT47CiAKICAgICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGlzQWN0aXZlTWF0Y2gpOwogICAgIERv
Y3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBTdHJpbmcoKSk7CkBAIC0xOTgs
MTIgKzE5OCwxMiBAQCBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzCiAK
IGlubGluZSBjb25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8g
V1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBzdGQ6OmdldDxTdHJpbmc+KG1f
ZGF0YSkgOiBlbXB0eVN0cmluZygpOwogfQogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlcjo6
aXNBY3RpdmVNYXRjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Ym9vbD4obV9kYXRhKSAmJiBXVEY6OmdldDxib29sPihtX2RhdGEpOworICAgIHJldHVybiBz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgc3RkOjpnZXQ8Ym9vbD4obV9k
YXRhKTsKIH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJv
b2wgaXNBY3RpdmVNYXRjaCkKQEAgLTIyNywyMiArMjI3LDIyIEBAIGlubGluZSBEb2N1bWVudE1h
cmtlcjo6RG9jdW1lbnRNYXJrZXIoTWEKIAogaW5saW5lIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBE
b2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpn
ZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXM7CisgICAg
cmV0dXJuIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJu
YXRpdmVzOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWx0ZXJuYXRpdmUo
Y29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQogewotICAgIFdURjo6Z2V0
PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9
IGFsdGVybmF0aXZlOworICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1f
ZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwogfQogCiBpbmxpbmUgaWQg
RG9jdW1lbnRNYXJrZXI6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKKyAgICBy
ZXR1cm4gc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0
YS5nZXQoKTsKIH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKGlk
IG1ldGFkYXRhKQogewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1f
ZGF0YSkubWV0YWRhdGEgPSBtZXRhZGF0YTsKKyAgICBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5h
dGl2ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhID0gbWV0YWRhdGE7CiB9CiAKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIGJv
b2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICNl
bmRpZgogICAgIGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2Vk
Q29udGVudCkgewotICAgICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpnZXQ8RG9jdW1l
bnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9k
ZSkKKyAgICAgICAgaWYgKGF1dG8gdGFyZ2V0Tm9kZSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2Vy
OjpEcmFnZ2VkQ29udGVudERhdGE+KG5ld01hcmtlci5kYXRhKCkpLnRhcmdldE5vZGUpCiAgICAg
ICAgICAgICByZXR1cm4gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSAmJiB0YXJnZXROb2RlLT5yZW5k
ZXJlcigpLT5pc1JlbmRlclJlcGxhY2VkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBFdmVu
dFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbgogICAgICAgICBhZGRFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIucmVsZWFzZU5vbk51bGwoKSwgY2FwdHVyZSk7CiAgICAgfSk7
CiAKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVu
ZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50
TGlzdGVuZXI+JiYgbGlzdGVuZXIsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQp
CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
ckZvcgogICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLCBj
YXB0dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7Cisg
ICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogYm9vbCBFdmVudFRhcmdldDo6
cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRM
aXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsOSBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgb25jZTsKICAgICB9OwogCi0gICAgdXNpbmcgQWRkRXZlbnRM
aXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBWYXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25z
LCBib29sPjsKKyAgICB1c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IHN0
ZDo6dmFyaWFudDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBhZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBBZGRFdmVudExpc3RlbmVyT3B0
aW9uc09yQm9vbGVhbiYmKTsKLSAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBW
YXJpYW50PExpc3RlbmVyT3B0aW9ucywgYm9vbD47CisgICAgdXNpbmcgTGlzdGVuZXJPcHRpb25z
T3JCb29sZWFuID0gc3RkOjp2YXJpYW50PExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBMaXN0ZW5lck9w
dGlvbnNPckJvb2xlYW4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4g
ZGlzcGF0Y2hFdmVudEZvckJpbmRpbmdzKEV2ZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9NZXNzYWdlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVz
c2FnZUV2ZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwordXNpbmcgTWVzc2Fn
ZUV2ZW50U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVz
c2FnZVBvcnQ+PjsKIAogY2xhc3MgTWVzc2FnZUV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsK
IHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBT
VkdRdWFsaWZpZWROYW1lOwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZlbnQ7CiAK
LXVzaW5nIE5vZGVPclN0cmluZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwordXNp
bmcgTm9kZU9yU3RyaW5nID0gc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKIAog
Y2xhc3MgTm9kZVJhcmVEYXRhQmFzZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBl
UmV2ZXJzaW9uOiB7CiAgICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBXVEY6Omdl
dDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50PihtX2RldGFpbHMpOworICAgICAgICBTdHJpbmcg
cmVwbGFjZW1lbnRTdHJpbmcgPSBzdGQ6OmdldDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50Piht
X2RldGFpbHMpOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmcuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwpAQCAtMzI2LDcgKzMy
Niw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICNpZiBVU0Uo
RElDVEFUSU9OX0FMVEVSTkFUSVZFUykKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0
aXZlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250
ZXh0ID0gV1RGOjpnZXQ8QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PihtX2RldGFpbHMpOwor
ICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gc3RkOjpnZXQ8QWx0ZXJuYXRpdmVE
aWN0YXRpb25Db250ZXh0PihtX2RldGFpbHMpOwogICAgICAgICBpZiAoIWRpY3RhdGlvbkNvbnRl
eHQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9
IHJvb3RWaWV3UmVjdEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwpAQCAt
NTkyLDkgKzU5Miw5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFQK
ICAgICAgICAgc3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVS
ZXZlcnNpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXM6IHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSkKKyAgICAgICAg
aWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRh
PihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0
byYgbWFya2VyRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPiht
YXJrZXIuZGF0YSgpKTsKKyAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9IHN0ZDo6Z2V0PERvY3Vt
ZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1
cnJlbnRXb3JkICE9IG1hcmtlckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOwpAQCAt
NjQyLDkgKzY0Miw5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGkK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKTsKKyAgICBBU1NF
UlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4o
bWFya2VyLmRhdGEoKSkpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRD
bGllbnQoKSkKLSAgICAgICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RG
OjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRl
eHQpOworICAgICAgICBjbGllbnQtPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhzdGQ6Omdl
dDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4dCk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYXJrZXIpOwogI2VuZGlmCkBAIC02NTUsNyArNjU1
LDcgQEAgVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcgogI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3Vt
ZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQg
PSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0
aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPiht
YXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9u
QWx0ZXJuYXRpdmVzKHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJr
ZXIuZGF0YSgpKS5jb250ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKG1hcmtlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlz
QWN0aXZlOwogICAgICAgICBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGU7CiAgICAgICAgIFN0cmlu
ZyBvcmlnaW5hbFRleHQ7Ci0gICAgICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVu
dCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOworICAgICAgICBzdGQ6OnZh
cmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250
ZXh0PiBkZXRhaWxzOwogICAgIH07CiAKICAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9y
RGlzbWlzc2luZ0FsdGVybmF0aXZlVGV4dCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1faXNEaXNtaXNzZWRCeUVkaXRpbmc7CiAgICAgQWx0ZXJuYXRpdmVUZXh0VHlw
ZSBtX3R5cGU7CiAgICAgU3RyaW5nIG1fb3JpZ2luYWxUZXh0OwotICAgIFZhcmlhbnQ8QXV0b2Nv
cnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFp
bHM7CisgICAgc3RkOjp2YXJpYW50PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVybmF0
aXZlRGljdGF0aW9uQ29udGV4dD4gbV9kZXRhaWxzOwogCiAgICAgU3RyaW5nIG1fb3JpZ2luYWxT
dHJpbmdGb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIFBvc2l0aW9uIG1fcG9zaXRp
b25Gb3JMYXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJs
b2I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi11c2luZyBCbG9iUGFydFZhcmlh
bnQgPSBWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyPiwgUmVmUHRyPEJsb2I+LCBTdHJpbmc+OwordXNpbmcgQmxvYlBhcnRWYXJpYW50
ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyPiwgUmVmUHRyPEJsb2I+LCBTdHJpbmc+OwogCiBjbGFzcyBCbG9iIDogcHVi
bGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgUmVmQ291
bnRlZDxCbG9iPiB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEZpbGVSZWFk
ZXI6OmZpcmVFdmVudChjb25zdCBBdG9taWNTCiAgICAgZGlzcGF0Y2hFdmVudChQcm9ncmVzc0V2
ZW50OjpjcmVhdGUodHlwZSwgdHJ1ZSwgbV9sb2FkZXIgPyBtX2xvYWRlci0+Ynl0ZXNMb2FkZWQo
KSA6IDAsIG1fbG9hZGVyID8gbV9sb2FkZXItPnRvdGFsQnl0ZXMoKSA6IDApKTsKIH0KIAotc3Rk
OjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmls
ZVJlYWRlcjo6cmVzdWx0KCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmlu
ZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0KCkgY29uc3QK
IHsKICAgICBpZiAoIW1fbG9hZGVyIHx8IG1fZXJyb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICBSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigp
IHsgcmV0dXJuIG1fZXJyb3I7IH0KICAgICBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFk
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPFZh
cmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiByZXN1bHQoKSBjb25zdDsK
KyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyPj4+IHJlc3VsdCgpIGNvbnN0OwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwog
ICAgIHVzaW5nIFJlZkNvdW50ZWQ6OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQWxsQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQWxsQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOCArNDMs
MjggQEAgaW5saW5lIEhUTUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdAogfQogCiAvLyBo
dHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1s
I2RvbS1odG1sYWxsY29sbGVjdGlvbi1pdGVtCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVkT3JJbmRleGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkg
Y29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4s
IFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZE9ySW5kZXhlZEl0ZW1P
ckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0CiB7CiAgICAgaWYg
KG5hbWVPckluZGV4LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAg
ICAgaWYgKGF1dG8gaW5kZXggPSBKU0M6OnBhcnNlSW5kZXgoKm5hbWVPckluZGV4LmltcGwoKSkp
Ci0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxF
bGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8
RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgaXRlbShpbmRleC52YWx1ZSgpKSB9IH07CiAK
ICAgICByZXR1cm4gbmFtZWRJdGVtT3JJdGVtcyhuYW1lT3JJbmRleCk7CiB9CiAKIC8vIGh0dHBz
Oi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjY29u
Y2VwdC1nZXQtYWxsLW5hbWVkCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9y
SXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFs
bENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBj
b25zdAogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFtZSk7CiAK
ICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJp
YW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxl
bWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRy
PEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFy
aWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiB7IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVy
ZWRCeU5hbWUobmFtZSkgfSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBk
b3duY2FzdDxEb2N1bWVudD4ob3duZXJOb2RlKCkpLmFsbEZpbHRlcmVkQnlOYW1lKG5hbWUpIH0g
fTsKIH0KIAogSFRNTEFsbE5hbWVkU3ViQ29sbGVjdGlvbjo6fkhUTUxBbGxOYW1lZFN1YkNvbGxl
Y3Rpb24oKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIGNsYXNzIEhUTUxBbGxDb2xsZWN0aW9u
IGZpbmFsIDogcHVibGljIEEKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxBbGxDb2xsZWN0
aW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBzdGQ6Om9wdGlv
bmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFt
ZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBj
b25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwg
UmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBj
b25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rp
b24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2
YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRl
bU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRN
TEFsbENvbGxlY3Rpb24oRG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIs
NyBAQCBSZWY8RG9jdW1lbnRQYXJzZXI+IEhUTUxEb2N1bWVudDo6Y3JlYXRlCiB9CiAKIC8vIGh0
dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2RvbS1kb2N1bWVu
dC1uYW1lZGl0ZW0KLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVm
UHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1l
ZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPj4+IEhUTUxEb2N1bWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkK
IHsKICAgICBpZiAobmFtZS5pc051bGwoKSB8fCAhaGFzRG9jdW1lbnROYW1lZEl0ZW0oKm5hbWUu
aW1wbCgpKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTEyMCwxNiArMTIwLDE2
IEBAIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwKICAgICBpZiAoVU5M
SUtFTFkoZG9jdW1lbnROYW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVudHMoKm5hbWUuaW1w
bCgpKSkpIHsKICAgICAgICAgYXV0byBjb2xsZWN0aW9uID0gZG9jdW1lbnROYW1lZEl0ZW1zKG5h
bWUpOwogICAgICAgICBBU1NFUlQoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPiAxKTsKLSAgICAgICAg
cmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgV1RGTW92ZShjb2xs
ZWN0aW9uKSB9IH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRv
dz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IHsgV1RGTW92ZShjb2xsZWN0aW9uKSB9IH07CiAgICAgfQogCiAgICAgYXV0
byYgZWxlbWVudCA9ICpkb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCkpOwogICAgIGlmIChV
TkxJS0VMWShpczxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBkb21XaW5kb3cgPSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkuY29u
dGVudFdpbmRvdygpKQotICAgICAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRv
dz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9N
V2luZG93PiB7IGRvbVdpbmRvdyB9IH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50
PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4+IHsgUmVmUHRyPERPTVdpbmRvdz4geyBkb21XaW5kb3cgfSB9OwogICAgIH0KIAotICAgIHJl
dHVybiBWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxI
VE1MQ29sbGVjdGlvbj4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgJmVsZW1lbnQgfSB9OworICAgIHJl
dHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVm
UHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVudCB9IH07CiB9
CiAKIFZlY3RvcjxBdG9taWNTdHJpbmc+IEhUTUxEb2N1bWVudDo6c3VwcG9ydGVkUHJvcGVydHlO
YW1lcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCB3
aWR0aCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBoZWlnaHQoKTsKICAgICAKLSAgICBzdGQ6
Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVm
UHRyPEhUTUxDb2xsZWN0aW9uPj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVs
ZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYpOwogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSBjb25zdDsKIAogICAgIEVsZW1lbnQqIGRvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnROYW1lZEl0ZW0uZ2V0RWxl
bWVudEJ5RG9jdW1lbnROYW1lZEl0ZW0obmFtZSwgKnRoaXMpOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCBIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbjo6fkhUTUxGb3JtQ29uCiB7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFu
dDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
K3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRy
PEVsZW1lbnQ+Pj4gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMt
Pm5hbWVkSXRlbXMobmFtZSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEp
Ci0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVs
ZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9Owor
ICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRy
PEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9
OwogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxl
bWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgb3duZXJOb2RlKCkucmFkaW9Ob2RlTGlz
dChuYW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlz
dD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUo
KS5yYWRpb05vZGVMaXN0KG5hbWUpIH0gfTsKIH0KIAogY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lh
dGVkRWxlbWVudCo+JiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGVt
ZW50cygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
KCk7CiAKICAgICBIVE1MRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJl
ZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJikgY29uc3Q7Cisg
ICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQ
dHI8RWxlbWVudD4+PiBuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAg
ICAgLy8gRm9yIENhY2hlZEhUTUxDb2xsZWN0aW9uLgogICAgIEhUTUxFbGVtZW50KiBjdXN0b21F
bGVtZW50QWZ0ZXIoRWxlbWVudCopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTYgKzE2MywxNiBA
QCBIVE1MRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnCiAgICAgcmV0dXJuIGVs
ZW1lbnRzKCktPml0ZW0oaW5kZXgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRy
PFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUVsZW1lbnQ6Om5hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFu
dDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtRWxlbWVu
dDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBhdXRvIG5hbWVk
SXRlbXMgPSBuYW1lZEVsZW1lbnRzKG5hbWUpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChuYW1lZEl0ZW1zLnNp
emUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4s
IFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNb
MF0pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlz
dD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRl
bXNbMF0pIH0gfTsKIAotICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0Piwg
UmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IHJhZGlvTm9kZUxpc3Qo
bmFtZSkgfSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+
LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlz
dChuYW1lKSB9IH07CiB9CiAKIFZlY3RvcjxBdG9taWNTdHJpbmc+IEhUTUxGb3JtRWxlbWVudDo6
c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGlj
OgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgSFRN
TEVsZW1lbnQqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFu
dDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmKTsKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVz
KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlcy5lbmNvZGluZ1R5cGUoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDcgKzEzNjUsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAgICAgICAgIC8v
IDIuIEVuZCB0aGUgc3luY2hyb25vdXMgc2VjdGlvbiwgY29udGludWluZyB0aGUgcmVtYWluaW5n
IHN0ZXBzIGluIHBhcmFsbGVsLgogICAgICAgICAgICAgLy8gMy4gUnVuIHRoZSByZXNvdXJjZSBm
ZXRjaCBhbGdvcml0aG0gd2l0aCB0aGUgYXNzaWduZWQgbWVkaWEgcHJvdmlkZXIgb2JqZWN0Lgot
ICAgICAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgc3Rk
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
ICAgICAgICAgICAgW3RoaXNdKFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSB7IG1fbWVkaWFT
dHJlYW1TcmNPYmplY3QgPSBzdHJlYW07IH0sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3
IEBAIHVzaW5nIEN1ZUludGVydmFsID0gQ3VlSW50ZXJ2YWxUcmVlOjpJbnQKIHVzaW5nIEN1ZUxp
c3QgPSBWZWN0b3I8Q3VlSW50ZXJ2YWw+OwogI2VuZGlmCiAKLXVzaW5nIE1lZGlhUHJvdmlkZXIg
PSBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8Cit1c2luZyBNZWRpYVByb3ZpZGVyID0gc3RkOjpvcHRp
b25hbDxzdGQ6OnZhcmlhbnQ8CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBSZWZQdHI8
TWVkaWFTdHJlYW0+LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25zQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDgg
QEAgcHVibGljOgogICAgIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0odW5zaWduZWQg
aW5kZXgsIEhUTUxPcHRpb25FbGVtZW50Kik7CiAgICAgCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRH
cm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxI
VE1MT3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlh
bnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3Vw
RWxlbWVudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8
SFRNTE9wdEdyb3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6
OnZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBF
eGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVtb3ZlKGludCBpbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBA
QCBwdWJsaWM6CiAKICAgICBib29sIHVzZXNNZW51TGlzdCgpIGNvbnN0OwogCi0gICAgdXNpbmcg
T3B0aW9uT3JPcHRHcm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVu
dD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRP
ckludCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRp
b25Pck9wdEdyb3VwRWxlbWVudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1l
bnQ+LCBSZWZQdHI8SFRNTE9wdEdyb3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50
T3JJbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVs
ZW1lbnQmLCBjb25zdCBzdGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwog
CiAgICAgdXNpbmcgTm9kZTo6cmVtb3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxT
ZWFyY2hQYXJhbXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2Vh
cmNoUGFyYW1zLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9V
UkxTZWFyY2hQYXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMiArNDEsMjUgQEAgVVJM
U2VhcmNoUGFyYW1zOjpVUkxTZWFyY2hQYXJhbXMoY29uc3QgVgogewogfQogCi1FeGNlcHRpb25P
cjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoVmFyaWFudDxW
ZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBT
dHJpbmc+PiwgU3RyaW5nPiYmIHZhcmlhbnQpCitFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFy
YW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8
U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJp
bmc+JiYgdmFyaWFudCkKIHsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsm
XShjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiB2ZWN0b3IpIC0+IEV4Y2VwdGlvbk9yPFJl
ZjxVUkxTZWFyY2hQYXJhbXM+PiB7Ci0gICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxT
dHJpbmcsIFN0cmluZz4+IHBhaXJzOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2
ZWN0b3IpIHsKLSAgICAgICAgICAgIGlmIChwYWlyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICAgICAgICAgIHBhaXJzLmFw
cGVuZCh7cGFpclswXSwgcGFpclsxXX0pOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhcmlh
bnQsCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4g
RXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIFZlY3RvcjxX
VEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhaXJzOworICAgICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBwYWlyIDogdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIu
c2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBl
RXJyb3IgfTsKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoe3BhaXJbMF0sIHBhaXJbMV19
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNl
YXJjaFBhcmFtcyhXVEZNb3ZlKHBhaXJzKSkpOworICAgICAgICB9LAorICAgICAgICBbXShjb25z
dCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIC0+IEV4
Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKKyAgICAgICAgfSwKKyAgICAgICAg
W10oY29uc3QgU3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJh
bXM+PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMo
c3RyaW5nLCBudWxscHRyKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVVJMU2VhcmNoUGFyYW1zKFdURk1vdmUocGFpcnMpKSk7Ci0gICAgfSwgWyZdKGNvbnN0IFZl
Y3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+JiBwYWlycykgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAgICB9LCBb
Jl0oY29uc3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
VVJMU2VhcmNoUGFyYW1zKHN0cmluZywgbnVsbHB0cikpOwotICAgIH0pOwotICAgIHJldHVybiBX
VEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgICk7CiB9CiAKIFN0cmluZyBVUkxTZWFy
Y2hQYXJhbXM6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvVVJMU2VhcmNoUGFyYW1zLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBVUkxTZWFyY2hQYXJhbXMgOiBwdWJsaWMg
UmVmQ291bnRlZDxVUkxTZWFyY2hQYXJhbXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0
aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IGNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8
U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJp
bmc+JiYpOworICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3Jl
YXRlKHN0ZDo6dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlW
YWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgUmVmPFVS
TFNlYXJjaFBhcmFtcz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBET01VUkwqIGFzc29j
aWF0ZWRVUkwpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQ
YXJhbXMoc3RyaW5nLCBhc3NvY2lhdGVkVVJMKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgY2xhc3MgVGV4dE1ldHJp
Y3M7CiBzdHJ1Y3QgRE9NTWF0cml4SW5pdDsKIAogI2lmIEVOQUJMRShWSURFTykKLXVzaW5nIENh
bnZhc0ltYWdlU291cmNlID0gVmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0
cjxIVE1MVmlkZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBD
YW52YXNJbWFnZVNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4s
IFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAj
ZWxzZQotdXNpbmcgQ2FudmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VF
bGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNv
dXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1M
Q2FudmFzRWxlbWVudD4+OwogI2VuZGlmCiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwdWJsaWMgQ2FudmFzUGF0
aCB7CkBAIC0xNzIsNyArMTcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVP
cGVyYXRpb24oY29uc3QgU3RyaW5nJik7CiAKLSAgICB1c2luZyBTdHlsZSA9IFZhcmlhbnQ8U3Ry
aW5nLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OworICAg
IHVzaW5nIFN0eWxlID0gc3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPENhbnZhc0dyYWRpZW50
PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+PjsKICAgICBTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0
OwogICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3R5bGUmJik7CiAgICAgU3R5bGUgZmlsbFN0eWxl
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
Y3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDEyIEBAIENhbnZhc1N0
eWxlIENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW4KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNF
cXVpdmFsZW50Q29sb3IoY29uc3QgQ2FudmFzU3R5bGUmIG90aGVyKSBjb25zdAogewotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbG9yPihvdGhlci5tX3N0eWxlKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0
PENvbG9yPihtX3N0eWxlKSA9PSBXVEY6OmdldDxDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAg
aWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpn
ZXQ8Q29sb3I+KG1fc3R5bGUpID09IHN0ZDo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKIAot
ICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpIHsKLSAgICAg
ICAgYXV0byYgYSA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwotICAgICAgICBhdXRv
JiBiID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxDTVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKSkgeworICAgICAgICBhdXRvJiBhID0g
c3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7CisgICAgICAgIGF1dG8mIGIgPSBzdGQ6Omdl
dDxDTVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKTsKICAgICAgICAgcmV0dXJuIGEuYyA9PSBiLmMg
JiYgYS5tID09IGIubSAmJiBhLnkgPT0gYi55ICYmIGEuayA9PSBiLmsgJiYgYS5hID09IGIuYTsK
ICAgICB9CiAKQEAgLTE0OSwxNSArMTQ5LDE1IEBAIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZh
bGVudENvbG9yKGNvbnMKIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQShmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKSBjb25zdAogewotICAgIHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9z
dHlsZSkgPT0gQ29sb3IgeyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBD
b2xvciB7IHIsIGcsIGIsIGEgfTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50
Q01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QK
IHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkp
CisgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENN
WUtBQ29sb3I+KG1fc3R5bGUpOworICAgIGF1dG8mIGNoYW5uZWxzID0gc3RkOjpnZXQ8Q01ZS0FD
b2xvcj4obV9zdHlsZSk7CiAgICAgcmV0dXJuIGMgPT0gY2hhbm5lbHMuYyAmJiBtID09IGNoYW5u
ZWxzLm0gJiYgeSA9PSBjaGFubmVscy55ICYmIGsgPT0gY2hhbm5lbHMuayAmJiBhID09IGNoYW5u
ZWxzLmE7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
aAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgQ2FudmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yKTsK
ICAgICBzdGF0aWMgQ2FudmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhh
KGNvbnN0IFN0cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsKIAotICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUp
OyB9Ci0gICAgYm9vbCBpc0N1cnJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q3VycmVudENvbG9yPihtX3N0eWxlKTsgfQotICAgIGJvb2wgaGFzT3ZlcnJp
ZGVBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGlzQ3VycmVudENvbG9yKCkgJiYgV1RGOjpnZXQ8Q3Vy
cmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAgZmxvYXQgb3ZlcnJpZGVB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3Zl
cnJpZGVBbHBoYS52YWx1ZSgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
IXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KKyAgICBib29sIGlz
Q3VycmVudENvbG9yKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJy
ZW50Q29sb3I+KG1fc3R5bGUpOyB9CisgICAgYm9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3Qg
eyByZXR1cm4gaXNDdXJyZW50Q29sb3IoKSAmJiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5
bGUpLm92ZXJyaWRlQWxwaGE7IH0KKyAgICBmbG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyBy
ZXR1cm4gc3RkOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVl
KCk7IH0KIAogICAgIFN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIENhbnZhc0dyYWRpZW50KiBj
YW52YXNHcmFkaWVudCgpIGNvbnN0OwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAg
Q2FudmFzU3R5bGUoQ3VycmVudENvbG9yKTsKIAotICAgIFZhcmlhbnQ8SW52YWxpZCwgQ29sb3Is
IENNWUtBQ29sb3IsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJu
PiwgQ3VycmVudENvbG9yPiBtX3N0eWxlOworICAgIHN0ZDo6dmFyaWFudDxJbnZhbGlkLCBDb2xv
ciwgQ01ZS0FDb2xvciwgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRl
cm4+LCBDdXJyZW50Q29sb3I+IG1fc3R5bGU7CiB9OwogCiBDb2xvciBjdXJyZW50Q29sb3IoSFRN
TENhbnZhc0VsZW1lbnQqKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGlubGluZSBDYW52YXNTdHls
ZTo6Q2FudmFzU3R5bGUoKQogCiBpbmxpbmUgQ2FudmFzR3JhZGllbnQqIENhbnZhc1N0eWxlOjpj
YW52YXNHcmFkaWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+
KG1fc3R5bGUpLmdldCgpOworICAgIHJldHVybiBzdGQ6OmdldDxSZWZQdHI8Q2FudmFzR3JhZGll
bnQ+PihtX3N0eWxlKS5nZXQoKTsKIH0KIAogaW5saW5lIENhbnZhc1BhdHRlcm4qIENhbnZhc1N0
eWxlOjpjYW52YXNQYXR0ZXJuKCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJu
Pj4obV9zdHlsZSkuZ2V0KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0
ZXJuPj4obV9zdHlsZSkuZ2V0KCk7CiB9CiAKIGlubGluZSBTdHJpbmcgQ2FudmFzU3R5bGU6OmNv
bG9yKCkgY29uc3QKIHsKLSAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q29sb3I+KG1fc3R5bGUpID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpnZXQ8Q01Z
S0FDb2xvcj4obV9zdHlsZSkuY29sb3I7CisgICAgYXV0byYgY29sb3IgPSBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSA/IHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IHN0
ZDo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpLmNvbG9yOwogICAgIHJldHVybiBjb2xvci5zZXJp
YWxpemVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFnZTNEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
JiYgcGl4ZWxzKTsKIAogICAgIHZvaWQgdGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpv
ZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRo
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
JiYgcGl4ZWxzKTsKLSAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQ
dHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZh
c0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdl
U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50Pj47CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBUZXhJbWFnZVNvdXJjZSYmKTsKIAogICAg
IHZvaWQgY29weVRleFN1YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAkod29ya2luZyBjb3B5KQpAQCAt
NDgsNyArNDgsNyBAQCBjbGFzcyBXZWJHTFRleHR1cmU7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5
T2JqZWN0OwogY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKIAotdXNpbmcgV2ViR0xB
bnkgPSBWYXJpYW50PAordXNpbmcgV2ViR0xBbnkgPSBzdGQ6OnZhcmlhbnQ8CiAgICAgc3RkOjpu
dWxscHRyX3QsCiAgICAgYm9vbCwKICAgICBpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGEKICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAg
IHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29j
aWF0ZUJ1ZmZlckRhdGEoZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIs
ICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxOCw3ICsxMjE4
LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdQogICAgIGlmICgh
ZGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkg
eworICAgIHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXIt
PmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
ZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0
IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYKICAgICApOwog
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOworICAgIHJl
dHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAogYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8SlNDOjpUeXBlZEFy
cmF5VHlwZT4gYXJyYXlUeXBlKQpAQCAtNDIxMiw3ICs0MjEyLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAgIHJldHVybiBX
VEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNp
dCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CiB9CiAKIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAg
cHVibGljOgogICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRm
YWN0b3IpOwogICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNE
ZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CiAKLSAg
ICB1c2luZyBCdWZmZXJEYXRhU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZl
cj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBCdWZmZXJEYXRhU291cmNl
ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+PjsKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6
ZSwgR0MzRGVudW0gdXNhZ2UpOwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQs
IHN0ZDo6b3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJiwgR0MzRGVudW0gdXNhZ2UpOwogICAg
IHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIHN0
ZDo6b3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJik7CkBAIC0yNDcsOSArMjQ3LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0
cjxBcnJheUJ1ZmZlclZpZXc+JiYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHVzaW5nIFRl
eEltYWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRN
TEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52
YXNFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKICNlbHNlCi0gICAgdXNpbmcg
VGV4SW1hZ2VTb3VyY2UgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxI
VE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CisgICAgdXNpbmcg
VGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxI
VE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAog
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBzdGQ6Om9wdGlvbmFsPFRleEltYWdlU291cmNlPik7CkBAIC0yNjMsNyArMjYzLDcg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUeXBlZEFycmF5LCBjbGFzcyBEYXRhVHlw
ZT4KICAgICBjbGFzcyBUeXBlZExpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgVmFy
aWFudFR5cGUgPSBWYXJpYW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFUeXBlPj47
CisgICAgICAgIHVzaW5nIFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxUeXBlZEFy
cmF5PiwgVmVjdG9yPERhdGFUeXBlPj47CiAKICAgICAgICAgVHlwZWRMaXN0KFZhcmlhbnRUeXBl
JiYgdmFyaWFudCkKICAgICAgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUodmFyaWFudCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBUcmFja0V2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykp
KTsKICAgICB9CiAKLSAgICB1c2luZyBUcmFja0V2ZW50VHJhY2sgPSBWYXJpYW50PFJlZlB0cjxW
aWRlb1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CisgICAg
dXNpbmcgVHJhY2tFdmVudFRyYWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwg
UmVmUHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CiAKICAgICBzdHJ1Y3QgSW5p
dCA6IHB1YmxpYyBFdmVudEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRyYWNrRXZlbnRU
cmFjaz4gdHJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2Fu
dmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBT
dHJpbmcmIGNzc0NhbnZhc05hbWUpOwogCi0gICAgdHlwZWRlZiBWYXJpYW50PAorICAgIHR5cGVk
ZWYgc3RkOjp2YXJpYW50PAogICAgICAgICBDYW52YXNHcmFkaWVudCosCiAgICAgICAgIENhbnZh
c1BhdHRlcm4qLAogICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCosCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsK
KyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQ
dHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgbV9l
eGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5l
eHBlY3RlZCByZXN1bHQgdHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJh
c2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9
IHN0ZDo6Z2V0PFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOwogICAg
ICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNlUmVzdWx0KTsK
ICAgICAgICAgZGF0YWJhc2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMTgyLDcgKzE4Miw3
IEBAIHN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXkKICAgICAgICAga2V5
UGF0aC0+c2V0QXJyYXkoV1RGTW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsK
ICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVl
KCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7
CiB9CiAKIHN0YXRpYyBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJh
c2UoSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgSURCVHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWRvbmx5
KQpAQCAtMzczLDEyICszNzMsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAg
ICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJ
REJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlIHx8ICFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRW
YWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgZW5kKGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8UmVmUHRy
PElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGN1cnNvciA9
IHN0ZDo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKIAogICAg
ICAgICBpZiAobV9za2lwQ291bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3ItPmFkdmFuY2Uo
bV9za2lwQ291bnQpLmhhc0V4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9J
bnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCwxMCArNDAsMTAgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVyc2VjdGlvbk9ic2Vydgog
ICAgICwgbV9yb290TWFyZ2luKFdURk1vdmUoaW5pdC5yb290TWFyZ2luKSkKICAgICAsIG1fY2Fs
bGJhY2soV1RGTW92ZShjYWxsYmFjaykpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpCi0gICAgICAgIG1fdGhyZXNob2xkcy5hcHBlbmQo
V1RGOjpnZXQ8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKQorICAgICAgICBtX3RocmVzaG9sZHMu
YXBwZW5kKHN0ZDo6Z2V0PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKICAgICBlbHNlCi0gICAg
ICAgIG1fdGhyZXNob2xkcyA9IFdURjo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQu
dGhyZXNob2xkKSk7CisgICAgICAgIG1fdGhyZXNob2xkcyA9IHN0ZDo6Z2V0PFZlY3Rvcjxkb3Vi
bGU+PihXVEZNb3ZlKGluaXQudGhyZXNob2xkKSk7CiB9CiAKIHZvaWQgSW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVy
c2VjdGlvbk9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgcHVibGljOgogICAgIHN0cnVjdCBJbml0IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJv
b3Q7CiAgICAgICAgIFN0cmluZyByb290TWFyZ2luOwotICAgICAgICBWYXJpYW50PGRvdWJsZSwg
VmVjdG9yPGRvdWJsZT4+IHRocmVzaG9sZDsKKyAgICAgICAgc3RkOjp2YXJpYW50PGRvdWJsZSwg
VmVjdG9yPGRvdWJsZT4+IHRocmVzaG9sZDsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxJbnRl
cnNlY3Rpb25PYnNlcnZlcj4gY3JlYXRlKFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNr
PiYmIGNhbGxiYWNrLCBJbml0JiYgaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICAvLyBTaG91
bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQg
b3V0LgogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyYp
IHsgfQogCi0gICAgdXNpbmcgTGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCA9IFdU
Rjo6VmFyaWFudDxzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6Om9wdGlvbmFsPEZsb2F0
UmVjdD4+OworICAgIHVzaW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBz
dGQ6OnZhcmlhbnQ8c3RkOjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+PjsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUoRnJhbWVW
aWV3JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVy
cmlkZVJlY3QmLCBib29sIC8qIHByb2dyYW1tYXRpY1Njcm9sbCAqLywgVmlld3BvcnRSZWN0U3Rh
YmlsaXR5LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKSB7IH0KIAogICAgIC8vIFNob3Vs
ZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNsb3cgcmVwYWludCBvYmplY3RzIGNvdW50ZXIgY2hh
bmdlcyBiZXR3ZWVuIHplcm8gYW5kIG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBA
IGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmQKICNlbmRpZgogICAgICAg
ICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2
aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZp
c2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKICNpZiAhVVNFKENGKQpAQCAtMjE5LDE3ICsy
MTksMjQgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBzaXpl
X3QgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byB2
aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPGNoYXI+
JiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX2ltbXV0YWJsZURhdGEsCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkg
LT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfSwK
ICNpZiBVU0UoQ0YpCi0gICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRh
KSB7IHJldHVybiBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNv
bnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAg
cmV0dXJuIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKICNlbmRpZgog
I2lmIFVTRShTT1VQKQotICAgICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBk
YXRhKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxlbmd0aCk7IH0sCisgICAg
ICAgIFtdKGNvbnN0IEdVbmlxdWVQdHI8U291cEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOworICAg
ICAgICB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7
IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYg
ZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAg
ICAgfQogICAgICk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVE
YXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJl
ZjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldp
dGhpblNlZ21lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxOSArMTE2LDI4IEBAIHB1YmxpYzoKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIERhdGFTZWdtZW50KFZlY3RvcjxjaGFyPiYmIGRhdGEpCi0gICAgICAg
ICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDog
bV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogI2lm
IFVTRShDRikKICAgICAgICAgRGF0YVNlZ21lbnQoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRh
KQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAg
ICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAg
ICAgIH0KICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgICAgICBEYXRhU2VnbWVudChHVW5pcXVl
UHRyPFNvdXBCdWZmZXI+JiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdU
Rk1vdmUoZGF0YSkpIHsgfQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShk
YXRhKSkKKyAgICAgICAgeworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgRGF0YVNlZ21lbnQo
TWFwcGVkRmlsZURhdGEmJiBkYXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RG
TW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRh
dGEpKQorICAgICAgICB7CisgICAgICAgIH0KIAotICAgICAgICBWYXJpYW50PFZlY3RvcjxjaGFy
PiwKKyAgICAgICAgc3RkOjp2YXJpYW50PAorICAgICAgICAgICAgVmVjdG9yPGNoYXI+LAogI2lm
IFVTRShDRikKICAgICAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+LAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAgc3RydWN0IFBsYXRmb3JtRGVzY3JpcHRpb24gewogICAgICAgICBOb25lLAogICAg
ICAgICBDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlLAogICAgIH0gdHlwZTsKLSAgICBWYXJpYW50PHN0
ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlw
dGlvbjsKKyAgICBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbio+IGRlc2NyaXB0aW9uOwogfTsKIAogY2xhc3MgQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5
MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAg
ICAgICBpZiAob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNj
cmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICByZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0
aW9uKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRvcj09KCpzdGQ6OmdldDxjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pKTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCkBAIC0x
MDIsNyArMTAyLDcgQEAgYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZQog
aW5saW5lIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NF
UlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNj
cmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgcmV0dXJuIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbigqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAg
cmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRl
c2NyaXB0aW9uKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1No
YXJlZEJ1ZmZlckNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0CiBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc2VnbWVudHMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdU
Rjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1f
aW1tdXRhYmxlRGF0YSkpCisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRh
aW5QdHI8Q0ZEYXRhUmVmPj4oJm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRh
KSkKICAgICAgICAgICAgIHJldHVybiAqZGF0YTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRh
KCkpLCBzaXplKCkpKTsKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRN
ZW1vcnlOb3ROZWVkZWRTbwogewogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3NlZ21l
bnRzKSB7CiAgICAgICAgIGlmIChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYoKSkgewotICAgICAg
ICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+Pihl
bnRyeS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQorICAgICAgICAgICAgaWYgKGF1dG8gZGF0
YSA9IHN0ZDo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnkuc2VnbWVudC0+bV9p
bW11dGFibGVEYXRhKSkKICAgICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5v
dE5lZWRlZFNvb24oY29uc3RfY2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YS0+Z2V0
KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09w
dGlvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRGVjb2RpbmdPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE3ICs1NiwxNyBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzTm9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5n
TW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gaGFzRGVj
b2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6
ZSkgPT0gRGVjb2RpbmdNb2RlOjpOb25lOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3luY2hy
b25vdXMoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYm
IFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5n
TW9kZTo6U3luY2hyb25vdXM7CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBz
dGQ6OmdldDxEZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01v
ZGU6OlN5bmNocm9ub3VzOwogICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERl
Y29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNo
cm9ub3VzOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVj
b2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpBc3luY2hy
b25vdXM7CiAgICAgfQogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0NvbXBhdGlibGVXaXRoKGNv
bnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdApAQCAtMTEwLDcgKzEx
MCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IHNpemVGb3JEcmF3aW5n
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNTaXplKCkpOwotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUp
OworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNv
ZGluZ01vZGVPclNpemUpOwogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgbWF4RGltZW5zaW9uKGNv
bnN0IEludFNpemUmIHNpemUpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgogICAgIGJvb2wgaGFzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGluZ01vZGVPclNp
emUpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVjb2RpbmdNb2RlKCkgY29uc3QKQEAgLTE0MCw3
ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsgYW55U2l6ZTogRGVj
b2RpbmdNb2RlOjpBc3luY2hyb25vdXMKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGludHJpbnNp
Y1NpemU6IGFuIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+CiAgICAgLy8gLSBBc3luY2hy
b25vdXMgKyBzaXplRm9yRHJhd2luZzogYSBub25lIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6
ZT4+Ci0gICAgdXNpbmcgRGVjb2RpbmdNb2RlT3JTaXplID0gVmFyaWFudDxEZWNvZGluZ01vZGUs
IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OworICAgIHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9
IHN0ZDo6dmFyaWFudDxEZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OwogICAg
IERlY29kaW5nTW9kZU9yU2l6ZSBtX2RlY29kaW5nTW9kZU9yU2l6ZTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9u
dHMuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3
IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAgICAgICAg
IHJldHVybiBmb250RmFtaWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0aW9uKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBkZXNjcmlw
dGlvbi5lZmZlY3RpdmVGYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5nZXMgPSBX
VEY6OnZpc2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJhbmdlcyA9
IHN0ZDo6dmlzaXQodmlzaXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICghcmFuZ2Vz
LmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dERlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdHlwZWRlZiBG
b250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9udAogCiAjZGVmaW5lIFVTRV9QTEFURk9STV9T
WVNURU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFyaWFudDxBdG9t
aWNTdHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uOwordHlwZWRlZiBzdGQ6OnZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5
UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lczsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9X
ZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlk
ZXJBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBXZWJB
dWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcgogdm9pZCBXZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6YXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
JiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGRhdGEsIGNvbnN0
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgZnJhbWVDb3VudCkK
IHsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0g
UGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgYXV0byYg
YmFzaWNEZXNjcmlwdGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOwor
ICAgIGF1dG8mIGJhc2ljRGVzY3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1C
YXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2Ny
aXB0aW9uKTsKICAgICBpZiAoIW1faW5wdXREZXNjcmlwdGlvbiB8fCBtX2lucHV0RGVzY3JpcHRp
b24tPnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gYmFzaWNEZXNjcmlwdGlvbikKICAgICAgICAgcHJl
cGFyZShiYXNpY0Rlc2NyaXB0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTFZhbHVlLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgU1FMVmFsdWUgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90
LCBTdHJpbmcsIGRvdWJsZT47Cit1c2luZyBTUUxWYWx1ZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51
bGxwdHJfdCwgU3RyaW5nLCBkb3VibGU+OwogCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNyArMTQyLDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMp
IHsKLSAgICAgICAgYXV0byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRN
YXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOworICAgICAgICBhdXRv
JiBkcmFnZ2VkQ29udGVudERhdGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENv
bnRlbnREYXRhPihtYXJrZXItPmRhdGEoKSk7CiAgICAgICAgIGlmIChkcmFnZ2VkQ29udGVudERh
dGEudGFyZ2V0Tm9kZSA9PSAmZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBz
dHJpbmdWYWx1ZTsKICAgICAgICAgU3RyaW5nIHRyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZTsK
ICAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAgVmFyaWFudDxS
ZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7
CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhl
ckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7CiAgICAgICAgIGludCBjbGFtcExvbmdWYWx1ZTsKICAg
ICAgICAgaW50IGVuZm9yY2VSYW5nZUxvbmdWYWx1ZTsKICAgICB9OwpAQCAtMTIyLDcgKzEyMiw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPj4+JiB0ZXN0U2VxdWVuY2VSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX3Nl
cXVlbmNlUmVjb3JkOyB9CiAgICAgdm9pZCBzZXRUZXN0U2VxdWVuY2VSZWNvcmQoY29uc3QgVmVj
dG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiYgdmFsdWUpIHsg
bV9zZXF1ZW5jZVJlY29yZCA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VW5pb24gPSBWYXJp
YW50PFN0cmluZywgaW50LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKKyAgICB1
c2luZyBUZXN0VW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0cjxO
b2RlPiwgVmVjdG9yPGludD4+OwogICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVuaW9uKCkgY29u
c3QgeyByZXR1cm4gbV91bmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdFVuaW9uKFRlc3RVbmlvbiYm
IHZhbHVlKSB7IG1fdW5pb24gPSB2YWx1ZTsgfQogCkBAIC0xMzAsMTUgKzEzMCwxNSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUZXN0RGljdGlvbmFyeShEaWN0aW9uYXJ5JiYgZGljdGlvbmFyeSkg
eyBtX3Rlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTsgfQogICAgIAogCi0gICAgdXNpbmcgVGVz
dENsYW1wVW5pb24gPSBWYXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CisgICAgdXNp
bmcgVGVzdENsYW1wVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxpbnQ+
PjsKICAgICBjb25zdCBUZXN0Q2xhbXBVbmlvbiYgdGVzdENsYW1wVW5pb24oKSBjb25zdCB7IHJl
dHVybiBtX2NsYW1wVW5pb247IH0KICAgICB2b2lkIHNldFRlc3RDbGFtcFVuaW9uKGNvbnN0IFRl
c3RDbGFtcFVuaW9uJiB2YWx1ZSkgeyBtX2NsYW1wVW5pb24gPSB2YWx1ZTsgfQogCi0gICAgdXNp
bmcgVGVzdEVuZm9yY2VSYW5nZVVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGlu
dD4+OworICAgIHVzaW5nIFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJp
bmcsIGludCwgVmVjdG9yPGludD4+OwogICAgIGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYg
dGVzdEVuZm9yY2VSYW5nZVVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmZvcmNlUmFuZ2VVbmlv
bjsgfQogICAgIHZvaWQgc2V0VGVzdEVuZm9yY2VSYW5nZVVuaW9uKGNvbnN0IFRlc3RFbmZvcmNl
UmFuZ2VVbmlvbiYgdmFsdWUpIHsgbV9lbmZvcmNlUmFuZ2VVbmlvbiA9IHZhbHVlOyB9CiAKLSAg
ICB1c2luZyBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uID0gVmFyaWFudDxTdHJpbmcs
IGludCwgVmVjdG9yPFN0cmluZz4+OworICAgIHVzaW5nIFRlc3RUcmVhdE51bGxBc0VtcHR5U3Ry
aW5nVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxTdHJpbmc+PjsKICAg
ICBjb25zdCBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB0ZXN0VHJlYXROdWxsQXNF
bXB0eVN0cmluZ1VuaW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdE51bGxBc0VtcHR5U3RyaW5n
VW5pb247IH0KICAgICB2b2lkIHNldFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24oY29u
c3QgVGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiYgdmFsdWUpIHsgbV90cmVhdE51bGxB
c0VtcHR5U3RyaW5nVW5pb24gPSB2YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAg
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7IH0KIAotICAgIHVzaW5nIFNlbmRUeXBlcyA9IFZhcmlhbnQ8UmVmUHRyPERvY3VtZW50Piwg
UmVmUHRyPEJsb2I+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4sIFJlZlB0cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CisgICAgdXNpbmcgU2Vu
ZFR5cGVzID0gc3RkOjp2YXJpYW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxCbG9iPiwgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQ
dHI8RE9NRm9ybURhdGE+LCBTdHJpbmc+OwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX3VybDsgfQogICAgIFN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wOC0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0NhcHR1cmU6OmV2ZW50VG9TdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtDYXB0dXJlOjpSZXNvdXJjZTo6dXJsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtD
YXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRsZXIpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpB
cmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAg
ICh3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkKToKKwogMjAxNy0wOC0xOCAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIyMDg1NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9O
ZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBA
IHN0ZDo6c3RyaW5nIGV2ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVyZUUKIHsKICAgICBqc29uIHJl
c3VsdDsKIAotICAgIFdURjo6dmlzaXQoWyZyZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7Cisg
ICAgc3RkOjp2aXNpdChbJnJlc3VsdF0oY29uc3QgYXV0byYgZXZlbnQpIHsKICAgICAgICAgdXNp
bmcgRXZlbnRUeXBlID0gc3RkOjpkZWNheV90PGRlY2x0eXBlKGV2ZW50KT47CiAgICAgICAgIHJl
c3VsdCA9IEpTT05Db2RlcjxFdmVudFR5cGU+OjplbmNvZGUoZXZlbnQpOwogICAgIH0sIGV2ZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZUV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7CiBz
dHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQ7CiBzdHJ1Y3QgRmluaXNoZWRFdmVudDsKIAotdXNpbmcg
Q2FwdHVyZUV2ZW50ID0gV1RGOjpWYXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNlUmVj
ZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0
YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+OwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gc3Rk
Ojp2YXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJl
Y3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZp
bmlzaGVkRXZlbnQ+OwogdXNpbmcgT3B0aW9uYWxDYXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFs
PENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVu
dD47CiB1c2luZyBDYXB0dXJlQ2xvY2tUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwpJbmRleDog
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTAgQEAgY29uc3QgV2ViQ29yZTo6VVJMJiBS
ZXNvdXJjZTo6dXJsKCkKICAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsK
ICAgICAgICAgaWYgKCFldmVudCkKICAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQg
c3RyZWFtIGRvZXMgbm90IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVS
LCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCisgICAgICAgIGVsc2Ug
aWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCiAg
ICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBoYXZlIGEg
cmVxdWVzdFNlbnQgZXZlbnQ6IGZpbGUgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUiht
X2V2ZW50RmlsZVBhdGgpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJlcXVl
c3RTZW50RXZlbnQgPSBXVEY6OmdldDxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpOworICAgICAg
ICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gc3RkOjpnZXQ8UmVxdWVzdFNlbnRFdmVudD4o
KmV2ZW50KTsKICAgICAgICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIocmVxdWVzdFNl
bnRFdmVudC5yZXF1ZXN0LnVybCk7CiAgICAgICAgICAgICBtX3VybCA9IHBhcnNlci5yZXN1bHQo
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJl
L05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
RGF0YVRhc2tSZXBsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudAogICAgICAgICAgICAgICAgIHJl
cGxheUZpbmlzaGVkKGV2ZW50KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIFdURjo6dmlz
aXQodmlzaXRvciwgKmV2ZW50KTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCAqZXZlbnQp
OwogICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEsMTIg
KzIzNzEsMTIgQEAgYm9vbCBBcmd1bWVudENvZGVyPENhcHR1cmVEZXZpY2U+OjpkZWNvZAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogdm9pZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsK
LSAgICBib29sIGlzU3RyaW5nID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBh
dGgpOworICAgIGJvb2wgaXNTdHJpbmcgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4o
a2V5UGF0aCk7CiAgICAgZW5jb2RlciA8PCBpc1N0cmluZzsKICAgICBpZiAoaXNTdHJpbmcpCi0g
ICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKKyAgICAgICAgZW5j
b2RlciA8PCBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpOwogICAgIGVsc2UKLSAgICAgICAgZW5j
b2RlciA8PCBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAgICAgIGVuY29k
ZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogfQogCiBib29sIEFyZ3Vt
ZW50Q29kZXI8SURCS2V5UGF0aD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRo
JiBrZXlQYXRoKQpJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgc3Ry
dWN0IE1lZGlhQ29uc3RyYWludHM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLXVzaW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVj
dG9yPFN0cmluZz4+OwordXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+PjsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5
LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcg
KzgzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1l
ZGlhVGltZSYgdGltZSwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3Qg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBudW1iZXJPZkZyYW1l
cykgZmluYWwgewogICAgICAgICBpZiAobV9kZXNjcmlwdGlvbiAhPSBkZXNjcmlwdGlvbikgewog
ICAgICAgICAgICAgQVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBl
ID09IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgICAg
ICAgICAgbV9kZXNjcmlwdGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24p
OworICAgICAgICAgICAgbV9kZXNjcmlwdGlvbiA9ICpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVz
Y3JpcHRpb24pOwogCiAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIHJpbmcgYnVmZmVyIGxhcmdl
IGVub3VnaCB0byBjb250YWluIDIgc2Vjb25kcyBvZiBhdWRpby4KICAgICAgICAgICAgIG1fbnVt
YmVyT2ZGcmFtZXMgPSBtX2Rlc2NyaXB0aW9uLnNhbXBsZVJhdGUoKSAqIDI7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9N
SFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxl
Y3RfZWxlbWVudF9hZGQoCiAgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEVs
ZW1lbnQgPSBXZWJLaXQ6OmNvcmUoZWxlbWVudCk7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQq
IGNvbnZlcnRlZEJlZm9yZSA9IFdlYktpdDo6Y29yZShiZWZvcmUpOwotICAgIFZhcmlhbnQ8UmVm
UHRyPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRH
cm91cEVsZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVs
ZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVs
ZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZkb3du
Y2FzdDxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oKmNvbnZlcnRlZEVsZW1lbnQpOwogICAg
IGVsc2UgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvbnZlcnRlZEVsZW1l
bnQpKQpJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5t
bToKKyAgICAgICAgKC1bRE9NSFRNTFNlbGVjdEVsZW1lbnQgYWRkOmJlZm9yZTpdKToKKwogMjAx
Ny0wOC0xNyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAg
IFtQQUxdIFJlbG9jYXRlIFNlc3Npb25JRCB0byByb290CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCShyZXZpc2lvbiAy
MjA5MTUpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1l
bnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCAtICh2b2lkKWFkZDooRE9N
SFRNTEVsZW1lbnQgKillbGVtZW50IGJlCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9u
KCk7CiAKICAgICBhdXRvJiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOwotICAgIFZhcmlh
bnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRH
cm91cEVsZW1lbnQ+PiB2YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9w
dGlvbkVsZW1lbnQ+KGNvcmVFbGVtZW50KSkKICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93
bmNhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNvcmVFbGVtZW50KTsKICAgICBlbHNl
IGlmIChpczxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pihjb3JlRWxlbWVudCkpCkluZGV4
OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMjA5MTUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxNy0wOC0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wOC0xOCAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIyMDg1NC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9WYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzcgKzM3LDM3IEBAIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKIHsK
LSAgICBWYXJpYW50PGludCwgZG91YmxlPiB2MTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3Vi
bGU+IHYxOwogICAgIEVYUEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RS
VUUoV1RGOjpnZXQ8aW50Pih2MSkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50
Pih2MSkgPT0gMCk7CiAKICAgICBzdHJ1Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7
IH0KICAgICAgICAgaW50IHZhbHVlOwogICAgIH07CiAKLSAgICBWYXJpYW50PFQsIGludD4gdjI7
CisgICAgc3RkOjp2YXJpYW50PFQsIGludD4gdjI7CiAgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgo
KSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOwor
ICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CiB9CiAKIFRFU1Qo
V1RGX1ZhcmlhbnQsIEJhc2ljKQogewotICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQg
PSAxOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQ
RUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0
PGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4o
dmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJp
YW50KSA9PSBudWxscHRyKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PGludD4odmFyaWFudCkpOwotICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odmFyaWFu
dCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGludD4oJnZhcmlhbnQpID09
IDEpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IG51
bGxwdHIpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJp
YW50KSk7CisgICAgRVhQRUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2
YXJpYW50KSk7CiAKICAgICB2YXJpYW50ID0gMS4wOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQu
aW5kZXgoKSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQp
ID09IDEpOwotICAgIEVYUEVDVF9UUlVFKCpXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09
IDEuMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxs
cHRyKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFy
aWFudCkpOwotICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFy
aWFudCkpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7
CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IDEuMCk7
CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCkgPT0gbnVsbHB0cik7
CisgICAgRVhQRUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQp
KTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQp
KTsKIH0KIAogVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTMgKzk0LDEz
IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5
cGU6Ok5vbmU7CiAKLSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7
Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlh
bnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0
b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsK
IAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2
YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKQEAgLTEyNywxMiArMTI3LDEyIEBA
IFRFU1QoV1RGX1ZhcmlhbnQsIFJldGFpblB0cikKICAgICAKICAgICBSZWZQdHI8UmVmTG9nZ2Vy
PiByZWZQdHI7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcmV0YWluUHRyOwotICAgIFZhcmlh
bnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1v
dmUocmVmUHRyKSk7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6
OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50
KFdURk1vdmUocmVmUHRyKSk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAg
ICBFWFBFQ1RfVFJVRShUeXBlOjpSZWZQdHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9
IFdURk1vdmUocmV0YWluUHRyKTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwor
ICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6
UmV0YWluUHRyID09IHR5cGUpOwogfQogI2VuZGlmCkBAIC0xNTQsMTggKzE1NCwxOCBAQCBURVNU
KFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgICAgIFsmXShTdHJpbmcp
IHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQogICAgICk7CiAKLSAgICBWYXJpYW50PGludCwgZmxv
YXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50
KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAg
ICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6Oklu
dCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVY
UEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxv
IjsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwog
fQogCkBAIC0xODAsNyArMTgwLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nU3dp
dGNoT24pCiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudDxpbnQs
IGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0
LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwogICAgIHR5cGUgPSBXVEY6OnN3aXRjaE9uKHZhcmlhbnQs
CiAgICAgICAgIFtdKGludCkgeyByZXR1cm4gVHlwZTo6SW50OyB9LAogICAgICAgICBbXShmbG9h
dCkgeyByZXR1cm4gVHlwZTo6RmxvYXQ7IH0sCkBAIC0yMTMsNyArMjEzLDcgQEAgVEVTVChXVEZf
VmFyaWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogCiAgICAgewogICAgICAgICBhdXRvIHVu
aXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4o
KTsKLSAgICAgICAgVmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9y
Q291bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJp
YW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2
ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1Rf
RVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpA
QCAtMjI4LDcgKzIyOCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAg
ICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7
Ci0gICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKKyAgICAg
ICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQog
CiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBURVNUKFdURl9WYXJpYW50
LCBSZWZQdHIpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+
LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVm
TG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJF
USgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTI0Nyw3ICsy
NDcsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWYpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOwogICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7Ci0gICAgICAgIFZhcmlhbnQ8
UmVmPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJp
YW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpA
QCAtMjY1LDExICsyNjUsMTEgQEAgcHVibGljOgogCiBURVNUKFdURl9WYXJpYW50LCBPcGVyYXRv
ckFtcGVyc2FuZCkKIHsKLSAgICBWYXJpYW50PEhvbGRlcjxpbnQ+LCBpbnQ+IHYgPSBIb2xkZXI8
aW50PigxMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8SG9sZGVyPGludD4+KHYpLmRhdGEg
PT0gMTApOworICAgIHN0ZDo6dmFyaWFudDxIb2xkZXI8aW50PiwgaW50PiB2ID0gSG9sZGVyPGlu
dD4oMTApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PEhvbGRlcjxpbnQ+Pih2KS5kYXRhID09
IDEwKTsKIAogICAgIHYgPSAyMDsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYpID09
IDIwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYpID09IDIwKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318494</attachid>
            <date>2017-08-18 07:13:49 -0700</date>
            <delta_ts>2017-08-18 09:24:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170818071348.patch</filename>
            <type>text/plain</type>
            <size>365639</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5OiBjb25zdCBpbiB1bnJlYWNoYWJsZSBjb2RlIGRl
Y29kZWQgaW5jb3JyZWN0bHksIGVycm9uZW91c2x5IHJlamVjdHMgYmluYXJ5IGFzIGludmFsaWQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3Nyw3ICs4MDc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwgZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiBy
ZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3BlcmFuZHM7CisgICAgVmVjdG9y
PHN0ZDo6dmFyaWFudDxTcGVjdWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5k
LCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdV
TUVOVFNfSU5DTFVESU5HX1RISVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxHUFJSZWcsIEpTQ19E
T01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IHJlZ3M7CiAKICAg
ICBhdXRvIGFwcGVuZENlbGwgPSBbJl0oRWRnZSYgZWRnZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zODg4LDcgKzM4ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGVDZWxs
T3BlcmFuZCYmIG90aGVyKQorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kJiYgb3RoZXIpCiAgICAgewogICAgICAgICBtX2ppdCA9IG90aGVyLm1faml0OwogICAg
ICAgICBtX2VkZ2UgPSBvdGhlci5tX2VkZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NuaXBwZXRSZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NuaXBwZXRSZWcuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbmlwcGV0UmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIxICs3MiwyMSBAQCBwdWJs
aWM6CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNHUFIo
KSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CisgICAgICAg
IHJldHVybiBzdGQ6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CiAgICAgfQogICAgIEZQUlJlZyBm
cHIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRlBSKCkpOwotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVncygpKTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8SlNWYWx1ZVJlZ3M+KG1fdmFyaWFudCk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZhcmlhbnQ8R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgc3Rk
Ojp2YXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVncz4gbV92YXJpYW50OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIxIEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAq
IHd0Zi9JblBsYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAg
ICAqIHd0Zi9WYXJpYW50Lmg6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNDo6YXJyYXk6Om9w
ZXJhdG9yW10gY29uc3QpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6aW52
b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6
OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNzo6ZGV0YWlsOjpoYXNfYWRk
cmVzc29mX2ltcGw6OmltcGwpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6
YWRkcmVzc29mKToKKyAgICAgICAgKG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X2ltcGw6
OmRlY2x0eXBlKToKKyAgICAgICAgKHN0ZDo6dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjphbGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5k
ZXgpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5kZXhfaW1wbCk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6dHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFpdCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29tbW9uX3RyYWl0X2ltcGwpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6Z2V0X2FsdF9pbXBsOjpBVVRPX1JF
RlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3Vu
aW9uOjpBVVRPX1JFRlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6
YmFzZTo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0
aW9uOjpiYXNlOjphdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6
dmlzaXRfdmlzaXRvcl9yZXR1cm5fdHlwZV9jaGVjayk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
dmlzaXRhdGlvbjo6YmFzZTo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OmJhc2U6Om1ha2VfZmRpYWdvbmFsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2
aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbDo6aW1wbDxtcGFyazo6bGliOjpp
bmRleF9zZXF1ZW5jZTxJczo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ6OnZhbHVlX3Zpc2l0b3I6OkRFQ0xUWVBFX0FVVE9fUkVUVVJOKToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OjpBVVRPX1JFVFVSTik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWx0OjphbHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Ok1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpiYXNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjppbmRleF8pOgorICAgICAg
ICAoc3RkOjpkZXRhaWw6OmJhc2U6OmFzX2Jhc2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJh
c2U6OmRhdGEpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJhc2U6OnNpemUpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRl
dGFpbDo6Y29uc3RydWN0b3I6OmN0b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RfYWx0KToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpjb25zdHJ1Y3Rvcjo6Z2VuZXJpY19jb25zdHJ1Y3QpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6Ok1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojphc3NpZ25tZW50OjplbXBsYWNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphc3NpZ25tZW50
Ojphc3NpZ25lcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNz
aWdubWVudDo6YXNzaWduX2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6
Z2VuZXJpY19hc3NpZ24pOgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfTU9W
RV9BU1NJR05NRU5UKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0NPUFlf
QVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6YXNzaWduKToKKyAgICAg
ICAgKHN0ZDo6ZGV0YWlsOjppbXBsOjpzd2FwKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojpzd2FwcGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojptb3ZlX25vdGhyb3cgY29uc3QpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Om92ZXJsb2FkPD46
Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3RkOjp2YXJpYW50Ojpub2V4Y2VwdCk6Cisg
ICAgICAgIChzdGQ6OnZhcmlhbnQ6OmVtcGxhY2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omdl
bmVyaWNfZ2V0X2ltcGw6OmdlbmVyaWNfZ2V0X2ltcGwpOgorICAgICAgICAoc3RkOjpnZXQpOgor
ICAgICAgICAoc3RkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChzdGQ6Om9wZXJhdG9yPCk6CisgICAgICAgIChzdGQ6Om9wZXJhdG9yPik6CisgICAg
ICAgIChzdGQ6Om9wZXJhdG9yPD0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcj49KToKKyAgICAg
ICAgKHN0ZDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omhhc2g6Om1lZXRzX3Jl
cXVpcmVtZW50cyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZCk6Cisg
ICAgICAgIChXVEY6OnN3aXRjaE9uKToKKyAgICAgICAgKFdURjo6aW5fcGxhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Oj0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFn
ZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19n
ZXRfcnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2Rl
c3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19jb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19zdG9y
YWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6
X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19kZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6Ol9f
c3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50
X2Jhc2U6On5fX3ZhcmlhbnRfYmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2Vfb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19kZXN0cm95X2Z1bmMpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6fl9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpWYXJpYW50PD46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX05PRVhDRVBUXyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9hY2Nlc3Nv
cjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Z2V0X2lmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdG9yX3RhYmxlOjpf
X3RyYW1wb2xpbmVfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnZpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19oYXNoX3Zpc2l0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHd0Zi90ZXh0
L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tOgorICAgICAgICAoV1RGOjpt
YXBNb2RlVG9CYWNraW5nSXRlcmF0b3IpOgorCiAyMDE3LTA4LTE3ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmx5IHVzZSAxNiBWRlAgcmVnaXN0ZXJzIGlmICFD
UFUoQVJNX05FT04pLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAKIAkJN0FGRUM2QUUx
RUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZFQzZCMDFFQjIyQjU5
MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjcyMzkxRDc4ODEx
OTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg2OTYxQjFGNDU0NEY3
MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBsYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVj
dFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyog
VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBT
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFz
aFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIu
aCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKKwkJ
CQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovLAogCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIHZhcmlhbnQ7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBj
bGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTczLDUgKzczLDQgQEAgdXNp
bmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwogdXNpbmcgV1RG
OjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11c2luZyBXVEY6OlZhcmlh
bnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luUGxhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVz
cGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdCgp
ID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KKyAgc3RydWN0IGlu
X3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90KCkgPSBkZWZhdWx0OyB9
OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5fcGxhY2VfdHlwZV90IHsg
ZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9OworCisgIGNvbnN0ZXhwciBp
bl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+IGNvbnN0
ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307CisKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4gaW5fcGxhY2VfdHlwZXt9
OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0
ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1dGlsaXR5PgotIyBpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KICMgaW5jbHVk
ZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRlIDxpbml0aWFsaXplcl9s
aXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGluY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBpbmNsdWRlIDx3dGYvSW5Q
bGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICMgZGVmaW5lIFRSMl9P
UFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19f
Ojp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4NCw4IEBAIGNvbnN0ZXhw
ciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAyMC41LjYsIEluLXBsYWNl
IGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsK
LQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsKKy8vIGluX3Bs
YWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNvIGl0IGNhbiBiZSBzaGFy
ZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5nYWdlZCBzdGF0ZSBpbmRp
Y2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDc5ICsx
LDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0d2FyZSBTb2x1dGlvbnMg
THRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFyaWFudAogLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IK
LS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
Ci0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29weXJpZ2h0IE1pY2hhZWwg
UGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWltZXIuCisvLyBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwogLy8KLS8v
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9y
IG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFj
Y29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRoaXMgbGljZW5zZSAodGhl
ICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorLy8g
ZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZh
dGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRp
ZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisvLyBkbyBzbywgYWxsIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0vLyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLS8vIHBlcm1p
c3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlz
IGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQs
IHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKy8vIG11c3Qg
YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGlu
IHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxl
c3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJlIHNvbGVseSBpbiB0aGUg
Zm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CisvLyBh
IHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotLy8gSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0vLyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAotLy8gRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKy8vIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FS
RSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGllZCBmcm9tIGh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhmNzllNWVh
MWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9t
cGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFyaWFudC5ocHAgKGMyNmI4
NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8vIE1vZGlmaWVkIHRvIG1h
a2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisvLyBNb2RpZmllZCB0byB1
c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgsIGFuZCBpbmNsdWRlIFdU
Rjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoKKyAgIHZhcmlhbnQgc3lu
b3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBjbGFzcyB0ZW1wbGF0ZSB2
YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xhc3MgdmFyaWFudCB7Cisg
IHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMKKyAgICBjb25zdGV4cHIg
dmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFudChjb25zdCB2YXJpYW50
Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBub2V4Y2VwdChzZWUgYmVs
b3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBBcmdzJiYuLi4pOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwgaW5pdGlh
bGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xh
c3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudChpbl9wbGFjZV9pbmRl
eF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBVLCBj
bGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJpYW50KAorICAgICAgICBp
bl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgpOworCisgICAgLy8gMjAu
Ny4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgdmFyaWFudCYp
OworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0b3I9KFQmJikgbm9leGNl
cHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmllcnMKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNlKEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBl
bXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8
c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJp
YW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0aXZlPEksIHZhcmlhbnQ+
JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICAvLyAyMC43
LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXplX3QgaW5kZXgoKSBjb25z
dCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAgdm9pZCBzd2FwKHZhcmlh
bnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIwLjcuMywgdmFyaWFudCBo
ZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTsg
Ly8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNvbnN0ZXhwciBzaXplX3Qg
dmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworCisgIHRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisKKyAgdGVtcGxhdGUgPGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHlwZXMuLi4+PjsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0
aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+CisgIHVz
aW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBUPjsKKyAgdGVtcGxh
dGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25z
dCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5cGVzLi4uPj47CisKKyAg
Y29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAvLyAyMC43LjQsIHZhbHVl
IGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jikgbm9leGNl
cHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHBy
IHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4mCisgIGdldCh2YXJp
YW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+
CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+
JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBjb25zdCYmCisgIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mu
Li4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgVCYmIGdldCh2
YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25z
dCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXpl
X3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PHZhcmlhbnRf
YWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZih2YXJpYW50PFR5
cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUeXBlcz4KKyAg
Y29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHlwZXMuLi4+Kikg
bm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9uYWwgb3BlcmF0b3JzCisg
IHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBs
YXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxh
dGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHZh
cmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICAvLyAyMC43
LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3IsIGNsYXNzLi4uIFZhcmlh
bnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3ImJiwgVmFyaWFudHMmJi4u
Lik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3RydWN0IG1vbm9zdGF0ZTsK
KworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJhdG9ycworICBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsK
KyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNl
cHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFsZ29yaXRobXMKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFudDxUeXBlcy4uLj4mLCB2
YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgLy8gMjAuNy4xMCwg
Y2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2VzczsKKwor
ICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBo
YXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBoYXNoPHZhcmlhbnQ8VHlw
ZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0YXRlPjsKKworfSAvLyBu
YW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGV4Y2Vw
dGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG5ldz4K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIENP
TVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisKKy8vIE1TVkMg
MjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wgJiYgKCFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vycm9yICJNUGFyay5WYXJp
YW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIoQ0xB
TkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hhc19idWlsdGluCisjZGVm
aW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgeworI2lmbmRl
ZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCiAKLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9l
eGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0
aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsg
KHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhD
RVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRp
bl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0g
NykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJTFRJTl9BRERSRVNTT0YK
ICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFzX2J1aWx0aW4oX190eXBl
X3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Cisj
aWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0ZXhwciA+PSAyMDEzMDQK
KyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAorI2lmIF9faGFzX2ZlYXR1
cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykKKyNkZWZpbmUg
TVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFjZV90YWcgewotICAgIGlu
X3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9fY3BwX2dlbmVyaWNfbGFt
YmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfR0VORVJJQ19MQU1CREFT
CisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNl
X3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2VyX3NlcXVlbmNlKQorI2Rl
ZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVtcGxhdGUgPGNsYXNzIF9U
eXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZpbmVkKF9fY3BwX3JldHVy
bl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfUkVU
VVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci11
c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0
ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQoX19jcHBfbGliX3RyYW5z
cGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfVFJB
TlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5f
cGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFibGVfdGVtcGxhdGVzKSB8
fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJMRV9URU1QTEFURVMKKyNl
bmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19p
bl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAgX19USFJPV19F
WENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFkZWZpbmVkKF9fR0xJQkNY
WF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRTCisjZWxpZiBkZWZpbmVk
KF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+KSAgLy8gPj0gbGlic3Rk
YysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlUUworI2VuZGlmCiAKLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3M6
IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0IGJhZF92YXJp
YW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAgICBzdGQ6Omxv
Z2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNj
ZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0
X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciog
d2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0
X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVtZW50YXRpb24gbW92ZWQg
dG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI7Cisj
ZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+IGRlY2x0eXBlKF9fVkFf
QVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJrIHsKKyAgbmFtZXNwYWNl
IGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlkZW50aXR5IHsg
dXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNlIGNwcDE0IHsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IGFycmF5
IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgaW5k
ZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07CisgICAgICAgIH0KIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxf
VHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192
YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09m
ZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTww
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRf
dHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9U
eXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMp
LTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
bGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3NpemU7
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
X1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9U
eXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8
X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9z
aXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlhbnQ8
X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2Yu
Li4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXplX3Qg
X0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50
X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9J
bmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgs
IHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFy
aWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVf
dCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0lu
ZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xh
dGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlw
ZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Y29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAgVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0
eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5
cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNpemVf
dCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NI
QVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgp
LAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlw
ZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWlu
YXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBfX3R5
cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9y
X3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90
eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFs
dWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1l
IF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+Ojpf
X3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0
aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQot
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBl
bmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwtMSxf
SGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6X192
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxf
SGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9z
dG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAg
ICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYmCi0g
ICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0
cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBf
c3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0g
ICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFs
dWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgr
MSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdl
X3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFudDxf
VHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19h
bnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9UeXBl
cy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotdW5p
b24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2w9c3RkOjpp
c19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZXsK
LSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRhW04gPT0gMCA/IDEgOiBO
XTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0eXBlbmFtZSBzdGQ6OmFk
ZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBf
X3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3Ry
dWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5
cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlwZV90ID0gdHlwZW5hbWUg
c3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZh
bHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxs
cHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0eXBlbmFtZSBzdGQ6OmRl
Y2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgot
ICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwh
c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZv
aWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19m
aXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVzaW5nIGVuYWJsZV9pZl90
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAKLSAgICBfVHlwZSYgX19n
ZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZv
aWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0
YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19k
ZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2NvbnN0X3QgPSB0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92ZV9yZWZlcmVuY2VfdCA9
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsKIAotICAgIF9UeXBlJiBf
X2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsK
LSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29u
c3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAmdCkgbm9leGNlcHQgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsK
LSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5cGU7CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVt
b3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1ZSIpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9f
Z2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29u
c3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIF9fdmFsLl9f
ZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAg
IGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmbW92ZShUICYmdCkgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSog
X190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9zZXF1ZW5jZSA9IHN0ZDo6
aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElz
PgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4u
PjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5j
ZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5
cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0
KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUm
Jj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlw
ZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5nIGluZGV4
X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRzLi4uPjsKKyNlbHNlCisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAgIHN0cnVjdCBpbnRlZ2Vy
X3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsgcmV0dXJuIHNpemVvZi4u
LihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4K
KyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1ZW5jZTxzdGQ6OnNpemVf
dCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7CisKKyAgICAgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJocz4KKyAgICAgIHN0cnVj
dCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5jZTxMaHMuLi4+LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3NlcXVlbmNlPFJocy4u
Lj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxMaHMuLi4sIChzaXplb2Yu
Li4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOworCisgICAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhfc2VxdWVuY2UgPSB0eXBl
bmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbAor
ICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2lu
ZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRlPD4KLXVuaW9uIF9fdmFy
aWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7Ci0gICAgc3Ry
dWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4u
IF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2lt
cGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAotICAgIF9UeXBlJiBfX2dl
dChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRf
cnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7
Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9z
ZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8MD4+IHt9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJj57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBlIF9fdmFsOwotICAgIHN0
cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4u
IFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFrZV9pbmRleF9zZXF1ZW5j
ZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lmZGVmIE1QQVJLX1RSQU5T
UEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBzdGQ6OmVxdWFsX3RvPD47
CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3Bl
cmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGli
Ojpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsK
KyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6
Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKyNpZmRl
ZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIG5vdF9lcXVhbF90byA9
IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IG5vdF9lcXVhbF90byB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNv
bnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgIT0gbGliOjpmb3J3
YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Jj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47CisjZWxzZQorICAgICAg
c3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBS
aHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywg
UmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMp
IDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBl
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0
ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAg
ICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9
Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZ3Jl
YXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVjdCBncmVhdGVyIHsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QK
KyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+IGxpYjo6Zm9yd2FyZDxS
aHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
dW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgbGVz
c19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4K
KyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMg
JiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPD0g
bGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3RkOjpncmVhdGVyX2VxdWFs
PD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgeworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIg
YXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJF
VFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisg
ICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4s
X0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9CisgICAgaW5saW5lIG5hbWVz
cGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsK
LSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQo
X192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJl
ZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6
X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5cGVfdHJhaXRzPgorICAg
ICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29uc3RhbnQgPSBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVz
dC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6Ci0gICAgICAg
IF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25z
dGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2Fy
Z3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+IHt9OwogCi0gICAgX0hl
YWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9f
Z2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+
CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMuLi4+Ojp0eXBlOwogCi0g
ICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7
Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQot
ICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDww
PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAg
IH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1lc3BhY2Ugc3dhcHBhYmxl
IHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAot
ICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVy
biBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9pbXBsIHsKKyAgICAgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwKKyAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3RkOjpkZWNsdmFsPFUgJj4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpk
ZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OnRydWVfdHlw
ZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+
KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4p
OwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4uKTsKIAorICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0eXBlKHRlc3Q8VD4oMCkp
OworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9pbmRp
Y2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
dHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFyaWFu
dDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
LSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50
KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
bGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2Vf
Y29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19y
aHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAg
IHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJsZV9pbXBsPFQ+Ojp0eXBl
OwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sID0gaXNfc3dh
cHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90aHJvd19zd2FwcGFibGUg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgICAg
ICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0ZDo6ZGVjbHZhbDxUICY+
KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUK
LV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19ub3Rocm93X3N3YXBwYWJs
ZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19s
aHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1v
dmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0gIC8vIG5hbWVzcGFjZSBz
d2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBhYmxlID0gZGV0YWlsOjpz
d2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2FwcGFibGUgPSBkZXRhaWw6
OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdl
dDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0aW9uYWw+CisjaWZkZWYg
X01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUg
OiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYgJiZmLCBBcyAmJi4uLiBh
cykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxpYjo6Zm9yd2FyZDxBcz4o
YXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgog
Ci0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2Vz
KV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtdiwgRCAmJmQp
CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12KQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwgdHlwZW5hbWUgUHRyPgor
ICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12LCBQdHIgJiZwdHIpCisg
ICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSkuKnBtdikKIAotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNz
aWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVu
Y190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAg
ICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBn
ZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUuLi4gQXM+
CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtZiwgRCAmJmQsIEFz
ICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJkPEQ+KGQpLipwbWYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3Rl
eHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYuLi4gYXMpCisgICAgICAg
ICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYpKGxpYjo6Zm9yd2FyZDxB
cz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNz
aWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWdu
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxm
KXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+
X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4K
KyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBzdHJ1Y3QgaW52b2tl
X3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4p
KT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5PGRlY2x0eXBlKAorICAg
ICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+KCksIHN0ZDo6ZGVjbHZh
bDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19kZXN0
cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2Rlc3Ryb3lfZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fc3dh
cF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShf
VmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBfVmFyaWFudCAmIF9fbGhz
LF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5kZXg+KF9fbGhzKSxnZXQ8
X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9IGRldGFpbDo6aW52b2tl
X3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlw
ZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdF90ID0g
dHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
c3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ogot
X19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRh
aWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9J
bmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3Ry
dWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29u
c3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0
JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRl
eD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3QgaXNf
aW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBf
X2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9yZXN1bHRfdDxGLCBBcmdz
Li4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2Nv
bXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9W
YXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBh
cmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19y
aHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0
eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNf
dHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90PEYsIEFy
Z3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
Lj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZva2VfcmVzdWx0X3Q8Riwg
QXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190
eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07
CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlzX2ludm9jYWJsZSA9IGRl
dGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9i
YXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJp
dmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcg
aXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZvaWQsIFIsIEYsIEFyZ3Mu
Li4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFz
ZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBfVHlwZSxf
VHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBl
cjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sX09mZnNl
dD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAg
IHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4uPjo6X190
eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9D
dXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxw
ZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9DdXJyZW50
U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVjdCBfX2Nv
bWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uPixfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmluZV9zZXF1
ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmlu
ZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21i
aW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+PnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4OwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAg
ICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBl
ZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQscHRyZGlm
Zl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVkZWYgX19p
bmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRW50cnk+
Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlwZWRlZiBf
X2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25zdHJ1Y3Rp
YmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5cGVuYW1l
IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNlLAotICAg
ICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhf
c2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAot
ICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQot
ICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+
OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0
aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwK
LSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25z
dHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3Ry
dWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJs
ZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAg
ICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0g
ICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxf
bWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJv
b2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFz
X25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19t
b3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQot
dGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNf
aGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
aGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93
X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9J
bmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1lbW9yeT4KKyNpZmRlZiBN
UEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJu
IF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBuYW1lc3Bh
Y2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3Zl
LAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9f
dHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9f
di50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2UgaGFzX2FkZHJlc3NvZl9p
bXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZm
X3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwK
LSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQgJiYpOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2
b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGJvb2wgaW1wbCgp
IHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6dmFsdWUgfHwgc3RkOjpp
c191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1ZTsKKyAgICAgICAgICB9
CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19h
cmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6
OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07CisgICAgICAgIH0gIC8vIG5h
bWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJp
YW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVw
bGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0g
ICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9IGJvb2xfY29uc3RhbnQ8
aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRl
bXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0luZGV4PihfX3JocykpOwot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNz
aWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2NvcHlfZnVuY190
eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190eXBlCi1fX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIFQg
KmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAgICAgICAgcmV0dXJuIHN0
ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNzb2YoVCAm
YXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4gJmFyZzsKKyAgICAgICAg
fQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVu
YW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0
b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9f
Z2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAog
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBU
SU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWlsOjpoYXNfYWRkcmVzc29m
PFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4
LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0
b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGlu
ZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVsZXRlOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9f
c291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFn
ZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVj
dCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9ICAvLyBuYW1lc3BhY2Ug
Y3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUg
X19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5k
ZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNf
dHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdl
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6
Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50aXR5PFQ+IHt9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CisgICAgc3RydWN0IHJlbW92
ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4dGVudHM8VD4ge307CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1vdmVfYWxsX2V4dGVudHNf
dCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsKKworICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQgPSBzdGQ6OmludGVncmFs
X2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVu
YW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2Jh
Y2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lf
ZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVzaW5nIGJvb2xfc2VxdWVu
Y2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVkX3R5cGUgOiBzaXplX2Nv
bnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgor
ICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29sX3NlcXVlbmNlPHRydWUs
IEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisjaWZkZWYgTVBBUktfVFlQ
RV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlwZV9wYWNrX2VsZW1lbnQ8
SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUu
Li4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwgeworICAgICAgcHJpdmF0
ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBzZXQ7CisKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVjdCBzZXQ8aW5kZXhfc2Vx
dWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9OworCisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8dHJ1
ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIHVz
aW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5jZV9mb3I8VHMuLi4+Pnt9
KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190
eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQot
ICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZl
X3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9z
dG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3Rv
cmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3Rv
cmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAot
ICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBf
X29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rl
c3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29w
X3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAg
ICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAK
LSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAg
ICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVfcGFja19lbGVtZW50ID0g
dHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46OnR5cGU7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
OworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2lu
ZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnQ8SSwgVHMu
Li4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+
Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4u
Pjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQRV9UUkFJVFMKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfY29weV9jb25zdHJ1
Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFQ+
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21v
dmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfY29uc3Ry
dWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUKKyAgICAgICAgOiBib29s
X2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlIDogYm9v
bF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGUKKyAgICAgICAgOiBi
b29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6
OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBz
dHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xfY29uc3RhbnQ8X19pc190
cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAgLy8gbmFtZXNwYWNlIGxp
YgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJFVFVSTgogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9f
YWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFj
ZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Pgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgot
c3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNs
dHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090
aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVzcGFjZSBzdGQgewogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2Rl
dGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4u
KSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgot
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyNkZWZpbmUg
QVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9SRVRVUk4oLi4uKSB7IHJl
dHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxl
PD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0cnVj
dGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRy
dWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9j
b25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRl
bXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAgIDog
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMuLi4+
IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8pCisjZGVmaW5lIERFQ0xU
WVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Cisj
ZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsK
KyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4uLikgXAorICAtPiBtcGFy
azo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyByZXR1cm4gX19WQV9BUkdT
X187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5lIEFVVE9fUkVGUkVGX1JF
VFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
LT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19yZWZlcmVuY2U8ZGVj
bHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmluZSBERUNMVFlQRV9BVVRP
X1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18pIHsgcmV0dXJuIF9fVkFf
QVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0
aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYm
IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3Qu
Li4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92
YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5
Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFs
PF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMu
Li4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQm
PigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3Zhcmlh
bnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRf
c3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAg
ICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICB0eXBl
ZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBf
X2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8
VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlh
bnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0g
ICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmll
bmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBl
cy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAg
IHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5
cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAg
cmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsK
LSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
dGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBf
X21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29u
c3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5k
ZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3Ro
ZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3QgX19jb3B5X2NvbnN0cnVj
dChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3Ro
ZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJs
ZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAg
ICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2Vz
cyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgorICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJiYWRfdmFyaWFudF9hY2Nl
c3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lkIHRocm93X2JhZF92YXJp
YW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3Zh
cmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRlKCk7CisjZW5kaWYKKyAg
fQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
dm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVy
PAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29u
c3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAg
IChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19v
dGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAg
IF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUo
KnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFj
ZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3Zhcmlh
bnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
X19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0g
ICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xvY2FsX2JhY2t1cF9y
ZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2U8X0lu
ZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwotICAgICAgICBfX2Vt
cGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9fZGVzdHJveSgpOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKSB7Ci0gICAg
ICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRl
eDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVTCisgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJp
YW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7
fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
VD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFu
dCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+
KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAg
IHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIp
Ci0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVj
dChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29u
c3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9f
Y29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhl
cik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8
X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAg
ICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAg
ICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5k
ZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZh
bHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIFQ+IDog
dmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9f
aW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3Rl
eHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAg
ICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9f
eCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
Ci0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVz
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0
aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3Rk
Ojppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0o
X1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsK
LSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0
aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9f
YWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJp
YW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNv
bnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAg
ICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHMuLi4+PiA6IG1wYXJr
OjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisKKyAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwor
CisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICB1c2luZyB2YXJpYW50
X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPEksIFQ+Ojp0eXBl
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6OmFkZF9jb25zdDx2YXJp
YW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
LCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBU
PgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+
IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3Qg
dmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFk
ZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6OmlkZW50aXR5PG1wYXJrOjps
aWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAgc3RhdGljX2Fzc2VydChJ
IDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFyaWFudF9hbHRlcm5hdGl2
ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0ZXhwciBzdGQ6OnNpemVf
dCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpOworCisgIG5hbWVz
cGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGFsbCgpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4KKyAgICBpbmxpbmUgY29u
c3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiICYmIGFs
bChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG5vdF9mb3VuZCA9
IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90
IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7CisKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAg
ICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVvZi4uLihUcyk+IG1hdGNo
ZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4ufQorICAgICAg
fTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsKKyAgICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsKKyAgICAgICAgaWYgKG1h
dGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9mb3VuZCkgeworICAgICAg
ICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ID0g
aTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVy
YXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBf
X2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAg
ICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAg
ICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgo
KT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAgICAg
X19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBl
cy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21vdmVf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3Rh
YmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5k
ZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Cisj
ZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleF9pbXBsKHN0
ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGlkeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnMuLi4gYnMp
IHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQgPyBhbWJpZ3VvdXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5kX2luZGV4X2ltcGwoaWR4
LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRfaW5kZXhfaW1wbChyZXN1
bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2lu
ZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3RfZm91bmQsIDAsIHN0ZDo6
aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09
LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1wbCA9CisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkgIT0gYW1iaWd1b3VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4+Owor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZp
bmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxmaW5kX2luZGV4PFQsIFRz
Li4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgorICAgIHN0cnVjdCBmaW5k
X2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4geworICAg
ICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVjaWZpZWQgdHlwZSBpcyBu
b3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1iaWd1b3VzLCAidGhlIHNw
ZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRfaW5kZXhfY2hlY2tlZCA9
IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMuLi4+KCk+OworCisgICAg
c3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50
X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9
PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgp
XSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAg
VmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAgICAgIF9fb3RoZXIu
X19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAgICAgICAgICAgX19p
bmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBjbGFzcyBUcmFpdCB7IFRy
aXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9OworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg
SXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4g
Y2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCB0cmFpdCgpIHsK
KyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFsdWUKKyAgICAgICAgICAg
ICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIDogSXNB
dmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJsZTsKKyAgICB9CisKKyNp
ZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJh
aXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0
cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGU7
CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkgeworICAgICAgICAgIHJl
c3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXRfaW1w
bChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1wbGF0ZTw+Ci1jbGFzcyBW
YXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25z
dGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRyYWl0cz4KKyAg
ICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0IHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWl0IHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFpdHMuLi4gdHMp
IHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2ltcGwodCwgdHMuLi4pCisg
ICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0LCB0cy4uLik7CiAgICAg
fQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAg
IGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0cykgeworICAg
ICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsIHRz
Li4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICBz
dGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAg
ICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZT4oKS4uLik7CisKKyAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0ID0KKyAg
ICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVjdGlibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPigpLi4uKTsK
KworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2lnbmFibGVfdHJhaXQgPQor
ICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4uLik7CisKKyAgICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0ID0KKyAgICAgICAgICBj
b21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAgICAgICAgICAgICAgICAg
ICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMgY29uc3Rl
eHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRy
YWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfZGVzdHJ1
Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgot
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUK
LXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jo
cykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6
dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBuYW1lc3BhY2UgYWNjZXNz
IHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9fdHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLX07Cisg
ICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9E
RURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgIGlubGluZSBz
dGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9wbGFjZV9pbmRleF90PDA+
KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVhZF87Cisg
ICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1
cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3QgST4KKyAgICAgICAgaW5s
aW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4
X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6bGliOjpmb3J3YXJkPFY+
KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVtbXkgPSB0cnVlPgorICAg
ICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Vj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVGIG9wZXJhdG9yKCkoViAm
JnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEkg
LSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQorICAgICAgICB9OworCisg
ICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBs
PDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAg
ICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVh
ZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFYsIHN0ZDo6c2l6
ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE9fUkVGUkVGIGdldF9h
bHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAgQVVUT19SRUZSRUZfUkVU
VVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpKQorI2VuZGlm
CisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBkYXRhKG1wYXJrOjpsaWI6
OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQorICAgICAgfTsKKworICAg
ICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlw
ZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0
X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oYmFzZTo6Z2V0X2FsdDxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAgIH07CisKKyAgICB9ICAv
LyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRhdGlvbiB7CisKKyAgICAg
IHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNvbnN0IFQgJmF0KGNvbnN0
IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNv
bnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZS4uLiBJcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6OmxpYjo6cmVtb3ZlX2Fs
bF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBhcms6OmxpYjo6YXJyYXk8
VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgeworICAgICAgICAgIHJldHVy
biBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2soKSB7Cisg
ICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYsIEZzPjo6dmFsdWUuLi4p
LAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRgIHJlcXVpcmVzIHRoZSB2
aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJldHVy
biB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmNvbW1vbl90eXBlX3Q8
bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT4K
KyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAgICAgICB1c2luZyByZXN1
bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25fdHlwZV90PG1wYXJrOjps
aWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92aXNpdG9yX3JldHVybl90
eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAorICAgICAgICAgICAgICAg
ICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19OworICAgICAgICB9CiAK
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAqKAotICAg
ICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2Yo
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkK
LSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgICAgc3RydWN0IGltcGwg
eworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyBkaXNw
YXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTiht
cGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGPihmKSwK
KyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJcz4oc3RhdGljX2Nhc3Q8
VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAg
ICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3BhdGNoKG1wYXJrOjpsaWI6
OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JFVFVSTigmZGlzcGF0Y2hl
cjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRjaCkKKworICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAg
ICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlhZ29uYWxfaW1wbCgpCisg
ICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4oCisgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmluZGV4ZWRfdHlwZTxJ
LCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlw
ZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGli
OjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJy
YXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4pKQorCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAg
aW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8gbWFrZV9mZGlhZ29uYWwo
KQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBWLCBWcy4u
Lj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFy
azo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCkgPT0g
bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAgICAgICAgICAgICAiYWxs
IG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7CisgICAgICAgICAgcmV0
dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46OnNpemUo
KT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJu
ICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFk
ZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIp
KQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4
LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBW
cywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1
dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0
dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAo
KChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4o
IkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7
Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdC4uLiBJcywKKyAgICAg
ICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0
cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4s
IG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4gbHMpIHsKKyAgICAgICAg
ICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+e30sIGxzLi4uKS4u
Lik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsK
LSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0g
ICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikp
Ci0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1ha2VfZm1hdHJpeCgpIHsK
KyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAgICAgICAgICAgIG1wYXJr
OjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUo
KT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1hdHJpeF9pbXBsIHsKKyAg
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAgc3RydWN0IGltcGw7CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgICAgc3RydWN0
IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7CisgICAgICAgICAgICBp
bmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAgIEFV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4obXBh
cms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAgICAgIH07CisKKyAgICAg
ICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6ZV90Li4uIEpzLCB0eXBl
bmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5kZXhfc2Vx
dWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4uPiB7CisgICAgICAgICAg
ICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAg
IEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAgICAgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgpLi4uKSkKKyAgICAgICAg
ICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFt
ZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2ZtYXRy
aXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtl
X2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8CisgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgp
Pi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdl
dDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVfdCBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25hbDxWaXNpdG9yICYmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShhc19iYXNlKG1wYXJrOjps
aWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAgICAgICBpbmRleCkobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlz
aXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAg
ICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykp
KS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLikobXBhcms6OmxpYjo6Zm9y
d2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkKKyAgICAgIH07CisKKyAg
ICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAgICAgICAgc3RydWN0IHZp
c2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydCgK
KyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZpc2l0b3IsIFZhbHVlcy4u
Lj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAgcmVxdWlyZXMgdGhlIHZp
c2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29u
c3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIChf
X3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxw
dHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNpZmRlZiBfTVNDX1ZFUgor
I3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDApCisj
ZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3Io
KShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25zdAorICAgICAgICAgICAg
REVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1wYXJrOjpsaWI6OmZvcndh
cmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFsdWVzKS4uLikpCisjaWZk
ZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyAgICAgICAgfTsKIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVy
biAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29m
KF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHN0cnVjdCB2YWx1ZV92
aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xU
WVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0CisgICAgICAgICAgICBE
RUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNpdF9leGhhdXN0aXZlX3Zp
c2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IsCisgICAgICAgICAgICAg
ICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlKSku
Li4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4o
dmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX3Zh
bHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAgQVVUT19SRVRVUk4odmFs
dWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3Ip
fSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9y
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZ
UEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNp
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAg
ICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZz
KS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVu
YW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRP
IHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVD
TFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vmlz
aXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3ZhbHVlX2F0KHN0ZDo6c2l6
ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAg
ICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHRfYXQo
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ZhbHVlX3Zpc2l0b3IobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQorCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShWaXNpdG9yICYmdmlzaXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAg
ICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJk
PFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAgLy8gbmFtZXNwYWNlIHZp
c2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjph
ZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3Rk
OjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192
KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIGFsdChpbl9wbGFjZV90
LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9w
KQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2YWx1ZTsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxl
VHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1bmlvbiByZWN1
cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBl
cy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0
dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAg
dHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRf
dHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0
dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRf
dHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90
IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwgSW5k
ZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKGRlc3RydWN0
aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
bmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICBcCisgIHVu
aW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4LCBULCBUcy4uLj4g
eyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0
IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5vZXhjZXB0ICAgICAgICBc
CisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5f
cGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAg
IDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5k
ZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAgIDogdGFpbF8o
aW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihjb25z
dCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KGNv
bnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAorICAgIHJlY3Vyc2l2
ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNo
YXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbjxk
ZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxfOyAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpyZWN1cnNpdmVf
dW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFS
S19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9IGRlZmF1
bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSB7
fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJhaXQ6OlVuYXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9
IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04KKworICAg
IHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVz
dHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNzIGJhc2UgeworICAgICAg
cHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKHZhbHVlbGVzc190
IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGluZGV4XyhzdGF0aWNfY2Fz
dDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKGluX3Bs
YWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICA6IGRhdGFfKGluX3Bs
YWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiksCisg
ICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIHZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBp
bmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgfQorCisgICAgICBpbmxp
bmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNlcHQgeworICAgICAg
ICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFudF9ucG9zIDogaW5kZXhf
OworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2luZyBkYXRhX3QgPSByZWN1
cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsKKworICAgICAgZnJpZW5k
IGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7IHJldHVybiBiOyB9Cisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZhc19iYXNlKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGJhc2Ug
JiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3ZlKGIpOyB9CisgICAg
ICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNfYmFzZShjb25zdCBiYXNl
ICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisgICAgICBmcmllbmQgaW5s
aW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQor
ICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90ICZkYXRhKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHBy
IGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0
YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGRhdGFfdCAmJmRhdGEo
Y29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0YV87IH0KKwor
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIHsgcmV0dXJu
IHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1w
b2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFfdCBkYXRhXzsKKyAgICAg
IGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBl
cy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBvbGluZV9m
dW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpiYXNlOworICAgICAg
ZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX192
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zp
c2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAo
X192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVz
Li4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpCi0gICAgICAgIDogX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgo
KV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3IgeworI2lmZGVmIF9NU0NfVkVS
CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMCkK
KyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSB2b2lk
IG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0Ln5BbHQoKTsgfQorI2lm
ZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikp
Ci0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5h
bWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zp
c2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07CisjaWYgZGVm
aW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RP
Uih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHR5
cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RPUih0eXBlLCBi
YXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3RydWN0aWJsZV90cmFpdD4K
KyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9ERVNUUlVD
VE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJveSkgXAorICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4uPiwgZGVzdHJ1Y3RpYmxl
X3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGJhc2U8ZGVzdHJ1
Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVz
aW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPjsgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yICYmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVjdG9yICYpID0gZGVmYXVs
dDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGRlc3RydWN0
b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisgICAg
TVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxh
YmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisgICAgICAgIGlubGluZSB2
b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+aW5kZXhfID0gc3RhdGlj
X2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfREVT
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgfmRlc3RydWN0b3Io
KSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0
IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7fSwgKnRoaXMpOworICAg
ICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90Pigt
MSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAg
ICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBkZWxldGU7LAor
ICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBkZWxldGU7KTsKKworI3Vu
ZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRy
YWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0cnVjdG9yPFRyYWl0cz4g
eworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47CisKKyAgICAgIHB1Ymxp
YzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3VwZXIpCisgICAgICB1c2lu
ZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6CisjaWZuZGVmIE1QQVJLX0dF
TkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJh
dG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBjb25zdCB7CisgICAgICAg
ICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJoc0FsdD4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAg
cmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgc3RhdGljIFQgJmNv
bnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgICAgOjpu
ZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVzc29mKGEpKSkKKyAgICAg
ICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAgIH0KKworICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZCBnZW5lcmljX2Nv
bnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAgICAgICAgbGhzLmRlc3Ry
b3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAgICAgICAgICAgICByaHMu
aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAgICAgICAgICAgICAgW10o
YXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAgbGhzX2FsdCwgbXBhcms6
OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCkudmFsdWUpOworICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNlbmRpZgorICAgICAgICAg
ICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9y
d2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSByaHMuaW5kZXhfOworICAg
ICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3Jf
dDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJl
dHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0
Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9jb25zdHJ1
Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUm
JiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZv
cndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+
KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9f
YXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IobW92
ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+LCBtb3ZlX2NvbnN0cnVj
dGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgY29uc3RydWN0b3I8dHJh
aXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNp
bmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25zdCBtb3ZlX2NvbnN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3RvciAmb3BlcmF0
b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBt
b3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0
OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNU
T1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVsdDspOworCisgICAgTVBB
UktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAor
ICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3IgJiZ0aGF0KSBub2V4Y2Vw
dCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRz
Pjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVjdG9yKHZhbHVlbGVzc190
e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgbXBhcms6Omxp
Yjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NP
TlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJL
X1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0
cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBj
b3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RP
Uihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwKKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4sIGNvcHlfY29u
c3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBtb3ZlX2NvbnN0
cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHVibGljOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1Y3Rvciwgc3VwZXIpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRv
cj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfY29u
c3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5X2NvbnN0cnVjdG9yICZv
cGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAor
ICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0cnVjdG9yICYmKSA9IGRl
ZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05T
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAgY29w
eV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0KSA9IGRlZmF1bHQ7KTsK
KworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2
YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9y
ICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZhbHVlbGVzc190e30pIHsK
KyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgdGhhdCk7CisgICAgICAg
IH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3IoY29uc3QgY29weV9jb25z
dHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNU
UlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIGFzc2ln
bm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsKKyAgICAgIHVzaW5nIHN1
cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBwdWJsaWM6CisgICAgICBJ
TkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNlKEFyZ3MgJiYuLi4gYXJn
cykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3RfYWx0KGFjY2Vzczo6YmFz
ZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkgeworICAgICAgICB0
aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRoaXMtPmNvbnN0cnVjdF9h
bHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3RydWN0IGFzc2lnbmVyIHsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVuYW1lIFRoYXRBbHQ+Cisg
ICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhpc19hbHQsIFRoYXRBbHQg
JiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2lnbl9hbHQodGhpc19hbHQs
IG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJpYW50SW5kZXgtMT4oX192
Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlzaXRfaGVscGVyPF9WYXJp
YW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNlcy4uLj4+OjpfX3Zpc2l0
KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKQotICAgICAgICAgICAg
OiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotICAgIH0K
LX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
QXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwgVD4gJmEsIEFyZyAmJmFy
ZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7CisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MjQ0KQor
I2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcp
OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29uc3QgeworICAgICAgICAg
ICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmdfKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAqdGhpc187CisgICAgICAg
ICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBtcGFyazo6bGliOjpmb3J3
YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGliOjpib29sX2NvbnN0YW50
PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFy
Zz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAgICAgfQogCi10ZW1wbGF0
ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
dmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4u
Lil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNfYXNzaWduKFRoYXQg
JiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYg
dGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5n
LgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZp
c2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAgICAgdGhhdC5pbmRleCgp
LAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICBbdGhpc10oYXV0
byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAgICAgICAgIHRoaXMtPmFz
c2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBtcGFyazo6bGliOjpmb3J3
YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhpc30KKyNlbmRpZgorICAg
ICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAgICBtcGFyazo6
bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2Fz
c2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2Yu
Li4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9
X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zp
c2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYg
X192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9o
ZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1Zhcmlh
bnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAg
IF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9f
dmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Cisj
ZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVfYXNzaWduYWJsZV90cmFp
dCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9hc3NpZ25t
ZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4gICAgICAgICAgICBcCisg
ICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdubWVudDx0cmFpdHM8VHMu
Li4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3ZlX2Fzc2lnbm1lbnQsIHN1
cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25zdCBtb3ZlX2Fzc2lnbm1l
bnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBtb3ZlX2Fzc2lnbm1lbnQo
bW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IG1v
dmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9yPSht
b3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRf
TU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBtb3Zl
X2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3NpZ25tZW50ICYmdGhhdCkg
bm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNf
YXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCgKKyAgICAg
ICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9y
PShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5U
X01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQg
PSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFzcyBjb3B5X2Fzc2lnbm1l
bnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoY29weV9hc3NpZ25h
YmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5
X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxlX3RyYWl0PiAgICAgICAg
ICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBtb3ZlX2Fzc2lnbm1l
bnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKGNvcHlfYXNzaWdu
bWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1
cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvbnN0IGNvcHlf
YXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAgICAg
IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZhdWx0Oyk7CisKKyAgICBN
UEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwK
KyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25tZW50
ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24odGhhdCk7CisgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9B
U1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlbGV0ZTspOwor
CisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNvcHlfYXNzaWdubWVudDx0
cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19DVE9SKGltcGws
IHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGluZSB2b2lkIGFzc2lnbihB
cmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nlc3M6OmJhc2U6OmdldF9h
bHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgc3dhcChpbXBsICZ0
aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYgdGhh
dC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5nLgor
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5pbmRleCgpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMtPmluZGV4KCksCisjaWZk
ZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdF9h
bHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisj
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVye30K
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwgKnJocyA9IG1wYXJrOjps
aWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5tb3ZlX25vdGhyb3coKSAm
JiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKGxocywgcmhz
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6OmxpYjo6bW92ZSgqcmhz
KSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8vIEVYVEVOU0lPTjogV2hl
biB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhzYCB0aHJvd3MKKyAgICAg
ICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVjdGlibGUgdGhlbiB3ZSBt
b3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFuZCBwcm92aWRlIHRoZSBz
dHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUoKmxo
cykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAgICAgaWYgKHRtcC5tb3Zl
X25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqcmhz
LCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhy
b3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVj
dCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgorICAgICAgICAgIHRoaXMt
PmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUodG1wKSk7CisgICAgICAg
IH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRv
cixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8c2l6ZW9m
Li4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNpdCgKLSAgICAgICAgX192
aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotfQorICAgICAgcHJpdmF0
ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBzdHJ1Y3Qgc3dhcHBlciB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBlbmFtZSBUaGF0QWx0Pgor
ICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRoaXNfYWx0LCBUaGF0QWx0
ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAgICAg
ICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
IH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhz
LmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAgICAgICBf
X2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFy
ZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQorICAgICAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAgICAgICAgICAgICAgICAg
e3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZS4uLn0KKyAgICAg
ICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jo
cy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKLSAgICAgICAg
ICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjoKLSAgICAgICAgICBf
X2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOwotfQorICAg
IHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lkIG9wZXJhdG9yKCkoKSBj
b25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ8
VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5nIG92ZXJsb2FkPFRzLi4u
Pjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5PFQ+IG9wZXJhdG9yKCko
VCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAh
KF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlwZW5hbWUgbXBhcms6Omxp
Yjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46OnR5cGU7CisKKyAgfSAg
Ly8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBjbGFzcyB2YXJpYW50
IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAorICAgICAgICAgICAgICAg
ICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBhbHRlcm5hdGl2ZS4iKTsK
KworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6OmlzX2FycmF5PFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2Vy
dChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6dmFsdWUuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2ZSBhIHJlZmVyZW5jZSB0
eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGli
OjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAg
ICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMgYW4gYWx0ZXJuYXRpdmUu
Iik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBGcm9u
dCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMuLi4+LAorICAgICAgICBt
cGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnQoKSBub2V4
Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8MD57fSkge30KKwor
ICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7CisgICAgdmFyaWFudCh2YXJp
YW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPG1wYXJrOjpsaWI6
OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBUID0gZGV0YWlsOjpiZXN0
X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRh
aWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50KEFyZyAmJmFyZykgbm9l
eGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6
ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBt
cGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6
OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAg
ICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhj
ZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgc3Rk
OjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFy
Z3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90
PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFu
dCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXpl
cl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVj
dGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9s
aXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
cy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWws
IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8
CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFs
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25z
dGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+LAorICAgICAgICBBcmdz
ICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8
ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBs
YXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRf
aW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwKKyAgICAg
ICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdz
KSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNl
X2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9
CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPShj
b25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZvcGVyYXRvcj0odmFyaWFu
dCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZywKKyAgICAgICAg
ICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxtcGFyazo6bGliOjpk
ZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9IGRldGFpbDo6YmVzdF9t
YXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWls
OjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQgJiwgQXJnPjo6dmFsdWUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxl
PFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0g
MD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFyZykgbm9leGNlcHQoCisg
ICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFyZz46OnZhbHVlICYmCisg
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSkpIHsK
KyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4o
YXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0
eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisg
ICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBB
cmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZlbXBsYWNlKEFyZ3MgJiYu
Li4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4obXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAor
ICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBVcCwKKyAgICAgICAgdHlw
ZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFj
a19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5lIFQgJmVtcGxhY2Uoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICByZXR1
cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBU
LAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0
YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICBtcGFyazo6
bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVl
LCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYmLi4uIGFyZ3MpIHsKKyAg
ICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5h
bWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisg
ICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4u
Pjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1w
bGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5pbmRleCgpOworICAgIH0K
KworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRydWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1teSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpp
c19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlhbnQgJnRoYXQpIG5vZXhj
ZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNf
bm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkgeworICAgICAgaW1wbF8u
c3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgorICAgIGRldGFpbDo6aW1w
bDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFpbDo6YWNjZXNzOjp2YXJp
YW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICB9
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5l
IGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOworICB9CisKKyAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wg
aG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwg
VHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1Y3QgZ2VuZXJpY19nZXRf
aW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChpbnQpIHt9CisKKyAgICAg
IGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAgICAgICBB
VVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZhcmlhbnQ6OmdldF9hbHQ8
ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZW5lcmlj
X2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5lcmljX2dldF9pbXBsPEks
IFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8gMCA6ICh0aHJvd19iYWRf
dmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4o
dikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICZ2KSB7
CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJr
OjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVu
YW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAg
ICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIFQgJmdldCh2YXJpYW50
PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8
VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2YXJpYW50PFRzLi4uPiAm
JnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4u
Pjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IFQgJmdldChj
b25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgY29uc3QgVCAmJmdl
dChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6Zmlu
ZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOwor
ICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1dG8gKiAqLyBBVVRPIGdl
bmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JFVFVSTih2ICYmIGhvbGRz
X2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAgID8gbXBhcms6OmxpYjo6
YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdikudmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKwor
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25z
dGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwg
dmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsKKyAgfQorCisgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2
ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXRfaWY8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBj
b25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBnZXRfaWYodmFyaWFudDxU
cy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRldGFpbDo6ZmluZF9pbmRl
eF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFk
ZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2KSBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxU
LCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4K
KyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgdmFyaWFudDxUcy4uLj4g
JmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVY
UFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBlcXVhbF90b3t9LCBsaHMs
IHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgor
ICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAg
dmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFsX3Rve30sIGxocywgcmhz
KSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307CisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgdmFy
aWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxfdG87CisjaWZkZWYgTVBB
UktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwg
bm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy5pbmRleCgp
ICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCks
IG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0KIAotY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsg
cmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRl
IGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBj
b25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0
JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3RydWN0IF9faGFzaF92aXNp
dG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigp
KF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9f
eCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgewor
ICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6
bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgo
KSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMu
aW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiAhcmhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhz
LmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAK
LS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZs
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4u
Lj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1
c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJocyk7CisjZWxzZQorICAg
IHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAocmhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpIHx8
CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNsYXNzLi4uIEY+Ci1hdXRv
IHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlzaXQobWFrZVZpc2l0b3Io
c3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKLXsKLSAgICByZXR1
cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJk
PFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxo
cy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgp
IDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5p
bmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0
KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJu
IGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFyaHMudmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPCByaHMuaW5k
ZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAg
ICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc19lcXVh
bHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXJfZXF1
YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4
KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSB8fAor
ICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAgICAgIGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9CiAKLW5hbWVzcGFj
ZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+Cisg
IGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNpdG9yICYmdmlzaXRvciwg
VnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgIChkZXRhaWw6
OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAgICAgICAgICAgID8gKHZv
aWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCkpLAorICAgICAg
ICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVlKG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKworICBz
dHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
bW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG1v
bm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKwor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkg
bm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBh
dXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICB2YXJpYW50
PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChyaHMpKSkKKyAgICAgIC0+
IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChyaHMpOworICB9CisKKyAg
bmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5hbWVzcGFjZSBoYXNoIHsK
KworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+CisgICAgICBjb25zdGV4
cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX2Nv
cHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92
ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46OnZhbHVlOworICAgICAg
fQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIGlz
X2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8Sz47CisgICAgICAgIHJl
dHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAgICAgICAgICAgc3RkOjpp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNf
bW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAgIH0gIC8vIG5hbWVzcGFj
ZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5kZWYgQVVUTworI3VuZGVm
IEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVmIEFVVE9fUkVGUkVGX1JF
VFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xUWVBFX0FVVE9fUkVUVVJO
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgaGFzaDxkZXRhaWw6OmVu
YWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAgbXBhcms6OmxpYjo6ZW5h
YmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZDwKKyAgICAg
ICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+Ojp2YWx1ZT4+PiB7Cisg
ICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+OworICAgIHVzaW5nIHJlc3Vs
dF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1c2luZyBkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPQorICAgICAgICAg
IHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgID8gMjk5NzkyNDU4ICAv
LyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9uIGNyZWF0aW9uCisgICAg
ICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFN
QkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZhbHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6OmRlY2F5X3Q8ZGVjbHR5
cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IG1wYXJr
OjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisjZWxz
ZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1cm4gaGFzaF9jb21iaW5l
KHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsKKyAgICB9CiAKLXRlbXBs
YXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOworICAgIHBy
aXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgIHN0cnVjdCBoYXNoZXIg
eworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSBzdGQ6OnNpemVf
dCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAgICAgIHVzaW5nIGFsdF90
eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1c2luZyB2YWx1ZV90eXBl
ID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PHR5cGVuYW1lIGFsdF90
eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQu
dmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0YXRpYyBzdGQ6OnNpemVf
dCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVfdCByaHMpIHsKKyAgICAg
IHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwgNikgKyAobGhzID4+IDIp
OwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3RydWN0IGhhc2g8bW9ub3N0
YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0ZTsKKyAgICB1c2luZyBy
ZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVy
YXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlz
aXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJl
dHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkgYXR0cmFjdGl2ZSByYW5k
b20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3BhY2Ugc3RkCit9ICAvLyBu
YW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNpbmcgV1RGOjpWYXJpYW50
OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9D
UFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KK2F1dG8gc3dp
dGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6
OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQoreworICAgIHJldHVybiBz
dGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2Fy
ZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkK
LSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAotc3RhdGljIFZhcmlh
bnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1v
ZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6
Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMgc3RkOjp2YXJp
YW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBN
b2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9y
OjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9sb2NhbGU7CiAg
ICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0
b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVyYXRv
cklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOwogICAgIE1vZGUgbV9t
b2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VN
YWMubW0JKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50PFRleHRCcmVha0l0ZXJh
dG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0
b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVy
YXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNl
IFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjc4IEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9jcmVkZW50aWFscy9DcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRyYWN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5
Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFyY2hQYXJhbXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZv
cm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVm
ZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVy
Vmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0Qm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJl
cXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlLZXkpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6
OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0
QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YXJyYXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6bnVtYmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmJpbmFyeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJheSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0aFZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dnaW5nU3Ry
aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdGVk
SW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRyYWNrKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFU
cmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VT
ZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZl
cik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNpbmdTdGF0dXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5nUmVzdWx0OjpjYW5kaWRh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1heWJlQ3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0
aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2VyUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAgICogY3J5cHRvL0NyeXB0
b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVD
cnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaDoKKyAgICAg
ICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkpOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6CisgICAgICAgICogY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1I
S0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1w
b3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktE
RjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL3Bh
cmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAgICAgICAgKiBjcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oOgorICAgICAgICAqIGNy
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oOgorICAgICAgICAq
IGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtl
eUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkSXRlbSk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0RP
TU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXhSZWFkT25seTo6
Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRh
cmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MpOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZXN1bHQgY29u
c3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAqIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwv
SFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2Up
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1VSTFNlYXJjaFBhcmFt
cy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNW
YWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNDdXJyZW50Q29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Omhhc092ZXJyaWRlQWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Om92ZXJyaWRlQWxwaGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52YXNQYXR0ZXJuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBjb25zdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbiBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
YWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldlYkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVt
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE4ICBNczJnZXIgIDxNczJnZXJAZ21haWwu
Y29tPgogCiAgICAgICAgIFtHVEtdIFNob3cgY29udHJvbHMgaWYgYSB2aWRlbyBlbGVtZW50IGlz
bid0IGFsbG93ZWQgdG8gcGxheSBpbmxpbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBD
YWNoZTo6ZG9NYXRjaChzdGQ6Om9wdGlvbmFsPFJlcXVlcwogewogICAgIFJlZlB0cjxGZXRjaFJl
cXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAg
ICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1
ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVx
dWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVh
c2VOb25OdWxsKCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIg
JiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoVHlw
ZSA9PSBNYXRjaFR5cGU6Ok9ubHlGaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBwcm9taXNl
LT5yZXNvbHZlKCk7CkBAIC0xMjIsOCArMTIyLDggQEAgdm9pZCBDYWNoZTo6YWRkQWxsKFZlY3Rv
cjxSZXF1ZXN0SW5mbz4mJgogdm9pZCBDYWNoZTo6cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVm
PEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHBy
b21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykpIHsKLSAgICAg
ICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKS5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJl
cXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5t
ZXRob2QoKSAhPSAiR0VUIikgewogICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3QgbWV0aG9kIGlzIG5vdCBHRVQiKSB9
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MCw4ICsxODAsOCBAQCB2b2lkIENhY2hlOjpw
dXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8CiB2b2lkIENhY2hlOjpyZW1vdmUoUmVxdWVzdElu
Zm8mJiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIERPTVByb21pc2VEZWZlcnJl
ZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVx
dWVzdDsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0
Pj4oaW5mbykpIHsKLSAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVl
c3Q+PihpbmZvKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3Rk
OjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRo
b2QpIHsKICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMDEsOCArMjAxLDggQEAgdm9pZCBDYWNoZTo6a2V5cyhzdGQ6Om9wdGlvbmFs
PFJlcXVlc3RJbgogewogICAgIFJlZlB0cjxGZXRjaFJlcXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYg
KGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAgICAgICAgIHJlcXVlc3QgPSBXVEY6Omdl
dDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4o
aW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVxdWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxG
ZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAg
ICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9k
KSB7CiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKFZlY3RvcjxSZWY8RmV0Y2hSZXF1
ZXN0Pj4geyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jcmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMgewotICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBW
YXJpYW50PFBhc3N3b3JkQ3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsK
KyAgICB1c2luZyBQYXNzd29yZENyZWRlbnRpYWxJbml0ID0gc3RkOjp2YXJpYW50PFBhc3N3b3Jk
Q3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8UGFzc3dvcmRDcmVkZW50aWFsSW5pdD4gcGFzc3dvcmQ7CiAgICAgc3RkOjpvcHRpb25h
bDxGZWRlcmF0ZWRDcmVkZW50aWFsSW5pdD4gZmVkZXJhdGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwzNiArNDIsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGZXRjaEJvZHkgRmV0Y2hC
b2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEluaXQmJiB2YWx1
ZSwgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQmxvYj4gYmxvYiA9
IFdURjo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEJsb2I+Pih2YWx1ZSkpIHsKKyAgICAgICAg
UmVmPGNvbnN0IEJsb2I+IGJsb2IgPSBzdGQ6OmdldDxSZWZQdHI8QmxvYj4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IGJsb2ItPnR5cGUoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJsb2IpKTsKICAgICB9Ci0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFsdWUpKSB7Ci0gICAgICAg
IFJlZjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBXVEY6OmdldDxSZWZQdHI8RE9NRm9ybURh
dGE+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPERPTUZvcm1E
YXRhPiBkb21Gb3JtRGF0YSA9IHN0ZDo6Z2V0PFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKS5y
ZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBhdXRvIGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksICZz
dGF0aWNfY2FzdDxEb2N1bWVudCY+KGNvbnRleHQpKTsKICAgICAgICAgY29udGVudFR5cGUgPSBt
YWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLCBmb3JtRGF0YS0+Ym91
bmRhcnkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoZm9ybURh
dGEpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IFdURjo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IHN0ZDo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgY29udGVudFR5cGUgPSBIVFRQSGVhZGVyVmFsdWVzOjpm
b3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKCk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RG
TW92ZShwYXJhbXMpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBXVEY6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlC
dWZmZXI+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiBidWZmZXIg
PSBzdGQ6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsK
ICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KLSAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7Ci0gICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IFdURjo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IHN0ZDo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsKKyAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CiAgICAgY29udGVudFR5cGUgPSBI
VFRQSGVhZGVyVmFsdWVzOjp0ZXh0UGxhaW5Db250ZW50VHlwZSgpOwotICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHZhbHVlKSkpOworICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHZhbHVlKSkpOwogfQogCiBGZXRjaEJvZHkg
RmV0Y2hCb2R5OjpyZWFkYWJsZVN0cmVhbUJvZHkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiwg
RmV0Y2hSZXNwb25zZVNvdXJjZSYpOwogI2VuZGlmCiAKLSAgICBib29sIGlzQmxvYigpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEp
OyB9Ci0gICAgYm9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlC
dWZmZXI+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+
KG1fZGF0YSk7IH0KLSAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRh
KTsgfQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9CisgICAg
Ym9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+Piht
X2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSk7
IH0KKyAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQorICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KG1fZGF0YSk7IH0KICAgICBib29sIGlzUmVhZGFibGVTdHJlYW0oKSBjb25zdCB7IHJldHVy
biBtX2lzUmVhZGFibGVTdHJlYW07IH0KIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFJlZlB0
cjxCbG9iPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJl
ZlB0cjxET01Gb3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAg
IHVzaW5nIEluaXQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiwgUmVmUHRyPEFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgUmVmUHRy
PFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAgc3RhdGljIEZldGNoQm9keSBleHRyYWN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJbml0JiYsIFN0cmluZyYpOwogICAgIHN0YXRpYyBG
ZXRjaEJvZHkgbG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KICAgICBzdGF0aWMgRmV0Y2hC
b2R5IHJlYWRhYmxlU3RyZWFtQm9keSgpOwpAQCAtOTUsMTYgKzk1LDE2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIGNvbnN1bWVCbG9iKEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAKLSAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIEZvcm1EYXRhJiBm
b3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdl
dCgpOyB9Ci0gICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJh
eUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNv
bnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIGNvbnN0IEFycmF5QnVmZmVy
VmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxj
b25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgU3RyaW5nJiB0ZXh0
Qm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0
cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7
IH0KLSAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25z
dCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5n
ZXQoKTsgfQorICAgIGNvbnN0IEJsb2ImIGJsb2JCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpn
ZXQ8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpLmdldCgpOyB9CisgICAgRm9ybURhdGEmIGZvcm1E
YXRhQm9keSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7
IH0KKyAgICBjb25zdCBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgY29uc3QgeyByZXR1cm4gc3Rk
OjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVm
ZmVyJiBhcnJheUJ1ZmZlckJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3Qg
QXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3
JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0
IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBTdHJpbmcmIHRleHRCb2R5
KCkgeyByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9CisgICAgY29uc3QgU3RyaW5n
JiB0ZXh0Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQor
ICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpLmdldCgp
OyB9CiAKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0
IEJsb2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3Qg
QXJyYXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47Cisg
ICAgdXNpbmcgRGF0YSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0IEJs
b2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3QgQXJy
YXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAg
RGF0YSBtX2RhdGEgeyBudWxscHRyIH07CiAKICAgICBGZXRjaEJvZHlDb25zdW1lciBtX2NvbnN1
bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gYXBwZW5k
VG9IZWFkZXJNCiAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFk
ZXJzLWZpbGwKIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMsIGNvbnN0IEZldGNoSGVhZGVyczo6SW5pdCYgaGVhZGVyc0luaXQsIEZl
dGNoSGVhZGVyczo6R3VhcmQgZ3VhcmQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpKSB7Ci0gICAgICAgIGF1dG8m
IHNlcXVlbmNlID0gV1RGOjpnZXQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQp
OworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KSkgeworICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IHN0ZDo6Z2V0PFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFk
ZXIgOiBzZXF1ZW5jZSkgewogICAgICAgICAgICAgaWYgKGhlYWRlci5zaXplKCkgIT0gMikKICAg
ICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiSGVhZGVyIHN1Yi1z
ZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMiIH07CkBAIC04Nyw3ICs4Nyw3
IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEgKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGF1dG8mIHJlY29yZCA9IFdURjo6Z2V0PFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CisgICAgICAgIGF1dG8mIHJl
Y29yZCA9IHN0ZDo6Z2V0PFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
PihoZWFkZXJzSW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogcmVjb3JkKSB7CiAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZFRvSGVhZGVyTWFwKGhlYWRlci5rZXksIGhl
YWRlci52YWx1ZSwgaGVhZGVycywgZ3VhcmQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJlc3BvbnNlCiAgICAgfTsKIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+PjsKKyAgICB1c2luZyBJbml0ID0gc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3Ry
aW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PjsKICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPEZldGNoSGVhZGVycz4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFs
PEluaXQ+JiYpOwogCiAgICAgc3RhdGljIFJlZjxGZXRjaEhlYWRlcnM+IGNyZWF0ZShHdWFyZCBn
dWFyZCA9IEd1YXJkOjpOb25lLCBIVFRQSGVhZGVyTWFwJiYgaGVhZGVycyA9IHsgfSkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGZXRjaEhlYWRlcnMgeyBndWFyZCwgV1RGTW92ZShoZWFkZXJzKSB9
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0
LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBFeGNl
cHRpb25PcjxSZWY8RmV0Y2hSZXF1ZXN0Pj4gRmV0Y2hSZXF1CiB7CiAgICAgYXV0byByZXF1ZXN0
ID0gYWRvcHRSZWYoKm5ldyBGZXRjaFJlcXVlc3QoY29udGV4dCwgc3RkOjpudWxsb3B0LCBGZXRj
aEhlYWRlcnM6OmNyZWF0ZShGZXRjaEhlYWRlcnM6Okd1YXJkOjpSZXF1ZXN0KSwgeyB9KSk7CiAK
LSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgewotICAgICAg
ICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKFdURjo6Z2V0PFN0cmluZz4o
aW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGlucHV0KSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxp
emVXaXRoKHN0ZDo6Z2V0PFN0cmluZz4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gcmVx
dWVzdC0+aW5pdGlhbGl6ZVdpdGgoKldURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbnB1
dCksIFdURk1vdmUoaW5pdCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRp
YWxpemVXaXRoKCpzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZNb3Zl
KGluaXQpKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBVUkxTZWFyY2hQYXJhbXM7CiBjbGFzcyBGZXRj
aFJlcXVlc3QgZmluYWwgOiBwdWJsaWMgRmV0Y2hCb2R5T3duZXIgewogcHVibGljOgogICAgIHVz
aW5nIEluaXQgPSBGZXRjaFJlcXVlc3RJbml0OwotICAgIHVzaW5nIEluZm8gPSBWYXJpYW50PFJl
ZlB0cjxGZXRjaFJlcXVlc3Q+LCBTdHJpbmc+OworICAgIHVzaW5nIEluZm8gPSBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPEZldGNoUmVxdWVzdD4sIFN0cmluZz47CiAKICAgICB1c2luZyBDYWNoZSA9IEZl
dGNoT3B0aW9uczo6Q2FjaGU7CiAgICAgdXNpbmcgQ3JlZGVudGlhbHMgPSBGZXRjaE9wdGlvbnM6
OkNyZWRlbnRpYWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250aW51ZVByaQogICAgIGlmIChz
b3VyY2VzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtl
eScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UpKQorICAgIGlmICghc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZSkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3In
cyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CiAKICAgICBhdXRvIGRpcmVjdGlvbiA9IG1f
aW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+SURCQ3Vyc29yKCk7CiAKLSAgICB1
c2luZyBTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4+OworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+PjsKIAogICAgIGNvbnN0IFNvdXJjZSYgc291cmNlKCkg
Y29uc3Q7CiAgICAgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgRXhjZXB0aW9u
T3I8UmVmPElEQk9iamVjdFN0b3JlPj4gSURCRGF0YQogICAgIGlmIChrZXlQYXRoICYmICFpc0lE
QktleVBhdGhWYWxpZChrZXlQYXRoLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9i
amVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBvcHRpb24gaXMgbm90IGEg
dmFsaWQga2V5IHBhdGguIikgfTsKIAotICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0
b0luY3JlbWVudCAmJiAoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZh
bHVlKCkpICYmIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkp
KQorICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0b0luY3JlbWVudCAmJiAoKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpICYmIHN0ZDo6Z2V0PFN0
cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8IHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGF1dG9JbmNyZW1l
bnQgb3B0aW9uIHdhcyBzZXQgYnV0IHRoZSBrZXlQYXRoIG9wdGlvbiB3YXMgZW1wdHkgb3IgYW4g
YXJyYXkuIikgfTsKIAogICAgIC8vIEluc3RhbGwgdGhlIG5ldyBPYmplY3RTdG9yZSBpbnRvIHRo
ZSBjb25uZWN0aW9uJ3MgbWV0YWRhdGEuCkBAIC0xNzEsMTAgKzE3MSwxMCBAQCBFeGNlcHRpb25P
cjxSZWY8SURCVHJhbnNhY3Rpb24+PiBJREJEYXRhCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJh
bnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNs
b3NpbmcuIikgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCi0gICAg
ICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KHN0b3Jl
TmFtZXMpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4o
c3RvcmVOYW1lcykpCisgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVj
dG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKTsKICAgICBlbHNlCi0gICAgICAgIG9iamVjdFN0b3Jl
cy5hcHBlbmQoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSk7CisgICAgICAg
IG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMp
KSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFt
ZXRlciB3YXMgZW1wdHkuIikgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+
PiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIE9iamVjdFN0b3JlUGFyYW1l
dGVycyYmKTsKIAotICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZTdHJpbmdzID0gV1RGOjpWYXJp
YW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OworICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwogICAgIEV4Y2Vw
dGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IHRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzJiYgc3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb25Nb2RlKTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQg
Y2xvc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBpc29sYXRlZENvcHlPZlZhcmlhbnQoY29uc3QgV1RGOjpWYXJpYW50PFZl
Y3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3Vy
Y2UsIFdURjo6VmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0
ZDo6bnVsbHB0cl90PiYgdGFyZ2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBpc29sYXRl
ZENvcHlPZlZhcmlhbnQoY29uc3Qgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVj
dG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3VyY2UsIHN0ZDo6dmFyaWFudDxWZWN0
b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgdGFyZ2V0
KQogewogICAgIHRhcmdldCA9IFZlY3RvcjxUPigpOwotICAgIGF1dG8mIHNvdXJjZVZlY3RvciA9
IFdURjo6Z2V0PFZlY3RvcjxUPj4oc291cmNlKTsKLSAgICBhdXRvJiB0YXJnZXRWZWN0b3IgPSBX
VEY6OmdldDxWZWN0b3I8VD4+KHRhcmdldCk7CisgICAgYXV0byYgc291cmNlVmVjdG9yID0gc3Rk
OjpnZXQ8VmVjdG9yPFQ+Pihzb3VyY2UpOworICAgIGF1dG8mIHRhcmdldFZlY3RvciA9IHN0ZDo6
Z2V0PFZlY3RvcjxUPj4odGFyZ2V0KTsKICAgICB0YXJnZXRWZWN0b3IucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzb3VyY2VWZWN0b3Iuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBz
b3VyY2VWZWN0b3IpCiAgICAgICAgIHRhcmdldFZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZWxlbWVu
dC5pc29sYXRlZENvcHkoKSk7CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0
Ojppc29sYXRlZENvcHkoY29uc3QKIHsKICAgICBkZXN0aW5hdGlvbi5tX3R5cGUgPSBzb3VyY2Uu
bV90eXBlOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+
KHNvdXJjZS5tX3Jlc3VsdHMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6
bnVsbHB0cl90Pihzb3VyY2UubV9yZXN1bHRzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dp
dGNoIChzb3VyY2UubV90eXBlKSB7CkBAIC03MiwyOSArNzIsMjkgQEAgdm9pZCBJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZEtleShJ
REJLZXlEYXRhJiYga2V5KQogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRB
bGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRh
Pj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6
Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsK
IH0KIAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKElEQlZhbHVlJiYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7Ci0g
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1
bHRzKSk7Ci0gICAgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKS5hcHBlbmQo
V1RGTW92ZSh2YWx1ZSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+
KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0KIAogY29uc3QgVmVjdG9yPElE
QktleURhdGE+JiBJREJHZXRBbGxSZXN1bHQ6OmtleXMoKSBjb25zdAogewogICAgIEFTU0VSVCht
X3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIHJl
dHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgQVNTRVJU
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsK
KyAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogfQog
CiBjb25zdCBWZWN0b3I8SURCVmFsdWU+JiBJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7
Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0
cyk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4o
bV9yZXN1bHRzKSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVz
dWx0cyk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkZpbGVQ
YXRocygpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPFN0cmluZz4gSURCR2V0QWxs
UmVzdWx0OjphbGxCbG9iRgogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxU
eXBlOjpWYWx1ZXMpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IHBhdGhTZXQ7Ci0gICAgZm9yIChh
dXRvJiB2YWx1ZSA6IFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpIHsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRz
KSkgewogICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpCiAg
ICAgICAgICAgICBwYXRoU2V0LmFkZChwYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVz
dWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBpc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0JiBzb3VyY2UsIElEQkdl
dEFsbFJlc3VsdCYgZGVzdGluYXRpb24pOwogCiAgICAgSW5kZXhlZERCOjpHZXRBbGxUeXBlIG1f
dHlwZSB7IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyB9OwotICAgIFdURjo6VmFyaWFudDxW
ZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiBtX3Jl
c3VsdHMgeyBudWxscHRyIH07CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwg
VmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+IG1fcmVzdWx0cyB7IG51bGxwdHIgfTsK
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC04NCwxMCArODQsMTAgQEAgdm9pZCBJ
REJHZXRBbGxSZXN1bHQ6OmVuY29kZShFbmNvZGVyJiBlbgogCiAgICAgc3dpdGNoIChtX3Jlc3Vs
dHMuaW5kZXgoKSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIDE6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+Piht
X3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGJyZWFrOwpA
QCAtMTA5LDEyICsxMDksMTIgQEAgYm9vbCBJREJHZXRBbGxSZXN1bHQ6OmRlY29kZShEZWNvZGVy
JiBkZQogICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJlc3VsdC5t
X3Jlc3VsdHMgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJl
c3VsdC5tX3Jlc3VsdHMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSAxOgogICAgICAgICByZXN1bHQubV9yZXN1bHRzID0gVmVjdG9yPElEQlZh
bHVlPigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJW
YWx1ZT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihyZXN1bHQubV9yZXN1bHRzKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBib29sIElEQktleTo6aXNWYWxpZCgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBXVEY6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFs
dWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8SURCS2V5VmVjdG9yPiht
X3ZhbHVlKSkgewogICAgICAgICAgICAgaWYgKCFrZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwOSw4ICsxMDksOCBAQCBpbnQgSURC
S2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0g
V1RGOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJy
YXkgPSBzdGQ6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBvdGhl
ckFycmF5ID0gc3RkOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQgcmVzdWx0ID0gYXJyYXlbaV0tPmNvbXBh
cmUoKm90aGVyQXJyYXlbaV0pKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0x
MjIsMTMgKzEyMiwxMyBAQCBpbnQgSURCS2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRh
QnVmZmVyPihtX3ZhbHVlKSwgV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1f
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZm
ZXI+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAg
cmV0dXJuIC1jb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSks
IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gLWNvZGVQb2ludENv
bXBhcmUoc3RkOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKSwgc3RkOjpnZXQ8U3RyaW5nPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVt
YmVyOiB7Ci0gICAgICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsK
LSAgICAgICAgYXV0byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1
ZSk7CisgICAgICAgIGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAg
ICAgICAgYXV0byBvdGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7
CiAgICAgICAgIHJldHVybiAobnVtYmVyIDwgb3RoZXJOdW1iZXIpID8gLTEgOiAoKG51bWJlciA+
IG90aGVyTnVtYmVyKSA/IDEgOiAwKTsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpJbnZhbGlk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzEgKzExMywzMSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJREJLZXk+PiYgYXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxW
ZWN0b3I8UmVmUHRyPElEQktleT4+PihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGRvdWJsZSBkYXRlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6RGF0ZSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBk
b3VibGUgbnVtYmVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwotICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3Rk
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGludCBj
b21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpIGNvbnN0OwpAQCAtMTcxLDcgKzE3MSw3IEBAIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgSURCS2V5KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7
CiAKICAgICBjb25zdCBLZXlUeXBlIG1fdHlwZTsKLSAgICBWYXJpYW50PFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsK
KyAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+PiwgU3RyaW5nLCBkb3VibGUs
IFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogCiAgICAgY29uc3Qgc2l6ZV90IG1fc2l6
ZUVzdGltYXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgSURCS2V5RGF0YTo6SURCS2V5RGF0YShjb25zdCBJREJLZXkqIGtleQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAgIG1fdmFsdWUgPSBWZWN0
b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGZvciAoYXV0byYga2V5MiA6IGtl
eS0+YXJyYXkoKSkKICAgICAgICAgICAgIGFycmF5LmFwcGVuZChJREJLZXlEYXRhKGtleTIuZ2V0
KCkpKTsKICAgICAgICAgYnJlYWs7CkBAIC04MSwyMCArODEsMjAgQEAgUmVmUHRyPElEQktleT4g
SURCS2V5RGF0YTo6bWF5YmVDcmVhdGVJRAogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJ
bnZhbGlkKCk7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBWZWN0b3I8UmVm
UHRyPElEQktleT4+IGFycmF5OwotICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBXVEY6Omdl
dDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5
RGF0YSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpIHsKICAgICAgICAg
ICAgIGFycmF5LmFwcGVuZChrZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCkpOwogICAgICAgICAg
ICAgQVNTRVJUKGFycmF5Lmxhc3QoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlQXJyYXkoYXJyYXkpOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToK
LSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQmluYXJ5KFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUJpbmFy
eShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5
VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoV1RGOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmlu
ZyhzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVl
KSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoc3RkOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAg
IGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyNSwyMCArMTI1LDIwIEBAIHZvaWQgSURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KGNvbnN0IElEQksKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlw
ZTo6QXJyYXk6IHsKICAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlE
YXRhPigpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvbkFycmF5ID0gV1RGOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihkZXN0aW5hdGlvbi5tX3ZhbHVlKTsKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHNvdXJjZS5tX3ZhbHVlKSkKKyAgICAg
ICAgYXV0byYgZGVzdGluYXRpb25BcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4o
ZGVzdGluYXRpb24ubV92YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+Pihzb3VyY2UubV92YWx1ZSkpCiAgICAgICAgICAgICBkZXN0aW5h
dGlvbkFycmF5LmFwcGVuZChrZXkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KHNvdXJjZS5tX3ZhbHVlKTsKKyAg
ICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVy
Pihzb3VyY2UubV92YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdURjo6Z2V0PFN0cmluZz4oc291
cmNlLm1fdmFsdWUpLmlzb2xhdGVkQ29weSgpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVl
ID0gc3RkOjpnZXQ8U3RyaW5nPihzb3VyY2UubV92YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpO
dW1iZXI6Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxkb3VibGU+KHNv
dXJjZS5tX3ZhbHVlKTsKKyAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PGRv
dWJsZT4oc291cmNlLm1fdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBl
OjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBAIC0xNjAsMjUgKzE2MCwyNSBAQCB2b2lk
IElEQktleURhdGE6OmVuY29kZShLZXllZEVuY29kZXImIGVuCiAgICAgY2FzZSBLZXlUeXBlOjpJ
bnZhbGlkOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAg
ICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7
CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Zh
bHVlKTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVPYmplY3RzKCJhcnJheSIsIGFycmF5LmJlZ2lu
KCksIGFycmF5LmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElEQktleURh
dGEmIGtleSkgewogICAgICAgICAgICAga2V5LmVuY29kZShlbmNvZGVyKTsKICAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAg
ICAgICAgYXV0byogZGF0YSA9IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVl
KS5kYXRhKCk7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICBlbmNvZGVyLmVuY29kZUJvb2woImhhc0Jp
bmFyeSIsICEhZGF0YSk7CiAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVCeXRlcygiYmluYXJ5IiwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+KG1f
dmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBj
YXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm51bWJl
ciIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAgICBlbmNvZGVyLmVuY29kZURv
dWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTIy
MCwxMiArMjIwLDEyIEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2RlKEtleWVkRGVjb2RlciYgZGUK
IAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5cGU6OlN0cmluZykgewogICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVT
dHJpbmcoInN0cmluZyIsIFdURjo6Z2V0PFN0cmluZz4ocmVzdWx0Lm1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+
KHJlc3VsdC5tX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC5tX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyIHx8IHJlc3VsdC5tX3R5cGUgPT0gS2V5VHlwZTo6RGF0ZSkgewogICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IDAuMDsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRG91
YmxlKCJudW1iZXIiLCBXVEY6OmdldDxkb3VibGU+KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihy
ZXN1bHQubV92YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5
cGU6OkJpbmFyeSkgewpAQCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2Rl
KEtleWVkRGVjb2RlciYgZGUKICAgICB9OwogICAgIAogICAgIHJlc3VsdC5tX3ZhbHVlID0gVmVj
dG9yPElEQktleURhdGE+KCk7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJy
YXkiLCBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlG
dW5jdGlvbik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJyYXkiLCBzdGQ6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlGdW5jdGlvbik7
CiB9CiAKIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBj
b25zdApAQCAtMjc3LDggKzI3Nyw4IEBAIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElE
QktleURhdGEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFy
cmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKKyAgICAg
ICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwor
ICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihv
dGhlci5tX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXpl
KCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQg
cmVzdWx0ID0gYXJyYXlbaV0uY29tcGFyZShvdGhlckFycmF5W2ldKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMjkwLDEzICsyOTAsMTMgQEAgaW50IElEQktleURhdGE6OmNv
bXBhcmUoY29uc3QgSURCS2V5RGF0YQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgY2Fz
ZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShX
VEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIFdURjo6Z2V0PFRocmVhZFNh
ZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBjb21wYXJlQmlu
YXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0ZDo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlU
eXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0
cmluZz4obV92YWx1ZSksIFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSkpOworICAgICAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpLCBzdGQ6
OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAg
ICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgYXV0byBudW1iZXIgPSBXVEY6Omdl
dDxkb3VibGU+KG1fdmFsdWUpOwotICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gV1RGOjpnZXQ8
ZG91YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byBudW1iZXIgPSBzdGQ6OmdldDxk
b3VibGU+KG1fdmFsdWUpOworICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gc3RkOjpnZXQ8ZG91
YmxlPihvdGhlci5tX3ZhbHVlKTsKIAogICAgICAgICBpZiAobnVtYmVyID09IG90aGVyTnVtYmVy
KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMjUsNyArMzI1LDcgQEAgU3RyaW5nIElEQktl
eURhdGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjxhcnJheT4gLSB7ICIpOwotICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXJyYXlbaV0ubG9nZ2luZ1N0cmluZygpKTsKICAgICAgICAgICAgIGlmIChpIDwgYXJyYXkuc2l6
ZSgpIC0gMSkKQEAgLTMzOSw3ICszMzksNyBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0
cmluZygpIGNvbnN0CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIjxiaW5hcnk+IC0gIik7CiAKLSAgICAgICAgYXV0byogZGF0YSA9IFdURjo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgIGF1dG8q
IGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwog
ICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIobnVsbCki
KTsKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTM1NywxMiAr
MzU3LDEyIEBAIFN0cmluZyBJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXN1
bHQgPSAiPHN0cmluZz4gLSAiICsgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAg
cmVzdWx0ID0gIjxzdHJpbmc+IC0gIiArIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiPG51bWJlcj4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxudW1iZXI+IC0gJWYiLCBzdGQ6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICAgICAgcmV0
dXJuICI8bWF4aW11bT4iOwogICAgIGNhc2UgS2V5VHlwZTo6TWluOgpAQCAtNDQyLDEzICs0NDIs
MTMgQEAgYm9vbCBJREJLZXlEYXRhOjpvcGVyYXRvcj09KGNvbnN0IElEQktleQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKICAgICBjYXNlIEtleVR5cGU6
OkRhdGU6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpID09IFdURjo6
Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3Vi
bGU+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CiAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fdmFs
dWUpID09IFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBz
dGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1
ZSk7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihv
dGhlci5tX3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG90aGVyLm1fdmFsdWUpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAg
ICAgICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAg
ICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goV1RGOjpnZXQ8U3RyaW5n
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpo
YXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IFdU
Rjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgICAg
ICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRh
dGEoKTsKICAgICAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgICAgICBoYXNoQ29kZXMu
YXBwZW5kKDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJy
YXk6Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4obV92YWx1ZSkpCisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCiAgICAgICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChrZXkuaGFzaCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTks
MzggKzE1OSwzOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3Ry
aW5nPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgZGF0ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkRhdGUpOwotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIG51bWJlcigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6Ok51bWJlcik7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
YmluYXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6
QmluYXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGFycmF5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlE
YXRhJiBzb3VyY2UsIElEQktleURhdGEmIGRlc3RpbmF0aW9uKTsKIAogICAgIEtleVR5cGUgbV90
eXBlOwotICAgIFZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhy
ZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJL
ZXlEYXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwog
CiAgICAgYm9vbCBtX2lzTnVsbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGVsZXRlZFZhbHVl
IHsgZmFsc2UgfTsKQEAgLTI0MiwxNyArMjQyLDE3IEBAIHZvaWQgSURCS2V5RGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
S2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxUaHJlYWRT
YWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlw
ZTo6U3RyaW5nOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVy
OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpAQCAtMjc2LDIzICsyNzYsMjMgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcgogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5Ogog
ICAgICAgICBrZXlEYXRhLm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGtleURhdGEu
bV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgogICAgICAgICBrZXlE
YXRhLm1fdmFsdWUgPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihrZXlEYXRhLm1fdmFsdWUp
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgogICAgICAgICBrZXlEYXRhLm1f
dmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxT
dHJpbmc+KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0
ZDo6Z2V0PFN0cmluZz4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtl
eVR5cGU6Ok51bWJlcjoKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gMC4wOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVlKSkpCisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8ZG91YmxlPihrZXlEYXRhLm1fdmFs
dWUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBp
c0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQYXRoJgogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBh
dGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiBJREJL
ZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQpAQCAtMjIwLDcg
KzIyMCw3IEBAIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgKICAgICAg
ICAgcmV0dXJuIHZlY3RvckNvcHk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2
aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRo
KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTI0NCw3ICsyNDQsNyBAQCBTdHJpbmcgbG9nZ2lu
Z1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwCiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBJREJLZXlQYXRoID0gV1RGOjpWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0
cmluZz4+OwordXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+PjsKIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYpOwogCiBl
bnVtIGNsYXNzIElEQktleVBhdGhQYXJzZUVycm9yIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDIy
MDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJ
REJJbmRleD4+IElEQk9iamVjdFN0b3IKICAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCi0gICAgaWYgKHBhcmFtZXRlcnMubXVs
dGlFbnRyeSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRo
KSkKKyAgICBpZiAocGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVh
dGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgd2FzIGFu
IGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKSB9OwogCiAgICAgLy8g
SW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0U291cmNlKElEQkN1cnNvciYgY3UKIAogICAgIG1fc291cmNlID0gU291cmNlIHsg
JmN1cnNvciB9OwogICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKSk7Ci0gICAgICAgIFdU
Rjo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0
c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgc3Rk
OjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRz
dGFuZGluZ1JlcXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDcsOSArMjA3LDkgQEAg
dWludDY0X3QgSURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZAogICAgICAgICByZXR1cm4g
MDsKIAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCi0gICAgICAg
IFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4g
b2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKTsgfSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+Jikg
eyByZXR1cm4gMDsgfQorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYg
b2JqZWN0U3RvcmUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRl
bnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgp
IC0+IHVpbnQ2NF90IHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIC0+IHVpbnQ2NF90
IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cgogewogICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZS52
YWx1ZSgpKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQklu
ZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOwogCiAgICAgcmV0dXJuIG1fcmVxdWVzdGVkSW5kZXhS
ZWNvcmRUeXBlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAgdXNpbmcgUmVz
dWx0ID0gVmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj47CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+PjsKICAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJlc3VsdD4+IHJlc3Vs
dCgpIGNvbnN0OwogCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CisgICAgdXNpbmcg
U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4sIFJlZlB0cjxJREJDdXJzb3I+PjsKICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJj
ZT4mIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKICAgICBFeGNlcHRpb25P
cjxET01FcnJvcio+IGVycm9yKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5UGF0aAogICAgICAgICAgICAg
ICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFs
dWUoKSk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBl
OjpOdWxsKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgU3RyaW5nIE1lZGlhQ29udHJv
bHNIb3N0OjpkaXNwbGF5TmFtZUZvcgogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbJnBhZ2VdKGF1dG8mIHRyYWNr
KSB7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykgewogICAgICAg
ICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5kaXNwbGF5TmFtZUZv
clRyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9LCB0cmFjay52YWx1ZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBzb3J0ZWRU
cmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QmKTsKICAgICBWZWN0b3I8UmVmUHRyPEF1ZGlv
VHJhY2s+PiBzb3J0ZWRUcmFja0xpc3RGb3JNZW51KEF1ZGlvVHJhY2tMaXN0Jik7CiAKLSAgICB1
c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gV1RGOjpWYXJpYW50PFJlZlB0cjxUZXh0VHJhY2s+LCBS
ZWZQdHI8QXVkaW9UcmFjaz4+OworICAgIHVzaW5nIFRleHRPckF1ZGlvVHJhY2sgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPFRleHRUcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPj47CiAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0T3JBdWRpb1RyYWNr
PiYpOwogCiAgICAgVGV4dFRyYWNrKiBjYXB0aW9uTWVudU9mZkl0ZW0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBEb2N1bWVu
dCogTWVkaWFEZXZpY2VzOjpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCi1zdGF0aWMgTWVkaWFDb25z
dHJhaW50cyBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IFZhcmlhbnQ8Ym9vbCwgTWVkaWFU
cmFja0NvbnN0cmFpbnRzPiYgY29uc3RyYWludHMpCitzdGF0aWMgTWVkaWFDb25zdHJhaW50cyBj
cmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNr
Q29uc3RyYWludHM+JiBjb25zdHJhaW50cykKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihj
b25zdHJhaW50cywKICAgICAgICAgWyZdIChib29sIGlzVmFsaWQpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURl
dmljZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgRW51bWVyYXRlRGV2aWNlc1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMU2VxdWVu
Y2U8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlSW5mbz4+PjsKIAogICAgIHN0cnVjdCBTdHJlYW1D
b25zdHJhaW50cyB7Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRz
PiB2aWRlbzsKLSAgICAgICAgVmFyaWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1
ZGlvOworICAgICAgICBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiB2
aWRlbzsKKyAgICAgICAgc3RkOjp2YXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4g
YXVkaW87CiAgICAgfTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBnZXRVc2VyTWVkaWEoY29uc3Qg
U3RyZWFtQ29uc3RyYWludHMmLCBQcm9taXNlJiYpIGNvbnN0OwogICAgIHZvaWQgZW51bWVyYXRl
RGV2aWNlcyhFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29u
c3RyYWludHMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OCArNDIsOCBAQCBzdHJ1Y3QgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnMgewogfTsKIAogc3Ry
dWN0IENvbnN0cmFpbkRPTVN0cmluZ1BhcmFtZXRlcnMgewotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7Ci0gICAgc3RkOjpvcHRpb25hbDxW
YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBpZGVhbDsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGlkZWFsOwogfTsK
IAogc3RydWN0IENvbnN0cmFpbkRvdWJsZVJhbmdlIDogRG91YmxlUmFuZ2UgewpAQCAtNTYsMTAg
KzU2LDEwIEBAIHN0cnVjdCBDb25zdHJhaW5Mb25nUmFuZ2UgOiBMb25nUmFuZ2UgewogICAgIHN0
ZDo6b3B0aW9uYWw8aW50PiBpZGVhbDsKIH07CiAKLXVzaW5nIENvbnN0cmFpbkJvb2xlYW4gPSBW
YXJpYW50PGJvb2wsIENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzPjsKLXVzaW5nIENvbnN0cmFp
bkRPTVN0cmluZyA9IFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3RyYWluRE9N
U3RyaW5nUGFyYW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5Eb3VibGUgPSBWYXJpYW50PGRvdWJs
ZSwgQ29uc3RyYWluRG91YmxlUmFuZ2U+OwotdXNpbmcgQ29uc3RyYWluTG9uZyA9IFZhcmlhbnQ8
aW50LCBDb25zdHJhaW5Mb25nUmFuZ2U+OwordXNpbmcgQ29uc3RyYWluQm9vbGVhbiA9IHN0ZDo6
dmFyaWFudDxib29sLCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJh
aW5ET01TdHJpbmcgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3Ry
YWluRE9NU3RyaW5nUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJhaW5Eb3VibGUgPSBzdGQ6OnZh
cmlhbnQ8ZG91YmxlLCBDb25zdHJhaW5Eb3VibGVSYW5nZT47Cit1c2luZyBDb25zdHJhaW5Mb25n
ID0gc3RkOjp2YXJpYW50PGludCwgQ29uc3RyYWluTG9uZ1JhbmdlPjsKIAogc3RydWN0IE1lZGlh
VHJhY2tDb25zdHJhaW50U2V0IHsKICAgICBzdGQ6Om9wdGlvbmFsPENvbnN0cmFpbkxvbmc+IHdp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0ljZVNlcnZlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0ljZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBSVENJY2VTZXJ2ZXIgewotICAgIFZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKKyAgICBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKICAgICBTdHJpbmcgY3JlZGVudGlhbDsKICAgICBT
dHJpbmcgdXNlcm5hbWU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOCArMTg0LDggQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gUlRDUGVlckNvbm5lY3Rpb246OnJlbQogCiBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNj
ZWl2ZXI+PiBSVENQZWVyQ29ubmVjdGlvbjo6YWRkVHJhbnNjZWl2ZXIoQWRkVHJhbnNjZWl2ZXJU
cmFja09yS2luZCYmIHdpdGhUcmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0
KQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkg
ewotICAgICAgICBjb25zdCBTdHJpbmcmIGtpbmQgPSBXVEY6OmdldDxTdHJpbmc+KHdpdGhUcmFj
ayk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih3aXRoVHJhY2spKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYga2luZCA9IHN0ZDo6Z2V0PFN0cmluZz4od2l0aFRyYWNr
KTsKICAgICAgICAgaWYgKGtpbmQgIT0gImF1ZGlvIiAmJiBraW5kICE9ICJ2aWRlbyIpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBSVENQCiAgICAgICAgIHJl
dHVybiBjb21wbGV0ZUFkZFRyYW5zY2VpdmVyKFdURk1vdmUoc2VuZGVyKSwgaW5pdCwgY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpLCBraW5kKTsKICAgICB9CiAKLSAgICBSZWY8TWVkaWFTdHJl
YW1UcmFjaz4gdHJhY2sgPSBXVEY6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhU
cmFjaykucmVsZWFzZU5vbk51bGwoKTsKKyAgICBSZWY8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sg
PSBzdGQ6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhUcmFjaykucmVsZWFzZU5v
bk51bGwoKTsKICAgICBjb25zdCBTdHJpbmcmIHRyYWNrSWQgPSB0cmFjay0+aWQoKTsKICAgICBj
b25zdCBTdHJpbmcmIHRyYWNrS2luZCA9IHRyYWNrLT5raW5kKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gYWRkVHJhY2soUmVm
PE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PE1lZGlhU3RyZWFtPj4mKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVUcmFjayhSVENS
dHBTZW5kZXImKTsKIAotICAgIHVzaW5nIEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQgPSBWYXJp
YW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiwgU3RyaW5nPjsKKyAgICB1c2luZyBBZGRUcmFu
c2NlaXZlclRyYWNrT3JLaW5kID0gc3RkOjp2YXJpYW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
PiwgU3RyaW5nPjsKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRU
cmFuc2NlaXZlcihBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kJiYsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYpOwogCiAgICAgLy8gNi4xIFBlZXItdG8tcGVlciBkYXRhIEFQSQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5o
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTAgQEAgcHVibGlj
OgogICAgIFJlc3VsdCBnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiwg
U3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYXJzaW5nUmVz
dWx0IHsKLSAgICAgICAgVmFyaWFudDxJY2VDYW5kaWRhdGUsIFJlc3VsdD4gcmVzdWx0OworICAg
ICAgICBzdGQ6OnZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKIAotICAgICAg
ICBSZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8
U0RQUHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBj
YW5kaWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KKyAg
ICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6IHN0ZDo6
Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9CisgICAgICAgIEljZUNhbmRpZGF0
ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gc3RkOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9
CiAgICAgfTsKICAgICBQYXJzaW5nUmVzdWx0IHBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJp
bmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9JRExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMSArMjI4LDExIEBAIHN0cnVjdCBJRExFcnJv
ciA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH0KIHN0cnVjdCBJRExET01FeGNlcHRpb24gOiBJRExV
bnN1cHBvcnRlZFR5cGUgeyB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUcz4KLXN0cnVjdCBJ
RExVbmlvbiA6IElETFR5cGU8VmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBl
Li4uPj4geworc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUg
VHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+IHsKICAgICB1c2luZyBUeXBlTGlzdCA9IGJyaWdh
bmQ6Omxpc3Q8VHMuLi4+OwogCi0gICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZhcmlh
bnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwotICAgIHVzaW5nIE51bGxh
YmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDx0eXBlbmFtZSBU
czo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4mOworICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBj
b25zdCBzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwor
ICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8c3Rk
Ojp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiY7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMQnVmZmVyU291cmNlIDogSURMV3JhcHBlcjxU
PiB7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCdWZmZXJTb3VyY2UgewogcHVibGljOgotICAgIHVzaW5nIFZhcmlhbnRUeXBl
ID0gV1RGOjpWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyPj47CisgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PjsKIAog
ICAgIEJ1ZmZlclNvdXJjZSgpIHsgfQogICAgIEJ1ZmZlclNvdXJjZShWYXJpYW50VHlwZSYmIHZh
cmlhbnQpCkBAIC00NSwxNCArNDUsMTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgdWludDhfdCog
ZGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBi
dWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10o
YXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKTsKICAgICAgICAgfSwgbV92
YXJpYW50KTsKICAgICB9CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXplX3QgewogICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICB9LCBtX3ZhcmlhbnQp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJU
eXBlcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9D
YWxsVHJhY2VyVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmFyaWFudDwKK3R5cGVkZWYgc3RkOjp2YXJpYW50
PAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6SW1hZ2VTbW9vdGhpbmdRdWFsaXR5LAog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6V2luZGluZ1J1bGUsCiAgICAgRE9NTWF0cml4
SW5pdCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDEx
ICsyNzAsMTEgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YQogewog
ICAgIExPRyhJbmRleGVkREIsICJpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOworICAgIEFT
U0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVy
cm9yOwotICAgIElEQlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQ
YXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5n
PihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09
IElEQktleVBhdGhQYXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmIChrZXlQYXRoRWxlbWVudHMu
aXNFbXB0eSgpKQpAQCAtMjk3LDggKzI5Nyw4IEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKEV4ZWNTdGEKIAogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFsdWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKSB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0g
V1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkgeworICAgICAgICBhdXRvJiBhcnJh
eSA9IHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKICAgICAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+PiByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFycmF5LnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogYXJyYXkpIHsK
QEAgLTMxMCwxNyArMzEwLDE3IEBAIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJv
bVNjcmkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoV1RGTW92ZShyZXN1bHQp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKKyAg
ICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4
ZWMsIHZhbHVlLCBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKIH0KIAogYm9vbCBjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiBz
Y3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCi0gICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CisgICAgQVNTRVJUKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAgIElE
QlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMs
IGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKQEAg
LTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgVmVjdG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhB
CiAgICAgICAgIHJldHVybiBrZXlzOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQo
dmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3Is
IGluZm8ua2V5UGF0aCgpKTsKIH0KIAogdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhl
Y1N0YXRlJiBleGVjLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEpTVmFsdWUgdmFsdWUsIElu
ZGV4S2V5JiBvdXRLZXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw3ICsz
ODUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKLSAgICB1c2luZyBTZXF1ZW5jZSA9
IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlh
bnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisgICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgc3RkOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQogICAgIHsK
QEAgLTM5Niw3ICszOTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252
ZXJ0CiAgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6dmFs
dWUgPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDY2ICs2Niw2NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIGNvbnZl
cnRUb0pTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihh
bnksCi0gICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgeworICAgICAgICBbXSAoc3RkOjpudWxs
cHRyX3QpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAg
ICB9LAotICAgICAgICBbXSAoYm9vbCB2YWx1ZSkgeworICAgICAgICBbXSAoYm9vbCB2YWx1ZSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhbHVlKTsKICAgICAg
ICAgfSwKLSAgICAgICAgW10gKGludCB2YWx1ZSkgeworICAgICAgICBbXSAoaW50IHZhbHVlKSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFtdICh1bnNpZ25lZCB2YWx1ZSkgeworICAgICAgICBbXSAodW5zaWduZWQg
dmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsK
ICAgICAgICAgfSwKLSAgICAgICAgW10gKGxvbmcgbG9uZyB2YWx1ZSkgeworICAgICAgICBbXSAo
bG9uZyBsb25nIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChmbG9hdCB2YWx1ZSkgeworICAgICAg
ICBbXSAoZmxvYXQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVl
KSB7CisgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIHsKKyAgICAgICAg
WyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxP
YmplY3QsIGxpc3QpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9h
dDMyQXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJy
YXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChj
b25zdCBSZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPEludDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAg
ICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDhBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDMyQXJyYXk+JiBhcnJheSkg
eworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50MzJBcnJheT4mIGFycmF5KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJy
YXkuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1
ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1ZmZlcj4m
IGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25z
dCBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4mIHByb2dy
YW0pIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xQcm9ncmFtPiYgcHJvZ3JhbSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHByb2dyYW0uZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVGV4dHVyZT4mIHRleHR1cmUpIHsK
KyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xUZXh0dXJlPiYgdGV4dHVyZSkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHRl
eHR1cmUuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTPiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwog
ICAgICAgICB9CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgLAotICAgICAgICBbJl0gKGNv
bnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0PiYgYXJyYXkpIHsKKyAgICAgICAgWyZd
IChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdD4mIGFycmF5KSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXku
Z2V0KCkpOwogICAgICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtNzI1MSw3ICs3MjUxLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbFRyYWNlclBh
cmFtZXRlcigpCiAgICAgbXkgKCRuYW1lLCAkdHlwZSwgJGluZGVudCkgPSBAXzsKIAogICAgIGlm
ICgkdHlwZS0+aXNVbmlvbikgewotICAgICAgICByZXR1cm4gJGluZGVudCAuICIgICAgV1RGOjp2
aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1
ZSk7IH0sICIgLiAkbmFtZSAuICIpOyI7CisgICAgICAgIHJldHVybiAkaW5kZW50IC4gIiAgICBz
dGQ6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5k
KHZhbHVlKTsgfSwgIiAuICRuYW1lIC4gIik7IjsKICAgICB9CiAKICAgICByZXR1cm4gJGluZGVu
dCAuICIgICAgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKCIgLiAkbmFtZSAuICIpOyI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRy
YWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0Q2FsbFRyYWNlclRlCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpIHsKICAgICAg
ICAgVmVjdG9yPFRlc3RDYWxsVHJhY2VySW50ZXJmYWNlVmFyaWFudD4gY2FsbFRyYWNlclBhcmFt
ZXRlcnM7Ci0gICAgICAgIFdURjo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2Vy
UGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCBuYXRpdmVWYWx1ZSk7CisgICAgICAgIHN0ZDo6
dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFs
dWUpOyB9LCBuYXRpdmVWYWx1ZSk7CiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2Vy
SW50ZXJmYWNlKGltcGwsIEFTQ0lJTGl0ZXJhbCgidGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iiks
IFdURk1vdmUoY2FsbFRyYWNlclBhcmFtZXRlcnMpKTsKICAgICB9CiAgICAgaW1wbC5zZXRUZXN0
QXR0cmlidXRlV2l0aFZhcmlhbnQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtNDAzLDcgKzQw
Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChV
TkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKSB7CiAgICAgICAgIFZlY3RvcjxUZXN0
Q2FsbFRyYWNlckludGVyZmFjZVZhcmlhbnQ+IGNhbGxUcmFjZXJQYXJhbWV0ZXJzOwotICAgICAg
ICBXVEY6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBw
ZW5kKHZhbHVlKTsgfSwgdmFyaWFudEFyZyk7CisgICAgICAgIHN0ZDo6dmlzaXQoWyZdIChhdXRv
JiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCB2YXJpYW50
QXJnKTsKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwg
QVNDSUlMaXRlcmFsKCJ0ZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1bWVudCIpLCBXVEZNb3Zl
KGNhbGxUcmFjZXJQYXJhbWV0ZXJzKSk7CiAgICAgfQogICAgIGltcGwudGVzdE9wZXJhdGlvbldp
dGhWYXJpYW50QXJndW1lbnQoV1RGTW92ZSh2YXJpYW50QXJnKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDggQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIC8vIERhdGEgaXMgbXV0YWJs
ZSwgc28gYXN5bmMgb3BlcmF0aW9ucyBzaG91bGQgY29weSBpdCBmaXJzdC4KIHVzaW5nIENyeXB0
b09wZXJhdGlvbkRhdGEgPSBzdGQ6OnBhaXI8Y29uc3QgdWludDhfdCosIHNpemVfdD47CiAKLXVz
aW5nIEtleURhdGEgPSBWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgSnNvbldlYktleT47Ci11c2lu
ZyBLZXlPcktleVBhaXIgPSBWYXJpYW50PFJlZlB0cjxDcnlwdG9LZXk+LCBDcnlwdG9LZXlQYWly
PjsKK3VzaW5nIEtleURhdGEgPSBzdGQ6OnZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBKc29uV2Vi
S2V5PjsKK3VzaW5nIEtleU9yS2V5UGFpciA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8Q3J5cHRvS2V5
PiwgQ3J5cHRvS2V5UGFpcj47CiAKIGNsYXNzIENyeXB0b0FsZ29yaXRobSA6IHB1YmxpYyBSZWZD
b3VudGVkPENyeXB0b0FsZ29yaXRobT4gewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0tleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9LZXkuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFz
cyBDcnlwdG9LZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENyeXB0b0tleVR5cGU7Ci0gICAgdXNpbmcgQWxnb3Jp
dGhtVmFyaWFudCA9IFZhcmlhbnQ8Q3J5cHRvS2V5QWxnb3JpdGhtLCBDcnlwdG9BZXNLZXlBbGdv
cml0aG0sIENyeXB0b0VjS2V5QWxnb3JpdGhtLCBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtLCBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0sIENyeXB0b1JzYUtleUFsZ29yaXRobT47CisgICAgdXNp
bmcgQWxnb3JpdGhtVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENy
eXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlB
bGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3Jp
dGhtPjsKIAogICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBUeXBlLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAgICAgdmlydHVhbCB+Q3J5
cHRvS2V5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDE0ICs5NiwxNCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8c3Rk
Ojp1bmlxdWVfcHRyPENyeXB0CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CisgICAgaWYgKHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgewogICAgICAgICBh
dXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwgV1RGOjpnZXQ8U3RyaW5n
PihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwg
c3RkOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMoc3RhdGUsIG5ld1Bh
cmFtcywgb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBhdXRvJiB2YWx1ZSA9IFdURjo6Z2V0PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBhdXRv
JiB2YWx1ZSA9IHN0ZDo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1J
ZGVudGlmaWVyKTsKIAogICAgIGF1dG8gcGFyYW1zID0gY29udmVydERpY3Rpb25hcnk8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4oc3RhdGUsIHZhbHVlLmdldCgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwpA
QCAtODY3LDEyICs4NjcsMTIgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OmV4cG9ydEtleShLZXlGb3Jt
YXQgZgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOgogICAgICAg
ICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgY2FzZSBTdWJ0
bGVDcnlwdG86OktleUZvcm1hdDo6UmF3OiB7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4m
IHJhd0tleSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsKKyAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiYgcmF3S2V5ID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOwog
ICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoV1RGTW92ZShjYXB0dXJl
ZFByb21pc2UpLCByYXdLZXkuZGF0YSgpLCByYXdLZXkuc2l6ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpK
d2s6Ci0gICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxK
c29uV2ViS2V5Pj4oV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CisgICAgICAg
ICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4o
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MzYsMTEgKzkz
NiwxMSBAQCB2b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6OkV4ZWNTdGF0CiAgICAgICAg
IGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGNhc2UgU3VidGxl
Q3J5cHRvOjpLZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgICAgICBieXRlcyA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oa2V5KTsKKyAgICAgICAgICAgIGJ5dGVzID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihr
ZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlG
b3JtYXQ6Okp3azogewogICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnRpbmcgdG8gSlMganVz
dCB0byBKU09OLVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4gV2Ugc2hvdWxkIGZpbmQgYSB3
YXkgdG8gZ28gZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpTT04uCi0gICAgICAgICAgICBh
dXRvIGp3ayA9IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oKihwcm9taXNlLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKSksIFdU
Rk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAgICAgICAgICAgYXV0byBqd2sg
PSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCkpLCBXVEZNb3ZlKHN0
ZDo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKICAgICAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcg
PSBKU09OU3RyaW5naWZ5KHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGp3
aywgMCk7CiAgICAgICAgICAgICBDU3RyaW5nIGp3a1V0ZjhTdHJpbmcgPSBqd2tTdHJpbmcudXRm
OChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgICAgIGJ5dGVzLmFwcGVuZChqd2tVdGY4U3Ry
aW5nLmRhdGEoKSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU3VidGxlQ3J5cHRvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgS2V5Rm9ybWF0ID0gQ3J5cHRvS2V5Rm9ybWF0OwogCi0gICAgdXNp
bmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4sIFN0cmluZz47Ci0gICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQgPSBWYXJpYW50PFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgSnNvbldlYktl
eT47CisgICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IHN0ZDo6dmFyaWFudDxKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBLZXlEYXRhVmFyaWFudCA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4sIEpzb25XZWJLZXk+OwogCiAgICAgdm9pZCBlbmNyeXB0KEpTQzo6RXhlY1N0
YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJTb3VyY2UmJiBk
YXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIGRlY3J5cHQoSlNDOjpFeGVj
U3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYm
IGRhdGEsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoQwogICAgIFJlZlB0
cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1w
b3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBh
dXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFs
ZykgLT4gYm9vbCB7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVz
dWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJh
dzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+
aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0
UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFj
ayA9IFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTEx
OSw3ICsxMTksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tB
bGdDYWxsYmFjaykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DVFIuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1w
b3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChm
b3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3Zl
KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
KyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0
OjpKd2s6IHsKICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tB
bGdDYWxsYmFjaykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoQwogICAgIFJlZlB0
cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1w
b3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBh
dXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFs
ZykgLT4gYm9vbCB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
R0NNOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfS1cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19L
Vy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19LVzo6aW1wb3J0S2V5KENyCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoK
LSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6
aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6
aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlbmd0aCkgewog
ICAgICAgICAgICAgY2FzZSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTI4OgogICAgICAgICAgICAg
ICAgIHJldHVybiBhbGcuaXNOdWxsKCkgfHwgYWxnID09IEFMRzEyODsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVD
REguY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KENyeXAKICAgICBSZWZQ
dHI8Q3J5cHRvS2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3Zl
KFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBX
VEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBib29sIGlzVXNh
Z2VzQWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBpZiAoIWtleS5kLmlzTnVsbCgpKSB7CkBAIC0x
NTAsMjEgKzE1MCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShDcnlw
CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9y
dFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdU
Rk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBpZiAodXNhZ2Vz
KSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6Omlt
cG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZl
LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJh
bWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBpZiAo
dXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUtleSkgJiYgKHVzYWdlcyBe
IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykgJiYgKHVzYWdlcyBeIChDcnlwdG9LZXlVc2FnZURl
cml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykpKSB7CiAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwg
ZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVD
RFNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUVDRFNBOjppbXBvcnRLZXkoQ3J5CiAgICAgUmVmUHRyPENyeXB0b0tleUVDPiByZXN1bHQ7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7
Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5Pihk
YXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1
c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTI0LDIxICsxMjQsMjEgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIs
IGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5h
bWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6U3BraToKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VW
ZXJpZnkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1l
ZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2ko
ZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3Zl
KHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAg
ICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB7CiAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVj
UGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShX
VEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRl
bnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1IS0RGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobUhLREY6OmltcG9ydEtleShDcnlwCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVy
LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKKyAg
ICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBX
VEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKIH0KIAog
RXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1IS0RGOjpnZXRLZXlMZW5ndGgoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtSE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShDcnlwCiAgICAgUmVmUHRyPENyeXB0b0tl
eUhNQUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6OmltcG9ydFJhdyho
bWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJzLmhhc2hJZGVu
dGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElk
ZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTM1
LDcgKzEzNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KENyeXAKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0
aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RG
OjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNo
ZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0
SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFz
aElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobVBCS0RGMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleShDcgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7Cisg
ICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpnZXRLZXlMZW5ndGgo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FFU19QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAg
ICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
OworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOwogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1c2Fn
ZXMgXiBDcnlwdG9LZXlVc2FnZURlY3J5cHQpKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdl
cyBeIENyeXB0b0tleVVzYWdlRW5jcnlwdCkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDcgKzEyNSw3
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVs
bG9wdCwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZv
cm1hdDo6UGtjczg6IHsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51
bGxvcHQsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3Rh
YmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNTo6aQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdDsKICAgICBzd2l0
Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAg
SnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAg
ICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMg
XiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENy
eXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
eW50YXhFcnJvcik7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1ldGVy
cy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6
aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElk
ZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCByc2FQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhh
c2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1S
U0FfT0FFUC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QV9PQUVQOjppbXBvcnRLZXkoCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAg
ICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
OworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOwogCiAgICAgICAgIGJvb2wgaXNVc2FnZXNBbGxvd2VkID0gZmFsc2U7CiAgICAgICAg
IGlmICgha2V5LmQuaXNOdWxsKCkpIHsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVJTQV9QU1MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCShyZXZpc2lvbiAyMjA5MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0Ff
UFNTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azog
ewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxsKCkg
JiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwoKSAmJiAo
dXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0
b0FsZ29yaXRobUVjZHNhUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
RWNkc2FQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcyBmaW5hbCA6IHB1Ymxp
YyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29u
c2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIENsYXNzIHBhcmFtZXRlcnNDbGFz
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENsYXNzOjpFY2RzYVBhcmFtczsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobUhrZGZQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0Fs
Z29yaXRobUhrZGZQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFz
aElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3Ry
aW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Piwg
U3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZp
ZXI7CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgQnVmZmVyU291cmNlIGluZm87CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMv
Q3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVy
Z2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGVuZ3RoOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Q
YmtkZjJQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFy
YW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIEJ1ZmZl
clNvdXJjZSBzYWx0OwogICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9uczsKICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50
PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJp
YW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgc2FsdFZlY3RvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNo
ZWRJbXBvcnRQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
ZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8
SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6OlJzYUhhc2hlZEltcG9ydFBhcmFtczsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVk
S2V5R2VuUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFt
ZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgJKHJldmlzaW9uIDIy
MDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRo
bVJzYUhhc2hlZEtleUdlblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtleUdl
blBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMgewog
cHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVu
dGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4g
aGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmlu
Zz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwog
CiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6
OlJzYUhhc2hlZEtleUdlblBhcmFtczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUw
LDcgQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyBwYXJzZUphdmFTY3JpcHRDUwogCiB9CiAKLXN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IENTU1N0eWxlRGVjbGFyYXRpb246
Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3N0ZDo6b3B0aW9u
YWw8c3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFt
ZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGF1dG8gcHJv
cGVydHlJbmZvID0gcGFyc2VKYXZhU2NyaXB0Q1NTUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7
CiAgICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKQEAgLTI1OSwxNyArMjU5LDE3IEBA
IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IEMKICAgICBhdXRvIHZhbHVl
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKTsK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHNob3J0
aGFuZCBwcm9wZXJ0eSAoc3VjaCBhcyAicGFkZGluZyIpLCBpdCBjYW4gb25seSBiZSBhY2Nlc3Nl
ZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgotICAgICAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcs
IGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5
SUQpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZ2V0
UHJvcGVydHlWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSB9OwogICAgIH0K
ICAgICAKICAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVsT3JQb3NQcmVmaXggJiYgaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKICAgICAgICAgLy8gQ2FsbCB0aGlzIHZlcnNpb24g
b2YgdGhlIGdldHRlciBzbyB0aGF0LCBlLmcuLCBwaXhlbFRvcCByZXR1cm5zIHRvcCBhcyBhIG51
bWJlcgogICAgICAgICAvLyBpbiBwaXhlbCB1bml0cyBhbmQgcG9zVG9wIHNob3VsZCBkb2VzIHRo
ZSBzYW1lIF9pZl8gdGhpcyBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4KICAgICAgICAgLy8gRklY
TUU6IElmIG5vdCBhIHBvc2l0aW9uZWQgZWxlbWVudCwgTVNJRSBkb2N1bWVudGF0aW9uIHNheXMg
cG9zVG9wIHNob3VsZCByZXR1cm4gMDsgdGhpcyBydWxlIGlzIG5vdCBpbXBsZW1lbnRlZC4KLSAg
ICAgICAgcmV0dXJuIFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSB9
OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPiB7IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcsIGRvdWJsZT4g
eyB2YWx1ZS0+Y3NzVGV4dCgpIH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRv
dWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENTU1N0
eWxlRGVjbGFyYXRpb246OnNldE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQmluZGlu
Z3Mgc3VwcG9ydC4KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBu
YW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZh
cmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCk7CiAgICAgVmVjdG9yPEF0
b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0RPTU1hdHJpeC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
RE9NTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBET01NYXRyaXggOiBwdWJsaWMgRE9NTWF0cml4UmVhZE9ubHkgewog
cHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRlKHN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0KQorICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYmIGluaXQpCiAgICAgewogICAg
ICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0cml4KTsKICAgICAgICAgaWYg
KCFpbml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBET01Qb2ludEluaXQ7CiBjbGFz
cyBET01NYXRyaXhSZWFkT25seSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPERPTU1hdHJpeFJlYWRPbmx5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXhSZWFkT25seT4+
IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYg
aW5pdCkKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeFJlYWRPbmx5Pj4gY3Jl
YXRlKHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYm
IGluaXQpCiAgICAgewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0
cml4UmVhZE9ubHkpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2Uu
aAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgZmVh
dHVyZVNldHRpbmdzOwogICAgIH07CiAgICAgCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxT
dHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+PjsKICAgICBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEZvbnRGYWNlPj4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgU3Ry
aW5nJiBmYW1pbHksIFNvdXJjZSYmLCBjb25zdCBEZXNjcmlwdG9ycyYpOwogICAgIHN0YXRpYyBS
ZWY8Rm9udEZhY2U+IGNyZWF0ZShDU1NGb250RmFjZSYpOwogICAgIHZpcnR1YWwgfkZvbnRGYWNl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBA
QCBlbnVtIGNsYXNzIEN1c3RvbUVsZW1lbnROYW1lVmFsaWRhdGlvblN0CiAgICAgQ29uZmxpY3Rz
V2l0aFN0YW5kYXJkRWxlbWVudE5hbWUKIH07CiAKLXVzaW5nIFJlbmRlcmluZ0NvbnRleHQgPSBW
YXJpYW50PAordXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dmFyaWFudDwKICNpZiBFTkFC
TEUoV0VCR0wpCiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4sCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTks
NyArOTksNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IERyYWdnZWRDb250ZW50RGF0YSB7CiAgICAg
ICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlOwogICAgIH07Ci0gICAgdXNpbmcgRGF0YSA9IFZh
cmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0YSwg
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhPjsKKyAgICB1c2lu
ZyBEYXRhID0gc3RkOjp2YXJpYW50PElzQWN0aXZlTWF0Y2hEYXRhLCBEZXNjcmlwdGlvbkRhdGEs
IERpY3RhdGlvbkRhdGEsIERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEsIERyYWdnZWRDb250ZW50
RGF0YT47CiAKICAgICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCBib29sIGlzQWN0aXZlTWF0Y2gpOwogICAgIERvY3VtZW50TWFya2VyKE1h
cmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24gPSBTdHJpbmcoKSk7CkBAIC0xOTgsMTIgKzE5OCwxMiBAQCBp
bmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzCiAKIGlubGluZSBjb25zdCBT
dHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8gV1RGOjpnZXQ8U3RyaW5n
PihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBlbXB0eVN0
cmluZygpOwogfQogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4obV9kYXRh
KSAmJiBXVEY6OmdldDxib29sPihtX2RhdGEpOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgc3RkOjpnZXQ8Ym9vbD4obV9kYXRhKTsKIH0KIAogaW5s
aW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJvb2wgaXNBY3RpdmVNYXRj
aCkKQEAgLTIyNywyMiArMjI3LDIyIEBAIGlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRN
YXJrZXIoTWEKIAogaW5saW5lIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1hcmtlcjo6
YWx0ZXJuYXRpdmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0
ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXM7CisgICAgcmV0dXJuIHN0ZDo6Z2V0
PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOwogfQogCiBp
bmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBh
bHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQogewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVy
bmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwor
ICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRp
dmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwogfQogCiBpbmxpbmUgaWQgRG9jdW1lbnRNYXJrZXI6
Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJu
YXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKIH0KIAog
aW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKGlkIG1ldGFkYXRhKQogewot
ICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEg
PSBtZXRhZGF0YTsKKyAgICBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2Rh
dGEpLm1ldGFkYXRhID0gbWV0YWRhdGE7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0
QXNTZXBhcmF0ZU1hcmtlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIGlmIChu
ZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkgewotICAg
ICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKKyAgICAgICAgaWYg
KGF1dG8gdGFyZ2V0Tm9kZSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVu
dERhdGE+KG5ld01hcmtlci5kYXRhKCkpLnRhcmdldE5vZGUpCiAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSAmJiB0YXJnZXROb2RlLT5yZW5kZXJlcigpLT5pc1JlbmRl
clJlcGxhY2VkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6YWRkRXZl
bnRMaXN0ZW5lckZvckJpbgogICAgICAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlz
dGVuZXIucmVsZWFzZU5vbk51bGwoKSwgY2FwdHVyZSk7CiAgICAgfSk7CiAKLSAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlz
dGVuZXIsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQpCkBAIC0xMDQsNyArMTA0
LDcgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvcgogICAgICAgICBy
ZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLCBjYXB0dXJlKTsKICAgICB9
KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2
aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogYm9vbCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAg
IGJvb2wgb25jZTsKICAgICB9OwogCi0gICAgdXNpbmcgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNP
ckJvb2xlYW4gPSBWYXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLCBib29sPjsKKyAgICB1
c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IHN0ZDo6dmFyaWFudDxBZGRF
dmVudExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRF
dmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiYmLCBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYm
KTsKLSAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBWYXJpYW50PExpc3RlbmVy
T3B0aW9ucywgYm9vbD47CisgICAgdXNpbmcgTGlzdGVuZXJPcHRpb25zT3JCb29sZWFuID0gc3Rk
Ojp2YXJpYW50PExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4m
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gZGlzcGF0Y2hFdmVudEZv
ckJpbmRpbmdzKEV2ZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPERPTVdp
bmRvdz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwordXNpbmcgTWVzc2FnZUV2ZW50U291cmNlID0g
c3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+PjsKIAog
Y2xhc3MgTWVzc2FnZUV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBTVkdRdWFsaWZpZWROYW1l
OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZlbnQ7CiAKLXVzaW5nIE5vZGVPclN0
cmluZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwordXNpbmcgTm9kZU9yU3RyaW5n
ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKIAogY2xhc3MgTm9kZVJhcmVE
YXRhQmFzZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnRpbWVyRmlyCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CiAg
ICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBXVEY6OmdldDxBdXRvY29ycmVjdGlv
blJlcGxhY2VtZW50PihtX2RldGFpbHMpOworICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJp
bmcgPSBzdGQ6OmdldDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50PihtX2RldGFpbHMpOwogICAg
ICAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gV1RGOjpnZXQ8
QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PihtX2RldGFpbHMpOworICAgICAgICB1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0ID0gc3RkOjpnZXQ8QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0
PihtX2RldGFpbHMpOwogICAgICAgICBpZiAoIWRpY3RhdGlvbkNvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZv
clJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwpAQCAtNTkyLDkgKzU5Miw5IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFQKICAgICAgICAgc3RhcnRB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24pOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZXM6IHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSkKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9
IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsK
KyAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1h
cmtlckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOwpAQCAtNjQyLDkgKzY0Miw5IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGkKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkp
OwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKLSAgICAg
ICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOworICAgICAgICBj
bGllbnQtPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhzdGQ6OmdldDxEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4dCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShtYXJrZXIpOwogI2VuZGlmCkBAIC02NTUsNyArNjU1LDcgQEAgVmVjdG9yPFN0
cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcgogI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQogICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRl
eHRDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5j
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHN0
ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250
ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKG1hcmtlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWN0aXZlOwogICAgICAg
ICBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGU7CiAgICAgICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7
Ci0gICAgICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVE
aWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOworICAgICAgICBzdGQ6OnZhcmlhbnQ8QXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOwog
ICAgIH07CiAKICAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNE
aXNtaXNzZWRCeUVkaXRpbmc7CiAgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSBtX3R5cGU7CiAgICAg
U3RyaW5nIG1fb3JpZ2luYWxUZXh0OwotICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFpbHM7CisgICAgc3RkOjp2
YXJpYW50PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVybmF0aXZlRGljdGF0aW9uQ29u
dGV4dD4gbV9kZXRhaWxzOwogCiAgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJsb2I7CiBjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwogCi11c2luZyBCbG9iUGFydFZhcmlhbnQgPSBWYXJpYW50PFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVm
UHRyPEJsb2I+LCBTdHJpbmc+OwordXNpbmcgQmxvYlBhcnRWYXJpYW50ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwg
UmVmUHRyPEJsb2I+LCBTdHJpbmc+OwogCiBjbGFzcyBCbG9iIDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSwgcHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmZpcmVFdmVudChj
b25zdCBBdG9taWNTCiAgICAgZGlzcGF0Y2hFdmVudChQcm9ncmVzc0V2ZW50OjpjcmVhdGUodHlw
ZSwgdHJ1ZSwgbV9sb2FkZXIgPyBtX2xvYWRlci0+Ynl0ZXNMb2FkZWQoKSA6IDAsIG1fbG9hZGVy
ID8gbV9sb2FkZXItPnRvdGFsQnl0ZXMoKSA6IDApKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJp
YW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0
KCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0KCkgY29uc3QKIHsKICAgICBpZiAoIW1f
bG9hZGVyIHx8IG1fZXJyb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDcgQEAgcHVibGljOgogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KICAgICBSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJuIG1fZXJy
b3I7IH0KICAgICBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFkVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZFR5cGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiByZXN1bHQoKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+IHJlc3Vs
dCgpIGNvbnN0OwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5nIFJlZkNv
dW50ZWQ6OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENv
bGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOCArNDMsMjggQEAgaW5saW5lIEhU
TUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdAogfQogCiAvLyBodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI2RvbS1odG1sYWxsY29s
bGVjdGlvbi1pdGVtCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRl
bU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3QKK3N0ZDo6b3B0
aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50
Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG5hbWVPckluZGV4Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKGF1dG8gaW5k
ZXggPSBKU0M6OnBhcnNlSW5kZXgoKm5hbWVPckluZGV4LmltcGwoKSkpCi0gICAgICAgIHJldHVy
biBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQ
dHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVm
UHRyPEVsZW1lbnQ+IHsgaXRlbShpbmRleC52YWx1ZSgpKSB9IH07CiAKICAgICByZXR1cm4gbmFt
ZWRJdGVtT3JJdGVtcyhuYW1lT3JJbmRleCk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjY29uY2VwdC1nZXQtYWxsLW5h
bWVkCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRy
PEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIGF1
dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFtZSk7CiAKICAgICBpZiAobmFtZWRJ
dGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG5h
bWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3Zl
KG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8
SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RG
TW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8SFRN
TENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB7
IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVyZWRCeU5hbWUobmFtZSkg
fSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVm
UHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBkb3duY2FzdDxEb2N1bWVu
dD4ob3duZXJOb2RlKCkpLmFsbEZpbHRlcmVkQnlOYW1lKG5hbWUpIH0gfTsKIH0KIAogSFRNTEFs
bE5hbWVkU3ViQ29sbGVjdGlvbjo6fkhUTUxBbGxOYW1lZFN1YkNvbGxlY3Rpb24oKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw4ICszNSw4IEBAIGNsYXNzIEhUTUxBbGxDb2xsZWN0aW9uIGZpbmFsIDogcHVibGlj
IEEKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxBbGxDb2xsZWN0aW9uPiBjcmVhdGUoRG9j
dW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRPckluZGV4ZWRJdGVt
T3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBjb25zdDsKLSAgICBzdGQ6
Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+
Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICBzdGQ6
Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxl
bWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZU9ySW5kZXgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxI
VE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3Qg
QXRvbWljU3RyaW5nJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTEFsbENvbGxlY3Rpb24o
RG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBSZWY8RG9jdW1l
bnRQYXJzZXI+IEhUTUxEb2N1bWVudDo6Y3JlYXRlCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2RvbS1kb2N1bWVudC1uYW1lZGl0ZW0KLXN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdp
bmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4+IEhUTUxEb2N1
bWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBpZiAobmFt
ZS5pc051bGwoKSB8fCAhaGFzRG9jdW1lbnROYW1lZEl0ZW0oKm5hbWUuaW1wbCgpKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTEyMCwxNiArMTIwLDE2IEBAIHN0ZDo6b3B0aW9u
YWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwKICAgICBpZiAoVU5MSUtFTFkoZG9jdW1lbnRO
YW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVudHMoKm5hbWUuaW1wbCgpKSkpIHsKICAgICAg
ICAgYXV0byBjb2xsZWN0aW9uID0gZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogICAgICAgICBB
U1NFUlQoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPiAxKTsKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8
UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
Pj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgV1RGTW92ZShjb2xsZWN0aW9uKSB9IH07Cisg
ICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsg
V1RGTW92ZShjb2xsZWN0aW9uKSB9IH07CiAgICAgfQogCiAgICAgYXV0byYgZWxlbWVudCA9ICpk
b2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCkpOwogICAgIGlmIChVTkxJS0VMWShpczxIVE1M
SUZyYW1lRWxlbWVudD4oZWxlbWVudCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBkb21XaW5kb3cg
PSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkuY29udGVudFdpbmRvdygpKQot
ICAgICAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9NV2luZG93PiB7IGRvbVdp
bmRvdyB9IH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5k
b3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+IHsgUmVmUHRyPERP
TVdpbmRvdz4geyBkb21XaW5kb3cgfSB9OwogICAgIH0KIAotICAgIHJldHVybiBWYXJpYW50PFJl
ZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+
IHsgUmVmUHRyPEVsZW1lbnQ+IHsgJmVsZW1lbnQgfSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVudCB9IH07CiB9CiAKIFZlY3RvcjxBdG9t
aWNTdHJpbmc+IEhUTUxEb2N1bWVudDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCB3aWR0aCgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIGludCBoZWlnaHQoKTsKICAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFZl
Y3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAg
IEVsZW1lbnQqIGRvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnROYW1lZEl0ZW0uZ2V0RWxlbWVudEJ5RG9jdW1lbnRO
YW1lZEl0ZW0obmFtZSwgKnRoaXMpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6
fkhUTUxGb3JtQ29uCiB7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFt
ZSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVy
biBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0
cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICByZXR1cm4g
c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJl
ZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAgcmV0dXJu
IFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRy
PFJhZGlvTm9kZUxpc3Q+IHsgb3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07Cisg
ICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUoKS5yYWRpb05vZGVMaXN0
KG5hbWUpIH0gfTsKIH0KIAogY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGVtZW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKCk7CiAKICAgICBIVE1M
RWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6
b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+
IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25h
bDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBu
YW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgLy8gRm9yIENhY2hl
ZEhUTUxDb2xsZWN0aW9uLgogICAgIEhUTUxFbGVtZW50KiBjdXN0b21FbGVtZW50QWZ0ZXIoRWxl
bWVudCopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTYgKzE2MywxNiBAQCBIVE1MRWxlbWVudCog
SFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnCiAgICAgcmV0dXJuIGVsZW1lbnRzKCktPml0ZW0o
aW5kZXgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+
LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUVsZW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtRWxlbWVudDo6bmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBhdXRvIG5hbWVkSXRlbXMgPSBuYW1lZEVs
ZW1lbnRzKG5hbWUpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAg
ICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50
Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKIAot
ICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+
PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IHJhZGlvTm9kZUxpc3QobmFtZSkgfSB9OworICAg
IHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVu
dD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07CiB9
CiAKIFZlY3RvcjxBdG9taWNTdHJpbmc+IEhUTUxGb3JtRWxlbWVudDo6c3VwcG9ydGVkUHJvcGVy
dHlOYW1lcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4s
IFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBW
ZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7CiAKICAg
ICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5lbmNvZGluZ1R5
cGUoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDcgKzEzNjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAgICAgICAgIC8vIDIuIEVuZCB0aGUgc3lu
Y2hyb25vdXMgc2VjdGlvbiwgY29udGludWluZyB0aGUgcmVtYWluaW5nIHN0ZXBzIGluIHBhcmFs
bGVsLgogICAgICAgICAgICAgLy8gMy4gUnVuIHRoZSByZXNvdXJjZSBmZXRjaCBhbGdvcml0aG0g
d2l0aCB0aGUgYXNzaWduZWQgbWVkaWEgcHJvdmlkZXIgb2JqZWN0LgotICAgICAgICAgICAgV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgc3RkOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgICAgICAgICAgW3Ro
aXNdKFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSB7IG1fbWVkaWFTdHJlYW1TcmNPYmplY3Qg
PSBzdHJlYW07IH0sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHVzaW5nIEN1ZUlu
dGVydmFsID0gQ3VlSW50ZXJ2YWxUcmVlOjpJbnQKIHVzaW5nIEN1ZUxpc3QgPSBWZWN0b3I8Q3Vl
SW50ZXJ2YWw+OwogI2VuZGlmCiAKLXVzaW5nIE1lZGlhUHJvdmlkZXIgPSBzdGQ6Om9wdGlvbmFs
PFZhcmlhbnQ8Cit1c2luZyBNZWRpYVByb3ZpZGVyID0gc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlh
bnQ8CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+LAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAgcHVibGljOgogICAg
IAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0odW5zaWduZWQgaW5kZXgsIEhUTUxPcHRp
b25FbGVtZW50Kik7CiAgICAgCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQgPSBW
YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVt
ZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxF
bGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IHN0ZDo6
dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRNTE9wdEdyb3VwRWxl
bWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlKGludCBpbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHVzZXNNZW51TGlzdCgpIGNvbnN0OwogCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91
cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1M
T3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8
UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxl
bWVudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRN
TE9wdEdyb3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogCiAgICAgdXNpbmcgTm9k
ZTo6cmVtb3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMiArNDEsMjUgQEAgVVJMU2VhcmNoUGFyYW1zOjpV
UkxTZWFyY2hQYXJhbXMoY29uc3QgVgogewogfQogCi1FeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNo
UGFyYW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoVmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0
cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5n
PiYmIHZhcmlhbnQpCitFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gVVJMU2VhcmNo
UGFyYW1zOjpjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYgdmFyaWFudCkK
IHsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiB2ZWN0b3IpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJh
bXM+PiB7Ci0gICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
IHBhaXJzOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3IpIHsKLSAgICAg
ICAgICAgIGlmIChwYWlyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFpclswXSwg
cGFpclsxXX0pOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCisgICAgICAgIFtd
KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4gRXhjZXB0aW9uT3I8UmVm
PFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFp
cjxTdHJpbmcsIFN0cmluZz4+IHBhaXJzOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBw
YWlyIDogdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuc2l6ZSgpICE9IDIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKKyAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoe3BhaXJbMF0sIHBhaXJbMV19KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhXVEZN
b3ZlKHBhaXJzKSkpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBWZWN0b3I8V1RGOjpL
ZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIC0+IEV4Y2VwdGlvbk9yPFJlZjxV
UkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxT
ZWFyY2hQYXJhbXMocGFpcnMpKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgU3RyaW5n
JiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxscHRy
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFy
YW1zKFdURk1vdmUocGFpcnMpKSk7Ci0gICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+JiBwYWlycykgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAgICB9LCBbJl0oY29uc3QgU3RyaW5n
JiBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1z
KHN0cmluZywgbnVsbHB0cikpOwotICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOworICAgICk7CiB9CiAKIFN0cmluZyBVUkxTZWFyY2hQYXJhbXM6OmdldChj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNl
YXJjaFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNo
UGFyYW1zLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2Vh
cmNoUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBVUkxTZWFyY2hQYXJhbXMgOiBwdWJsaWMgUmVmQ291bnRlZDxVUkxT
ZWFyY2hQYXJhbXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFVSTFNl
YXJjaFBhcmFtcz4+IGNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYpOworICAgIHN0
YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3JlYXRlKHN0ZDo6dmFyaWFu
dDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5n
LCBTdHJpbmc+PiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgUmVmPFVSTFNlYXJjaFBhcmFtcz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBET01VUkwqIGFzc29jaWF0ZWRVUkwpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBh
c3NvY2lhdGVkVVJMKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgY2xhc3MgVGV4dE1ldHJpY3M7CiBzdHJ1Y3QgRE9N
TWF0cml4SW5pdDsKIAogI2lmIEVOQUJMRShWSURFTykKLXVzaW5nIENhbnZhc0ltYWdlU291cmNl
ID0gVmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNvdXJj
ZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZWxzZQotdXNpbmcgQ2Fu
dmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRy
PEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IHN0ZDo6dmFy
aWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+
OwogI2VuZGlmCiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1Ymxp
YyBDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwdWJsaWMgQ2FudmFzUGF0aCB7CkBAIC0xNzIsNyAr
MTcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29uc3Qg
U3RyaW5nJik7CiAKLSAgICB1c2luZyBTdHlsZSA9IFZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8Q2Fu
dmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OworICAgIHVzaW5nIFN0eWxlID0g
c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZh
c1BhdHRlcm4+PjsKICAgICBTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
U3Ryb2tlU3R5bGUoU3R5bGUmJik7CiAgICAgU3R5bGUgZmlsbFN0eWxlKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAy
MjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDEyIEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxl
OjpjcmVhdGVGcm9tU3RyaW4KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3Io
Y29uc3QgQ2FudmFzU3R5bGUmIG90aGVyKSBjb25zdAogewotICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihvdGhlci5tX3N0eWxlKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PENvbG9yPihtX3N0eWxl
KSA9PSBXVEY6OmdldDxDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29s
b3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpnZXQ8Q29sb3I+KG1fc3R5
bGUpID09IHN0ZDo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKIAotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpIHsKLSAgICAgICAgYXV0byYgYSA9IFdU
Rjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwotICAgICAgICBhdXRvJiBiID0gV1RGOjpnZXQ8
Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKSkgeworICAgICAgICBhdXRvJiBhID0gc3RkOjpnZXQ8Q01ZS0FD
b2xvcj4obV9zdHlsZSk7CisgICAgICAgIGF1dG8mIGIgPSBzdGQ6OmdldDxDTVlLQUNvbG9yPihv
dGhlci5tX3N0eWxlKTsKICAgICAgICAgcmV0dXJuIGEuYyA9PSBiLmMgJiYgYS5tID09IGIubSAm
JiBhLnkgPT0gYi55ICYmIGEuayA9PSBiLmsgJiYgYS5hID09IGIuYTsKICAgICB9CiAKQEAgLTE0
OSwxNSArMTQ5LDE1IEBAIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnMK
IAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQShmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gQ29sb3Ig
eyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+
KG1fc3R5bGUpICYmIHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIs
IGEgfTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKIHsKLSAgICBpZiAoIVdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCisgICAgaWYgKCFzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5
bGUpOworICAgIGF1dG8mIGNoYW5uZWxzID0gc3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7
CiAgICAgcmV0dXJuIGMgPT0gY2hhbm5lbHMuYyAmJiBtID09IGNoYW5uZWxzLm0gJiYgeSA9PSBj
aGFubmVscy55ICYmIGsgPT0gY2hhbm5lbHMuayAmJiBhID09IGNoYW5uZWxzLmE7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FudmFzU3R5
bGUgY3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yKTsKICAgICBzdGF0aWMgQ2Fu
dmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbnN0IFN0cmluZyYg
Y29sb3IsIGZsb2F0IGFscGhhKTsKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9Ci0gICAgYm9vbCBp
c0N1cnJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q3Vy
cmVudENvbG9yPihtX3N0eWxlKTsgfQotICAgIGJvb2wgaGFzT3ZlcnJpZGVBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIGlzQ3VycmVudENvbG9yKCkgJiYgV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0
eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAgZmxvYXQgb3ZlcnJpZGVBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIFdURjo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYS52YWx1
ZSgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIXN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KKyAgICBib29sIGlzQ3VycmVudENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1fc3R5
bGUpOyB9CisgICAgYm9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNDdXJy
ZW50Q29sb3IoKSAmJiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxw
aGE7IH0KKyAgICBmbG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8
Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVlKCk7IH0KIAogICAgIFN0
cmluZyBjb2xvcigpIGNvbnN0OwogICAgIENhbnZhc0dyYWRpZW50KiBjYW52YXNHcmFkaWVudCgp
IGNvbnN0OwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgQ2FudmFzU3R5bGUoQ3Vy
cmVudENvbG9yKTsKIAotICAgIFZhcmlhbnQ8SW52YWxpZCwgQ29sb3IsIENNWUtBQ29sb3IsIFJl
ZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiwgQ3VycmVudENvbG9y
PiBtX3N0eWxlOworICAgIHN0ZDo6dmFyaWFudDxJbnZhbGlkLCBDb2xvciwgQ01ZS0FDb2xvciwg
UmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+LCBDdXJyZW50Q29s
b3I+IG1fc3R5bGU7CiB9OwogCiBDb2xvciBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQq
KTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGlubGluZSBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
KQogCiBpbmxpbmUgQ2FudmFzR3JhZGllbnQqIENhbnZhc1N0eWxlOjpjYW52YXNHcmFkaWVudCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxDYW52YXNH
cmFkaWVudD4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQ
dHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpLmdldCgp
OworICAgIHJldHVybiBzdGQ6OmdldDxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKS5n
ZXQoKTsKIH0KIAogaW5saW5lIENhbnZhc1BhdHRlcm4qIENhbnZhc1N0eWxlOjpjYW52YXNQYXR0
ZXJuKCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENh
bnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSkuZ2V0
KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSku
Z2V0KCk7CiB9CiAKIGlubGluZSBTdHJpbmcgQ2FudmFzU3R5bGU6OmNvbG9yKCkgY29uc3QKIHsK
LSAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUp
ID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHls
ZSkuY29sb3I7CisgICAgYXV0byYgY29sb3IgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSA/IHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IHN0ZDo6Z2V0PENNWUtBQ29s
b3I+KG1fc3R5bGUpLmNvbG9yOwogICAgIHJldHVybiBjb2xvci5zZXJpYWxpemVkKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKTsKIAog
ICAgIHZvaWQgdGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKTsKLSAg
ICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQ
dHI8SFRNTFZpZGVvRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0
cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CiAgICAgdm9p
ZCB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBUZXhJbWFnZVNvdXJjZSYmKTsKIAogICAgIHZvaWQgY29weVRleFN1
YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xBbnkuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBj
bGFzcyBXZWJHTFRleHR1cmU7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0OwogY2xhc3Mg
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKIAotdXNpbmcgV2ViR0xBbnkgPSBWYXJpYW50PAor
dXNpbmcgV2ViR0xBbnkgPSBzdGQ6OnZhcmlhbnQ8CiAgICAgc3RkOjpudWxscHRyX3QsCiAgICAg
Ym9vbCwKICAgICBpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YnVmZmVyRGEKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZd
KGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEo
ZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZl
ciIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdQogICAgIGlmICghZGF0YSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlz
aXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZl
clN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsK
ICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYKICAgICApOwogCi0gICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8SlNDOjpUeXBlZEFycmF5VHlwZT4gYXJyYXlU
eXBlKQpAQCAtNDIxMiw3ICs0MjEyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3Vy
Y2UudmFsdWUoKSk7CiB9CiAKIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwogICAgIHZv
aWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdD
M0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CiAKLSAgICB1c2luZyBCdWZmZXJE
YXRhU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBCdWZmZXJEYXRhU291cmNlID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+PjsKICAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpOwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8
QnVmZmVyRGF0YVNvdXJjZT4mJiwgR0MzRGVudW0gdXNhZ2UpOwogICAgIHZvaWQgYnVmZmVyU3Vi
RGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8QnVm
ZmVyRGF0YVNvdXJjZT4mJik7CkBAIC0yNDcsOSArMjQ3LDkgQEAgcHVibGljOgogICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+JiYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHVzaW5nIFRleEltYWdlU291cmNlID0g
V1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4s
IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47Cisg
ICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4s
IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiwgUmVm
UHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKICNlbHNlCi0gICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2Ug
PSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2Ug
PSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAogICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9w
dGlvbmFsPFRleEltYWdlU291cmNlPik7CkBAIC0yNjMsNyArMjYzLDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlIDxjbGFzcyBUeXBlZEFycmF5LCBjbGFzcyBEYXRhVHlwZT4KICAgICBjbGFzcyBU
eXBlZExpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBWYXJp
YW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFUeXBlPj47CisgICAgICAgIHVzaW5n
IFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERh
dGFUeXBlPj47CiAKICAgICAgICAgVHlwZWRMaXN0KFZhcmlhbnRUeXBlJiYgdmFyaWFudCkKICAg
ICAgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUodmFyaWFudCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykpKTsKICAgICB9CiAKLSAg
ICB1c2luZyBUcmFja0V2ZW50VHJhY2sgPSBWYXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVm
UHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CisgICAgdXNpbmcgVHJhY2tFdmVu
dFRyYWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJh
Y2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CiAKICAgICBzdHJ1Y3QgSW5pdCA6IHB1YmxpYyBFdmVu
dEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRyYWNrRXZlbnRUcmFjaz4gdHJhY2s7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZh
c05hbWUpOwogCi0gICAgdHlwZWRlZiBWYXJpYW50PAorICAgIHR5cGVkZWYgc3RkOjp2YXJpYW50
PAogICAgICAgICBDYW52YXNHcmFkaWVudCosCiAgICAgICAgIENhbnZhc1BhdHRlcm4qLAogICAg
ICAgICBIVE1MQ2FudmFzRWxlbWVudCosCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQog
CiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7
Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+
PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERh
dGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQg
dHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
ZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1
ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IHN0ZDo6Z2V0PFJlZlB0
cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOwogICAgICAgICBtX2V4ZWN1dGFi
bGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNlUmVzdWx0KTsKICAgICAgICAgZGF0YWJh
c2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBSZWZQ
dHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXkKICAgICAgICAga2V5UGF0aC0+c2V0QXJyYXko
V1RGTW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9KTsKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOworICAgIHJldHVy
biBzdGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJhc2Uq
IGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rp
b25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWRvbmx5KQpAQCAtMzczLDEyICsz
NzMsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBhdXRvIHJlc3Vs
dFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1
bHRWYWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkg
ewogICAgICAgICAgICAgZW5kKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJl
c3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGN1cnNvciA9IHN0ZDo6Z2V0PFJlZlB0
cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKIAogICAgICAgICBpZiAobV9za2lw
Q291bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3ItPmFkdmFuY2UobV9za2lwQ291bnQpLmhh
c0V4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAg
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVyc2VjdGlvbk9ic2VydgogICAgICwgbV9yb290TWFy
Z2luKFdURk1vdmUoaW5pdC5yb290TWFyZ2luKSkKICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShj
YWxsYmFjaykpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPihpbml0
LnRocmVzaG9sZCkpCi0gICAgICAgIG1fdGhyZXNob2xkcy5hcHBlbmQoV1RGOjpnZXQ8ZG91Ymxl
Pihpbml0LnRocmVzaG9sZCkpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJs
ZT4oaW5pdC50aHJlc2hvbGQpKQorICAgICAgICBtX3RocmVzaG9sZHMuYXBwZW5kKHN0ZDo6Z2V0
PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKICAgICBlbHNlCi0gICAgICAgIG1fdGhyZXNob2xk
cyA9IFdURjo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQudGhyZXNob2xkKSk7Cisg
ICAgICAgIG1fdGhyZXNob2xkcyA9IHN0ZDo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGlu
aXQudGhyZXNob2xkKSk7CiB9CiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUo
RWxlbWVudCYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZl
ci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlv
bk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IHN0cnVjdCBJbml0IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3Q7CiAgICAgICAgIFN0
cmluZyByb290TWFyZ2luOwotICAgICAgICBWYXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+
IHRocmVzaG9sZDsKKyAgICAgICAgc3RkOjp2YXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+
IHRocmVzaG9sZDsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZl
cj4gY3JlYXRlKFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJ
bml0JiYgaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgogICAgIHZpcnR1
YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyYpIHsgfQogCi0gICAgdXNp
bmcgTGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCA9IFdURjo6VmFyaWFudDxzdGQ6
Om9wdGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4+OworICAgIHVz
aW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBzdGQ6OnZhcmlhbnQ8c3Rk
OjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+PjsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUoRnJhbWVWaWV3JiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QmLCBib29s
IC8qIHByb2dyYW1tYXRpY1Njcm9sbCAqLywgVmlld3BvcnRSZWN0U3RhYmlsaXR5LCBTY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uKSB7IH0KIAogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hl
bmV2ZXIgdGhlIHNsb3cgcmVwYWludCBvYmplY3RzIGNvdW50ZXIgY2hhbmdlcyBiZXR3ZWVuIHpl
cm8gYW5kIG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIGNvbnN0IGNoYXIqIFNo
YXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmQKICNlbmRpZgogICAgICAgICBbXShjb25zdCBNYXBw
ZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YS5kYXRhKCkpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBt
X2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRh
YmxlRGF0YSk7CiB9CiAKICNpZiAhVVNFKENGKQpAQCAtMjE5LDE3ICsyMTksMjQgQEAgdm9pZCBT
aGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBzaXplX3QgU2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byB2aXNpdG9yID0gV1RGOjpt
YWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJldHVy
biBkYXRhLnNpemUoKTsgfSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2ltbXV0YWJsZURh
dGEsCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfSwKICNpZiBVU0UoQ0YpCi0g
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7IHJldHVybiBDRkRh
dGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxD
RkRhdGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuIENGRGF0YUdl
dExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKICNlbmRpZgogI2lmIFVTRShTT1VQKQot
ICAgICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxlbmd0aCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdV
bmlxdWVQdHI8U291cEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOworICAgICAgICB9LAogI2VuZGlm
Ci0gICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNp
emUoKTsgfQorICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfQogICAgICk7Ci0g
ICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogU2hh
cmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6
OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiwxOSArMTE2LDI4IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IERhdGFTZWdtZW50KFZlY3RvcjxjaGFyPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRh
YmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRh
KFdURk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogI2lmIFVTRShDRikKICAgICAg
ICAgRGF0YVNlZ21lbnQoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQotICAgICAgICAgICAg
OiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1t
dXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNlbmRpZgog
I2lmIFVTRShTT1VQKQogICAgICAgICBEYXRhU2VnbWVudChHVW5pcXVlUHRyPFNvdXBCdWZmZXI+
JiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsg
fQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAg
eworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgRGF0YVNlZ21lbnQoTWFwcGVkRmlsZURhdGEm
JiBkYXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9
CisgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7
CisgICAgICAgIH0KIAotICAgICAgICBWYXJpYW50PFZlY3RvcjxjaGFyPiwKKyAgICAgICAgc3Rk
Ojp2YXJpYW50PAorICAgICAgICAgICAgVmVjdG9yPGNoYXI+LAogI2lmIFVTRShDRikKICAgICAg
ICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0
IFBsYXRmb3JtRGVzY3JpcHRpb24gewogICAgICAgICBOb25lLAogICAgICAgICBDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlLAogICAgIH0gdHlwZTsKLSAgICBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKKyAgICBzdGQ6
OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+IGRlc2NyaXB0aW9uOwogfTsKIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAob3RoZXIu
cGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbUJhc2ljVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBy
ZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgICAg
IHJldHVybiBvcGVyYXRvcj09KCpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVy
KSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCkBAIC0xMDIsNyArMTAyLDcgQEAg
Ym9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZQogaW5saW5lIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24u
cGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgcmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigq
V1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24u
cGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbigqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJD
Ri5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1No
YXJlZEJ1ZmZlckNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBT
aGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2VnbWVudHMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFp
blB0cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkp
CisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVm
Pj4oJm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAgICAgICAgICAg
IHJldHVybiAqZGF0YTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKCkpLCBzaXplKCkpKTsK
QEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRT
bwogewogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAg
IGlmIChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8g
ZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihlbnRyeS5zZWdtZW50LT5t
X2ltbXV0YWJsZURhdGEpKQorICAgICAgICAgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lm
PFJldGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnkuc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkK
ICAgICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24oY29u
c3RfY2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YS0+Z2V0KCkpKSwgQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE3ICs1NiwxNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzTm9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdN
b2RlKCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0g
RGVjb2RpbmdNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYg
c3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdN
b2RlOjpOb25lOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29k
aW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6U3luY2hyb25v
dXM7CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBzdGQ6OmdldDxEZWNvZGlu
Z01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3Vz
OwogICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9k
ZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzOworICAgICAg
ICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2Rl
Y29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXM7CiAgICAgfQog
CiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0NvbXBhdGlibGVXaXRoKGNvbnN0IERlY29kaW5nT3B0
aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoK
ICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IHNpemVGb3JEcmF3aW5nKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNTaXplKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8c3Rk
OjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUpOworICAgICAgICByZXR1
cm4gc3RkOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUp
OwogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgbWF4RGltZW5zaW9uKGNvbnN0IEludFNpemUmIHNp
emUpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogICAgIGJvb2wgaGFzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGluZ01vZGVPclNpemUpOwogICAgIH0KIAog
ICAgIGJvb2wgaGFzRGVjb2RpbmdNb2RlKCkgY29uc3QKQEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2
YXRlOgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsgYW55U2l6ZTogRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGludHJpbnNpY1NpemU6IGFuIGVtcHR5
IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+CiAgICAgLy8gLSBBc3luY2hyb25vdXMgKyBzaXplRm9y
RHJhd2luZzogYSBub25lIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+Ci0gICAgdXNpbmcg
RGVjb2RpbmdNb2RlT3JTaXplID0gVmFyaWFudDxEZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8
SW50U2l6ZT4+OworICAgIHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9IHN0ZDo6dmFyaWFudDxE
ZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OwogICAgIERlY29kaW5nTW9kZU9y
U2l6ZSBtX2RlY29kaW5nTW9kZU9yU2l6ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyBGb250
UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAgICAgICAgIHJldHVybiBmb250RmFt
aWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0aW9uKTsKICAgICAgICAgfSk7CiAg
ICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5nZXMgPSBXVEY6OnZpc2l0KHZpc2l0
b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJhbmdlcyA9IHN0ZDo6dmlzaXQodmlz
aXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdHlwZWRlZiBGb250RmFtaWx5U3BlY2lm
aWNhdGlvbk51bGwgRm9udAogCiAjZGVmaW5lIFVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tf
TElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFyaWFudDxBdG9taWNTdHJpbmcsIEZvbnRG
YW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uOwordHlw
ZWRlZiBzdGQ6OnZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZp
Y2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dEZvbnRGYW1pbHlOYW1lczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBXZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6dW5wcgogdm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6YXVk
aW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGRhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgZnJhbWVDb3VudCkKIHsKICAgICBBU1NFUlQo
ZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlw
dGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgYXV0byYgYmFzaWNEZXNjcmlwdGlv
biA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlw
dGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgIGF1dG8mIGJhc2lj
RGVzY3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKICAgICBp
ZiAoIW1faW5wdXREZXNjcmlwdGlvbiB8fCBtX2lucHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2Ny
aXB0aW9uKCkgIT0gYmFzaWNEZXNjcmlwdGlvbikKICAgICAgICAgcHJlcGFyZShiYXNpY0Rlc2Ny
aXB0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdXNpbmcgU1FMVmFsdWUgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGRvdWJs
ZT47Cit1c2luZyBTUUxWYWx1ZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5n
LCBkb3VibGU+OwogCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAg
aW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLSAgICAgICAgYXV0
byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOworICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVu
dERhdGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJr
ZXItPmRhdGEoKSk7CiAgICAgICAgIGlmIChkcmFnZ2VkQ29udGVudERhdGEudGFyZ2V0Tm9kZSA9
PSAmZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAg
ICAgICAgU3RyaW5nIHRyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZTsKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAgVmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZl
Y3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7CisgICAgICAgIHN0ZDo6
dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVu
aW9uVmFsdWU7CiAgICAgICAgIGludCBjbGFtcExvbmdWYWx1ZTsKICAgICAgICAgaW50IGVuZm9y
Y2VSYW5nZUxvbmdWYWx1ZTsKICAgICB9OwpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+
JiB0ZXN0U2VxdWVuY2VSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX3NlcXVlbmNlUmVjb3JkOyB9
CiAgICAgdm9pZCBzZXRUZXN0U2VxdWVuY2VSZWNvcmQoY29uc3QgVmVjdG9yPFdURjo6S2V5VmFs
dWVQYWlyPFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiYgdmFsdWUpIHsgbV9zZXF1ZW5jZVJlY29y
ZCA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VW5pb24gPSBWYXJpYW50PFN0cmluZywgaW50
LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKKyAgICB1c2luZyBUZXN0VW5pb24g
PSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0cjxOb2RlPiwgVmVjdG9yPGlu
dD4+OwogICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV91
bmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdFVuaW9uKFRlc3RVbmlvbiYmIHZhbHVlKSB7IG1fdW5p
b24gPSB2YWx1ZTsgfQogCkBAIC0xMzAsMTUgKzEzMCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRUZXN0RGljdGlvbmFyeShEaWN0aW9uYXJ5JiYgZGljdGlvbmFyeSkgeyBtX3Rlc3REaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeTsgfQogICAgIAogCi0gICAgdXNpbmcgVGVzdENsYW1wVW5pb24gPSBW
YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CisgICAgdXNpbmcgVGVzdENsYW1wVW5p
b24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBU
ZXN0Q2xhbXBVbmlvbiYgdGVzdENsYW1wVW5pb24oKSBjb25zdCB7IHJldHVybiBtX2NsYW1wVW5p
b247IH0KICAgICB2b2lkIHNldFRlc3RDbGFtcFVuaW9uKGNvbnN0IFRlc3RDbGFtcFVuaW9uJiB2
YWx1ZSkgeyBtX2NsYW1wVW5pb24gPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcgVGVzdEVuZm9yY2VS
YW5nZVVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OworICAgIHVzaW5n
IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9y
PGludD4+OwogICAgIGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdGVzdEVuZm9yY2VSYW5n
ZVVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmZvcmNlUmFuZ2VVbmlvbjsgfQogICAgIHZvaWQg
c2V0VGVzdEVuZm9yY2VSYW5nZVVuaW9uKGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdmFs
dWUpIHsgbV9lbmZvcmNlUmFuZ2VVbmlvbiA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VHJl
YXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPFN0
cmluZz4+OworICAgIHVzaW5nIFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24gPSBzdGQ6
OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxTdHJpbmc+PjsKICAgICBjb25zdCBUZXN0VHJl
YXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB0ZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9u
KCkgY29uc3QgeyByZXR1cm4gbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb247IH0KICAgICB2
b2lkIHNldFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24oY29uc3QgVGVzdFRyZWF0TnVs
bEFzRW1wdHlTdHJpbmdVbmlvbiYgdmFsdWUpIHsgbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5p
b24gPSB2YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWE1M
SHR0cFJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHVz
aW5nIFNlbmRUeXBlcyA9IFZhcmlhbnQ8UmVmUHRyPERvY3VtZW50PiwgUmVmUHRyPEJsb2I+LCBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJl
ZlB0cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CisgICAgdXNpbmcgU2VuZFR5cGVzID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxCbG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+
LCBTdHJpbmc+OwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQogICAgIFN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0wOC0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OmV2
ZW50VG9TdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVFdmVudC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNv
dXJjZTo6dXJsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPElE
QktleVBhdGg+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfYWRkKToKKwogMjAxNy0wOC0xOCAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjIyMDg1NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHN0ZDo6c3RyaW5nIGV2
ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVyZUUKIHsKICAgICBqc29uIHJlc3VsdDsKIAotICAgIFdU
Rjo6dmlzaXQoWyZyZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgc3RkOjp2aXNpdChb
JnJlc3VsdF0oY29uc3QgYXV0byYgZXZlbnQpIHsKICAgICAgICAgdXNpbmcgRXZlbnRUeXBlID0g
c3RkOjpkZWNheV90PGRlY2x0eXBlKGV2ZW50KT47CiAgICAgICAgIHJlc3VsdCA9IEpTT05Db2Rl
cjxFdmVudFR5cGU+OjplbmNvZGUoZXZlbnQpOwogICAgIH0sIGV2ZW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7CiBzdHJ1Y3QgRGF0YVJlY2Vp
dmVkRXZlbnQ7CiBzdHJ1Y3QgRmluaXNoZWRFdmVudDsKIAotdXNpbmcgQ2FwdHVyZUV2ZW50ID0g
V1RGOjpWYXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVk
aXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQs
IEZpbmlzaGVkRXZlbnQ+OwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gc3RkOjp2YXJpYW50PFJlcXVl
c3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50
LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+Owog
dXNpbmcgT3B0aW9uYWxDYXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47
CiB1c2luZyBDYXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0
dXJlQ2xvY2tUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMCArNDgsMTAgQEAgY29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJjZTo6dXJsKCkK
ICAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKICAgICAgICAgaWYgKCFl
dmVudCkKICAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90
IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9l
dmVudEZpbGVQYXRoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCisgICAgICAgIGVsc2UgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICBERUJV
R19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBoYXZlIGEgcmVxdWVzdFNlbnQgZXZl
bnQ6IGZpbGUgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJlcXVlc3RTZW50RXZlbnQgPSBX
VEY6OmdldDxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpOworICAgICAgICAgICAgYXV0byByZXF1
ZXN0U2VudEV2ZW50ID0gc3RkOjpnZXQ8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKICAgICAg
ICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0
LnVybCk7CiAgICAgICAgICAgICBtX3VybCA9IHBhcnNlci5yZXN1bHQoKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OmVucXVldWVFdmVudAogICAgICAgICAgICAgICAgIHJlcGxheUZpbmlzaGVkKGV2
ZW50KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwgKmV2
ZW50KTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCAqZXZlbnQpOwogICAgIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEsMTIgKzIzNzEsMTIgQEAgYm9v
bCBBcmd1bWVudENvZGVyPENhcHR1cmVEZXZpY2U+OjpkZWNvZAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogdm9pZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBib29sIGlzU3Ry
aW5nID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOworICAgIGJvb2wg
aXNTdHJpbmcgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCk7CiAgICAg
ZW5jb2RlciA8PCBpc1N0cmluZzsKICAgICBpZiAoaXNTdHJpbmcpCi0gICAgICAgIGVuY29kZXIg
PDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Omdl
dDxTdHJpbmc+KGtleVBhdGgpOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6Omdl
dDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SURCS2V5
UGF0aD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RydWN0IE1lZGlhQ29uc3Ry
YWludHM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLXVzaW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+Owor
dXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGltZSYgdGltZSwg
Y29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBudW1iZXJPZkZyYW1lcykgZmluYWwgewogICAg
ICAgICBpZiAobV9kZXNjcmlwdGlvbiAhPSBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVz
Y3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgICAgICAgICAgbV9kZXNjcmlw
dGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgICAgICAgICAg
bV9kZXNjcmlwdGlvbiA9ICpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOwogCiAg
ICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIHJpbmcgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250
YWluIDIgc2Vjb25kcyBvZiBhdWRpby4KICAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmFtZXMgPSBt
X2Rlc2NyaXB0aW9uLnNhbXBsZVJhdGUoKSAqIDI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OSw3ICszNTksNyBAQCB2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQo
CiAgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6
OmNvcmUoZWxlbWVudCk7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEJlZm9y
ZSA9IFdlYktpdDo6Y29yZShiZWZvcmUpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50
RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNvbnZlcnRl
ZEVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZkb3duY2FzdDxXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudD4oKmNvbnZlcnRlZEVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGlzPFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQg
YSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIERPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbToKKyAgICAgICAgKC1b
RE9NSFRNTFNlbGVjdEVsZW1lbnQgYWRkOmJlZm9yZTpdKToKKwogMjAxNy0wOC0xNyAgRG9uIE9s
bXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtQQUxdIFJlbG9jYXRl
IFNlc3Npb25JRCB0byByb290CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTFNlbGVjdEVsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCAtICh2b2lkKWFkZDooRE9NSFRNTEVsZW1lbnQgKill
bGVtZW50IGJlCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7CiAKICAgICBhdXRv
JiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1l
bnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNv
cmVFbGVtZW50KSkKICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93bmNhc3Q8V2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ+KGNvcmVFbGVtZW50KTsKICAgICBlbHNlIGlmIChpczxXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50Pihjb3JlRWxlbWVudCkpCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5MTUpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0wOC0x
NyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJldHRl
ciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wOC0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIy
MDg1NC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzcgKzM3LDM3IEBAIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIAogVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKIHsKLSAgICBWYXJpYW50PGlu
dCwgZG91YmxlPiB2MTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOwogICAgIEVY
UEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50
Pih2MSkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CiAK
ICAgICBzdHJ1Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0KICAgICAgICAgaW50
IHZhbHVlOwogICAgIH07CiAKLSAgICBWYXJpYW50PFQsIGludD4gdjI7CisgICAgc3RkOjp2YXJp
YW50PFQsIGludD4gdjI7CiAgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKLSAgICBF
WFBFQ1RfVFJVRShXVEY6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJh
c2ljKQogewotICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIHN0ZDo6
dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFu
dC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkg
PT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7
Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRy
KTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkp
OwotICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFu
dCkpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAg
RVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGludD4oJnZhcmlhbnQpID09IDEpOworICAgIEVYUEVD
VF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVY
UEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CiAKICAg
ICB2YXJpYW50ID0gMS4wOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsK
LSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOwotICAgIEVY
UEVDVF9UUlVFKCpXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7Ci0gICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBFWFBF
Q1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwotICAgIEVY
UEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVY
UEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RS
VUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1Rf
RkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTMgKzk0LDEzIEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKLSAg
ICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNp
dChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwg
U3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlh
bnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFu
dCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBz
dGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6
OkZsb2F0ID09IHR5cGUpOwogCiAKQEAgLTEyNywxMiArMTI3LDEyIEBAIFRFU1QoV1RGX1Zhcmlh
bnQsIFJldGFpblB0cikKICAgICAKICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQdHI7CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gcmV0YWluUHRyOwotICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxv
Z2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7Ci0g
ICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRy
KSk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShU
eXBlOjpSZWZQdHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1vdmUocmV0YWlu
UHRyKTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQo
dmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWluUHRyID09IHR5
cGUpOwogfQogI2VuZGlmCkBAIC0xNTQsMTggKzE1NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBW
aXNpdG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6
OlN0cmluZzsgfQogICAgICk7CiAKLSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFy
aWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZh
cmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KHZp
c2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAog
CiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsK
KyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6
OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7
CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xODAsNyAr
MTgwLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nU3dpdGNoT24pCiAKICAgICBU
eXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+
IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlh
bnQgPSA4OwogICAgIHR5cGUgPSBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCiAgICAgICAgIFtdKGlu
dCkgeyByZXR1cm4gVHlwZTo6SW50OyB9LAogICAgICAgICBbXShmbG9hdCkgeyByZXR1cm4gVHlw
ZTo6RmxvYXQ7IH0sCkBAIC0yMTMsNyArMjEzLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgQ29uc3Ry
dWN0b3JEZXN0cnVjdG9yKQogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6
bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFy
aWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4g
diA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlx
dWVQdHIpOwogCiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMjI4LDcgKzIyOCw3
IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBh
KCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlh
bnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKKyAgICAgICAgc3RkOjp2YXJpYW50
PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAgQVNTRVJUX1NU
UkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0
cigpKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQdHIpCiAgICAg
ewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiBy
ZWYoJmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZN
b3ZlKHJlZik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2
ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVm
KGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBURVNUKFdU
Rl9WYXJpYW50LCBSZWYpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAg
ICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7Ci0gICAgICAgIFZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4s
IGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxSZWZMb2dn
ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJy
ZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMjY1LDExICsyNjUs
MTEgQEAgcHVibGljOgogCiBURVNUKFdURl9WYXJpYW50LCBPcGVyYXRvckFtcGVyc2FuZCkKIHsK
LSAgICBWYXJpYW50PEhvbGRlcjxpbnQ+LCBpbnQ+IHYgPSBIb2xkZXI8aW50PigxMCk7Ci0gICAg
RVhQRUNUX1RSVUUoV1RGOjpnZXQ8SG9sZGVyPGludD4+KHYpLmRhdGEgPT0gMTApOworICAgIHN0
ZDo6dmFyaWFudDxIb2xkZXI8aW50PiwgaW50PiB2ID0gSG9sZGVyPGludD4oMTApOworICAgIEVY
UEVDVF9UUlVFKHN0ZDo6Z2V0PEhvbGRlcjxpbnQ+Pih2KS5kYXRhID09IDEwKTsKIAogICAgIHYg
PSAyMDsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYpID09IDIwKTsKKyAgICBFWFBF
Q1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYpID09IDIwKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318509</attachid>
            <date>2017-08-18 09:25:03 -0700</date>
            <delta_ts>2017-08-19 12:26:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170818092502.patch</filename>
            <type>text/plain</type>
            <size>365790</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTcgIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFdlYkFzc2VtYmx5OiBjb25zdCBpbiB1bnJlYWNoYWJsZSBjb2RlIGRl
Y29kZWQgaW5jb3JyZWN0bHksIGVycm9uZW91c2x5IHJlamVjdHMgYmluYXJ5IGFzIGludmFsaWQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODA3Nyw3ICs4MDc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNhbGxET00oTm9kZQogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBoYXZlIGEgd2F5IHRvIGNhbGwgZnVuY3Rpb25zIHdpdGggdGhlIHZlY3RvciBvZiBy
ZWdpc3RlcnMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2MzA5OQotICAgIFZlY3RvcjxWYXJpYW50PFNwZWN1bGF0ZUNlbGxPcGVyYW5kLCBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQsIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kPiwgSlNDX0RPTUpJVF9TSUdO
QVRVUkVfTUFYX0FSR1VNRU5UU19JTkNMVURJTkdfVEhJUz4gb3BlcmFuZHM7CisgICAgVmVjdG9y
PHN0ZDo6dmFyaWFudDxTcGVjdWxhdGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5k
LCBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdV
TUVOVFNfSU5DTFVESU5HX1RISVM+IG9wZXJhbmRzOwogICAgIFZlY3RvcjxHUFJSZWcsIEpTQ19E
T01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+IHJlZ3M7CiAKICAg
ICBhdXRvIGFwcGVuZENlbGwgPSBbJl0oRWRnZSYgZWRnZSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zODg4LDcgKzM4ODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBncHIoKTsK
ICAgICB9CiAKLSAgICBleHBsaWNpdCBTcGVjdWxhdGVDZWxsT3BlcmFuZChTcGVjdWxhdGVDZWxs
T3BlcmFuZCYmIG90aGVyKQorICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kKFNwZWN1bGF0ZUNlbGxP
cGVyYW5kJiYgb3RoZXIpCiAgICAgewogICAgICAgICBtX2ppdCA9IG90aGVyLm1faml0OwogICAg
ICAgICBtX2VkZ2UgPSBvdGhlci5tX2VkZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NuaXBwZXRSZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1NuaXBwZXRSZWcuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9TbmlwcGV0UmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDIxICs3MiwyMSBAQCBwdWJs
aWM6CiAgICAgR1BSUmVnIGdwcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNHUFIo
KSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CisgICAgICAg
IHJldHVybiBzdGQ6OmdldDxHUFJSZWc+KG1fdmFyaWFudCk7CiAgICAgfQogICAgIEZQUlJlZyBm
cHIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzRlBSKCkpOwotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8RlBSUmVnPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8
RlBSUmVnPihtX3ZhcmlhbnQpOwogICAgIH0KICAgICBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncygp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNKU1ZhbHVlUmVncygpKTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8SlNWYWx1ZVJlZ3M+KG1fdmFyaWFudCk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IFZhcmlhbnQ8R1BSUmVnLCBGUFJSZWcsIEpTVmFsdWVSZWdzPiBtX3ZhcmlhbnQ7CisgICAgc3Rk
Ojp2YXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVncz4gbV92YXJpYW50OwogfTsKIAog
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIxIEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvRm9yd2FyZC5oOgorICAgICAgICAq
IHd0Zi9JblBsYWNlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9PcHRpb25hbC5oOgorICAgICAg
ICAqIHd0Zi9WYXJpYW50Lmg6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNDo6YXJyYXk6Om9w
ZXJhdG9yW10gY29uc3QpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6aW52
b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6
OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjpjcHAxNzo6ZGV0YWlsOjpoYXNfYWRk
cmVzc29mX2ltcGw6OmltcGwpOgorICAgICAgICAobXBhcms6OmxpYjo6Y3BwMTc6OmRldGFpbDo6
YWRkcmVzc29mKToKKyAgICAgICAgKG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X2ltcGw6
OmRlY2x0eXBlKToKKyAgICAgICAgKHN0ZDo6dGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjphbGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5k
ZXgpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmZpbmRfaW5kZXhfaW1wbCk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6dHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFpdCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29tbW9uX3RyYWl0X2ltcGwpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6Z2V0X2FsdF9pbXBsOjpBVVRPX1JF
RlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6cmVjdXJzaXZlX3Vu
aW9uOjpBVVRPX1JFRlJFRl9SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFjY2Vzczo6
YmFzZTo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0
aW9uOjpiYXNlOjphdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6
dmlzaXRfdmlzaXRvcl9yZXR1cm5fdHlwZV9jaGVjayk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
dmlzaXRhdGlvbjo6YmFzZTo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OmJhc2U6Om1ha2VfZmRpYWdvbmFsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2
aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZtYXRyaXhfaW1wbDo6aW1wbDxtcGFyazo6bGliOjpp
bmRleF9zZXF1ZW5jZTxJczo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ6OnZhbHVlX3Zpc2l0b3I6OkRFQ0xUWVBFX0FVVE9fUkVUVVJOKToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OjpBVVRPX1JFVFVSTik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWx0OjphbHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Ok1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpiYXNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjppbmRleF8pOgorICAgICAg
ICAoc3RkOjpkZXRhaWw6OmJhc2U6OmFzX2Jhc2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJh
c2U6OmRhdGEpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmJhc2U6OnNpemUpOgorICAgICAgICAo
c3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRl
dGFpbDo6Y29uc3RydWN0b3I6OmN0b3I6Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjb25zdHJ1Y3RfYWx0KToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpjb25zdHJ1Y3Rvcjo6Z2VuZXJpY19jb25zdHJ1Y3QpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6Ok1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUik6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
Ojphc3NpZ25tZW50OjplbXBsYWNlKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphc3NpZ25tZW50
Ojphc3NpZ25lcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNz
aWdubWVudDo6YXNzaWduX2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6
Z2VuZXJpY19hc3NpZ24pOgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfTU9W
RV9BU1NJR05NRU5UKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0NPUFlf
QVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6YXNzaWduKToKKyAgICAg
ICAgKHN0ZDo6ZGV0YWlsOjppbXBsOjpzd2FwKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojpzd2FwcGVyOjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjppbXBs
Ojptb3ZlX25vdGhyb3cgY29uc3QpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Om92ZXJsb2FkPD46
Om9wZXJhdG9yKCkgY29uc3QpOgorICAgICAgICAoc3RkOjp2YXJpYW50Ojpub2V4Y2VwdCk6Cisg
ICAgICAgIChzdGQ6OnZhcmlhbnQ6OmVtcGxhY2UpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omdl
bmVyaWNfZ2V0X2ltcGw6OmdlbmVyaWNfZ2V0X2ltcGwpOgorICAgICAgICAoc3RkOjpnZXQpOgor
ICAgICAgICAoc3RkOjpvcGVyYXRvcj09KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3IhPSk6Cisg
ICAgICAgIChzdGQ6Om9wZXJhdG9yPCk6CisgICAgICAgIChzdGQ6Om9wZXJhdG9yPik6CisgICAg
ICAgIChzdGQ6Om9wZXJhdG9yPD0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcj49KToKKyAgICAg
ICAgKHN0ZDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6Omhhc2g6Om1lZXRzX3Jl
cXVpcmVtZW50cyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZCk6Cisg
ICAgICAgIChXVEY6OnN3aXRjaE9uKToKKyAgICAgICAgKFdURjo6aW5fcGxhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Oj0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFn
ZTo6X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3ZhcmlhbnRfc3RvcmFnZTo6X19n
ZXRfcnJlZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9zdG9yYWdlOjpfX2Rl
c3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19jb25z
dHJ1Y3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19zdG9y
YWdlX3dyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6
X19nZXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19nZXQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpfX3N0b3JhZ2Vfd3JhcHBlcjo6X19kZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBwZXI8X1R5cGU6Ol9f
c3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19zdG9yYWdlX3dyYXBw
ZXI8X1R5cGU6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192YXJpYW50
X2Jhc2U6On5fX3ZhcmlhbnRfYmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3Vw
X3N0b3JhZ2Vfb3BzOjpfX21vdmVfY29uc3RydWN0X2Z1bmMpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19kZXN0cm95X2Z1bmMpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlOjpfX2JhY2t1cF9zdG9yYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6fl9fYmFja3VwX3N0b3JhZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpWYXJpYW50PD46OnN3YXApOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX05PRVhDRVBUXyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fdmFyaWFudF9hY2Nlc3Nv
cjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6Z2V0X2lmKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdG9yX3RhYmxlOjpf
X3RyYW1wb2xpbmVfZnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OnZpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6X19hcmdfc2VsZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpfX3Zpc2l0X2hlbHBlcjI6Ol9fdmlzaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVy
YXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Om9wZXJhdG9yPCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9y
Pik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9wZXJhdG9yPj0pOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpvcGVyYXRvcjw9KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19oYXNoX3Zpc2l0
b3I6Om9wZXJhdG9yKCkpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKyAg
ICAgICAgKiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oOgorICAgICAgICAqIHd0Zi90ZXh0
L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tOgorICAgICAgICAoV1RGOjpt
YXBNb2RlVG9CYWNraW5nSXRlcmF0b3IpOgorCiAyMDE3LTA4LTE3ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBPbmx5IHVzZSAxNiBWRlAgcmVnaXN0ZXJzIGlmICFD
UFUoQVJNX05FT04pLgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcgQEAKIAkJN0FGRUM2QUUx
RUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUZFQzZCMDFFQjIyQjU5
MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzRjcyMzkxRDc4ODEx
OTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Qzg2OTYxQjFGNDU0NEY3
MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBsYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJCRjAyNSAvKiBPU09iamVj
dFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU09iamVjdFB0ci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUzMjJBMDAwQ0M5RTEgLyog
VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgyQjkwMDkyOTQ3MCAvKiBT
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVBMDA0MTIzRkYgLyogSGFz
aFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNGRiAvKiBIZXhOdW1iZXIu
aCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5kZW50ZXIuaCAqLywKKwkJ
CQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovLAogCQkJCTlDNjdDNTQy
NTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0b3IuaCAqLywKIAkJCQkw
RjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmggKi8sCiAJCQkJNUI0MzM4
M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIHZhcmlhbnQ7
CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWZQdHI7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRlbXBsYXRlPHR5cGVuYW1l
Li4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90IG1pbkNhcGFjaXR5PiBj
bGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTczLDUgKzczLDQgQEAgdXNp
bmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJbXBsOwogdXNpbmcgV1RG
OjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11c2luZyBXVEY6OlZhcmlh
bnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luUGxhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVz
cGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdCgp
ID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgST4KKyAgc3RydWN0IGlu
X3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90KCkgPSBkZWZhdWx0OyB9
OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5fcGxhY2VfdHlwZV90IHsg
ZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9OworCisgIGNvbnN0ZXhwciBp
bl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+IGNvbnN0
ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307CisKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4gaW5fcGxhY2VfdHlwZXt9
OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9PcHRpb25hbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0
ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1dGlsaXR5PgotIyBpbmNs
dWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KICMgaW5jbHVk
ZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRlIDxpbml0aWFsaXplcl9s
aXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0cmluZz4KKyMgaW5jbHVk
ZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGluY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBpbmNsdWRlIDx3dGYvSW5Q
bGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICMgZGVmaW5lIFRSMl9P
UFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPF9fVkFfQVJHU19f
Ojp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4NCw4IEBAIGNvbnN0ZXhw
ciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAyMC41LjYsIEluLXBsYWNl
IGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsK
LQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxhY2V7fTsKKy8vIGluX3Bs
YWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNvIGl0IGNhbiBiZSBzaGFy
ZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5nYWdlZCBzdGF0ZSBpbmRp
Y2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMDc5ICsx
LDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0d2FyZSBTb2x1dGlvbnMg
THRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFyaWFudAogLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IK
LS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
Ci0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29weXJpZ2h0IE1pY2hhZWwg
UGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWltZXIuCisvLyBCb29zdCBT
b2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMwogLy8KLS8v
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vIFBlcm1p
c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9y
IG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFj
Y29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRoaXMgbGljZW5zZSAodGhl
ICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorLy8g
ZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZh
dGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRp
ZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisvLyBkbyBzbywgYWxsIHN1
YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0vLyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLS8vIHBlcm1p
c3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlz
IGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQs
IHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKy8vIG11c3Qg
YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGlu
IHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxl
c3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJlIHNvbGVseSBpbiB0aGUg
Zm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CisvLyBh
IHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotLy8gSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLS8vIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0vLyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgotLy8gQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAotLy8gRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vIFRIRSBTT0ZUV0FS
RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
RVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKKy8vIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FS
RSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJU0lORyBGUk9NLCBPVVQg
T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS
CisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGllZCBmcm9tIGh0dHBzOi8v
Yml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3ZmE3ODg2NDhmNzllNWVh
MWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9t
cGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFyaWFudC5ocHAgKGMyNmI4
NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8vIE1vZGlmaWVkIHRvIG1h
a2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisvLyBNb2RpZmllZCB0byB1
c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgsIGFuZCBpbmNsdWRlIFdU
Rjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoKKyAgIHZhcmlhbnQgc3lu
b3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBjbGFzcyB0ZW1wbGF0ZSB2
YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xhc3MgdmFyaWFudCB7Cisg
IHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMKKyAgICBjb25zdGV4cHIg
dmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFudChjb25zdCB2YXJpYW50
Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBub2V4Y2VwdChzZWUgYmVs
b3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBBcmdzJiYuLi4pOworCisg
ICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+CisgICAgY29uc3Rl
eHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwgaW5pdGlh
bGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xh
c3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFudChpbl9wbGFjZV9pbmRl
eF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBVLCBj
bGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJpYW50KAorICAgICAgICBp
bl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBBcmdzJiYuLi4pOworCisg
ICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgpOworCisgICAgLy8gMjAu
Ny4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0oY29uc3QgdmFyaWFudCYp
OworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7
CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0b3I9KFQmJikgbm9leGNl
cHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmllcnMKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNlKEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBl
bXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8
c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJp
YW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0aXZlPEksIHZhcmlhbnQ+
JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisKKyAgICAvLyAyMC43
LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXplX3QgaW5kZXgoKSBjb25z
dCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAgdm9pZCBzd2FwKHZhcmlh
bnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIwLjcuMywgdmFyaWFudCBo
ZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTsg
Ly8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNvbnN0ZXhwciBzaXplX3Qg
dmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworCisgIHRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisKKyAgdGVtcGxhdGUgPGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHlwZXMuLi4+PjsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X2FsdGVybmF0
aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+CisgIHVz
aW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBUPjsKKyAgdGVtcGxh
dGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25z
dCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5cGVzLi4uPj47CisKKyAg
Y29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAvLyAyMC43LjQsIHZhbHVl
IGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhw
ciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jikgbm9leGNl
cHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHBy
IHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4mCisgIGdldCh2YXJp
YW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+
CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+
JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBjb25zdCYmCisgIGdldChj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3Mu
Li4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgVCYmIGdldCh2
YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsK
KworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25z
dCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBsYXRlIDxzaXpl
X3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PHZhcmlhbnRf
YWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZih2YXJpYW50PFR5
cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcy4uLiBUeXBlcz4KKyAg
Y29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHlwZXMuLi4+Kikg
bm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9uYWwgb3BlcmF0b3JzCisg
IHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAg
dGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICB0
ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPChjb25z
dCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
dmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBs
YXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+Jik7CisKKyAgdGVtcGxh
dGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHZh
cmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mKTsKKworICAvLyAyMC43
LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3IsIGNsYXNzLi4uIFZhcmlh
bnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3ImJiwgVmFyaWFudHMmJi4u
Lik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3RydWN0IG1vbm9zdGF0ZTsK
KworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJhdG9ycworICBjb25zdGV4
cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsK
KyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkgbm9leGNl
cHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFsZ29yaXRobXMKKyAgdGVt
cGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFudDxUeXBlcy4uLj4mLCB2
YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisKKyAgLy8gMjAuNy4xMCwg
Y2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2VzczsKKwor
ICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBo
YXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBoYXNoPHZhcmlhbnQ8VHlw
ZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0YXRlPjsKKworfSAvLyBu
YW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGV4Y2Vw
dGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1
ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPG5ldz4K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRl
IDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAotI2lmIENP
TVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNh
YmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQotI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MTQpCisKKy8vIE1TVkMg
MjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wgJiYgKCFkZWZpbmVkKF9N
U0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vycm9yICJNUGFyay5WYXJp
YW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNpZiAhQ09NUElMRVIoQ0xB
TkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hhc19idWlsdGluCisjZGVm
aW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFjZSBXVEYgeworI2lmbmRl
ZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkgMAorI2VuZGlmCiAKLSNp
ZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBfX1RIUk9XX0VYQ0VQVElP
TihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5lIF9fTk9FWENFUFQgbm9l
eGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5vZXhjZXB0KF9fZXhjZXB0
aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19leGNlcHRpb24pIGRvIHsg
KHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwotI2RlZmluZSBfX05PRVhD
RVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19idWlsdGluKF9fYnVpbHRp
bl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0g
NykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJTFRJTl9BRERSRVNTT0YK
ICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFzX2J1aWx0aW4oX190eXBl
X3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyNlbmRpZgog
Ci0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVlX2hvbGRlcjsKLX07Cisj
aWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0ZXhwciA+PSAyMDEzMDQK
KyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAorI2lmIF9faGFzX2ZlYXR1
cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykKKyNkZWZpbmUg
TVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFjZV90YWcgewotICAgIGlu
X3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9fY3BwX2dlbmVyaWNfbGFt
YmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfR0VORVJJQ19MQU1CREFT
CisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3RhZygmKShfX2luX3BsYWNl
X3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2VyX3NlcXVlbmNlKQorI2Rl
ZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVtcGxhdGUgPGNsYXNzIF9U
eXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZpbmVkKF9fY3BwX3JldHVy
bl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfUkVU
VVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5kZXg+Ci11
c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9faW5fcGxhY2VfcHJpdmF0
ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQoX19jcHBfbGliX3RyYW5z
cGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfVFJB
TlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5f
cGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFibGVfdGVtcGxhdGVzKSB8
fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJMRV9URU1QTEFURVMKKyNl
bmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90YWcgaW5fcGxhY2UoX19p
bl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7Ci0gICAgX19USFJPV19F
WENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFkZWZpbmVkKF9fR0xJQkNY
WF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRTCisjZWxpZiBkZWZpbmVk
KF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+KSAgLy8gPj0gbGlic3Rk
YysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlUUworI2VuZGlmCiAKLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3BsYWNlKF9faW5fcGxhY2Vf
cHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAgX19USFJPV19FWENFUFRJ
T04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRfdmFyaWFudF9hY2Nlc3M6
IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4cGxpY2l0IGJhZF92YXJp
YW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgotICAgICAgICBzdGQ6Omxv
Z2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQgYmFkX3ZhcmlhbnRfYWNj
ZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjpsb2dpY19lcnJvcih3aGF0
X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLU5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoY29uc3QgY2hhciog
d2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJpYW50X2FjY2Vzcyh3aGF0
X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVtZW50YXRpb24gbW92ZWQg
dG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBf
VHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI7Cisj
ZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+IGRlY2x0eXBlKF9fVkFf
QVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJrIHsKKyAgbmFtZXNwYWNl
IGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlkZW50aXR5IHsg
dXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNlIGNwcDE0IHsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IGFycmF5
IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10oc3RkOjpzaXplX3QgaW5k
ZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07CisgICAgICAgIH0KIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCxf
VHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192
YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0KzEsX1R5cGUsX1Jlc3Qu
Li4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9oZWxwZXI8X09m
ZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTww
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRf
dHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lkIF9fdHlwZTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxfUmVzdC4uLj57Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLl9U
eXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZm
X3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihfVHlwZXMp
LTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
bGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVjdCB2YXJpYW50X3NpemU7
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
X1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIF9U
eXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8
X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9z
aXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4ge307Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPFZhcmlhbnQ8
X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c2l6ZV90LCBzaXplb2Yu
Li4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdD10eXBlbmFtZSB2YXJp
YW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRlbXBsYXRlIDxzaXplX3Qg
X0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRl
eCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfY29uc3RfdDx2YXJpYW50
X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1wbGF0ZSA8c2l6ZV90IF9J
bmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5kZXgs
IHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRkX3ZvbGF0aWxlX3Q8dmFy
aWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQotdGVtcGxhdGUgPHNpemVf
dCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0lu
ZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF92b2xh
dGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlw
ZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46
Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBl
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3QmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Y29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYpOwotCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZhcmlhbnQ8
X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4u
Lj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0gICAgVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0luZGV4LCB0
eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5
cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9f
aW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9U
eXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCi0gICAgVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0KLXRlbXBsYXRlPHNpemVf
dCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2NoYXI9KF9fY291bnQ+U0NI
QVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9fY291bnQ+U0hSVF9NQVgp
LAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5UX01BWCk+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQgY2hhciBfX3R5cGU7Ci19
OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlw
ZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYgc2lnbmVkIHNob3J0IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9fZGlzY3JpbWlu
YXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVmIGludCBfX3R5
cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9y
X3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWduZWQgbG9uZyBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90
eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFs
dWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fYWxsX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPHR5cGVuYW1l
IF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X0hlYWQ+Ojpf
X3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1Jlc3QuLi4+
OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1RhcmdldCx0eXBlbmFtZSAuLi4g
X0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0aWJsZXsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0
aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7
Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQot
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICB0eXBl
bmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19zdG9yYWdlX25v
dGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3df
bW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojpf
X3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTwtMSxf
SGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAg
X19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPjo6X192
YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29s
IF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxf
SGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2JhY2t1cF9z
dG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAg
ICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+OjpfX3ZhbHVlICYmCi0g
ICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0
cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FueV9iYWNrdXBf
c3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0g
ICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFs
dWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDxfSW5kZXgr
MSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55X2JhY2t1cF9zdG9yYWdl
X3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBzdGF0aWMgY29uc3QgYm9v
bCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1
Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8VmFyaWFudDxf
VHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19h
bnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4uLihfVHlwZXMpLF9UeXBl
cy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotdW5p
b24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLGJvb2w9c3RkOjpp
c19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3ZhcmlhbnRfc3RvcmFnZXsK
LSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRhW04gPT0gMCA/IDEgOiBO
XTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUm
IF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUm
IF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBj
b25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsKTsKLSAgICB9Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0eXBlbmFtZSBzdGQ6OmFk
ZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBf
X3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXpl
b2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB2b2lkIF9fY29uc3Ry
dWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBuZXcgKF9fcCkgX1R5
cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlwZV90ID0gdHlwZW5hbWUg
c3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0gICAgICAgIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlPF9EdW1teT46OnZh
bHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6KikoKT46OnR5cGUgPSBudWxs
cHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0eXBlbmFtZSBzdGQ6OmRl
Y2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9EdW1teSA9IF9UeXBlPgot
ICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwh
c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFsdWUsCi0gICAgICAgIHZv
aWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxwdHIpIHsKLSAgICB9Ci0g
ICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAg
ICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3YXJkPF9GaXJzdD4oX19m
aXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVzaW5nIGVuYWJsZV9pZl90
ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAKLSAgICBfVHlwZSYgX19n
ZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+KHN0YXRpY19jYXN0PHZv
aWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSBjb25zdCYgX19n
ZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSBjb25zdCo+KHN0
YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIHZvaWQgX19k
ZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAgfQotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2NvbnN0X3QgPSB0eXBlbmFt
ZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBfVHlwZSogX19zdG9yYWdl
OwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25zdGV4cHIgX19zdG9yYWdl
X3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2UoJl9fYXJnKXt9CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92ZV9yZWZlcmVuY2VfdCA9
IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsKIAotICAgIF9UeXBlJiBf
X2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0gICAgY29uc3RleHBy
IF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsK
LSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29u
c3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAmdCkgbm9leGNlcHQgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsK
LSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5cGU7CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVt
b3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1ZSIpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9f
Z2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwot
ICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChfX3R5cGUgY29u
c3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192
YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0KCkpOwotICAgIH0KLSAg
ICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIF9fdmFsLl9f
ZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAg
IGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmbW92ZShUICYmdCkgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3ZlX3JlZmVyZW5jZV90PFQ+
ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAgdHlwZWRlZiBfVHlwZSog
X190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9zZXF1ZW5jZSA9IHN0ZDo6
aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYg
X19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAg
fQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBf
X3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9f
ZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElz
PgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4u
PjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFrZV9pbmRleF9zZXF1ZW5j
ZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5
cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0
KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5cGUm
Jj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3Jy
ZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxfVHlw
ZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAgIHVzaW5nIGluZGV4
X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRzLi4uPjsKKyNlbHNlCisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAgIHN0cnVjdCBpbnRlZ2Vy
X3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7CisgICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsgcmV0dXJuIHNpemVvZi4u
LihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4K
KyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1ZW5jZTxzdGQ6OnNpemVf
dCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7CisKKyAgICAgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJocz4KKyAgICAgIHN0cnVj
dCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5jZTxMaHMuLi4+LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X3NlcXVlbmNlPFJocy4u
Lj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxMaHMuLi4sIChzaXplb2Yu
Li4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+
CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOworCisgICAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhfc2VxdWVuY2UgPSB0eXBl
bmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisKKyAgICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbAor
ICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFrZV9pbmRleF9zZXF1ZW5j
ZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX2lu
ZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRlPD4KLXVuaW9uIF9fdmFy
aWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCl7fQotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfVHlwZT57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUgX192YWw7Ci0gICAgc3Ry
dWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2Rh
dGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4u
IF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7
fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2lt
cGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAotICAgIF9UeXBlJiBfX2dl
dChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0ZXhwciovIF9UeXBlJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRf
cnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8
MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZGVzdHJveShfX3ZhbCk7
Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9z
ZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8MD4+IHt9OwogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJj57Ci0gICAg
dHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBlIF9fdmFsOwotICAgIHN0
cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4u
IFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFrZV9pbmRleF9zZXF1ZW5j
ZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lmZGVmIE1QQVJLX1RSQU5T
UEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBzdGQ6OmVxdWFsX3RvPD47
CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3Bl
cmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGli
Ojpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsK
KyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6
Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KKyNpZmRl
ZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIG5vdF9lcXVhbF90byA9
IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IG5vdF9lcXVhbF90byB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNv
bnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgIT0gbGliOjpmb3J3
YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBl
Jj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldChpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47CisjZWxzZQorICAgICAg
c3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBS
aHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywg
UmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMp
IDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9UeXBl
JiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0
ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAg
ICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0X3JyZWYoX192YWwpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAg
ICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9
Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZ3Jl
YXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVjdCBncmVhdGVyIHsKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QK
KyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+IGxpYjo6Zm9yd2FyZDxS
aHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
dW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30g
X19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgbGVz
c19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1lIFJocz4K
KyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMg
JiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxocykgPD0g
bGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBBUktfVFJBTlNQQVJFTlRf
T1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3RkOjpncmVhdGVyX2VxdWFs
PD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgeworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIg
YXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJF
VFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisg
ICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0CiAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4s
X0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9CisgICAgaW5saW5lIG5hbWVz
cGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsK
LSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQo
X192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDww
Pil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJl
ZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6
X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5cGVfdHJhaXRzPgorICAg
ICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29uc3RhbnQgPSBzdGQ6Omlu
dGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVhZCxfUmVzdC4uLj57Ci0g
ICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3ZhcmlhbnRfZGF0YTxfUmVz
dC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKCk6Ci0gICAgICAg
IF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBjb25z
dGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixfQXJncyYmIC4uLiBfX2Fy
Z3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2Fy
Z3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+
Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxhY2U8X0luZGV4LTE+LHN0
ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+IHt9OwogCi0gICAgX0hl
YWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFkLl9f
Z2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+
CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMuLi4+Ojp0eXBlOwogCi0g
ICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7
Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQot
ICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDww
PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5fcGxhY2U8MD4pOwotICAg
IH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1lc3BhY2Ugc3dhcHBhYmxl
IHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdHlw
ZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmIF9fZ2V0KAot
ICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAgICByZXR1cm4gX19yZXN0
Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0
eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0
X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIHJldHVy
biBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAg
ICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBf
X2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAg
IGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3Qu
X19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9pbXBsIHsKKyAgICAgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVSwKKyAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3RkOjpkZWNsdmFsPFUgJj4o
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpk
ZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OnRydWVfdHlw
ZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhw
ciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlw
ZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9pbmRleF90PDA+
KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIHRl
bXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhf
dDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXgtMT4p
OwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4KKyAgICAgICAg
ICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4uKTsKIAorICAgICAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0eXBlKHRlc3Q8VD4oMCkp
OworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBfSW5kaWNlcz4KLXN0cnVj
dCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0KLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlwZV9pbmRp
Y2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
dHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50X2luZGljZXM8VmFyaWFu
dDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwK
LSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9W
YXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3Qg
X19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5jX3R5cGUpKF9WYXJpYW50
KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAg
c3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9f
bGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX2VtcGxhY2Vf
Y29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19y
aHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAg
IHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJsZV9pbXBsPFQ+Ojp0eXBl
OwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRp
Y2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBib29sID0gaXNfc3dh
cHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90aHJvd19zd2FwcGFibGUg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KKyAgICAgICAgICAg
ICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0ZDo6ZGVjbHZhbDxUICY+
KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJs
ZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUK
LV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5k
aWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19ub3Rocm93X3N3YXBwYWJs
ZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fzc2lnbl9vcF90YWJsZTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0
cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19s
aHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4oKl9fbGhzKT1zdGQ6Om1v
dmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0gIC8vIG5hbWVzcGFjZSBz
d2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBhYmxlID0gZGV0YWlsOjpz
d2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2FwcGFibGUgPSBkZXRhaWw6
OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdl
dDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0aW9uYWw+CisjaWZkZWYg
X01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUg
OiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYgJiZmLCBBcyAmJi4uLiBh
cykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxpYjo6Zm9yd2FyZDxBcz4o
YXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgog
Ci0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2Vz
KV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtdiwgRCAmJmQp
CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12KQogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4u
LihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4u
Li4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwgdHlwZW5hbWUgUHRyPgor
ICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12LCBQdHIgJiZwdHIpCisg
ICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSkuKnBtdikKIAotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNz
aWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4u
IF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVu
Y190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAg
ICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBn
ZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9CisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwgdHlwZW5hbWUuLi4gQXM+
CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6KnBtZiwgRCAmJmQsIEFz
ICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJkPEQ+KGQpLipwbWYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBf
X2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3Rl
eHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYuLi4gYXMpCisgICAgICAg
ICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYpKGxpYjo6Zm9yd2FyZDxB
cz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX2NvcHlfYXNz
aWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2NvcHlfYXNzaWdu
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgewogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fZGVz
dHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190
eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0g
ICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19zZWxm
KXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAgICAgIF9fc2VsZi0+
X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICAgICAgfQotICAgIH0K
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4K
KyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBzdGF0aWMgY29uc3QgX19m
dW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBzdHJ1Y3QgaW52b2tl
X3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNsdmFsPEFyZ3M+KCkuLi4p
KT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5PGRlY2x0eXBlKAorICAg
ICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+KCksIHN0ZDo6ZGVjbHZh
bDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZm
X3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19kZXN0
cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2Rlc3Ryb3lfZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5
cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fc3dh
cF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShf
VmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBfVmFyaWFudCAmIF9fbGhz
LF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5kZXg+KF9fbGhzKSxnZXQ8
X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9IGRldGFpbDo6aW52b2tl
X3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlw
ZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdF90ID0g
dHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
c3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ogot
X19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAg
ICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFjZSBkZXRh
aWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9J
bmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3Ry
dWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTxfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiBib29sKCogY29u
c3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9WYXJpYW50IGNvbnN0Jik7
Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50IGNvbnN0
JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICByZXR1cm4gZ2V0PF9JbmRl
eD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3QgaXNf
aW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBf
X2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXplb2YuLi4oX0luZGljZXMp
XT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9yZXN1bHRfdDxGLCBBcmdz
Li4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1ZV90eXBlIHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3Rl
eHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxpdHlfb3BfdGFi
bGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2VxdWFsaXR5X2Nv
bXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
YXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2lu
ZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1
Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5jX3R5cGUpKF9W
YXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190aGFuX2NvbXBh
cmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9JbmRleD4oX19y
aHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1lLCB0
eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfciA6IHN0
ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIgX19jb21wYXJlX2Z1bmNf
dHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90PEYsIEFy
Z3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4u
Lj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZva2VfcmVzdWx0X3Q8Riwg
QXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3Qg
Li4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9W
YXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190
eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07
CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlzX2ludm9jYWJsZSA9IGRl
dGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3RydWN0IF9fdmFyaWFudF9i
YXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0YXRpY19jYXN0PF9EZXJp
dmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcg
aXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZvaWQsIFIsIEYsIEFyZ3Mu
Li4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVjdCBfX3ZhcmlhbnRfYmFz
ZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlw
ZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0gICAgICAgICB0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiwKLSAgICBfVHlwZSxf
VHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBl
cjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sX09mZnNl
dD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAg
IHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVj
dCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hl
YWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8
Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBlLF9SZXN0Li4uPjo6X190
eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9D
dXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxw
ZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBlZGVmIF9DdXJyZW50
U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBl
LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMj4KLXN0cnVjdCBfX2Nv
bWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMxLi4uPixfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29tYmluZV9zZXF1
ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29tYmlu
ZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21i
aW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4OwotCi10ZW1w
bGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgsX1Jlc3QuLi4+PnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJzdEluZGV4OwotfTsKLQot
dGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAg
ICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxl
X21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9UeXBlPnsKLSAgICB0eXBl
ZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29sIF9BY2NlcHQscHRyZGlm
Zl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewotICAgIHR5cGVkZWYgX19p
bmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRW50cnk+
Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57Ci0gICAgdHlwZWRlZiBf
X2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90
IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2NvbnN0cnVj
dGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5hbWUgX19jb25zdHJ1Y3Rp
YmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0gICAgICAgIHR5cGVuYW1l
IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVudFNlcXVlbmNlLAotICAg
ICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICAwLF9faW5kZXhf
c2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5k
ZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczxfVHlw
ZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAot
ICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlPjo6dHlwZQot
ICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192YWx1ZV9tYXRjaGVzOwot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAgICAgX1R5cGUsCi0gICAg
ICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3Rk
OjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAgICAgID46OnR5cGUuLi4+
OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQotICAgIF9fY29uc3RydWN0
aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19kaXJlY3RfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwK
LSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19jb25z
dHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNvbnZlcnNpb24gY29uc3Ry
dWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3QgYmUgY29uc3RydWN0aWJs
ZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAg
ICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19ycmVmX21hdGNoZXMsCi0g
ICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0Y2hlczsKLSAgICAKLSAg
ICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmlyc3RfaW5kZXg8X19hbGxf
bWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgICAgIGJv
b2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19pbmRleGVkX3R5cGVfaGFz
X25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19t
b3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9p
bmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29wX3RhYmxlOwotfTsKLQot
dGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29sIF9fb3RoZXJfdHlwZXNf
aGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9f
aGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93
X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYg
Li4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19zdGFnZV9yZXBsYWNlPF9J
bmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1lbW9yeT4KKyNpZmRlZiBN
UEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJu
IF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNlCisgICAgICBuYW1lc3Bh
Y2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpf
X2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3Zl
LAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9f
dHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9f
di50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2UgaGFzX2FkZHJlc3NvZl9p
bXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZm
X3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwK
LSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQgJiYpOwogCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2
b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAg
ICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9JbmRleD4oc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGJvb2wgaW1wbCgp
IHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6dmFsdWUgfHwgc3RkOjpp
c191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfc2FtZTxk
ZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1ZTsKKyAgICAgICAgICB9
CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBsYWNlX2Nv
bnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxmYWxzZT57
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0g
ICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19h
cmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6
OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07CisgICAgICAgIH0gIC8vIG5h
bWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBl
cjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0g
ICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJp
YW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1bmNfdHlwZSkoX1Zhcmlh
bnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9WYXJpYW50
ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVw
bGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKSk7Ci0g
ICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9IGJvb2xfY29uc3RhbnQ8
aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90
IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19saHMtPnRl
bXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0luZGV4PihfX3JocykpOwot
ICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSBfX21vdmVfYXNz
aWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25zdCBfX2NvcHlfZnVuY190
eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19p
bmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190eXBlCi1fX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07Cisg
ICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIFQg
KmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAgICAgICAgcmV0dXJuIHN0
ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxw
ZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAg
Jl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNzb2YoVCAm
YXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4gJmFyZzsKKyAgICAgICAg
fQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVu
YW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0
b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjptb3ZlKF9fc291cmNlLl9f
Z2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIF9fZGVzdHJv
eV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+X19kZXN0cm95KGluX3Bs
YWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAog
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9f
YmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+ewotICAgIHN0YXRpYyB2
b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9yYWdlJil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci0gICAgc3RhdGlj
IHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBU
SU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAg
ICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWlsOjpoYXNfYWRkcmVzc29m
PFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4
LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0
b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGlu
ZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVsZXRlOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRl
eCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+Ci17Ci0gICAgdHlwZWRl
ZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9f
c291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVuY190eXBlKShfU3RvcmFn
ZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHN0cnVj
dCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wczxfSW5kZXgs
X01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9ICAvLyBuYW1lc3BhY2Ug
Y3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBlIF9fbW92ZV9vcHNbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVzdHJveV9mdW5jX3R5cGUg
X19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZfdCAuLi4gX0luZGljZXM+
Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5k
ZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX2Z1bmNf
dHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFza0luZGV4LF9TdG9yYWdl
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9vcHNbCi0gICAgICAgIHNp
emVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9JbmRpY2VzPjo6X19vcHM6
Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50aXR5PFQ+IHt9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+CisgICAgc3RydWN0IHJlbW92
ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4dGVudHM8VD4ge307CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1vdmVfYWxsX2V4dGVudHNf
dCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsKKworICAgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQgPSBzdGQ6OmludGVncmFs
X2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVu
YW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2Jh
Y2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0lu
ZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lf
ZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVzaW5nIGJvb2xfc2VxdWVu
Y2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVkX3R5cGUgOiBzaXplX2Nv
bnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgor
ICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29sX3NlcXVlbmNlPHRydWUs
IEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisjaWZkZWYgTVBBUktfVFlQ
RV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlwZV9wYWNrX2VsZW1lbnQ8
SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUu
Li4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwgeworICAgICAgcHJpdmF0
ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBzZXQ7CisKKyAgICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVjdCBzZXQ8aW5kZXhfc2Vx
dWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9OworCisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8dHJ1
ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBpbmxpbmUgc3RhdGljIHN0
ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIHVz
aW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5jZV9mb3I8VHMuLi4+Pnt9
KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190
eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQot
ICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZl
X3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9z
dG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3Rv
cmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3Rv
cmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAot
ICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBf
X29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rl
c3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29w
X3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAg
ICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAK
LSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAg
ICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVfcGFja19lbGVtZW50ID0g
dHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46OnR5cGU7CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
OworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2lu
ZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnQ8SSwgVHMu
Li4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+
Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4u
Pjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQRV9UUkFJVFMKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFsbHlfY29weV9jb25zdHJ1
Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlPFQ+
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21v
dmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfY29uc3Ry
dWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3RydWN0aWJs
ZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5
X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUKKyAgICAgICAgOiBib29s
X2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlIDogYm9v
bF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFibGUKKyAgICAgICAgOiBi
b29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6
dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6
OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBz
dHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xfY29uc3RhbnQ8X19pc190
cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAgLy8gbmFtZXNwYWNlIGxp
YgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJFVFVSTgogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9f
YWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLW5hbWVzcGFj
ZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
Pgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX090aGVyPgot
c3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19zd2FwX3Jlc3VsdDxkZWNs
dHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxzdGQ6OmRlY2x2YWw8X090
aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVzcGFjZSBzdGQgewogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBwYWJsZSB7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9mKF9fc3dhcF90ZXN0X2Rl
dGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19h
bGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4u
KSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9IZWFkLF9SZXN0Li4uPgot
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3YXBwYWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyNkZWZpbmUg
QVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9SRVRVUk4oLi4uKSB7IHJl
dHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxl
PD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9vbCBfTW92ZUNvbnN0cnVj
dGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92
ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8
dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPW5v
ZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRy
dWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9j
b25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbDxfX2FsbF9t
b3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVzLi4uPgote307Ci0KLXRl
bXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25h
YmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZT57Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbgotICAgIDog
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICBfVHlwZXMuLi4+
IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8pCisjZGVmaW5lIERFQ0xU
WVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7Cisj
ZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZD46
OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsK
KyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4uLikgXAorICAtPiBtcGFy
azo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyByZXR1cm4gX19WQV9BUkdT
X187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5lIEFVVE9fUkVGUkVGX1JF
VFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
LT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19yZWZlcmVuY2U8ZGVj
bHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmluZSBERUNMVFlQRV9BVVRP
X1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18pIHsgcmV0dXJuIF9fVkFf
QVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0
aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVu
YW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25z
dHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYm
IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3Qu
Li4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1
Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92
YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5
Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFs
PF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1
Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2Nv
cHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMu
Li4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFu
dF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQm
PigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBfX25vZXhjZXB0X3Zhcmlh
bnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRf
c3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAg
ICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxs
X3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICB0eXBl
ZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBf
X2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8
VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlh
bnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50
PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0g
ICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmll
bmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBl
cy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAg
IHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5
cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9B
cmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGlu
X3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAg
cmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsK
LSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0o
dGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBf
X21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29u
c3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5k
ZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0
X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3Ro
ZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3QgX19jb3B5X2NvbnN0cnVj
dChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlmZl90IGNvbnN0IF9fb3Ro
ZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290aGVyX2luZGV4PT0tMSkK
LSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJs
ZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9fb3RoZXIpOwotICAgICAg
ICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2Vz
cyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgorICAgIHZpcnR1YWwgY29u
c3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJiYWRfdmFyaWFudF9hY2Nl
c3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lkIHRocm93X2JhZF92YXJp
YW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3Zh
cmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRlKCk7CisjZW5kaWYKKyAg
fQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAg
dm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBf
X3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVy
PAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29u
c3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAg
IChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19v
dGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAg
IF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUo
KnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAgIHRlbXBsYXRlPHNpemVf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190d29fc3RhZ2VfcmVwbGFj
ZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgICAgICBfX3Zhcmlh
bnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9wbGFjZTwwPixzdGQ6OmZv
cndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAg
ICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
X19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0g
ICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAgICB9CisgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0gICAgdGVtcGxhdGU8c2l6
ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xvY2FsX2JhY2t1cF9y
ZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2U8X0lu
ZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwotICAgICAgICBfX2Vt
cGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9fZGVzdHJveSgpOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJn
cz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKSB7Ci0gICAg
ICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4
PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2luZGV4PV9JbmRl
eDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVTCisgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJp
YW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7
fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qg
VD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgVmFyaWFu
dCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9yYWdlKGluX3BsYWNlPDA+
KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0
eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpCi0gICAg
X19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0PF9UeXBlcy4uLj46
OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0KF9fb3RoZXIpKQotICAg
IHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZh
dGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgY29uc3RleHByIFZh
cmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8
X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmIF9fb3RoZXIp
Ci0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0
cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVj
dChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3Rk
Ojpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1kZWxldGU7Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3ZhcmlhbnRfY29u
c3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9f
Y29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhl
cik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChpbl9wbGFjZV90eXBlX3Q8
X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZSgKLSAgICAgICAg
ICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAg
ICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9faW5k
ZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlwZSxfQXJncy4uLj46OnZh
bHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZvbGF0aWxlIFQ+IDog
dmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlhbnQoaW5fcGxhY2VfaW5k
ZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3RvcmFnZShpbl9w
bGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiksCi0gICAgICAgIF9f
aW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgY29uc3Rl
eHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAgICAg
ICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X1R5cGU+KF9f
eCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5
cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
Ci0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3RydWN0aWJsZV9tYXRjaGVz
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X190eXBlOjpfX2xlbmd0
aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoc3RkOjpp
bml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0b3JhZ2UoCi0gICAgICAg
ICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8c3Rk
Ojppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlPiwKLSAgICAgICAg
ICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3RvX2NvbnN0cnVjdDxzdGQ6
OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLSAg
ICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJpYW50JiBvcGVyYXRvcj0o
X1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9JbmRleD0KLSAgICAgICAg
ICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZTsK
LSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAgIGdldDxfSW5kZXg+KCp0
aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X1R5
cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9CisgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxl
IFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9f
YWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJp
YW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0g
ICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46
OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4u
Lj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNv
bnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1
Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAg
ICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8VHMuLi4+PiA6IG1wYXJr
OjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisKKyAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlOwor
CisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICB1c2luZyB2YXJpYW50
X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPEksIFQ+Ojp0eXBl
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFy
aWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6OmFkZF9jb25zdDx2YXJp
YW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
LCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGlsZSBU
PgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+
IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3Qg
dmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFk
ZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8
SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6OmlkZW50aXR5PG1wYXJrOjps
aWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAgc3RhdGljX2Fzc2VydChJ
IDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFyaWFudF9hbHRlcm5hdGl2
ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0ZXhwciBzdGQ6OnNpemVf
dCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpOworCisgIG5hbWVz
cGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGFsbCgpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4KKyAgICBpbmxpbmUgY29u
c3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiICYmIGFs
bChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90IG5vdF9mb3VuZCA9
IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3RleHByIHN0ZDo6c2l6ZV90
IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7CisKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAg
ICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVvZi4uLihUcyk+IG1hdGNo
ZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4ufQorICAgICAg
fTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsKKyAgICAgIGZvciAoc3Rk
OjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsKKyAgICAgICAgaWYgKG1h
dGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9mb3VuZCkgeworICAgICAg
ICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAgICAgICAgcmVzdWx0ID0g
aTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICB9CisgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVu
YW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0
cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfY29weV9h
c3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAgICBWYXJpYW50ICZvcGVy
YXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICBf
X2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAg
ICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9fb3RoZXIpIHsKLSAgICAg
ICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewotICAgICAgICAgICAgX19k
ZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgo
KT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+
OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZh
cmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
ICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25h
bDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZh
bHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJiZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJgotICAgICAgICAgICAg
X19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduPF9UeXBl
cy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX21vdmVf
YXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7
Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3Rh
YmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5k
ZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Cisj
ZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleF9pbXBsKHN0
ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IGlkeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnMuLi4gYnMp
IHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQgPyBhbWJpZ3VvdXMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5kX2luZGV4X2ltcGwoaWR4
LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRfaW5kZXhfaW1wbChyZXN1
bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2lu
ZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3RfZm91bmQsIDAsIHN0ZDo6
aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfX3R5cGVfaW5kZXg8
X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBzdGQ6OmZvcndhcmQ8X0Fy
Z3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdz
KXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4o
X19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBib29sIHZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleD09
LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhD
RVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1wbCA9CisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkgIT0gYW1iaWd1b3VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4+Owor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZp
bmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxmaW5kX2luZGV4PFQsIFRz
Li4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgorICAgIHN0cnVjdCBmaW5k
X2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8ST4geworICAg
ICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVjaWZpZWQgdHlwZSBpcyBu
b3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1iaWd1b3VzLCAidGhlIHNw
ZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRfaW5kZXhfY2hlY2tlZCA9
IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMuLi4+KCk+OworCisgICAg
c3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBhYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0
eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50
X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3RoZXIuaW5kZXgoKSA9
PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtpbmRleCgp
XSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAg
VmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAgICAgIF9fb3RoZXIu
X19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAgICAgICAgICAgX19p
bmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBjbGFzcyBUcmFpdCB7IFRy
aXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9OworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4gY2xhc3Mg
SXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4g
Y2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCB0cmFpdCgpIHsK
KyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFsdWUKKyAgICAgICAgICAg
ICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAgICAgICAgICAgIDogSXNB
dmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJsZTsKKyAgICB9CisKKyNp
ZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJh
aXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0
cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGU7
CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkgeworICAgICAgICAgIHJl
c3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXRfaW1w
bChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1wbGF0ZTw+Ci1jbGFzcyBW
YXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25z
dGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRyYWl0cz4KKyAg
ICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0IHJlc3VsdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYWl0IHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFpdHMuLi4gdHMp
IHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50Pihy
ZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2ltcGwodCwgdHMuLi4pCisg
ICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0LCB0cy4uLik7CiAgICAg
fQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAg
ICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAg
IGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0cy4uLiB0cykgeworICAg
ICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsIHRz
Li4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJpYW50Jil7fQotfTsKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICBz
dGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAg
ICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZT4oKS4uLik7CisKKyAg
ICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0ID0KKyAg
ICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVjdGlibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPigpLi4uKTsK
KworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2lnbmFibGVfdHJhaXQgPQor
ICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4uLik7CisKKyAgICAgIHN0
YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0ID0KKyAgICAgICAgICBj
b21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAgICAgICAgICAgICAgICAg
ICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMgY29uc3Rl
eHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRy
YWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3RyaXZpYWxseV9k
ZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfZGVzdHJ1
Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgot
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUK
LXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3Jo
cykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6
dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBuYW1lc3BhY2UgYWNjZXNz
IHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAgIHN0YXRpYyBjb25zdGV4
cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9f
dil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9fdHlw
ZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3YpewotICAgICAgICByZXR1cm4g
X192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLX07Cisg
ICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9E
RURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgIGlubGluZSBz
dGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9wbGFjZV9pbmRleF90PDA+
KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVhZF87Cisg
ICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1
cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3QgST4KKyAgICAgICAgaW5s
aW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4
X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6bGliOjpmb3J3YXJkPFY+
KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVtbXkgPSB0cnVlPgorICAg
ICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Vj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVGIG9wZXJhdG9yKCkoViAm
JnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEkg
LSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQorICAgICAgICB9OworCisg
ICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBs
PDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+CisgICAgICAgICAg
aW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAg
ICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikuaGVh
ZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFYsIHN0ZDo6c2l6
ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE9fUkVGUkVGIGdldF9h
bHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAgQVVUT19SRUZSRUZfUkVU
VVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpKQorI2VuZGlm
CisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAg
cmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjpt
b3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
cmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBkYXRhKG1wYXJrOjpsaWI6
OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQorICAgICAgfTsKKworICAg
ICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlw
ZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0
X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oYmFzZTo6Z2V0X2FsdDxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAgIH07CisKKyAgICB9ICAv
LyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRhdGlvbiB7CisKKyAgICAg
IHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNvbnN0IFQgJmF0KGNvbnN0
IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAgICAgfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlIGNv
bnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZS4uLiBJcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6OmxpYjo6cmVtb3ZlX2Fs
bF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBhcms6OmxpYjo6YXJyYXk8
VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgeworICAgICAgICAgIHJldHVy
biBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192KSk7Ci19CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2soKSB7Cisg
ICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYsIEZzPjo6dmFsdWUuLi4p
LAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRgIHJlcXVpcmVzIHRoZSB2
aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInJldHVy
biB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAKKyAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmNvbW1vbl90eXBlX3Q8
bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT4K
KyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAgICAgICB1c2luZyByZXN1
bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25fdHlwZV90PG1wYXJrOjps
aWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92aXNpdG9yX3JldHVybl90
eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAorICAgICAgICAgICAgICAg
ICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19OworICAgICAgICB9CiAK
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAgIHJldHVybiAqKAotICAg
ICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2Yo
X190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkK
LSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxf
VHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgICAgc3RydWN0IGltcGwg
eworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyBkaXNw
YXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTiht
cGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGPihmKSwK
KyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJcz4oc3RhdGljX2Nhc3Q8
VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAg
ICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3BhdGNoKG1wYXJrOjpsaWI6
OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JFVFVSTigmZGlzcGF0Y2hl
cjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRjaCkKKworICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAg
ICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlhZ29uYWxfaW1wbCgpCisg
ICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4oCisgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmluZGV4ZWRfdHlwZTxJ
LCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlw
ZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGli
OjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJy
YXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4pKQorCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAg
aW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8gbWFrZV9mZGlhZ29uYWwo
KQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBWLCBWcy4u
Lj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFy
azo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2Vy
dCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCkgPT0g
bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAgICAgICAgICAgICAiYWxs
IG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7CisgICAgICAgICAgcmV0
dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46OnNpemUo
KT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlw
ZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJu
ICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAgICAgICAgPyBzdGQ6OmFk
ZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIp
KQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4
LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZ
UEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBW
cywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1
dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0
dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KAotICAgICAgICAo
KChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPGludD4o
IkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92ZShfX3YpKQotICAgICk7
Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdC4uLiBJcywKKyAgICAg
ICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0
cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4s
IG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4gbHMpIHsKKyAgICAgICAg
ICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+e30sIGxzLi4uKS4u
Lik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxf
VHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsK
LSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoCi0g
ICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwgc3RkOjptb3ZlKF9fdikp
Ci0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1ha2VfZm1hdHJpeCgpIHsK
KyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAgICAgICAgICAgIG1wYXJr
OjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUo
KT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1hdHJpeF9pbXBsIHsKKyAg
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAgc3RydWN0IGltcGw7CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgICAgc3RydWN0
IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7CisgICAgICAgICAgICBp
bmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAgIEFV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRjaDxGLCBWcy4uLj4obXBh
cms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAgICAgIH07CisKKyAgICAg
ICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6ZV90Li4uIEpzLCB0eXBl
bmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1
ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5kZXhfc2Vx
dWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4uPiB7CisgICAgICAgICAg
ICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0CisgICAgICAgICAgICAg
IEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAgICAgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgpLi4uKSkKKyAgICAgICAg
ICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFt
ZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2ZtYXRy
aXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB0eXBlbmFtZSBtYWtl
X2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8CisgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFZzPjo6c2l6ZSgp
Pi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9UeXBlPiBnZXRfaWYoVmFy
aWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdl
dDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVfdCBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25hbDxWaXNpdG9yICYmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShhc19iYXNlKG1wYXJrOjps
aWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAgICAgICBpbmRleCkobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlz
aXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAg
ICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykp
KS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLikobXBhcms6OmxpYjo6Zm9y
d2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkKKyAgICAgIH07CisKKyAg
ICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAgICAgICAgc3RydWN0IHZp
c2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydCgK
KyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZpc2l0b3IsIFZhbHVlcy4u
Lj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAgcmVxdWlyZXMgdGhlIHZp
c2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlw
ZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29u
c3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuIChf
X3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxw
dHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNpZmRlZiBfTVNDX1ZFUgor
I3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQxMDApCisj
ZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3Io
KShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25zdAorICAgICAgICAgICAg
REVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1wYXJrOjpsaWI6OmZvcndh
cmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFsdWVzKS4uLikpCisjaWZk
ZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKKyAgICAgICAgfTsKIAot
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHBy
IHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVz
Li4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVy
biAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29m
KF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAgIHN0cnVjdCB2YWx1ZV92
aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xU
WVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0CisgICAgICAgICAgICBE
RUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNpdF9leGhhdXN0aXZlX3Zp
c2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IsCisgICAgICAgICAgICAg
ICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlKSku
Li4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4o
dmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX3Zh
bHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAgQVVUT19SRVRVUk4odmFs
dWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3Ip
fSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9y
LCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZ
UEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNp
dG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAg
ICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZz
KS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVu
YW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRP
IHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVD
TFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vmlz
aXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3ZhbHVlX2F0KHN0ZDo6c2l6
ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAg
ICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHRfYXQo
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3ZhbHVlX3Zpc2l0b3IobXBh
cms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQorCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShWaXNpdG9yICYmdmlzaXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAg
ICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJk
PFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAgLy8gbmFtZXNwYWNlIHZp
c2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVD4K
KyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBUOwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjph
ZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0cjoKLSAgICAgICAgc3Rk
OjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192
KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEg
d2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIGFsdChpbl9wbGFjZV90
LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9w
KQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2YWx1ZTsKKyAgICB9Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0
IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxl
VHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1bmlvbiByZWN1
cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yPgotc3RydWN0IF9fdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgZGVj
bHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2YWw8X0hlYWQmPigpKSkg
X190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRlZiBWYXJpYW50PF9UeXBl
cy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0
dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0dXJuX3R5cGU7Ci0gICAg
dHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNpdG9yJixfX3ZhcmlhbnRf
dHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgc3RhdGljIF9fcmV0
dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlzaXRvcixfX3ZhcmlhbnRf
dHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X1R5cGU+KF9fdikpOwot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90
IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwgSW5k
ZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKGRlc3RydWN0
aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJ
bmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICBcCisgIHVu
aW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4LCBULCBUcy4uLj4g
eyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0
IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5vZXhjZXB0ICAgICAgICBc
CisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5f
cGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAg
IDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5k
ZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisgICAgICAgIDogdGFpbF8o
aW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdz
KS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihjb25z
dCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KGNv
bnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAorICAgIHJlY3Vyc2l2
ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNo
YXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbjxk
ZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxfOyAgICAgICAgICAgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpyZWN1cnNpdmVf
dW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFS
S19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9IGRlZmF1
bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSB7
fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJhaXQ6OlVuYXZhaWxhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVfdW5pb24oKSA9
IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04KKworICAg
IHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVz
dHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNzIGJhc2UgeworICAgICAg
cHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKHZhbHVlbGVzc190
IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGluZGV4XyhzdGF0aWNfY2Fz
dDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBiYXNlKGluX3Bs
YWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICA6IGRhdGFfKGluX3Bs
YWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLiksCisg
ICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIHZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBp
bmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgfQorCisgICAgICBpbmxp
bmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNlcHQgeworICAgICAg
ICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFudF9ucG9zIDogaW5kZXhf
OworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2luZyBkYXRhX3QgPSByZWN1
cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsKKworICAgICAgZnJpZW5k
IGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7IHJldHVybiBiOyB9Cisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZhc19iYXNlKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGJhc2Ug
JiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3ZlKGIpOyB9CisgICAg
ICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNfYmFzZShjb25zdCBiYXNl
ICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisgICAgICBmcmllbmQgaW5s
aW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQor
ICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90ICZkYXRhKGNvbnN0IGJh
c2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHBy
IGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0
YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGRhdGFfdCAmJmRhdGEo
Y29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUoYikuZGF0YV87IH0KKwor
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIHsgcmV0dXJu
IHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX3RyYW1w
b2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFfdCBkYXRhXzsKKyAgICAg
IGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAu
Li4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBl
cy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRvcixfVHlwZXMuLi4+Ojpf
X3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAgJl9fdHJhbXBvbGluZV9m
dW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNzOjpiYXNlOworICAgICAg
ZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX192
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlwZQotdmlzaXQoX1Zp
c2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAo
X192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBfX3Rocm93X2JhZF92YXJp
YW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVz
Li4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpCi0gICAgICAgIDogX192
aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBvbGluZVtfX3YuaW5kZXgo
KV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3IgeworI2lmZGVmIF9NU0NfVkVS
CisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMCkK
KyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSB2b2lk
IG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0Ln5BbHQoKTsgfQorI2lm
ZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgfTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVjdCBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRl
Y2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4uLikp
Ci0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlwZW5h
bWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVlbmNl
PF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUg
Li4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlfdmlz
aXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBfX3Zp
c2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07CisjaWYgZGVm
aW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RP
Uih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFy
Z3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHR5
cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJTkdfQ1RPUih0eXBlLCBi
YXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9yX3Q7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3RydWN0aWJsZV90cmFpdD4K
KyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9IZWFkLF9SZXN0Li4uPnsK
LSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9ERVNUUlVD
VE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJveSkgXAorICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4uPiwgZGVzdHJ1Y3RpYmxl
X3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGJhc2U8ZGVzdHJ1
Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVz
aW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPjsgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yICYmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVjdG9yICYpID0gZGVmYXVs
dDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGRlc3RydWN0
b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisgICAg
TVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxh
YmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisgICAgICAgIGlubGluZSB2
b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+aW5kZXhfID0gc3RhdGlj
X2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfREVT
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgfmRlc3RydWN0b3Io
KSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhjZXB0
IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAg
ICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7fSwgKnRoaXMpOworICAg
ICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90Pigt
MSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAg
ICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBkZWxldGU7LAor
ICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBkZWxldGU7KTsKKworI3Vu
ZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRy
YWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0cnVjdG9yPFRyYWl0cz4g
eworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47CisKKyAgICAgIHB1Ymxp
YzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3VwZXIpCisgICAgICB1c2lu
ZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6CisjaWZuZGVmIE1QQVJLX0dF
TkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJh
dG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBjb25zdCB7CisgICAgICAg
ICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJoc0FsdD4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYgLi4uKXsKLSAgICAgICAg
cmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgc3RhdGljIFQgJmNv
bnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgICAgOjpu
ZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVzc29mKGEpKSkKKyAgICAg
ICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAgIH0KKworICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMgdm9pZCBnZW5lcmljX2Nv
bnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAgICAgICAgbGhzLmRlc3Ry
b3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAgICAgICAgICAgICByaHMu
aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAgICAgICAgICAgICAgW10o
YXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1
Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAgbGhzX2FsdCwgbXBhcms6
OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCkudmFsdWUpOworICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNlbmRpZgorICAgICAgICAg
ICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9y
d2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSByaHMuaW5kZXhfOworICAg
ICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5k
ZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3Jf
dDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJl
dHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0
Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9jb25zdHJ1
Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1jb25z
dGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGUm
JiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgIHJldHVybiBzdGQ6OmZv
cndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0FyZ3MuLi4+OjpfX3R5cGU+
KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fc2VsZWN0KF9f
YXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IobW92
ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFt
ZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+LCBtb3ZlX2NvbnN0cnVj
dGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgY29uc3RydWN0b3I8dHJh
aXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNp
bmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25zdCBtb3ZlX2NvbnN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3RvciAmb3BlcmF0
b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBt
b3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0
OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNU
T1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVsdDspOworCisgICAgTVBB
UktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAor
ICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3IgJiZ0aGF0KSBub2V4Y2Vw
dCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRz
Pjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVjdG9yKHZhbHVlbGVzc190
e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgbXBhcms6Omxp
Yjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NP
TlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIG1vdmVfY29u
c3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJL
X1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0
cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBj
b3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RP
Uihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwKKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4sIGNvcHlfY29u
c3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBtb3ZlX2NvbnN0
cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHVibGljOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1Y3Rvciwgc3VwZXIpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRv
cj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfY29u
c3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5X2NvbnN0cnVjdG9yICZv
cGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAgXAor
ICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0cnVjdG9yICYmKSA9IGRl
ZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05T
VFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAgY29w
eV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0KSA9IGRlZmF1bHQ7KTsK
KworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2
YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9y
ICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZhbHVlbGVzc190e30pIHsK
KyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywgdGhhdCk7CisgICAgICAg
IH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3IoY29uc3QgY29weV9jb25z
dHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNU
UlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgorICAgIGNsYXNzIGFzc2ln
bm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsKKyAgICAgIHVzaW5nIHN1
cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBwdWJsaWM6CisgICAgICBJ
TkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNlKEFyZ3MgJiYuLi4gYXJn
cykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3RfYWx0KGFjY2Vzczo6YmFz
ZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSkgeworICAgICAgICB0
aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRoaXMtPmNvbnN0cnVjdF9h
bHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3RydWN0IGFzc2lnbmVyIHsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVuYW1lIFRoYXRBbHQ+Cisg
ICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhpc19hbHQsIFRoYXRBbHQg
JiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2lnbl9hbHQodGhpc19hbHQs
IG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9W
aXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBl
bmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6
X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBf
X3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJpYW50SW5kZXgtMT4oX192
Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlzaXRfaGVscGVyPF9WYXJp
YW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNlcy4uLj4+OjpfX3Zpc2l0
KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4uKQotICAgICAgICAgICAg
OiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxfSW5kaWNlcy4uLj46Ol9f
dmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotICAgIH0K
LX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVCwgdHlwZW5hbWUg
QXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwgVD4gJmEsIEFyZyAmJmFy
ZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7CisjaWZkZWYgX01TQ19WRVIK
KyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MjQ0KQor
I2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcp
OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJ
PihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29uc3QgeworICAgICAgICAg
ICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmdfKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAqdGhpc187CisgICAgICAg
ICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBtcGFyazo6bGliOjpmb3J3
YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGliOjpib29sX2NvbnN0YW50
PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFy
Zz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAgICAgfQogCi10ZW1wbGF0
ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9f
dmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBj
b25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9W
YXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4u
Lil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBf
X211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBl
PigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNfYXNzaWduKFRoYXQg
JiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYg
dGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5n
LgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Cisg
ICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZp
c2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAgICAgdGhhdC5pbmRleCgp
LAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICBbdGhpc10oYXV0
byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAgICAgICAgIHRoaXMtPmFz
c2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBtcGFyazo6bGliOjpmb3J3
YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsKKyAgICAgICAgICAgICAg
fQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhpc30KKyNlbmRpZgorICAg
ICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAgICBtcGFyazo6
bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50
OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2Fz
c2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50OwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8
X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2Yu
Li4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3Vu
dDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9
X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zp
c2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsK
LQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5
cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYg
X192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9o
ZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAg
ICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1Zhcmlh
bnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAg
IF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9f
dmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Cisj
ZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVfYXNzaWduYWJsZV90cmFp
dCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9hc3NpZ25t
ZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4gICAgICAgICAgICBcCisg
ICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdubWVudDx0cmFpdHM8VHMu
Li4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3ZlX2Fzc2lnbm1lbnQsIHN1
cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3Bl
cmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25zdCBtb3ZlX2Fzc2lnbm1l
bnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBtb3ZlX2Fzc2lnbm1lbnQo
bW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IG1v
dmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
IH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9yPSht
b3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRf
TU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBtb3Zl
X2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3NpZ25tZW50ICYmdGhhdCkg
bm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVj
dGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92
ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAgIHRoaXMtPmdlbmVyaWNf
YXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCgKKyAgICAg
ICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJm9wZXJhdG9y
PShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5U
X01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQg
PSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFzcyBjb3B5X2Fzc2lnbm1l
bnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoY29weV9hc3NpZ25h
YmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5
X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxlX3RyYWl0PiAgICAgICAg
ICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBtb3ZlX2Fzc2lnbm1l
bnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKGNvcHlfYXNzaWdu
bWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1
cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvbnN0IGNvcHlf
YXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBkZWZhdWx0OyAgICAgICAg
ICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAgICAg
IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZhdWx0Oyk7CisKKyAgICBN
UEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwK
KyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29weV9hc3NpZ25tZW50
ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24odGhhdCk7CisgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9B
U1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfYXNz
aWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlbGV0ZTspOwor
CisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNvcHlfYXNzaWdubWVudDx0
cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19DVE9SKGltcGws
IHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGluZSB2b2lkIGFzc2lnbihB
cmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nlc3M6OmJhc2U6OmdldF9h
bHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZvaWQgc3dhcChpbXBsICZ0
aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgJiYgdGhh
dC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAvLyBkbyBub3RoaW5nLgor
ICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5pbmRleCgpKSB7CisgICAg
ICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMtPmluZGV4KCksCisjaWZk
ZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdF9h
bHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisj
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVye30K
KyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwgKnJocyA9IG1wYXJrOjps
aWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5tb3ZlX25vdGhyb3coKSAm
JiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKGxocywgcmhz
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6OmxpYjo6bW92ZSgqcmhz
KSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8vIEVYVEVOU0lPTjogV2hl
biB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhzYCB0aHJvd3MKKyAgICAg
ICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVjdGlibGUgdGhlbiB3ZSBt
b3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFuZCBwcm92aWRlIHRoZSBz
dHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1vdmUoKmxo
cykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAgICAgaWYgKHRtcC5tb3Zl
X25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqcmhz
LCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhy
b3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVj
dCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgorICAgICAgICAgIHRoaXMt
PmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUodG1wKSk7CisgICAgICAg
IH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9W
YXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlzaXRvciYmIF9fdmlzaXRv
cixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNpdF9oZWxwZXI8c2l6ZW9m
Li4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNpdCgKLSAgICAgICAgX192
aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwotfQorICAgICAgcHJpdmF0
ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBzdHJ1Y3Qgc3dhcHBlciB7
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBlbmFtZSBUaGF0QWx0Pgor
ICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRoaXNfYWx0LCBUaGF0QWx0
ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKKyAgICAgICAg
ICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
IH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9U
eXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhzLmluZGV4KCk9PV9fcmhz
LmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEpIHx8Ci0gICAgICAgICBf
X2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9fZXF1YWxpdHlfY29tcGFy
ZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3JocykpOwotfQorICAgICAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0IHsKKyAgICAgICAgcmV0
dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAgICAgICAgICAgICAgICAg
e3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZS4uLn0KKyAgICAg
ICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xocy5pbmRleCgpPT1fX3Jo
cy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0tMSkgJiYKLSAgICAgICAg
ICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+OjoKLSAgICAgICAgICBf
X2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9fcmhzKSkpOwotfQorICAg
IHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lkIG9wZXJhdG9yKCkoKSBj
b25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJv
b2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9fbGhzOwotfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ8
VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5nIG92ZXJsb2FkPFRzLi4u
Pjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5PFQ+IG9wZXJhdG9yKCko
VCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4g
X1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50PF9UeXBlcy4uLj4gY29u
c3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMpewotICAgIHJldHVybiAh
KF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlwZW5hbWUgbXBhcms6Omxp
Yjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46OnR5cGU7CisKKyAgfSAg
Ly8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBjbGFzcyB2YXJpYW50
IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAorICAgICAgICAgICAgICAg
ICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBhbHRlcm5hdGl2ZS4iKTsK
KworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6OmlzX2FycmF5PFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2Vy
dChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6dmFsdWUuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2ZSBhIHJlZmVyZW5jZSB0
eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGli
OjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAg
ICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMgYW4gYWx0ZXJuYXRpdmUu
Iik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBGcm9u
dCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMuLi4+LAorICAgICAgICBt
cGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnQoKSBub2V4
Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29uc3RydWN0aWJsZTxGcm9u
dD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8MD57fSkge30KKwor
ICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7CisgICAgdmFyaWFudCh2YXJp
YW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19zYW1lPG1wYXJrOjpsaWI6
OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBUID0gZGV0YWlsOjpiZXN0
X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRh
aWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50KEFyZyAmJmFyZykgbm9l
eGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6
ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBt
cGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6
OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1
ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50KAorICAg
ICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhj
ZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZh
bHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgc3Rk
OjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFy
Z3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90
PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFu
dCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXpl
cl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVj
dGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9s
aXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
cy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWws
IG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8
CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFs
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBjb25z
dGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+LAorICAgICAgICBBcmdz
ICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8
ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBs
YXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRf
aW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJs
ZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5cGVfdDxUPiwKKyAgICAg
ICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdz
KSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNl
X2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9
CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlhbnQgJm9wZXJhdG9yPShj
b25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZvcGVyYXRvcj0odmFyaWFu
dCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZywKKyAgICAgICAg
ICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2FtZTxtcGFyazo6bGliOjpk
ZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9IGRldGFpbDo6YmVzdF9t
YXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWls
OjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQgJiwgQXJnPjo6dmFsdWUg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdHJ1Y3RpYmxl
PFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0g
MD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFyZykgbm9leGNlcHQoCisg
ICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFyZz46OnZhbHVlICYmCisg
ICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSkpIHsK
KyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4o
YXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0
eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisg
ICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBB
cmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZlbXBsYWNlKEFyZ3MgJiYu
Li4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4obXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAor
ICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBVcCwKKyAgICAgICAgdHlw
ZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFj
a19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5lIFQgJmVtcGxhY2Uoc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICByZXR1
cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBU
LAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0
YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICBtcGFyazo6
bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVl
LCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYmLi4uIGFyZ3MpIHsKKyAg
ICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8
QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5h
bWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisg
ICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4u
Pjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3Ry
dWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1w
bGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlv
bigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBpbmRl
eCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5pbmRleCgpOworICAgIH0K
KworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRydWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1teSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpp
c19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlhbnQgJnRoYXQpIG5vZXhj
ZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNf
bm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkgeworICAgICAgaW1wbF8u
c3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgorICAgIGRldGFpbDo6aW1w
bDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFpbDo6YWNjZXNzOjp2YXJp
YW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICB9
OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5l
IGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOworICB9CisKKyAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wg
aG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwg
VHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0YWlsIHsKKyAgICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1Y3QgZ2VuZXJpY19nZXRf
aW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChpbnQpIHt9CisKKyAgICAg
IGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBjb25zdAorICAgICAgICBB
VVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZhcmlhbnQ6OmdldF9hbHQ8
ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAgfTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0oVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsK
LSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZW5lcmlj
X2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5lcmljX2dldF9pbXBsPEks
IFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8gMCA6ICh0aHJvd19iYWRf
dmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4o
dikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90
IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRp
dmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICZ2KSB7
CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJr
OjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVu
YW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZ2
KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7CisgIH0KKworICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Y29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdldCgKKyAg
ICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIFQgJmdldCh2YXJpYW50
PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8
VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2YXJpYW50PFRzLi4uPiAm
JnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4u
Pjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IFQgJmdldChj
b25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgY29uc3QgVCAmJmdl
dChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6Zmlu
ZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOwor
ICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1dG8gKiAqLyBBVVRPIGdl
bmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JFVFVSTih2ICYmIGhvbGRz
X2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAgID8gbXBhcms6OmxpYjo6
YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdikudmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKKwor
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25z
dGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwg
dmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsK
KyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsKKyAgfQorCisgIHRlbXBs
YXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBt
cGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2
ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXRfaWY8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBj
b25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBnZXRfaWYodmFyaWFudDxU
cy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRldGFpbDo6ZmluZF9pbmRl
eF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFk
ZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICp2KSBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxU
LCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4K
KyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgdmFyaWFudDxUcy4uLj4g
JmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVY
UFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBlcXVhbF90b3t9LCBsaHMs
IHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgor
ICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAgICAgICAgICAg
dmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFsX3Rve30sIGxocywgcmhz
KSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307CisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgdmFy
aWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxfdG87CisjaWZkZWYgTVBB
UktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpKSBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwg
bm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy5pbmRleCgp
ICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCks
IG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0KIAotY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsg
cmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRl
IGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBj
b25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0
JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3RydWN0IF9faGFzaF92aXNp
dG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigp
KF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9f
eCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29u
c3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgewor
ICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6
bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgo
KSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMu
aW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiAhcmhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhz
LmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAK
LS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZs
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4u
Lj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1
c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJocyk7CisjZWxzZQorICAg
IHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAocmhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpIHx8
CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNsYXNzLi4uIEY+Ci1hdXRv
IHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlzaXQobWFrZVZpc2l0b3Io
c3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkKLXsKLSAgICByZXR1
cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJk
PFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxo
cy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChyaHMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgp
IDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5p
bmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0
KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJu
IGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFyaHMudmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPCByaHMuaW5k
ZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAg
ICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc19lcXVh
bHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5hbWVzcGFjZSBXVEYKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0
b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXJfZXF1
YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4
KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSB8fAor
ICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAgICAgIGxocy5pbmRleCgp
LCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9CiAKLW5hbWVzcGFj
ZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+Cisg
IGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNpdG9yICYmdmlzaXRvciwg
VnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgIChkZXRhaWw6
OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAgICAgICAgICAgID8gKHZv
aWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCkpLAorICAgICAg
ICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVlKG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKworICBz
dHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwo
bW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0K
KworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSwgbW9ub3N0YXRl
KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhw
ciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KG1v
bm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKwor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3RhdGUsIG1vbm9zdGF0ZSkg
bm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBh
dXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICB2YXJpYW50
PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChyaHMpKSkKKyAgICAgIC0+
IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChyaHMpOworICB9CisKKyAg
bmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUu
Li4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5hbWVzcGFjZSBoYXNoIHsK
KworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+CisgICAgICBjb25zdGV4
cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX2Nv
cHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92
ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46OnZhbHVlOworICAgICAg
fQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIGlz
X2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8Sz47CisgICAgICAgIHJl
dHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAgICAgICAgICAgc3RkOjpp
c19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAgICAgICAgICAgICBzdGQ6
OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNf
bW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAgIH0gIC8vIG5hbWVzcGFj
ZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5kZWYgQVVUTworI3VuZGVm
IEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVmIEFVVE9fUkVGUkVGX1JF
VFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xUWVBFX0FVVE9fUkVUVVJO
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgaGFzaDxkZXRhaWw6OmVu
YWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAgbXBhcms6OmxpYjo6ZW5h
YmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNfZW5hYmxlZDwKKyAgICAg
ICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+Ojp2YWx1ZT4+PiB7Cisg
ICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+OworICAgIHVzaW5nIHJlc3Vs
dF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3BlcmF0b3Io
KShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1c2luZyBkZXRhaWw6OnZp
c2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPQorICAgICAgICAg
IHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAgID8gMjk5NzkyNDU4ICAv
LyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9uIGNyZWF0aW9uCisgICAg
ICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFN
QkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZhbHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6OmRlY2F5X3Q8ZGVjbHR5
cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IG1wYXJr
OjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhh
c2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisjZWxz
ZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisgICAgICAgICAgICAgICAg
ICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1cm4gaGFzaF9jb21iaW5l
KHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsKKyAgICB9CiAKLXRlbXBs
YXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBzaXplX3Qgb3BlcmF0b3Io
KShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIDQyOworICAgIHBy
aXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgIHN0cnVjdCBoYXNoZXIg
eworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSBzdGQ6OnNpemVf
dCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAgICAgIHVzaW5nIGFsdF90
eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1c2luZyB2YWx1ZV90eXBl
ID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PHR5cGVuYW1lIGFsdF90
eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQu
dmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0YXRpYyBzdGQ6OnNpemVf
dCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVfdCByaHMpIHsKKyAgICAg
IHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwgNikgKyAobGhzID4+IDIp
OwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3RydWN0IGhhc2g8bW9ub3N0
YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0ZTsKKyAgICB1c2luZyBy
ZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewotICAgIHNpemVfdCBvcGVy
YXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRleCgpKSBeIFdURjo6dmlz
aXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUgcmVzdWx0X3R5cGUgb3Bl
cmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJl
dHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkgYXR0cmFjdGl2ZSByYW5k
b20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3BhY2Ugc3RkCit9ICAvLyBu
YW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNpbmcgV1RGOjpWYXJpYW50
OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9D
UFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KK2F1dG8gc3dp
dGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6
OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQoreworICAgIHJldHVybiBz
dGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4uLiksIHN0ZDo6Zm9yd2Fy
ZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkK
LSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykKIAotc3RhdGljIFZhcmlh
bnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1v
ZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6
Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMgc3RkOjp2YXJp
YW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBN
b2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9y
OjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAgIHN3aXRjaCAo
bW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9sb2NhbGU7CiAg
ICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0
b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVyYXRv
cklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOwogICAgIE1vZGUgbV9t
b2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VN
YWMubW0JKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRC
cmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2
LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50PFRleHRCcmVha0l0ZXJh
dG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0
b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFudDxUZXh0QnJlYWtJdGVy
YXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJh
dG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNl
IFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjc4IEBACisyMDE3LTA4LTE3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2NhY2hlL0NhY2hlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
Y2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9jcmVkZW50aWFscy9DcmVk
ZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRyYWN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5
Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc0Zvcm1EYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNBcnJheUJ1ZmZlciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlCdWZmZXJWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFyY2hQYXJhbXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpG
ZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZv
cm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVm
ZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmFycmF5QnVmZmVy
Vmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp0ZXh0Qm9keSk6
CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBjb25zdCk6CisgICAgICAg
ICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaDoKKyAg
ICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaFJl
cXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlLZXkpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVh
dGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6
OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0
QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YXJyYXkgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6bnVtYmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5IGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29kZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJL
ZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhhc2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0
YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmJpbmFyeSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJheSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0aFZhbGlkKToKKyAgICAg
ICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpsb2dnaW5nU3Ry
aW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdGVk
SW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCS2V5UGF0aCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFtZUZvclRyYWNrKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFU
cmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VT
ZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZl
cik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNpbmdTdGF0dXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5nUmVzdWx0OjpjYW5kaWRh
dGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAgICAgICogYmluZGluZ3Mv
anMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJTb3VyY2U6OmRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjpsZW5ndGggY29uc3QpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6Om1heWJlQ3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlS2V5UGF0
aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2VyUGFyYW1ldGVyKToKKyAg
ICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAgICogY3J5cHRvL0NyeXB0
b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVD
cnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uaDoKKyAgICAg
ICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9ydEtleSk6CisgICAgICAg
ICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkpOgorICAgICAgICAq
IGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBj
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6CisgICAgICAgICogY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNy
eXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1I
S0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1w
b3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktE
RjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BL
Q1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtD
UzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL3Bh
cmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAgICAgICAgKiBjcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oOgorICAgICAgICAqIGNy
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oOgorICAgICAgICAq
IGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtl
eUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVkSXRlbSk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4Lmg6
CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6CisgICAgICAgICogY3NzL0RP
TU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXhSZWFkT25seTo6
Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFRh
cmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MpOgorICAgICAgICAqIGRv
bS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZlbnQuaDoKKyAgICAgICAg
KiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1l
ckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJl
c3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpkaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAqIGZpbGVhcGkv
RmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZXN1bHQgY29u
c3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAqIGh0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246
Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAqIGh0bWwv
SFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6CisgICAgICAgICogaHRt
bC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2Up
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL1VSTFNlYXJjaFBhcmFt
cy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNW
YWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNDdXJyZW50Q29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Omhhc092ZXJyaWRlQWxw
aGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6Om92ZXJyaWRlQWxwaGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52YXNQYXR0ZXJuIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBjb25zdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90cmFjay9UcmFja0V2ZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rpb25PYnNl
cnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBhZ2UvSW50ZXJzZWN0aW9u
T2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVkQnVmZmVyQ0YuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU29vbiBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5nIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJl
YWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OldlYkF1ZGlvU291cmNl
UHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgorICAgICAgICAqIHBsYXRm
b3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVt
ZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oOgorICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE4ICBNczJnZXIgIDxNczJnZXJAZ21haWwu
Y29tPgogCiAgICAgICAgIFtHVEtdIFNob3cgY29udHJvbHMgaWYgYSB2aWRlbyBlbGVtZW50IGlz
bid0IGFsbG93ZWQgdG8gcGxheSBpbmxpbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0NhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Nh
Y2hlL0NhY2hlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jYWNoZS9DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDggKzYzLDggQEAgdm9pZCBD
YWNoZTo6ZG9NYXRjaChzdGQ6Om9wdGlvbmFsPFJlcXVlcwogewogICAgIFJlZlB0cjxGZXRjaFJl
cXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAg
ICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1
ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVx
dWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVh
c2VOb25OdWxsKCk7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIg
JiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoVHlw
ZSA9PSBNYXRjaFR5cGU6Ok9ubHlGaXJzdCkgewogICAgICAgICAgICAgICAgICAgICBwcm9taXNl
LT5yZXNvbHZlKCk7CkBAIC0xMjIsOCArMTIyLDggQEAgdm9pZCBDYWNoZTo6YWRkQWxsKFZlY3Rv
cjxSZXF1ZXN0SW5mbz4mJgogdm9pZCBDYWNoZTo6cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVm
PEZldGNoUmVzcG9uc2U+JiYgcmVzcG9uc2UsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHBy
b21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKLSAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykpIHsKLSAgICAg
ICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKS5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJl
cXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5t
ZXRob2QoKSAhPSAiR0VUIikgewogICAgICAgICAgICAgcHJvbWlzZS5yZWplY3QoRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCBBU0NJSUxpdGVyYWwoIlJlcXVlc3QgbWV0aG9kIGlzIG5vdCBHRVQiKSB9
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4MCw4ICsxODAsOCBAQCB2b2lkIENhY2hlOjpw
dXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8CiB2b2lkIENhY2hlOjpyZW1vdmUoUmVxdWVzdElu
Zm8mJiBpbmZvLCBDYWNoZVF1ZXJ5T3B0aW9ucyYmIG9wdGlvbnMsIERPTVByb21pc2VEZWZlcnJl
ZDxJRExCb29sZWFuPiYmIHByb21pc2UpCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVx
dWVzdDsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0
Pj4oaW5mbykpIHsKLSAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVl
c3Q+PihpbmZvKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgeworICAgICAgICByZXF1ZXN0ID0gc3Rk
OjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRo
b2QpIHsKICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMDEsOCArMjAxLDggQEAgdm9pZCBDYWNoZTo6a2V5cyhzdGQ6Om9wdGlvbmFs
PFJlcXVlc3RJbgogewogICAgIFJlZlB0cjxGZXRjaFJlcXVlc3Q+IHJlcXVlc3Q7CiAgICAgaWYg
KGluZm8pIHsKLSAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKLSAgICAgICAgICAgIHJlcXVlc3QgPSBXVEY6Omdl
dDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4o
aW5mby52YWx1ZSgpKSkgeworICAgICAgICAgICAgcmVxdWVzdCA9IHN0ZDo6Z2V0PFJlZlB0cjxG
ZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAg
ICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9k
KSB7CiAgICAgICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKFZlY3RvcjxSZWY8RmV0Y2hSZXF1
ZXN0Pj4geyB9KTsKICAgICAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVh
dGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9jcmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IENyZWRlbnRp
YWxDcmVhdGlvbk9wdGlvbnMgewotICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBW
YXJpYW50PFBhc3N3b3JkQ3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsK
KyAgICB1c2luZyBQYXNzd29yZENyZWRlbnRpYWxJbml0ID0gc3RkOjp2YXJpYW50PFBhc3N3b3Jk
Q3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsKIAogICAgIHN0ZDo6b3B0
aW9uYWw8UGFzc3dvcmRDcmVkZW50aWFsSW5pdD4gcGFzc3dvcmQ7CiAgICAgc3RkOjpvcHRpb25h
bDxGZWRlcmF0ZWRDcmVkZW50aWFsSW5pdD4gZmVkZXJhdGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MiwzNiArNDIsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBGZXRjaEJvZHkgRmV0Y2hC
b2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEluaXQmJiB2YWx1
ZSwgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQmxvYj4gYmxvYiA9
IFdURjo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYg
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEJsb2I+Pih2YWx1ZSkpIHsKKyAgICAgICAg
UmVmPGNvbnN0IEJsb2I+IGJsb2IgPSBzdGQ6OmdldDxSZWZQdHI8QmxvYj4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IGJsb2ItPnR5cGUoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJsb2IpKTsKICAgICB9Ci0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFsdWUpKSB7Ci0gICAgICAg
IFJlZjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBXVEY6OmdldDxSZWZQdHI8RE9NRm9ybURh
dGE+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPERPTUZvcm1E
YXRhPiBkb21Gb3JtRGF0YSA9IHN0ZDo6Z2V0PFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKS5y
ZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBhdXRvIGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0
ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCksICZz
dGF0aWNfY2FzdDxEb2N1bWVudCY+KGNvbnRleHQpKTsKICAgICAgICAgY29udGVudFR5cGUgPSBt
YWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLCBmb3JtRGF0YS0+Ym91
bmRhcnkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoZm9ybURh
dGEpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IFdURjo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8VVJM
U2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJh
bXM+IHBhcmFtcyA9IHN0ZDo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgY29udGVudFR5cGUgPSBIVFRQSGVhZGVyVmFsdWVzOjpm
b3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKCk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RG
TW92ZShwYXJhbXMpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVm
ZmVyPiBidWZmZXIgPSBXVEY6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlC
dWZmZXI+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiBidWZmZXIg
PSBzdGQ6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsK
ICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KLSAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7Ci0gICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IFdURjo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUp
KSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1ZmZlciA9IHN0ZDo6Z2V0
PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsKKyAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CiAgICAgY29udGVudFR5cGUgPSBI
VFRQSGVhZGVyVmFsdWVzOjp0ZXh0UGxhaW5Db250ZW50VHlwZSgpOwotICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHZhbHVlKSkpOworICAgIHJldHVybiBGZXRj
aEJvZHkoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHZhbHVlKSkpOwogfQogCiBGZXRjaEJvZHkg
RmV0Y2hCb2R5OjpyZWFkYWJsZVN0cmVhbUJvZHkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9mZXRjaC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMs
MTUgQEAgcHVibGljOgogICAgIHZvaWQgY29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiwg
RmV0Y2hSZXNwb25zZVNvdXJjZSYpOwogI2VuZGlmCiAKLSAgICBib29sIGlzQmxvYigpIGNvbnN0
IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEp
OyB9Ci0gICAgYm9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxSZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlC
dWZmZXI+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+
KG1fZGF0YSk7IH0KLSAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRh
KTsgfQotICAgIGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJu
IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9CisgICAg
Ym9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+Piht
X2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSk7
IH0KKyAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQorICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KG1fZGF0YSk7IH0KICAgICBib29sIGlzUmVhZGFibGVTdHJlYW0oKSBjb25zdCB7IHJldHVy
biBtX2lzUmVhZGFibGVTdHJlYW07IH0KIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFJlZlB0
cjxCbG9iPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJl
ZlB0cjxET01Gb3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAg
IHVzaW5nIEluaXQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3PiwgUmVmUHRyPEFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgUmVmUHRy
PFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAgc3RhdGljIEZldGNoQm9keSBleHRyYWN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJbml0JiYsIFN0cmluZyYpOwogICAgIHN0YXRpYyBG
ZXRjaEJvZHkgbG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KICAgICBzdGF0aWMgRmV0Y2hC
b2R5IHJlYWRhYmxlU3RyZWFtQm9keSgpOwpAQCAtOTUsMTYgKzk1LDE2IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjb25zdW1lVGV4dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIGNvbnN1bWVCbG9iKEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7CiAKLSAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIEZvcm1EYXRhJiBm
b3JtRGF0YUJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdl
dCgpOyB9Ci0gICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJu
IFdURjo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJh
eUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNv
bnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIGNvbnN0IEFycmF5QnVmZmVy
VmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxj
b25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgU3RyaW5nJiB0ZXh0
Qm9keSgpIHsgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0
cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7
IH0KLSAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25z
dCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5n
ZXQoKTsgfQorICAgIGNvbnN0IEJsb2ImIGJsb2JCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpn
ZXQ8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpLmdldCgpOyB9CisgICAgRm9ybURhdGEmIGZvcm1E
YXRhQm9keSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7
IH0KKyAgICBjb25zdCBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgY29uc3QgeyByZXR1cm4gc3Rk
OjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVm
ZmVyJiBhcnJheUJ1ZmZlckJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3Qg
QXJyYXlCdWZmZXI+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3
JiBhcnJheUJ1ZmZlclZpZXdCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0
IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBTdHJpbmcmIHRleHRCb2R5
KCkgeyByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9CisgICAgY29uc3QgU3RyaW5n
JiB0ZXh0Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQor
ICAgIGNvbnN0IFVSTFNlYXJjaFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgpIGNvbnN0IHsg
cmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpLmdldCgp
OyB9CiAKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0
IEJsb2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3Qg
QXJyYXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47Cisg
ICAgdXNpbmcgRGF0YSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0IEJs
b2I+LCBSZWY8Rm9ybURhdGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3QgQXJy
YXlCdWZmZXJWaWV3PiwgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAg
RGF0YSBtX2RhdGEgeyBudWxscHRyIH07CiAKICAgICBGZXRjaEJvZHlDb25zdW1lciBtX2NvbnN1
bWVyIHsgRmV0Y2hCb2R5Q29uc3VtZXI6OlR5cGU6Ok5vbmUgfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsOCArNzcsOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gYXBwZW5k
VG9IZWFkZXJNCiAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFk
ZXJzLWZpbGwKIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEhUVFBIZWFk
ZXJNYXAmIGhlYWRlcnMsIGNvbnN0IEZldGNoSGVhZGVyczo6SW5pdCYgaGVhZGVyc0luaXQsIEZl
dGNoSGVhZGVyczo6R3VhcmQgZ3VhcmQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpKSB7Ci0gICAgICAgIGF1dG8m
IHNlcXVlbmNlID0gV1RGOjpnZXQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQp
OworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KSkgeworICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IHN0ZDo6Z2V0PFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFk
ZXIgOiBzZXF1ZW5jZSkgewogICAgICAgICAgICAgaWYgKGhlYWRlci5zaXplKCkgIT0gMikKICAg
ICAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiSGVhZGVyIHN1Yi1z
ZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMiIH07CkBAIC04Nyw3ICs4Nyw3
IEBAIHN0YXRpYyBFeGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEgKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGF1dG8mIHJlY29yZCA9IFdURjo6Z2V0PFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CisgICAgICAgIGF1dG8mIHJl
Y29yZCA9IHN0ZDo6Z2V0PFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
PihoZWFkZXJzSW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogcmVjb3JkKSB7CiAg
ICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGFwcGVuZFRvSGVhZGVyTWFwKGhlYWRlci5rZXksIGhl
YWRlci52YWx1ZSwgaGVhZGVycywgZ3VhcmQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhl
YWRlcnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEhlYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIFJlc3BvbnNlCiAgICAgfTsKIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+PjsKKyAgICB1c2luZyBJbml0ID0gc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3Ry
aW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PjsKICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPEZldGNoSGVhZGVycz4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFs
PEluaXQ+JiYpOwogCiAgICAgc3RhdGljIFJlZjxGZXRjaEhlYWRlcnM+IGNyZWF0ZShHdWFyZCBn
dWFyZCA9IEd1YXJkOjpOb25lLCBIVFRQSGVhZGVyTWFwJiYgaGVhZGVycyA9IHsgfSkgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBGZXRjaEhlYWRlcnMgeyBndWFyZCwgV1RGTW92ZShoZWFkZXJzKSB9
KTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0
LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBFeGNl
cHRpb25PcjxSZWY8RmV0Y2hSZXF1ZXN0Pj4gRmV0Y2hSZXF1CiB7CiAgICAgYXV0byByZXF1ZXN0
ID0gYWRvcHRSZWYoKm5ldyBGZXRjaFJlcXVlc3QoY29udGV4dCwgc3RkOjpudWxsb3B0LCBGZXRj
aEhlYWRlcnM6OmNyZWF0ZShGZXRjaEhlYWRlcnM6Okd1YXJkOjpSZXF1ZXN0KSwgeyB9KSk7CiAK
LSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgewotICAgICAg
ICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKFdURjo6Z2V0PFN0cmluZz4o
aW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGlucHV0KSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxp
emVXaXRoKHN0ZDo6Z2V0PFN0cmluZz4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gcmVx
dWVzdC0+aW5pdGlhbGl6ZVdpdGgoKldURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbnB1
dCksIFdURk1vdmUoaW5pdCkpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRp
YWxpemVXaXRoKCpzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZNb3Zl
KGluaXQpKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBVUkxTZWFyY2hQYXJhbXM7CiBjbGFzcyBGZXRj
aFJlcXVlc3QgZmluYWwgOiBwdWJsaWMgRmV0Y2hCb2R5T3duZXIgewogcHVibGljOgogICAgIHVz
aW5nIEluaXQgPSBGZXRjaFJlcXVlc3RJbml0OwotICAgIHVzaW5nIEluZm8gPSBWYXJpYW50PFJl
ZlB0cjxGZXRjaFJlcXVlc3Q+LCBTdHJpbmc+OworICAgIHVzaW5nIEluZm8gPSBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPEZldGNoUmVxdWVzdD4sIFN0cmluZz47CiAKICAgICB1c2luZyBDYWNoZSA9IEZl
dGNoT3B0aW9uczo6Q2FjaGU7CiAgICAgdXNpbmcgQ3JlZGVudGlhbHMgPSBGZXRjaE9wdGlvbnM6
OkNyZWRlbnRpYWxzOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSURCQ3Vyc29yOjpjb250aW51ZVByaQogICAgIGlmIChz
b3VyY2VzRGVsZXRlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRl
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtl
eScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3IncyBzb3VyY2Ugb3IgZWZmZWN0aXZlIG9iamVj
dCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpIH07CiAKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UpKQorICAgIGlmICghc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZSkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRv
IGV4ZWN1dGUgJ2NvbnRpbnVlUHJpbWFyeUtleScgb24gJ0lEQkN1cnNvcic6IFRoZSBjdXJzb3In
cyBzb3VyY2UgaXMgbm90IGFuIGluZGV4LiIpIH07CiAKICAgICBhdXRvIGRpcmVjdGlvbiA9IG1f
aW5mby5jdXJzb3JEaXJlY3Rpb24oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+SURCQ3Vyc29yKCk7CiAKLSAgICB1
c2luZyBTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4+OworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+PjsKIAogICAgIGNvbnN0IFNvdXJjZSYgc291cmNlKCkg
Y29uc3Q7CiAgICAgSURCQ3Vyc29yRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsNyArMTUxLDcgQEAgRXhjZXB0aW9u
T3I8UmVmPElEQk9iamVjdFN0b3JlPj4gSURCRGF0YQogICAgIGlmIChrZXlQYXRoICYmICFpc0lE
QktleVBhdGhWYWxpZChrZXlQYXRoLnZhbHVlKCkpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9i
amVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUga2V5UGF0aCBvcHRpb24gaXMgbm90IGEg
dmFsaWQga2V5IHBhdGguIikgfTsKIAotICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0
b0luY3JlbWVudCAmJiAoKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZh
bHVlKCkpICYmIFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkp
KQorICAgIGlmIChrZXlQYXRoICYmIHBhcmFtZXRlcnMuYXV0b0luY3JlbWVudCAmJiAoKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpICYmIHN0ZDo6Z2V0PFN0
cmluZz4oa2V5UGF0aC52YWx1ZSgpKS5pc0VtcHR5KCkpIHx8IHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgudmFsdWUoKSkpKQogICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVj
dXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGF1dG9JbmNyZW1l
bnQgb3B0aW9uIHdhcyBzZXQgYnV0IHRoZSBrZXlQYXRoIG9wdGlvbiB3YXMgZW1wdHkgb3IgYW4g
YXJyYXkuIikgfTsKIAogICAgIC8vIEluc3RhbGwgdGhlIG5ldyBPYmplY3RTdG9yZSBpbnRvIHRo
ZSBjb25uZWN0aW9uJ3MgbWV0YWRhdGEuCkBAIC0xNzEsMTAgKzE3MSwxMCBAQCBFeGNlcHRpb25P
cjxSZWY8SURCVHJhbnNhY3Rpb24+PiBJREJEYXRhCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAndHJh
bnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFzZSBjb25uZWN0aW9uIGlzIGNs
b3NpbmcuIikgfTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG9iamVjdFN0b3JlczsKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpCi0gICAg
ICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KHN0b3Jl
TmFtZXMpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4o
c3RvcmVOYW1lcykpCisgICAgICAgIG9iamVjdFN0b3JlcyA9IFdURk1vdmUoc3RkOjpnZXQ8VmVj
dG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKTsKICAgICBlbHNlCi0gICAgICAgIG9iamVjdFN0b3Jl
cy5hcHBlbmQoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMpKSk7CisgICAgICAg
IG9iamVjdFN0b3Jlcy5hcHBlbmQoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHN0b3JlTmFtZXMp
KSk7CiAKICAgICBpZiAob2JqZWN0U3RvcmVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhl
Y3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBzdG9yZU5hbWVzIHBhcmFt
ZXRlciB3YXMgZW1wdHkuIikgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NyArNjMsNyBAQCBwdWJsaWM6CiAKICAgICBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+
PiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIE9iamVjdFN0b3JlUGFyYW1l
dGVycyYmKTsKIAotICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZTdHJpbmdzID0gV1RGOjpWYXJp
YW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OworICAgIHVzaW5nIFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwogICAgIEV4Y2Vw
dGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IHRyYW5zYWN0aW9uKFN0cmluZ09yVmVjdG9yT2ZT
dHJpbmdzJiYgc3RvcmVOYW1lcywgSURCVHJhbnNhY3Rpb25Nb2RlKTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQg
Y2xvc2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFs
bFJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gdm9pZCBpc29sYXRlZENvcHlPZlZhcmlhbnQoY29uc3QgV1RGOjpWYXJpYW50PFZl
Y3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3Vy
Y2UsIFdURjo6VmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0
ZDo6bnVsbHB0cl90PiYgdGFyZ2V0KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBpc29sYXRl
ZENvcHlPZlZhcmlhbnQoY29uc3Qgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVj
dG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiBzb3VyY2UsIHN0ZDo6dmFyaWFudDxWZWN0
b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgdGFyZ2V0
KQogewogICAgIHRhcmdldCA9IFZlY3RvcjxUPigpOwotICAgIGF1dG8mIHNvdXJjZVZlY3RvciA9
IFdURjo6Z2V0PFZlY3RvcjxUPj4oc291cmNlKTsKLSAgICBhdXRvJiB0YXJnZXRWZWN0b3IgPSBX
VEY6OmdldDxWZWN0b3I8VD4+KHRhcmdldCk7CisgICAgYXV0byYgc291cmNlVmVjdG9yID0gc3Rk
OjpnZXQ8VmVjdG9yPFQ+Pihzb3VyY2UpOworICAgIGF1dG8mIHRhcmdldFZlY3RvciA9IHN0ZDo6
Z2V0PFZlY3RvcjxUPj4odGFyZ2V0KTsKICAgICB0YXJnZXRWZWN0b3IucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShzb3VyY2VWZWN0b3Iuc2l6ZSgpKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBz
b3VyY2VWZWN0b3IpCiAgICAgICAgIHRhcmdldFZlY3Rvci51bmNoZWNrZWRBcHBlbmQoZWxlbWVu
dC5pc29sYXRlZENvcHkoKSk7CkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0
Ojppc29sYXRlZENvcHkoY29uc3QKIHsKICAgICBkZXN0aW5hdGlvbi5tX3R5cGUgPSBzb3VyY2Uu
bV90eXBlOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+
KHNvdXJjZS5tX3Jlc3VsdHMpKQorICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6
bnVsbHB0cl90Pihzb3VyY2UubV9yZXN1bHRzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dp
dGNoIChzb3VyY2UubV90eXBlKSB7CkBAIC03MiwyOSArNzIsMjkgQEAgdm9pZCBJREJHZXRBbGxS
ZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZEtleShJ
REJLZXlEYXRhJiYga2V5KQogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRB
bGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRh
Pj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6
Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZShrZXkpKTsK
IH0KIAogdm9pZCBJREJHZXRBbGxSZXN1bHQ6OmFkZFZhbHVlKElEQlZhbHVlJiYgdmFsdWUpCiB7
CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7Ci0g
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1
bHRzKSk7Ci0gICAgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKS5hcHBlbmQo
V1RGTW92ZSh2YWx1ZSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3Rv
cjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOworICAgIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+
KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0KIAogY29uc3QgVmVjdG9yPElE
QktleURhdGE+JiBJREJHZXRBbGxSZXN1bHQ6OmtleXMoKSBjb25zdAogewogICAgIEFTU0VSVCht
X3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpLZXlzKTsKLSAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykpOwotICAgIHJl
dHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgQVNTRVJU
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsK
KyAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogfQog
CiBjb25zdCBWZWN0b3I8SURCVmFsdWU+JiBJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7
Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0
cyk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4o
bV9yZXN1bHRzKSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVz
dWx0cyk7CiB9CiAKIFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkZpbGVQ
YXRocygpIGNvbnN0CkBAIC0xMDIsNyArMTAyLDcgQEAgVmVjdG9yPFN0cmluZz4gSURCR2V0QWxs
UmVzdWx0OjphbGxCbG9iRgogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxU
eXBlOjpWYWx1ZXMpOwogCiAgICAgSGFzaFNldDxTdHJpbmc+IHBhdGhTZXQ7Ci0gICAgZm9yIChh
dXRvJiB2YWx1ZSA6IFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpIHsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRz
KSkgewogICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiB2YWx1ZS5ibG9iRmlsZVBhdGhzKCkpCiAg
ICAgICAgICAgICBwYXRoU2V0LmFkZChwYXRoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVz
dWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgdm9pZCBpc29sYXRlZENvcHkoY29uc3QgSURCR2V0QWxsUmVzdWx0JiBzb3VyY2UsIElEQkdl
dEFsbFJlc3VsdCYgZGVzdGluYXRpb24pOwogCiAgICAgSW5kZXhlZERCOjpHZXRBbGxUeXBlIG1f
dHlwZSB7IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyB9OwotICAgIFdURjo6VmFyaWFudDxW
ZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiBtX3Jl
c3VsdHMgeyBudWxscHRyIH07CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwg
VmVjdG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+IG1fcmVzdWx0cyB7IG51bGxwdHIgfTsK
IH07CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CkBAIC04NCwxMCArODQsMTAgQEAgdm9pZCBJ
REJHZXRBbGxSZXN1bHQ6OmVuY29kZShFbmNvZGVyJiBlbgogCiAgICAgc3dpdGNoIChtX3Jlc3Vs
dHMuaW5kZXgoKSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIDE6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+Piht
X3Jlc3VsdHMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGJyZWFrOwpA
QCAtMTA5LDEyICsxMDksMTIgQEAgYm9vbCBJREJHZXRBbGxSZXN1bHQ6OmRlY29kZShEZWNvZGVy
JiBkZQogICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICBjYXNlIDA6CiAgICAgICAgIHJlc3VsdC5t
X3Jlc3VsdHMgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJl
c3VsdC5tX3Jlc3VsdHMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSAxOgogICAgICAgICByZXN1bHQubV9yZXN1bHRzID0gVmVjdG9yPElEQlZh
bHVlPigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJW
YWx1ZT4+KHJlc3VsdC5tX3Jlc3VsdHMpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShz
dGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihyZXN1bHQubV9yZXN1bHRzKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBib29sIElEQktleTo6aXNWYWxpZCgpIGNvbnN0CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBXVEY6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFs
dWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8SURCS2V5VmVjdG9yPiht
X3ZhbHVlKSkgewogICAgICAgICAgICAgaWYgKCFrZXktPmlzVmFsaWQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwOSw4ICsxMDksOCBAQCBpbnQgSURC
S2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpCiAKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0g
V1RGOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJy
YXkgPSBzdGQ6OmdldDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBvdGhl
ckFycmF5ID0gc3RkOjpnZXQ8SURCS2V5VmVjdG9yPihvdGhlci5tX3ZhbHVlKTsKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXplKCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQgcmVzdWx0ID0gYXJyYXlbaV0tPmNvbXBh
cmUoKm90aGVyQXJyYXlbaV0pKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0x
MjIsMTMgKzEyMiwxMyBAQCBpbnQgSURCS2V5Ojpjb21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRh
QnVmZmVyPihtX3ZhbHVlKSwgV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1f
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKHN0ZDo6Z2V0PFRo
cmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZm
ZXI+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAg
cmV0dXJuIC1jb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSks
IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gLWNvZGVQb2ludENv
bXBhcmUoc3RkOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKSwgc3RkOjpnZXQ8U3RyaW5nPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVt
YmVyOiB7Ci0gICAgICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsK
LSAgICAgICAgYXV0byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1
ZSk7CisgICAgICAgIGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAg
ICAgICAgYXV0byBvdGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7
CiAgICAgICAgIHJldHVybiAobnVtYmVyIDwgb3RoZXJOdW1iZXIpID8gLTEgOiAoKG51bWJlciA+
IG90aGVyTnVtYmVyKSA/IDEgOiAwKTsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpJbnZhbGlk
OgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMzEgKzExMywzMSBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJREJLZXk+PiYgYXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxW
ZWN0b3I8UmVmUHRyPElEQktleT4+PihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0
PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFN0
cmluZyYgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGRvdWJsZSBkYXRlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6RGF0ZSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBk
b3VibGUgbnVtYmVyKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAg
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBjb25zdAogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwotICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3Rk
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGludCBj
b21wYXJlKGNvbnN0IElEQktleSYgb3RoZXIpIGNvbnN0OwpAQCAtMTcxLDcgKzE3MSw3IEBAIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgSURCS2V5KGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJik7
CiAKICAgICBjb25zdCBLZXlUeXBlIG1fdHlwZTsKLSAgICBWYXJpYW50PFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsK
KyAgICBzdGQ6OnZhcmlhbnQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+PiwgU3RyaW5nLCBkb3VibGUs
IFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwogCiAgICAgY29uc3Qgc2l6ZV90IG1fc2l6
ZUVzdGltYXRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXlEYXRhLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgSURCS2V5RGF0YTo6SURCS2V5RGF0YShjb25zdCBJREJLZXkqIGtleQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAgIG1fdmFsdWUgPSBWZWN0
b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGZvciAoYXV0byYga2V5MiA6IGtl
eS0+YXJyYXkoKSkKICAgICAgICAgICAgIGFycmF5LmFwcGVuZChJREJLZXlEYXRhKGtleTIuZ2V0
KCkpKTsKICAgICAgICAgYnJlYWs7CkBAIC04MSwyMCArODEsMjAgQEAgUmVmUHRyPElEQktleT4g
SURCS2V5RGF0YTo6bWF5YmVDcmVhdGVJRAogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJ
bnZhbGlkKCk7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBWZWN0b3I8UmVm
UHRyPElEQktleT4+IGFycmF5OwotICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBXVEY6Omdl
dDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKSB7CisgICAgICAgIGZvciAoYXV0byYga2V5
RGF0YSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpIHsKICAgICAgICAg
ICAgIGFycmF5LmFwcGVuZChrZXlEYXRhLm1heWJlQ3JlYXRlSURCS2V5KCkpOwogICAgICAgICAg
ICAgQVNTRVJUKGFycmF5Lmxhc3QoKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlQXJyYXkoYXJyYXkpOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToK
LSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQmluYXJ5KFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUJpbmFy
eShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5
VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoV1RGOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmlu
ZyhzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVl
KSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoc3RkOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcihXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAg
IGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEyNSwyMCArMTI1LDIwIEBAIHZvaWQgSURCS2V5RGF0YTo6
aXNvbGF0ZWRDb3B5KGNvbnN0IElEQksKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlw
ZTo6QXJyYXk6IHsKICAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlE
YXRhPigpOwotICAgICAgICBhdXRvJiBkZXN0aW5hdGlvbkFycmF5ID0gV1RGOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihkZXN0aW5hdGlvbi5tX3ZhbHVlKTsKLSAgICAgICAgZm9yIChhdXRvJiBr
ZXkgOiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHNvdXJjZS5tX3ZhbHVlKSkKKyAgICAg
ICAgYXV0byYgZGVzdGluYXRpb25BcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4o
ZGVzdGluYXRpb24ubV92YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYga2V5IDogc3RkOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+Pihzb3VyY2UubV92YWx1ZSkpCiAgICAgICAgICAgICBkZXN0aW5h
dGlvbkFycmF5LmFwcGVuZChrZXkuaXNvbGF0ZWRDb3B5KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KHNvdXJjZS5tX3ZhbHVlKTsKKyAg
ICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVy
Pihzb3VyY2UubV92YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdURjo6Z2V0PFN0cmluZz4oc291
cmNlLm1fdmFsdWUpLmlzb2xhdGVkQ29weSgpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVl
ID0gc3RkOjpnZXQ8U3RyaW5nPihzb3VyY2UubV92YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpO
dW1iZXI6Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxkb3VibGU+KHNv
dXJjZS5tX3ZhbHVlKTsKKyAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PGRv
dWJsZT4oc291cmNlLm1fdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBl
OjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBAIC0xNjAsMjUgKzE2MCwyNSBAQCB2b2lk
IElEQktleURhdGE6OmVuY29kZShLZXllZEVuY29kZXImIGVuCiAgICAgY2FzZSBLZXlUeXBlOjpJ
bnZhbGlkOgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAg
ICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7
CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Zh
bHVlKTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVPYmplY3RzKCJhcnJheSIsIGFycmF5LmJlZ2lu
KCksIGFycmF5LmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElEQktleURh
dGEmIGtleSkgewogICAgICAgICAgICAga2V5LmVuY29kZShlbmNvZGVyKTsKICAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAg
ICAgICAgYXV0byogZGF0YSA9IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVl
KS5kYXRhKCk7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICBlbmNvZGVyLmVuY29kZUJvb2woImhhc0Jp
bmFyeSIsICEhZGF0YSk7CiAgICAgICAgIGlmIChkYXRhKQogICAgICAgICAgICAgZW5jb2Rlci5l
bmNvZGVCeXRlcygiYmluYXJ5IiwgZGF0YS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBlbmNv
ZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7Cisg
ICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+KG1f
dmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBj
YXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm51bWJl
ciIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAgICBlbmNvZGVyLmVuY29kZURv
dWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTIy
MCwxMiArMjIwLDEyIEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2RlKEtleWVkRGVjb2RlciYgZGUK
IAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5cGU6OlN0cmluZykgewogICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IFN0cmluZygpOwotICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVT
dHJpbmcoInN0cmluZyIsIFdURjo6Z2V0PFN0cmluZz4ocmVzdWx0Lm1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCBzdGQ6OmdldDxTdHJpbmc+
KHJlc3VsdC5tX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC5tX3R5cGUgPT0gS2V5
VHlwZTo6TnVtYmVyIHx8IHJlc3VsdC5tX3R5cGUgPT0gS2V5VHlwZTo6RGF0ZSkgewogICAgICAg
ICByZXN1bHQubV92YWx1ZSA9IDAuMDsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRG91
YmxlKCJudW1iZXIiLCBXVEY6OmdldDxkb3VibGU+KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJsZSgibnVtYmVyIiwgc3RkOjpnZXQ8ZG91YmxlPihy
ZXN1bHQubV92YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5
cGU6OkJpbmFyeSkgewpAQCAtMjUzLDcgKzI1Myw3IEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2Rl
KEtleWVkRGVjb2RlciYgZGUKICAgICB9OwogICAgIAogICAgIHJlc3VsdC5tX3ZhbHVlID0gVmVj
dG9yPElEQktleURhdGE+KCk7Ci0gICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJy
YXkiLCBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlG
dW5jdGlvbik7CisgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlT2JqZWN0cygiYXJyYXkiLCBzdGQ6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHJlc3VsdC5tX3ZhbHVlKSwgYXJyYXlGdW5jdGlvbik7
CiB9CiAKIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEmIG90aGVyKSBj
b25zdApAQCAtMjc3LDggKzI3Nyw4IEBAIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElE
QktleURhdGEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwotICAgICAgICBhdXRvJiBvdGhlckFy
cmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKKyAgICAg
ICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwor
ICAgICAgICBhdXRvJiBvdGhlckFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihv
dGhlci5tX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS5zaXpl
KCkgJiYgaSA8IG90aGVyQXJyYXkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChpbnQg
cmVzdWx0ID0gYXJyYXlbaV0uY29tcGFyZShvdGhlckFycmF5W2ldKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtMjkwLDEzICsyOTAsMTMgQEAgaW50IElEQktleURhdGE6OmNv
bXBhcmUoY29uc3QgSURCS2V5RGF0YQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgY2Fz
ZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShX
VEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIFdURjo6Z2V0PFRocmVhZFNh
ZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBjb21wYXJlQmlu
YXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0ZDo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlU
eXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKFdURjo6Z2V0PFN0
cmluZz4obV92YWx1ZSksIFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSkpOworICAgICAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpLCBzdGQ6
OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAg
ICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgYXV0byBudW1iZXIgPSBXVEY6Omdl
dDxkb3VibGU+KG1fdmFsdWUpOwotICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gV1RGOjpnZXQ8
ZG91YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byBudW1iZXIgPSBzdGQ6OmdldDxk
b3VibGU+KG1fdmFsdWUpOworICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gc3RkOjpnZXQ8ZG91
YmxlPihvdGhlci5tX3ZhbHVlKTsKIAogICAgICAgICBpZiAobnVtYmVyID09IG90aGVyTnVtYmVy
KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMjUsNyArMzI1LDcgQEAgU3RyaW5nIElEQktl
eURhdGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsK
ICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIjxhcnJheT4gLSB7ICIpOwotICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXJyYXlbaV0ubG9nZ2luZ1N0cmluZygpKTsKICAgICAgICAgICAgIGlmIChpIDwgYXJyYXkuc2l6
ZSgpIC0gMSkKQEAgLTMzOSw3ICszMzksNyBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0
cmluZygpIGNvbnN0CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVp
bGRlci5hcHBlbmQoIjxiaW5hcnk+IC0gIik7CiAKLSAgICAgICAgYXV0byogZGF0YSA9IFdURjo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgIGF1dG8q
IGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwog
ICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIobnVsbCki
KTsKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKQEAgLTM1NywxMiAr
MzU3LDEyIEBAIFN0cmluZyBJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXN1
bHQgPSAiPHN0cmluZz4gLSAiICsgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAg
cmVzdWx0ID0gIjxzdHJpbmc+IC0gIiArIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiPG51bWJlcj4gLSAlZiIsIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxudW1iZXI+IC0gJWYiLCBzdGQ6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICAgICAgcmV0
dXJuICI8bWF4aW11bT4iOwogICAgIGNhc2UgS2V5VHlwZTo6TWluOgpAQCAtNDQyLDEzICs0NDIs
MTMgQEAgYm9vbCBJREJLZXlEYXRhOjpvcGVyYXRvcj09KGNvbnN0IElEQktleQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKICAgICBjYXNlIEtleVR5cGU6
OkRhdGU6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpID09IFdURjo6
Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3Vi
bGU+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CiAgICAgY2Fz
ZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fdmFs
dWUpID09IFdURjo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBz
dGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1
ZSk7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihv
dGhlci5tX3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBXVEY6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG90aGVyLm1fdmFsdWUpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURh
dGEuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTMgKzEzMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAg
ICAgICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQo
U3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6
Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+KCZzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAg
ICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2g6Omhhc2goV1RGOjpnZXQ8U3RyaW5n
PihtX3ZhbHVlKSkpOworICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpo
YXNoKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeTogewotICAgICAgICAgICAgYXV0byogZGF0YSA9IFdU
Rjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CisgICAgICAgICAg
ICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRh
dGEoKTsKICAgICAgICAgICAgIGlmICghZGF0YSkKICAgICAgICAgICAgICAgICBoYXNoQ29kZXMu
YXBwZW5kKDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6QXJy
YXk6Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4obV92YWx1ZSkpCisgICAgICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpCiAgICAgICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZChrZXkuaGFzaCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTks
MzggKzE1OSwzOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHN0cmluZygpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3Ry
aW5nPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgZGF0ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkRhdGUpOwotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIG51bWJlcigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6Ok51bWJlcik7Ci0gICAgICAgIHJldHVy
biBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYg
YmluYXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6
QmluYXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIGFycmF5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAg
fQogCiBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlE
YXRhJiBzb3VyY2UsIElEQktleURhdGEmIGRlc3RpbmF0aW9uKTsKIAogICAgIEtleVR5cGUgbV90
eXBlOwotICAgIFZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhy
ZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxJREJL
ZXlEYXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOwog
CiAgICAgYm9vbCBtX2lzTnVsbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGVsZXRlZFZhbHVl
IHsgZmFsc2UgfTsKQEAgLTI0MiwxNyArMjQyLDE3IEBAIHZvaWQgSURCS2V5RGF0YTo6ZW5jb2Rl
KEVuY29kZXImIGVuY29kZXIKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
S2V5VHlwZTo6QmluYXJ5OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxUaHJlYWRT
YWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlw
ZTo6U3RyaW5nOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7
CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVy
OgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAg
IGVuY29kZXIgPDwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogfQpAQCAtMjc2LDIzICsyNzYsMjMgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUoRGVj
b2RlciYgZGVjb2RlcgogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5Ogog
ICAgICAgICBrZXlEYXRhLm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGtleURhdGEu
bV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgogICAgICAgICBrZXlE
YXRhLm1fdmFsdWUgPSBUaHJlYWRTYWZlRGF0YUJ1ZmZlcigpOwotICAgICAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihrZXlEYXRhLm1fdmFsdWUp
KSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgogICAgICAgICBrZXlEYXRhLm1f
dmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxT
dHJpbmc+KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0
ZDo6Z2V0PFN0cmluZz4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtl
eVR5cGU6Ok51bWJlcjoKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gMC4wOwotICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVlKSkpCisg
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8ZG91YmxlPihrZXlEYXRhLm1fdmFs
dWUpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNyArMjA1LDcgQEAgYm9vbCBp
c0lEQktleVBhdGhWYWxpZChjb25zdCBJREJLZXlQYXRoJgogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBh
dGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiBJREJL
ZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQpAQCAtMjIwLDcg
KzIyMCw3IEBAIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgKICAgICAg
ICAgcmV0dXJuIHZlY3RvckNvcHk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2
aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRo
KTsKIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTI0NCw3ICsyNDQsNyBAQCBTdHJpbmcgbG9nZ2lu
Z1N0cmluZyhjb25zdCBJREJLZXlQYXRoJiBwCiAgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7CiAgICAgfSk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsK
KyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBwYXRoKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCShyZXZp
c2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBJREJLZXlQYXRoID0gV1RGOjpWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0
cmluZz4+OwordXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxT
dHJpbmc+PjsKIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYpOwogCiBl
bnVtIGNsYXNzIElEQktleVBhdGhQYXJzZUVycm9yIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHJldmlzaW9uIDIy
MDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDcgKzQ0NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJ
REJJbmRleD4+IElEQk9iamVjdFN0b3IKICAgICBpZiAobmFtZS5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCi0gICAgaWYgKHBhcmFtZXRlcnMubXVs
dGlFbnRyeSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRo
KSkKKyAgICBpZiAocGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVh
dGVJbmRleCcgb24gJ0lEQk9iamVjdFN0b3JlJzogVGhlIGtleVBhdGggYXJndW1lbnQgd2FzIGFu
IGFycmF5IGFuZCB0aGUgbXVsdGlFbnRyeSBvcHRpb24gaXMgdHJ1ZS4iKSB9OwogCiAgICAgLy8g
SW5zdGFsbCB0aGUgbmV3IEluZGV4IGludG8gdGhlIE9iamVjdFN0b3JlJ3MgaW5mby4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgSURCUmVx
dWVzdDo6c2V0U291cmNlKElEQkN1cnNvciYgY3UKIAogICAgIG1fc291cmNlID0gU291cmNlIHsg
JmN1cnNvciB9OwogICAgIG1fY3Vyc29yUmVxdWVzdE5vdGlmaWVyID0gc3RkOjptYWtlX3VuaXF1
ZTxTY29wZUd1YXJkPihbdGhpc10oKSB7Ci0gICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKSk7Ci0gICAgICAgIFdU
Rjo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0
c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKKyAgICAgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICAgICAgc3Rk
OjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVlKCkpLT5kZWNyZW1lbnRPdXRz
dGFuZGluZ1JlcXVlc3RDb3VudCgpOwogICAgIH0pOwogfQogCkBAIC0yMDcsOSArMjA3LDkgQEAg
dWludDY0X3QgSURCUmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZAogICAgICAgICByZXR1cm4g
MDsKIAogICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLnZhbHVlKCksCi0gICAgICAg
IFtdIChjb25zdCBSZWZQdHI8SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgeyByZXR1cm4g
b2JqZWN0U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBS
ZWZQdHI8SURCSW5kZXg+JiBpbmRleCkgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmplY3RTdG9y
ZUlkZW50aWZpZXIoKTsgfSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJzb3I+Jikg
eyByZXR1cm4gMDsgfQorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYg
b2JqZWN0U3RvcmUpIC0+IHVpbnQ2NF90IHsgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRl
bnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgp
IC0+IHVpbnQ2NF90IHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVy
KCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIC0+IHVpbnQ2NF90
IHsgcmV0dXJuIDA7IH0KICAgICApOwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSW5kZXhlZERC
OjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cgogewogICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZS52
YWx1ZSgpKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQklu
ZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOwogCiAgICAgcmV0dXJuIG1fcmVxdWVzdGVkSW5kZXhS
ZWNvcmRUeXBlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NywxMCArNjcsMTAg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCUmVxdWVzdCgpOwogCi0gICAgdXNpbmcgUmVz
dWx0ID0gVmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSlND
OjpTdHJvbmc8SlNDOjpVbmtub3duPj47CisgICAgdXNpbmcgUmVzdWx0ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8SURCRGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6
OlVua25vd24+PjsKICAgICBFeGNlcHRpb25PcjxzdGQ6Om9wdGlvbmFsPFJlc3VsdD4+IHJlc3Vs
dCgpIGNvbnN0OwogCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0
U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CisgICAgdXNpbmcg
U291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJ
bmRleD4sIFJlZlB0cjxJREJDdXJzb3I+PjsKICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPFNvdXJj
ZT4mIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CiAKICAgICBFeGNlcHRpb25P
cjxET01FcnJvcio+IGVycm9yKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcg
QEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURCS2V5UGF0aAogICAgICAgICAgICAg
ICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0pOwotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFs
dWUoKSk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aC52YWx1ZSgpKTsKICAg
ICB9IGVsc2UKICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bSgidHlwZSIsIEtleVBhdGhUeXBl
OjpOdWxsKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01l
ZGlhQ29udHJvbHNIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsNyArMTExLDcgQEAgU3RyaW5nIE1lZGlhQ29udHJv
bHNIb3N0OjpkaXNwbGF5TmFtZUZvcgogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKLSAgICByZXR1cm4gV1RGOjp2aXNpdChbJnBhZ2VdKGF1dG8mIHRyYWNr
KSB7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykgewogICAgICAg
ICByZXR1cm4gcGFnZS0+Z3JvdXAoKS5jYXB0aW9uUHJlZmVyZW5jZXMoKS5kaXNwbGF5TmFtZUZv
clRyYWNrKHRyYWNrLmdldCgpKTsKICAgICB9LCB0cmFjay52YWx1ZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNv
bnRyb2xzSG9zdC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+PiBzb3J0ZWRU
cmFja0xpc3RGb3JNZW51KFRleHRUcmFja0xpc3QmKTsKICAgICBWZWN0b3I8UmVmUHRyPEF1ZGlv
VHJhY2s+PiBzb3J0ZWRUcmFja0xpc3RGb3JNZW51KEF1ZGlvVHJhY2tMaXN0Jik7CiAKLSAgICB1
c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gV1RGOjpWYXJpYW50PFJlZlB0cjxUZXh0VHJhY2s+LCBS
ZWZQdHI8QXVkaW9UcmFjaz4+OworICAgIHVzaW5nIFRleHRPckF1ZGlvVHJhY2sgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPFRleHRUcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPj47CiAgICAgU3RyaW5n
IGRpc3BsYXlOYW1lRm9yVHJhY2soY29uc3Qgc3RkOjpvcHRpb25hbDxUZXh0T3JBdWRpb1RyYWNr
PiYpOwogCiAgICAgVGV4dFRyYWNrKiBjYXB0aW9uTWVudU9mZkl0ZW0oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBEb2N1bWVu
dCogTWVkaWFEZXZpY2VzOjpkb2N1bWVudCgpIGNvbnN0CiAgICAgcmV0dXJuIGRvd25jYXN0PERv
Y3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogfQogCi1zdGF0aWMgTWVkaWFDb25z
dHJhaW50cyBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IFZhcmlhbnQ8Ym9vbCwgTWVkaWFU
cmFja0NvbnN0cmFpbnRzPiYgY29uc3RyYWludHMpCitzdGF0aWMgTWVkaWFDb25zdHJhaW50cyBj
cmVhdGVNZWRpYUNvbnN0cmFpbnRzKGNvbnN0IHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNr
Q29uc3RyYWludHM+JiBjb25zdHJhaW50cykKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihj
b25zdHJhaW50cywKICAgICAgICAgWyZdIChib29sIGlzVmFsaWQpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURl
dmljZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsOCArNjEsOCBAQCBwdWJsaWM6CiAgICAgdXNp
bmcgRW51bWVyYXRlRGV2aWNlc1Byb21pc2UgPSBET01Qcm9taXNlRGVmZXJyZWQ8SURMU2VxdWVu
Y2U8SURMSW50ZXJmYWNlPE1lZGlhRGV2aWNlSW5mbz4+PjsKIAogICAgIHN0cnVjdCBTdHJlYW1D
b25zdHJhaW50cyB7Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRz
PiB2aWRlbzsKLSAgICAgICAgVmFyaWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1
ZGlvOworICAgICAgICBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiB2
aWRlbzsKKyAgICAgICAgc3RkOjp2YXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4g
YXVkaW87CiAgICAgfTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBnZXRVc2VyTWVkaWEoY29uc3Qg
U3RyZWFtQ29uc3RyYWludHMmLCBQcm9taXNlJiYpIGNvbnN0OwogICAgIHZvaWQgZW51bWVyYXRl
RGV2aWNlcyhFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29u
c3RyYWludHMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OCArNDIsOCBAQCBzdHJ1Y3QgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnMgewogfTsKIAogc3Ry
dWN0IENvbnN0cmFpbkRPTVN0cmluZ1BhcmFtZXRlcnMgewotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7Ci0gICAgc3RkOjpvcHRpb25hbDxW
YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBpZGVhbDsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gZXhhY3Q7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGlkZWFsOwogfTsK
IAogc3RydWN0IENvbnN0cmFpbkRvdWJsZVJhbmdlIDogRG91YmxlUmFuZ2UgewpAQCAtNTYsMTAg
KzU2LDEwIEBAIHN0cnVjdCBDb25zdHJhaW5Mb25nUmFuZ2UgOiBMb25nUmFuZ2UgewogICAgIHN0
ZDo6b3B0aW9uYWw8aW50PiBpZGVhbDsKIH07CiAKLXVzaW5nIENvbnN0cmFpbkJvb2xlYW4gPSBW
YXJpYW50PGJvb2wsIENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzPjsKLXVzaW5nIENvbnN0cmFp
bkRPTVN0cmluZyA9IFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3RyYWluRE9N
U3RyaW5nUGFyYW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5Eb3VibGUgPSBWYXJpYW50PGRvdWJs
ZSwgQ29uc3RyYWluRG91YmxlUmFuZ2U+OwotdXNpbmcgQ29uc3RyYWluTG9uZyA9IFZhcmlhbnQ8
aW50LCBDb25zdHJhaW5Mb25nUmFuZ2U+OwordXNpbmcgQ29uc3RyYWluQm9vbGVhbiA9IHN0ZDo6
dmFyaWFudDxib29sLCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJh
aW5ET01TdHJpbmcgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiwgQ29uc3Ry
YWluRE9NU3RyaW5nUGFyYW1ldGVycz47Cit1c2luZyBDb25zdHJhaW5Eb3VibGUgPSBzdGQ6OnZh
cmlhbnQ8ZG91YmxlLCBDb25zdHJhaW5Eb3VibGVSYW5nZT47Cit1c2luZyBDb25zdHJhaW5Mb25n
ID0gc3RkOjp2YXJpYW50PGludCwgQ29uc3RyYWluTG9uZ1JhbmdlPjsKIAogc3RydWN0IE1lZGlh
VHJhY2tDb25zdHJhaW50U2V0IHsKICAgICBzdGQ6Om9wdGlvbmFsPENvbnN0cmFpbkxvbmc+IHdp
ZHRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q0ljZVNlcnZlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ0ljZVNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBSVENJY2VTZXJ2ZXIgewotICAgIFZh
cmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKKyAgICBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBWZWN0b3I8U3RyaW5nPj4gdXJsczsKICAgICBTdHJpbmcgY3JlZGVudGlhbDsKICAgICBT
dHJpbmcgdXNlcm5hbWU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsOCArMTg0LDggQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gUlRDUGVlckNvbm5lY3Rpb246OnJlbQogCiBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNj
ZWl2ZXI+PiBSVENQZWVyQ29ubmVjdGlvbjo6YWRkVHJhbnNjZWl2ZXIoQWRkVHJhbnNjZWl2ZXJU
cmFja09yS2luZCYmIHdpdGhUcmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0
KQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkg
ewotICAgICAgICBjb25zdCBTdHJpbmcmIGtpbmQgPSBXVEY6OmdldDxTdHJpbmc+KHdpdGhUcmFj
ayk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih3aXRoVHJhY2spKSB7
CisgICAgICAgIGNvbnN0IFN0cmluZyYga2luZCA9IHN0ZDo6Z2V0PFN0cmluZz4od2l0aFRyYWNr
KTsKICAgICAgICAgaWYgKGtpbmQgIT0gImF1ZGlvIiAmJiBraW5kICE9ICJ2aWRlbyIpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBSVENQCiAgICAgICAgIHJl
dHVybiBjb21wbGV0ZUFkZFRyYW5zY2VpdmVyKFdURk1vdmUoc2VuZGVyKSwgaW5pdCwgY3JlYXRl
Q2Fub25pY2FsVVVJRFN0cmluZygpLCBraW5kKTsKICAgICB9CiAKLSAgICBSZWY8TWVkaWFTdHJl
YW1UcmFjaz4gdHJhY2sgPSBXVEY6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhU
cmFjaykucmVsZWFzZU5vbk51bGwoKTsKKyAgICBSZWY8TWVkaWFTdHJlYW1UcmFjaz4gdHJhY2sg
PSBzdGQ6OmdldDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+KHdpdGhUcmFjaykucmVsZWFzZU5v
bk51bGwoKTsKICAgICBjb25zdCBTdHJpbmcmIHRyYWNrSWQgPSB0cmFjay0+aWQoKTsKICAgICBj
b25zdCBTdHJpbmcmIHRyYWNrS2luZCA9IHRyYWNrLT5raW5kKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBA
IHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gYWRkVHJhY2soUmVm
PE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PE1lZGlhU3RyZWFtPj4mKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZW1vdmVUcmFjayhSVENS
dHBTZW5kZXImKTsKIAotICAgIHVzaW5nIEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQgPSBWYXJp
YW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPiwgU3RyaW5nPjsKKyAgICB1c2luZyBBZGRUcmFu
c2NlaXZlclRyYWNrT3JLaW5kID0gc3RkOjp2YXJpYW50PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
PiwgU3RyaW5nPjsKICAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRU
cmFuc2NlaXZlcihBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kJiYsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYpOwogCiAgICAgLy8gNi4xIFBlZXItdG8tcGVlciBkYXRhIEFQSQpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFByb2Nlc3Nvci5o
CShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1NEUFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTAgQEAgcHVibGlj
OgogICAgIFJlc3VsdCBnZW5lcmF0ZUNhbmRpZGF0ZUxpbmUoY29uc3QgSWNlQ2FuZGlkYXRlJiwg
U3RyaW5nJiBvdXRDYW5kaWRhdGVMaW5lKSBjb25zdDsKIAogICAgIHN0cnVjdCBQYXJzaW5nUmVz
dWx0IHsKLSAgICAgICAgVmFyaWFudDxJY2VDYW5kaWRhdGUsIFJlc3VsdD4gcmVzdWx0OworICAg
ICAgICBzdGQ6OnZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKIAotICAgICAg
ICBSZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0OjpTdWNjZXNzIDogV1RGOjpnZXQ8
U0RQUHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KLSAgICAgICAgSWNlQ2FuZGlkYXRlJiBj
YW5kaWRhdGUoKSB7IHJldHVybiBXVEY6OmdldDxJY2VDYW5kaWRhdGU+KHJlc3VsdCk7IH0KKyAg
ICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6IHN0ZDo6
Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9CisgICAgICAgIEljZUNhbmRpZGF0
ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gc3RkOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9
CiAgICAgfTsKICAgICBQYXJzaW5nUmVzdWx0IHBhcnNlQ2FuZGlkYXRlTGluZShjb25zdCBTdHJp
bmcmIGNhbmRpZGF0ZUxpbmUpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9JRExUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5
cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCwxMSArMjI4LDExIEBAIHN0cnVjdCBJRExFcnJv
ciA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH0KIHN0cnVjdCBJRExET01FeGNlcHRpb24gOiBJRExV
bnN1cHBvcnRlZFR5cGUgeyB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUcz4KLXN0cnVjdCBJ
RExVbmlvbiA6IElETFR5cGU8VmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBl
Li4uPj4geworc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUg
VHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+IHsKICAgICB1c2luZyBUeXBlTGlzdCA9IGJyaWdh
bmQ6Omxpc3Q8VHMuLi4+OwogCi0gICAgdXNpbmcgUGFyYW1ldGVyVHlwZSA9IGNvbnN0IFZhcmlh
bnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwotICAgIHVzaW5nIE51bGxh
YmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDx0eXBlbmFtZSBU
czo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4mOworICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBj
b25zdCBzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4mOwor
ICAgIHVzaW5nIE51bGxhYmxlUGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6b3B0aW9uYWw8c3Rk
Ojp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiY7CiB9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSURMQnVmZmVyU291cmNlIDogSURMV3JhcHBlcjxU
PiB7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291
cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBCdWZmZXJTb3VyY2UgewogcHVibGljOgotICAgIHVzaW5nIFZhcmlhbnRUeXBl
ID0gV1RGOjpWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyPj47CisgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBzdGQ6OnZhcmlhbnQ8UmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PjsKIAog
ICAgIEJ1ZmZlclNvdXJjZSgpIHsgfQogICAgIEJ1ZmZlclNvdXJjZShWYXJpYW50VHlwZSYmIHZh
cmlhbnQpCkBAIC00NSwxNCArNDUsMTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgdWludDhfdCog
ZGF0YSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBi
dWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10o
YXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKTsKICAgICAgICAgfSwgbV92
YXJpYW50KTsKICAgICB9CiAKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBXVEY6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBzaXplX3QgewogICAgICAg
ICAgICAgcmV0dXJuIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICB9LCBtX3ZhcmlhbnQp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJU
eXBlcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9D
YWxsVHJhY2VyVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmFyaWFudDwKK3R5cGVkZWYgc3RkOjp2YXJpYW50
PAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6SW1hZ2VTbW9vdGhpbmdRdWFsaXR5LAog
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6V2luZGluZ1J1bGUsCiAgICAgRE9NTWF0cml4
SW5pdCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDEx
ICsyNzAsMTEgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YQogewog
ICAgIExPRyhJbmRleGVkREIsICJpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOworICAgIEFT
U0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVy
cm9yOwotICAgIElEQlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQ
YXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5n
PihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09
IElEQktleVBhdGhQYXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmIChrZXlQYXRoRWxlbWVudHMu
aXNFbXB0eSgpKQpAQCAtMjk3LDggKzI5Nyw4IEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKEV4ZWNTdGEKIAogUmVmUHRyPElEQktleT4gbWF5YmVDcmVhdGVJREJLZXlGcm9tU2Ny
aXB0VmFsdWVBbmRLZXlQYXRoKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgdmFsdWUs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKSB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0g
V1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOworICAgIGlmIChzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkgeworICAgICAgICBhdXRvJiBhcnJh
eSA9IHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKICAgICAgICAgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+PiByZXN1bHQ7CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGFycmF5LnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYgc3RyaW5nIDogYXJyYXkpIHsK
QEAgLTMxMCwxNyArMzEwLDE3IEBAIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJv
bVNjcmkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoV1RGTW92ZShyZXN1bHQp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKKyAg
ICByZXR1cm4gaW50ZXJuYWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4
ZWMsIHZhbHVlLCBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpKTsKIH0KIAogYm9vbCBjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YXRlJiBleGVjLCBjb25zdCBKU1ZhbHVlJiBz
Y3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBMT0coU3RvcmFn
ZUFQSSwgImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCi0gICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CisgICAgQVNTRVJUKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKSk7CiAgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEVsZW1lbnRzOwogICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwotICAgIElE
QlBhcnNlS2V5UGF0aChXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMs
IGVycm9yKTsKKyAgICBJREJQYXJzZUtleVBhdGgoc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwg
a2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CiAgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQ
YXJzZUVycm9yOjpOb25lKTsKIAogICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKQEAg
LTQwMCw3ICs0MDAsNyBAQCBzdGF0aWMgVmVjdG9yPElEQktleURhdGE+IGNyZWF0ZUtleVBhdGhB
CiAgICAgICAgIHJldHVybiBrZXlzOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQo
dmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3Is
IGluZm8ua2V5UGF0aCgpKTsKIH0KIAogdm9pZCBnZW5lcmF0ZUluZGV4S2V5Rm9yVmFsdWUoRXhl
Y1N0YXRlJiBleGVjLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8sIEpTVmFsdWUgdmFsdWUsIElu
ZGV4S2V5JiBvdXRLZXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NSw3ICsz
ODUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252ZXJ0CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIG5lZWRzU3RhdGUgPSB0cnVlOwogICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBuZWVkc0dsb2JhbE9iamVjdCA9IHRydWU7CiAKLSAgICB1c2luZyBTZXF1ZW5jZSA9
IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlmZl90PDA+LCBXVEY6OnZhcmlh
bnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CisgICAgdXNpbmcgU2VxdWVuY2Ug
PSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgc3RkOjp2YXJp
YW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OwogCiAgICAgc3RhdGljIEpTQzo6
SlNWYWx1ZSBjb252ZXJ0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgSW1wbGVtZW50YXRpb25UeXBlJiB2YXJpYW50KQogICAgIHsK
QEAgLTM5Niw3ICszOTYsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPiBzdHJ1Y3QgSlNDb252
ZXJ0CiAgICAgICAgICAgICB1c2luZyBJID0gdHlwZW5hbWUgV1RGOjpSZW1vdmVDVkFuZFJlZmVy
ZW5jZTxkZWNsdHlwZSh0eXBlKT46OnR5cGU6OnR5cGU7CiAgICAgICAgICAgICBpZiAoSTo6dmFs
dWUgPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXJldHVyblZhbHVlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+
PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBXVEY6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOworICAg
ICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5kOjphdDxUeXBlTGlzdCwgST4+
KHN0YXRlLCBnbG9iYWxPYmplY3QsIHN0ZDo6Z2V0PEk6OnZhbHVlPih2YXJpYW50KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY2LDY2ICs2Niw2NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBKU1ZhbHVlIGNvbnZl
cnRUb0pTVmFsdWUoRXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgY29uc3QgV2ViR0xBbnkmIGFueSkKIHsKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihh
bnksCi0gICAgICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgeworICAgICAgICBbXSAoc3RkOjpudWxs
cHRyX3QpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogICAgICAg
ICB9LAotICAgICAgICBbXSAoYm9vbCB2YWx1ZSkgeworICAgICAgICBbXSAoYm9vbCB2YWx1ZSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhbHVlKTsKICAgICAg
ICAgfSwKLSAgICAgICAgW10gKGludCB2YWx1ZSkgeworICAgICAgICBbXSAoaW50IHZhbHVlKSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFtdICh1bnNpZ25lZCB2YWx1ZSkgeworICAgICAgICBbXSAodW5zaWduZWQg
dmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsK
ICAgICAgICAgfSwKLSAgICAgICAgW10gKGxvbmcgbG9uZyB2YWx1ZSkgeworICAgICAgICBbXSAo
bG9uZyBsb25nIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChmbG9hdCB2YWx1ZSkgeworICAgICAg
ICBbXSAoZmxvYXQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVl
KSB7CisgICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAg
ICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoJnN0YXRlLCB2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIHsKKyAgICAgICAg
WyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlcykgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwogICAgICAgICAgICAgZm9yIChhdXRvJiB2YWx1
ZSA6IHZhbHVlcykKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheSgmc3RhdGUsIDAsICZnbG9iYWxP
YmplY3QsIGxpc3QpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9h
dDMyQXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxGbG9hdDMyQXJy
YXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUs
ICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChj
b25zdCBSZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPEludDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
dG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAg
ICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDhBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsm
XSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAg
ICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDMyQXJyYXk+JiBhcnJheSkg
eworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50MzJBcnJheT4mIGFycmF5KSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJy
YXkuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1
ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEJ1ZmZlcj4m
IGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25z
dCBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4mIHByb2dy
YW0pIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xQcm9ncmFtPiYgcHJvZ3JhbSkg
LT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHByb2dyYW0uZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4mIGJ1ZmZlcikgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVGV4dHVyZT4mIHRleHR1cmUpIHsK
KyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xUZXh0dXJlPiYgdGV4dHVyZSkgLT4gSlNW
YWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHRl
eHR1cmUuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJH
TFZlcnRleEFycmF5T2JqZWN0T0VTPiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAg
ICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwog
ICAgICAgICB9CiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgLAotICAgICAgICBbJl0gKGNv
bnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0PiYgYXJyYXkpIHsKKyAgICAgICAgWyZd
IChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdD4mIGFycmF5KSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXku
Z2V0KCkpOwogICAgICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMjA5MTUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29y
a2luZyBjb3B5KQpAQCAtNzI1MSw3ICs3MjUxLDcgQEAgc3ViIEdlbmVyYXRlQ2FsbFRyYWNlclBh
cmFtZXRlcigpCiAgICAgbXkgKCRuYW1lLCAkdHlwZSwgJGluZGVudCkgPSBAXzsKIAogICAgIGlm
ICgkdHlwZS0+aXNVbmlvbikgewotICAgICAgICByZXR1cm4gJGluZGVudCAuICIgICAgV1RGOjp2
aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1
ZSk7IH0sICIgLiAkbmFtZSAuICIpOyI7CisgICAgICAgIHJldHVybiAkaW5kZW50IC4gIiAgICBz
dGQ6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5k
KHZhbHVlKTsgfSwgIiAuICRuYW1lIC4gIik7IjsKICAgICB9CiAKICAgICByZXR1cm4gJGluZGVu
dCAuICIgICAgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKCIgLiAkbmFtZSAuICIpOyI7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRy
YWNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5Niw3ICsyOTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2V0SlNU
ZXN0Q2FsbFRyYWNlclRlCiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBmYWxz
ZSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpIHsKICAgICAg
ICAgVmVjdG9yPFRlc3RDYWxsVHJhY2VySW50ZXJmYWNlVmFyaWFudD4gY2FsbFRyYWNlclBhcmFt
ZXRlcnM7Ci0gICAgICAgIFdURjo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2Vy
UGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCBuYXRpdmVWYWx1ZSk7CisgICAgICAgIHN0ZDo6
dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFs
dWUpOyB9LCBuYXRpdmVWYWx1ZSk7CiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2Vy
SW50ZXJmYWNlKGltcGwsIEFTQ0lJTGl0ZXJhbCgidGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50Iiks
IFdURk1vdmUoY2FsbFRyYWNlclBhcmFtZXRlcnMpKTsKICAgICB9CiAgICAgaW1wbC5zZXRUZXN0
QXR0cmlidXRlV2l0aFZhcmlhbnQoV1RGTW92ZShuYXRpdmVWYWx1ZSkpOwpAQCAtNDAzLDcgKzQw
Myw3IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGlmIChV
TkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKSB7CiAgICAgICAgIFZlY3RvcjxUZXN0
Q2FsbFRyYWNlckludGVyZmFjZVZhcmlhbnQ+IGNhbGxUcmFjZXJQYXJhbWV0ZXJzOwotICAgICAg
ICBXVEY6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBw
ZW5kKHZhbHVlKTsgfSwgdmFyaWFudEFyZyk7CisgICAgICAgIHN0ZDo6dmlzaXQoWyZdIChhdXRv
JiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCB2YXJpYW50
QXJnKTsKICAgICAgICAgQ2FsbFRyYWNlcjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwg
QVNDSUlMaXRlcmFsKCJ0ZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1bWVudCIpLCBXVEZNb3Zl
KGNhbGxUcmFjZXJQYXJhbWV0ZXJzKSk7CiAgICAgfQogICAgIGltcGwudGVzdE9wZXJhdGlvbldp
dGhWYXJpYW50QXJndW1lbnQoV1RGTW92ZSh2YXJpYW50QXJnKSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDgg
KzUwLDggQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIC8vIERhdGEgaXMgbXV0YWJs
ZSwgc28gYXN5bmMgb3BlcmF0aW9ucyBzaG91bGQgY29weSBpdCBmaXJzdC4KIHVzaW5nIENyeXB0
b09wZXJhdGlvbkRhdGEgPSBzdGQ6OnBhaXI8Y29uc3QgdWludDhfdCosIHNpemVfdD47CiAKLXVz
aW5nIEtleURhdGEgPSBWYXJpYW50PFZlY3Rvcjx1aW50OF90PiwgSnNvbldlYktleT47Ci11c2lu
ZyBLZXlPcktleVBhaXIgPSBWYXJpYW50PFJlZlB0cjxDcnlwdG9LZXk+LCBDcnlwdG9LZXlQYWly
PjsKK3VzaW5nIEtleURhdGEgPSBzdGQ6OnZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBKc29uV2Vi
S2V5PjsKK3VzaW5nIEtleU9yS2V5UGFpciA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8Q3J5cHRvS2V5
PiwgQ3J5cHRvS2V5UGFpcj47CiAKIGNsYXNzIENyeXB0b0FsZ29yaXRobSA6IHB1YmxpYyBSZWZD
b3VudGVkPENyeXB0b0FsZ29yaXRobT4gewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0tleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9LZXkuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFz
cyBDcnlwdG9LZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q3J5cHRvS2V5PiB7CiBw
dWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENyeXB0b0tleVR5cGU7Ci0gICAgdXNpbmcgQWxnb3Jp
dGhtVmFyaWFudCA9IFZhcmlhbnQ8Q3J5cHRvS2V5QWxnb3JpdGhtLCBDcnlwdG9BZXNLZXlBbGdv
cml0aG0sIENyeXB0b0VjS2V5QWxnb3JpdGhtLCBDcnlwdG9IbWFjS2V5QWxnb3JpdGhtLCBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0sIENyeXB0b1JzYUtleUFsZ29yaXRobT47CisgICAgdXNp
bmcgQWxnb3JpdGhtVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENy
eXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlB
bGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3Jp
dGhtPjsKIAogICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBUeXBlLCBi
b29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAgICAgdmlydHVhbCB+Q3J5
cHRvS2V5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk2LDE0ICs5NiwxNCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8c3Rk
Ojp1bmlxdWVfcHRyPENyeXB0CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CisgICAgaWYgKHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgewogICAgICAgICBh
dXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNvbnN0cnVjdEVtcHR5T2JqZWN0
KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwgV1RGOjpnZXQ8U3RyaW5n
PihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwg
c3RkOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMoc3RhdGUsIG5ld1Bh
cmFtcywgb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBhdXRvJiB2YWx1ZSA9IFdURjo6Z2V0PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBhdXRv
JiB2YWx1ZSA9IHN0ZDo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1J
ZGVudGlmaWVyKTsKIAogICAgIGF1dG8gcGFyYW1zID0gY29udmVydERpY3Rpb25hcnk8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4oc3RhdGUsIHZhbHVlLmdldCgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwpA
QCAtODY3LDEyICs4NjcsMTIgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OmV4cG9ydEtleShLZXlGb3Jt
YXQgZgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOgogICAgICAg
ICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgY2FzZSBTdWJ0
bGVDcnlwdG86OktleUZvcm1hdDo6UmF3OiB7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4m
IHJhd0tleSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsKKyAgICAgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiYgcmF3S2V5ID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOwog
ICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoV1RGTW92ZShjYXB0dXJl
ZFByb21pc2UpLCByYXdLZXkuZGF0YSgpLCByYXdLZXkuc2l6ZSgpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpK
d2s6Ci0gICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxK
c29uV2ViS2V5Pj4oV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CisgICAgICAg
ICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4o
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MzYsMTEgKzkz
NiwxMSBAQCB2b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6OkV4ZWNTdGF0CiAgICAgICAg
IGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGNhc2UgU3VidGxl
Q3J5cHRvOjpLZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgICAgICBieXRlcyA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oa2V5KTsKKyAgICAgICAgICAgIGJ5dGVzID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihr
ZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlG
b3JtYXQ6Okp3azogewogICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnRpbmcgdG8gSlMganVz
dCB0byBKU09OLVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4gV2Ugc2hvdWxkIGZpbmQgYSB3
YXkgdG8gZ28gZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpTT04uCi0gICAgICAgICAgICBh
dXRvIGp3ayA9IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oKihwcm9taXNlLT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKSksIFdU
Rk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAgICAgICAgICAgYXV0byBqd2sg
PSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0
KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCkpLCBXVEZNb3ZlKHN0
ZDo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKICAgICAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcg
PSBKU09OU3RyaW5naWZ5KHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGp3
aywgMCk7CiAgICAgICAgICAgICBDU3RyaW5nIGp3a1V0ZjhTdHJpbmcgPSBqd2tTdHJpbmcudXRm
OChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgICAgIGJ5dGVzLmFwcGVuZChqd2tVdGY4U3Ry
aW5nLmRhdGEoKSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL1N1YnRsZUNyeXB0by5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vU3VidGxlQ3J5cHRvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAgcHVi
bGljOgogCiAgICAgdXNpbmcgS2V5Rm9ybWF0ID0gQ3J5cHRvS2V5Rm9ybWF0OwogCi0gICAgdXNp
bmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4sIFN0cmluZz47Ci0gICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQgPSBWYXJpYW50PFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgSnNvbldlYktl
eT47CisgICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IHN0ZDo6dmFyaWFudDxKU0M6OlN0
cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBLZXlEYXRhVmFyaWFudCA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4sIEpzb25XZWJLZXk+OwogCiAgICAgdm9pZCBlbmNyeXB0KEpTQzo6RXhlY1N0
YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJTb3VyY2UmJiBk
YXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIGRlY3J5cHQoSlNDOjpFeGVj
U3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYm
IGRhdGEsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoQwogICAgIFJlZlB0
cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1w
b3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBh
dXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFs
ZykgLT4gYm9vbCB7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
Q0JDOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVT
X0NGQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVz
dWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJh
dzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+
aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0
UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFj
ayA9IFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTEx
OSw3ICsxMTksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tB
bGdDYWxsYmFjaykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DVFIuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1w
b3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChm
b3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3Zl
KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
KyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0
OjpKd2s6IHsKICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0
aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tB
bGdDYWxsYmFjaykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoQwogICAgIFJlZlB0
cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1w
b3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBD
cnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBh
dXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFs
ZykgLT4gYm9vbCB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNf
R0NNOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhw
YXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAg
ICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1BRVNfS1cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19L
Vy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDEwICs5MCwxMCBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUFFU19LVzo6aW1wb3J0S2V5KENyCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoK
LSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6
aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6
aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlbmd0aCkgewog
ICAgICAgICAgICAgY2FzZSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTI4OgogICAgICAgICAgICAg
ICAgIHJldHVybiBhbGcuaXNOdWxsKCkgfHwgYWxnID09IEFMRzEyODsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVD
REguY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEy
Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KENyeXAKICAgICBSZWZQ
dHI8Q3J5cHRvS2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2Ug
Q3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3Zl
KFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBX
VEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBib29sIGlzVXNh
Z2VzQWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBpZiAoIWtleS5kLmlzTnVsbCgpKSB7CkBAIC0x
NTAsMjEgKzE1MCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShDcnlw
CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9y
dFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdU
Rk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBpZiAodXNhZ2Vz
KSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6Omlt
cG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZl
LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJh
bWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBpZiAo
dXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUtleSkgJiYgKHVzYWdlcyBe
IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykgJiYgKHVzYWdlcyBeIChDcnlwdG9LZXlVc2FnZURl
cml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykpKSB7CiAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwg
ZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVD
RFNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobUVDRFNBOjppbXBvcnRLZXkoQ3J5CiAgICAgUmVmUHRyPENyeXB0b0tleUVDPiByZXN1bHQ7
CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7
Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5Pihk
YXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1
c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTI0LDIxICsxMjQsMjEgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJh
Y2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIs
IGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5h
bWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6U3BraToKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VW
ZXJpZnkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1l
ZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2ko
ZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3Zl
KHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAg
ICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB7CiAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVj
UGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShX
VEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRl
bnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9h
bGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1IS0RGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobUhLREY6OmltcG9ydEtleShDcnlwCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVy
LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKKyAg
ICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBX
VEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKIH0KIAog
RXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1IS0RGOjpnZXRLZXlMZW5ndGgoY29u
c3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtSE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShDcnlwCiAgICAgUmVmUHRyPENyeXB0b0tl
eUhNQUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6OmltcG9ydFJhdyho
bWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJzLmhhc2hJZGVu
dGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3
KGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElk
ZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTM1
LDcgKzEzNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KENyeXAKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0
aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RG
OjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNo
ZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0
SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFz
aElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobVBCS0RGMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBDcnlw
dG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleShDcgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7Cisg
ICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpnZXRLZXlMZW5ndGgo
Y29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FFU19QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAg
ICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
OworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOwogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1c2Fn
ZXMgXiBDcnlwdG9LZXlVc2FnZURlY3J5cHQpKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdl
cyBeIENyeXB0b0tleVVzYWdlRW5jcnlwdCkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2Fs
bGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI1LDcgKzEyNSw3
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVs
bG9wdCwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFi
bGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZv
cm1hdDo6UGtjczg6IHsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51
bGxvcHQsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3Rh
YmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNT
QV9QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FTU0Ff
UEtDUzFfdjFfNTo6aQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdDsKICAgICBzd2l0
Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAg
SnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAg
ICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMg
XiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENy
eXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhT
eW50YXhFcnJvcik7CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FT
U0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1ldGVy
cy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6
aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElk
ZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcnlwdG9L
ZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCByc2FQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhh
c2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1S
U0FfT0FFUC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRo
bXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJT
QV9PQUVQOjppbXBvcnRLZXkoCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAg
ICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
OworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOwogCiAgICAgICAgIGJvb2wgaXNVc2FnZXNBbGxvd2VkID0gZmFsc2U7CiAgICAgICAg
IGlmICgha2V5LmQuaXNOdWxsKCkpIHsKQEAgLTE3Myw3ICsxNzMsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE4Miw3ICsxODIsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVJTQV9QU1MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCShyZXZpc2lvbiAyMjA5MTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0Ff
UFNTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azog
ewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxsKCkg
JiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwoKSAmJiAo
dXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4Y2VwdGlv
bkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZp
ZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQg
PSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBh
cmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0
b0FsZ29yaXRobUVjZHNhUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
RWNkc2FQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcyBmaW5hbCA6IHB1Ymxp
YyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29u
c2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpT
Qzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIENsYXNzIHBhcmFtZXRlcnNDbGFz
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENsYXNzOjpFY2RzYVBhcmFtczsgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobUhrZGZQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
Y3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0Fs
Z29yaXRobUhrZGZQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVy
cyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFz
aElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3Ry
aW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Piwg
U3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZp
ZXI7CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgQnVmZmVyU291cmNlIGluZm87CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMv
Q3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVy
Z2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
ZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGVuZ3RoOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Q
YmtkZjJQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUGJrZGYyUGFy
YW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIEJ1ZmZl
clNvdXJjZSBzYWx0OwogICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9uczsKICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50
PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJp
YW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIGNvbnN0IFZlY3Rvcjx1
aW50OF90PiYgc2FsdFZlY3RvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNo
ZWRJbXBvcnRQYXJhbXMuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0
b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
ZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8
SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6OlJzYUhhc2hlZEltcG9ydFBhcmFtczsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVk
S2V5R2VuUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFt
ZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgJKHJldmlzaW9uIDIy
MDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRo
bVJzYUhhc2hlZEtleUdlblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEtleUdl
blBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJhbXMgewog
cHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVu
dGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4g
aGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmlu
Zz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwog
CiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6
OlJzYUhhc2hlZEtleUdlblBhcmFtczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNyArMjUw
LDcgQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyBwYXJzZUphdmFTY3JpcHRDUwogCiB9CiAKLXN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IENTU1N0eWxlRGVjbGFyYXRpb246
Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3N0ZDo6b3B0aW9u
YWw8c3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFt
ZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGF1dG8gcHJv
cGVydHlJbmZvID0gcGFyc2VKYXZhU2NyaXB0Q1NTUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSk7
CiAgICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKQEAgLTI1OSwxNyArMjU5LDE3IEBA
IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IEMKICAgICBhdXRvIHZhbHVl
ID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKTsK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhIHNob3J0
aGFuZCBwcm9wZXJ0eSAoc3VjaCBhcyAicGFkZGluZyIpLCBpdCBjYW4gb25seSBiZSBhY2Nlc3Nl
ZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgotICAgICAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcs
IGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5
SUQpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZ2V0
UHJvcGVydHlWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSB9OwogICAgIH0K
ICAgICAKICAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVsT3JQb3NQcmVmaXggJiYgaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKICAgICAgICAgLy8gQ2FsbCB0aGlzIHZlcnNpb24g
b2YgdGhlIGdldHRlciBzbyB0aGF0LCBlLmcuLCBwaXhlbFRvcCByZXR1cm5zIHRvcCBhcyBhIG51
bWJlcgogICAgICAgICAvLyBpbiBwaXhlbCB1bml0cyBhbmQgcG9zVG9wIHNob3VsZCBkb2VzIHRo
ZSBzYW1lIF9pZl8gdGhpcyBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4KICAgICAgICAgLy8gRklY
TUU6IElmIG5vdCBhIHBvc2l0aW9uZWQgZWxlbWVudCwgTVNJRSBkb2N1bWVudGF0aW9uIHNheXMg
cG9zVG9wIHNob3VsZCByZXR1cm4gMDsgdGhpcyBydWxlIGlzIG5vdCBpbXBsZW1lbnRlZC4KLSAg
ICAgICAgcmV0dXJuIFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSB9
OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPiB7IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QWCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcsIGRvdWJsZT4g
eyB2YWx1ZS0+Y3NzVGV4dCgpIH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRv
dWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+IENTU1N0
eWxlRGVjbGFyYXRpb246OnNldE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8gQmluZGlu
Z3Mgc3VwcG9ydC4KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBu
YW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZh
cmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CiAg
ICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCk7CiAgICAgVmVjdG9yPEF0
b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL0RPTU1hdHJpeC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
RE9NTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBET01NYXRyaXggOiBwdWJsaWMgRE9NTWF0cml4UmVhZE9ubHkgewog
cHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRlKHN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0KQorICAg
IHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYmIGluaXQpCiAgICAgewogICAg
ICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0cml4KTsKICAgICAgICAgaWYg
KCFpbml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25seS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBET01Qb2ludEluaXQ7CiBjbGFz
cyBET01NYXRyaXhSZWFkT25seSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBSZWZD
b3VudGVkPERPTU1hdHJpeFJlYWRPbmx5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXhSZWFkT25seT4+
IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYg
aW5pdCkKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeFJlYWRPbmx5Pj4gY3Jl
YXRlKHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYm
IGluaXQpCiAgICAgewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0
cml4UmVhZE9ubHkpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2Uu
aAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgZmVh
dHVyZVNldHRpbmdzOwogICAgIH07CiAgICAgCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxT
dHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+PjsKICAgICBzdGF0
aWMgRXhjZXB0aW9uT3I8UmVmPEZvbnRGYWNlPj4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgU3Ry
aW5nJiBmYW1pbHksIFNvdXJjZSYmLCBjb25zdCBEZXNjcmlwdG9ycyYpOwogICAgIHN0YXRpYyBS
ZWY8Rm9udEZhY2U+IGNyZWF0ZShDU1NGb250RmFjZSYpOwogICAgIHZpcnR1YWwgfkZvbnRGYWNl
KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBA
QCBlbnVtIGNsYXNzIEN1c3RvbUVsZW1lbnROYW1lVmFsaWRhdGlvblN0CiAgICAgQ29uZmxpY3Rz
V2l0aFN0YW5kYXJkRWxlbWVudE5hbWUKIH07CiAKLXVzaW5nIFJlbmRlcmluZ0NvbnRleHQgPSBW
YXJpYW50PAordXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dmFyaWFudDwKICNpZiBFTkFC
TEUoV0VCR0wpCiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4sCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTks
NyArOTksNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IERyYWdnZWRDb250ZW50RGF0YSB7CiAgICAg
ICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlOwogICAgIH07Ci0gICAgdXNpbmcgRGF0YSA9IFZh
cmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0YSwg
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhPjsKKyAgICB1c2lu
ZyBEYXRhID0gc3RkOjp2YXJpYW50PElzQWN0aXZlTWF0Y2hEYXRhLCBEZXNjcmlwdGlvbkRhdGEs
IERpY3RhdGlvbkRhdGEsIERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEsIERyYWdnZWRDb250ZW50
RGF0YT47CiAKICAgICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCBib29sIGlzQWN0aXZlTWF0Y2gpOwogICAgIERvY3VtZW50TWFya2VyKE1h
cmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24gPSBTdHJpbmcoKSk7CkBAIC0xOTgsMTIgKzE5OCwxMiBAQCBp
bmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzCiAKIGlubGluZSBjb25zdCBT
dHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8gV1RGOjpnZXQ8U3RyaW5n
PihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBlbXB0eVN0
cmluZygpOwogfQogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4obV9kYXRh
KSAmJiBXVEY6OmdldDxib29sPihtX2RhdGEpOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgc3RkOjpnZXQ8Ym9vbD4obV9kYXRhKTsKIH0KIAogaW5s
aW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJvb2wgaXNBY3RpdmVNYXRj
aCkKQEAgLTIyNywyMiArMjI3LDIyIEBAIGlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRN
YXJrZXIoTWEKIAogaW5saW5lIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1hcmtlcjo6
YWx0ZXJuYXRpdmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0
ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXM7CisgICAgcmV0dXJuIHN0ZDo6Z2V0
PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOwogfQogCiBp
bmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBh
bHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQogewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVy
bmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwor
ICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRp
dmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwogfQogCiBpbmxpbmUgaWQgRG9jdW1lbnRNYXJrZXI6
Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJu
YXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKIH0KIAog
aW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKGlkIG1ldGFkYXRhKQogewot
ICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEg
PSBtZXRhZGF0YTsKKyAgICBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2Rh
dGEpLm1ldGFkYXRhID0gbWV0YWRhdGE7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0
QXNTZXBhcmF0ZU1hcmtlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAgIGlmIChu
ZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkgewotICAg
ICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKKyAgICAgICAgaWYg
KGF1dG8gdGFyZ2V0Tm9kZSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVu
dERhdGE+KG5ld01hcmtlci5kYXRhKCkpLnRhcmdldE5vZGUpCiAgICAgICAgICAgICByZXR1cm4g
dGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSAmJiB0YXJnZXROb2RlLT5yZW5kZXJlcigpLT5pc1JlbmRl
clJlcGxhY2VkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6YWRkRXZl
bnRMaXN0ZW5lckZvckJpbgogICAgICAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlz
dGVuZXIucmVsZWFzZU5vbk51bGwoKSwgY2FwdHVyZSk7CiAgICAgfSk7CiAKLSAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7
CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYgbGlz
dGVuZXIsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQpCkBAIC0xMDQsNyArMTA0
LDcgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvcgogICAgICAgICBy
ZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLCBjYXB0dXJlKTsKICAgICB9
KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2
aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogYm9vbCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVu
ZXIsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgICAg
IGJvb2wgb25jZTsKICAgICB9OwogCi0gICAgdXNpbmcgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnNP
ckJvb2xlYW4gPSBWYXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLCBib29sPjsKKyAgICB1
c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IHN0ZDo6dmFyaWFudDxBZGRF
dmVudExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRF
dmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiYmLCBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYm
KTsKLSAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBWYXJpYW50PExpc3RlbmVy
T3B0aW9ucywgYm9vbD47CisgICAgdXNpbmcgTGlzdGVuZXJPcHRpb25zT3JCb29sZWFuID0gc3Rk
Ojp2YXJpYW50PExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4m
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gZGlzcGF0Y2hFdmVudEZv
ckJpbmRpbmdzKEV2ZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPERPTVdp
bmRvdz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwordXNpbmcgTWVzc2FnZUV2ZW50U291cmNlID0g
c3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+PjsKIAog
Y2xhc3MgTWVzc2FnZUV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBTVkdRdWFsaWZpZWROYW1l
OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZlbnQ7CiAKLXVzaW5nIE5vZGVPclN0
cmluZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwordXNpbmcgTm9kZU9yU3RyaW5n
ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKIAogY2xhc3MgTm9kZVJhcmVE
YXRhQmFzZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OnRpbWVyRmlyCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CiAg
ICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBXVEY6OmdldDxBdXRvY29ycmVjdGlv
blJlcGxhY2VtZW50PihtX2RldGFpbHMpOworICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJp
bmcgPSBzdGQ6OmdldDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50PihtX2RldGFpbHMpOwogICAg
ICAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwpAQCAtMzI2LDcgKzMyNiw3IEBAIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVS
TkFUSVZFUykKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gV1RGOjpnZXQ8
QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PihtX2RldGFpbHMpOworICAgICAgICB1aW50NjRf
dCBkaWN0YXRpb25Db250ZXh0ID0gc3RkOjpnZXQ8QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0
PihtX2RldGFpbHMpOwogICAgICAgICBpZiAoIWRpY3RhdGlvbkNvbnRleHQpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZv
clJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwpAQCAtNTkyLDkgKzU5Miw5IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFQKICAgICAgICAgc3RhcnRB
bHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24pOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2
ZXM6IHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSkKKyAgICAgICAgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9
IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsK
KyAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1cnJlbnRXb3JkICE9IG1h
cmtlckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOwpAQCAtNjQyLDkgKzY0Miw5IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGkKIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5B
VElWRVMpCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkp
OwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKLSAgICAg
ICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOworICAgICAgICBj
bGllbnQtPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhzdGQ6OmdldDxEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4dCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShtYXJrZXIpOwogI2VuZGlmCkBAIC02NTUsNyArNjU1LDcgQEAgVmVjdG9yPFN0
cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcgogI2lmIFVTRShESUNUQVRJT05fQUxURVJO
QVRJVkVTKQogICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRl
eHRDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRpdmVz
KFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5j
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKHN0
ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250
ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKG1hcmtlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWN0aXZlOwogICAgICAg
ICBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGU7CiAgICAgICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7
Ci0gICAgICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVE
aWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOworICAgICAgICBzdGQ6OnZhcmlhbnQ8QXV0b2NvcnJl
Y3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOwog
ICAgIH07CiAKICAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2luZ0FsdGVy
bmF0aXZlVGV4dCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNE
aXNtaXNzZWRCeUVkaXRpbmc7CiAgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSBtX3R5cGU7CiAgICAg
U3RyaW5nIG1fb3JpZ2luYWxUZXh0OwotICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNl
bWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFpbHM7CisgICAgc3RkOjp2
YXJpYW50PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVybmF0aXZlRGljdGF0aW9uQ29u
dGV4dD4gbV9kZXRhaWxzOwogCiAgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JMYXN0RGVs
ZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0RGVsZXRl
ZEF1dG9jb3JyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9uIDIyMDkx
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJsb2I7CiBjbGFzcyBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0OwogCi11c2luZyBCbG9iUGFydFZhcmlhbnQgPSBWYXJpYW50PFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVm
UHRyPEJsb2I+LCBTdHJpbmc+OwordXNpbmcgQmxvYlBhcnRWYXJpYW50ID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwg
UmVmUHRyPEJsb2I+LCBTdHJpbmc+OwogCiBjbGFzcyBCbG9iIDogcHVibGljIFNjcmlwdFdyYXBw
YWJsZSwgcHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxCbG9iPiB7CiBw
dWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmZpcmVFdmVudChj
b25zdCBBdG9taWNTCiAgICAgZGlzcGF0Y2hFdmVudChQcm9ncmVzc0V2ZW50OjpjcmVhdGUodHlw
ZSwgdHJ1ZSwgbV9sb2FkZXIgPyBtX2xvYWRlci0+Ynl0ZXNMb2FkZWQoKSA6IDAsIG1fbG9hZGVy
ID8gbV9sb2FkZXItPnRvdGFsQnl0ZXMoKSA6IDApKTsKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJp
YW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0
KCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0KCkgY29uc3QKIHsKICAgICBpZiAoIW1f
bG9hZGVyIHx8IG1fZXJyb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5
LDcgQEAgcHVibGljOgogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KICAgICBSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJuIG1fZXJy
b3I7IH0KICAgICBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFkVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVhZFR5cGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiByZXN1bHQoKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlv
bmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+IHJlc3Vs
dCgpIGNvbnN0OwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5nIFJlZkNv
dW50ZWQ6OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlv
bi5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENv
bGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOCArNDMsMjggQEAgaW5saW5lIEhU
TUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdAogfQogCiAvLyBodHRwczovL2h0bWwuc3Bl
Yy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI2RvbS1odG1sYWxsY29s
bGVjdGlvbi1pdGVtCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRl
bU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3QKK3N0ZDo6b3B0
aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50
Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG5hbWVPckluZGV4Lmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKGF1dG8gaW5k
ZXggPSBKU0M6OnBhcnNlSW5kZXgoKm5hbWVPckluZGV4LmltcGwoKSkpCi0gICAgICAgIHJldHVy
biBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQ
dHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVm
UHRyPEVsZW1lbnQ+IHsgaXRlbShpbmRleC52YWx1ZSgpKSB9IH07CiAKICAgICByZXR1cm4gbmFt
ZWRJdGVtT3JJdGVtcyhuYW1lT3JJbmRleCk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndo
YXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjY29uY2VwdC1nZXQtYWxsLW5h
bWVkCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRy
PEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5h
bWVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewogICAgIGF1
dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFtZSk7CiAKICAgICBpZiAobmFtZWRJ
dGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG5h
bWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3Zl
KG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8
SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RG
TW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8SFRN
TENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB7
IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVyZWRCeU5hbWUobmFtZSkg
fSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVm
UHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBkb3duY2FzdDxEb2N1bWVu
dD4ob3duZXJOb2RlKCkpLmFsbEZpbHRlcmVkQnlOYW1lKG5hbWUpIH0gfTsKIH0KIAogSFRNTEFs
bE5hbWVkU3ViQ29sbGVjdGlvbjo6fkhUTUxBbGxOYW1lZFN1YkNvbGxlY3Rpb24oKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw4ICszNSw4IEBAIGNsYXNzIEhUTUxBbGxDb2xsZWN0aW9uIGZpbmFsIDogcHVibGlj
IEEKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxBbGxDb2xsZWN0aW9uPiBjcmVhdGUoRG9j
dW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRPckluZGV4ZWRJdGVt
T3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBjb25zdDsKLSAgICBzdGQ6
Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+
Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICBzdGQ6
Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxl
bWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZU9ySW5kZXgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxI
VE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3Qg
QXRvbWljU3RyaW5nJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTEFsbENvbGxlY3Rpb24o
RG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBSZWY8RG9jdW1l
bnRQYXJzZXI+IEhUTUxEb2N1bWVudDo6Y3JlYXRlCiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVj
LndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2RvbS1kb2N1bWVudC1uYW1lZGl0ZW0KLXN0
ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdp
bmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4+IEhUTUxEb2N1
bWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBpZiAobmFt
ZS5pc051bGwoKSB8fCAhaGFzRG9jdW1lbnROYW1lZEl0ZW0oKm5hbWUuaW1wbCgpKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTEyMCwxNiArMTIwLDE2IEBAIHN0ZDo6b3B0aW9u
YWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwKICAgICBpZiAoVU5MSUtFTFkoZG9jdW1lbnRO
YW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVudHMoKm5hbWUuaW1wbCgpKSkpIHsKICAgICAg
ICAgYXV0byBjb2xsZWN0aW9uID0gZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogICAgICAgICBB
U1NFUlQoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPiAxKTsKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8
UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
Pj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgV1RGTW92ZShjb2xsZWN0aW9uKSB9IH07Cisg
ICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsg
V1RGTW92ZShjb2xsZWN0aW9uKSB9IH07CiAgICAgfQogCiAgICAgYXV0byYgZWxlbWVudCA9ICpk
b2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCkpOwogICAgIGlmIChVTkxJS0VMWShpczxIVE1M
SUZyYW1lRWxlbWVudD4oZWxlbWVudCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBkb21XaW5kb3cg
PSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkuY29udGVudFdpbmRvdygpKQot
ICAgICAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVt
ZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9NV2luZG93PiB7IGRvbVdp
bmRvdyB9IH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5k
b3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+IHsgUmVmUHRyPERP
TVdpbmRvdz4geyBkb21XaW5kb3cgfSB9OwogICAgIH0KIAotICAgIHJldHVybiBWYXJpYW50PFJl
ZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+
IHsgUmVmUHRyPEVsZW1lbnQ+IHsgJmVsZW1lbnQgfSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVudCB9IH07CiB9CiAKIFZlY3RvcjxBdG9t
aWNTdHJpbmc+IEhUTUxEb2N1bWVudDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcg
KzQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCB3aWR0aCgpOwogICAgIFdF
QkNPUkVfRVhQT1JUIGludCBoZWlnaHQoKTsKICAgICAKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlh
bnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFZl
Y3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAg
IEVsZW1lbnQqIGRvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUp
IGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnROYW1lZEl0ZW0uZ2V0RWxlbWVudEJ5RG9jdW1lbnRO
YW1lZEl0ZW0obmFtZSwgKnRoaXMpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6
fkhUTUxGb3JtQ29uCiB7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpu
YW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8
c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRN
TEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFt
ZSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVy
biBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0
cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICByZXR1cm4g
c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJl
ZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAgcmV0dXJu
IFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRy
PFJhZGlvTm9kZUxpc3Q+IHsgb3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07Cisg
ICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUoKS5yYWRpb05vZGVMaXN0
KG5hbWUpIH0gfTsKIH0KIAogY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVudCo+JiBI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGVtZW50cygpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKCk7CiAKICAgICBIVE1M
RWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwotICAgIHN0ZDo6
b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+
IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgc3RkOjpvcHRpb25h
bDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBu
YW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgLy8gRm9yIENhY2hl
ZEhUTUxDb2xsZWN0aW9uLgogICAgIEhUTUxFbGVtZW50KiBjdXN0b21FbGVtZW50QWZ0ZXIoRWxl
bWVudCopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNw
cAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTYgKzE2MywxNiBAQCBIVE1MRWxlbWVudCog
SFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnCiAgICAgcmV0dXJuIGVsZW1lbnRzKCktPml0ZW0o
aW5kZXgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+
LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUVsZW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtRWxlbWVudDo6bmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBhdXRvIG5hbWVkSXRlbXMgPSBuYW1lZEVs
ZW1lbnRzKG5hbWUpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAg
ICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50
Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKIAot
ICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+
PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IHJhZGlvTm9kZUxpc3QobmFtZSkgfSB9OworICAg
IHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVu
dD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07CiB9
CiAKIFZlY3RvcjxBdG9taWNTdHJpbmc+IEhUTUxGb3JtRWxlbWVudDo6c3VwcG9ydGVkUHJvcGVy
dHlOYW1lcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJ
KHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQqIGl0ZW0o
dW5zaWduZWQgaW5kZXgpOwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9O
b2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4s
IFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBW
ZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7CiAKICAg
ICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5lbmNvZGluZ1R5
cGUoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDcgKzEzNjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAgICAgICAgIC8vIDIuIEVuZCB0aGUgc3lu
Y2hyb25vdXMgc2VjdGlvbiwgY29udGludWluZyB0aGUgcmVtYWluaW5nIHN0ZXBzIGluIHBhcmFs
bGVsLgogICAgICAgICAgICAgLy8gMy4gUnVuIHRoZSByZXNvdXJjZSBmZXRjaCBhbGdvcml0aG0g
d2l0aCB0aGUgYXNzaWduZWQgbWVkaWEgcHJvdmlkZXIgb2JqZWN0LgotICAgICAgICAgICAgV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgc3RkOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgICAgICAgICAgW3Ro
aXNdKFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSB7IG1fbWVkaWFTdHJlYW1TcmNPYmplY3Qg
PSBzdHJlYW07IH0sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHVzaW5nIEN1ZUlu
dGVydmFsID0gQ3VlSW50ZXJ2YWxUcmVlOjpJbnQKIHVzaW5nIEN1ZUxpc3QgPSBWZWN0b3I8Q3Vl
SW50ZXJ2YWw+OwogI2VuZGlmCiAKLXVzaW5nIE1lZGlhUHJvdmlkZXIgPSBzdGQ6Om9wdGlvbmFs
PFZhcmlhbnQ8Cit1c2luZyBNZWRpYVByb3ZpZGVyID0gc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlh
bnQ8CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJlYW0+LAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9u
LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAgcHVibGljOgogICAg
IAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0odW5zaWduZWQgaW5kZXgsIEhUTUxPcHRp
b25FbGVtZW50Kik7CiAgICAgCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQgPSBW
YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVt
ZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxF
bGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IHN0ZDo6
dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRNTE9wdEdyb3VwRWxl
bWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVt
b3ZlKGludCBpbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVj
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIHVzZXNNZW51TGlzdCgpIGNvbnN0OwogCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91
cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1M
T3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8
UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxl
bWVudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRN
TE9wdEdyb3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNl
cHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBz
dGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogCiAgICAgdXNpbmcgTm9k
ZTo6cmVtb3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcAko
cmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMiArNDEsMjUgQEAgVVJMU2VhcmNoUGFyYW1zOjpV
UkxTZWFyY2hQYXJhbXMoY29uc3QgVgogewogfQogCi1FeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNo
UGFyYW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoVmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0
cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5n
PiYmIHZhcmlhbnQpCitFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gVVJMU2VhcmNo
UGFyYW1zOjpjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYgdmFyaWFudCkK
IHsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiB2ZWN0b3IpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJh
bXM+PiB7Ci0gICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+
IHBhaXJzOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3IpIHsKLSAgICAg
ICAgICAgIGlmIChwYWlyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFpclswXSwg
cGFpclsxXX0pOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCisgICAgICAgIFtd
KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4gRXhjZXB0aW9uT3I8UmVm
PFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFp
cjxTdHJpbmcsIFN0cmluZz4+IHBhaXJzOworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBw
YWlyIDogdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuc2l6ZSgpICE9IDIpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKKyAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoe3BhaXJbMF0sIHBhaXJbMV19KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhXVEZN
b3ZlKHBhaXJzKSkpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBWZWN0b3I8V1RGOjpL
ZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIC0+IEV4Y2VwdGlvbk9yPFJlZjxV
UkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxT
ZWFyY2hQYXJhbXMocGFpcnMpKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3QgU3RyaW5n
JiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxscHRy
KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFy
YW1zKFdURk1vdmUocGFpcnMpKSk7Ci0gICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+JiBwYWlycykgewotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAgICB9LCBbJl0oY29uc3QgU3RyaW5n
JiBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1z
KHN0cmluZywgbnVsbHB0cikpOwotICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOworICAgICk7CiB9CiAKIFN0cmluZyBVUkxTZWFyY2hQYXJhbXM6OmdldChj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNl
YXJjaFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNo
UGFyYW1zLmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2Vh
cmNoUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBVUkxTZWFyY2hQYXJhbXMgOiBwdWJsaWMgUmVmQ291bnRlZDxVUkxT
ZWFyY2hQYXJhbXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFVSTFNl
YXJjaFBhcmFtcz4+IGNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYpOworICAgIHN0
YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3JlYXRlKHN0ZDo6dmFyaWFu
dDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5n
LCBTdHJpbmc+PiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgUmVmPFVSTFNlYXJjaFBhcmFtcz4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBET01VUkwqIGFzc29jaWF0ZWRVUkwpCiAgICAg
ewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBh
c3NvY2lhdGVkVVJMKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgY2xhc3MgVGV4dE1ldHJpY3M7CiBzdHJ1Y3QgRE9N
TWF0cml4SW5pdDsKIAogI2lmIEVOQUJMRShWSURFTykKLXVzaW5nIENhbnZhc0ltYWdlU291cmNl
ID0gVmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVt
ZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNvdXJj
ZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZWxzZQotdXNpbmcgQ2Fu
dmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRy
PEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IHN0ZDo6dmFy
aWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+
OwogI2VuZGlmCiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6IHB1Ymxp
YyBDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwdWJsaWMgQ2FudmFzUGF0aCB7CkBAIC0xNzIsNyAr
MTcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29uc3Qg
U3RyaW5nJik7CiAKLSAgICB1c2luZyBTdHlsZSA9IFZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8Q2Fu
dmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OworICAgIHVzaW5nIFN0eWxlID0g
c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZh
c1BhdHRlcm4+PjsKICAgICBTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
U3Ryb2tlU3R5bGUoU3R5bGUmJik7CiAgICAgU3R5bGUgZmlsbFN0eWxlKCkgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAy
MjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDEyIEBAIENhbnZhc1N0eWxlIENhbnZhc1N0eWxl
OjpjcmVhdGVGcm9tU3RyaW4KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3Io
Y29uc3QgQ2FudmFzU3R5bGUmIG90aGVyKSBjb25zdAogewotICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihvdGhlci5tX3N0eWxlKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PENvbG9yPihtX3N0eWxl
KSA9PSBXVEY6OmdldDxDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29s
b3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpnZXQ8Q29sb3I+KG1fc3R5
bGUpID09IHN0ZDo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKIAotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpIHsKLSAgICAgICAgYXV0byYgYSA9IFdU
Rjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwotICAgICAgICBhdXRvJiBiID0gV1RGOjpnZXQ8
Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKSkgeworICAgICAgICBhdXRvJiBhID0gc3RkOjpnZXQ8Q01ZS0FD
b2xvcj4obV9zdHlsZSk7CisgICAgICAgIGF1dG8mIGIgPSBzdGQ6OmdldDxDTVlLQUNvbG9yPihv
dGhlci5tX3N0eWxlKTsKICAgICAgICAgcmV0dXJuIGEuYyA9PSBiLmMgJiYgYS5tID09IGIubSAm
JiBhLnkgPT0gYi55ICYmIGEuayA9PSBiLmsgJiYgYS5hID09IGIuYTsKICAgICB9CiAKQEAgLTE0
OSwxNSArMTQ5LDE1IEBAIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yKGNvbnMK
IAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQShmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gQ29sb3Ig
eyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+
KG1fc3R5bGUpICYmIHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIs
IGEgfTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywg
ZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKIHsKLSAgICBpZiAoIVdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCisgICAgaWYgKCFzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5
bGUpOworICAgIGF1dG8mIGNoYW5uZWxzID0gc3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7
CiAgICAgcmV0dXJuIGMgPT0gY2hhbm5lbHMuYyAmJiBtID09IGNoYW5uZWxzLm0gJiYgeSA9PSBj
aGFubmVscy55ICYmIGsgPT0gY2hhbm5lbHMuayAmJiBhID09IGNoYW5uZWxzLmE7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2FudmFzU3R5
bGUgY3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yKTsKICAgICBzdGF0aWMgQ2Fu
dmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbnN0IFN0cmluZyYg
Y29sb3IsIGZsb2F0IGFscGhhKTsKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9Ci0gICAgYm9vbCBp
c0N1cnJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q3Vy
cmVudENvbG9yPihtX3N0eWxlKTsgfQotICAgIGJvb2wgaGFzT3ZlcnJpZGVBbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIGlzQ3VycmVudENvbG9yKCkgJiYgV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0
eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAgZmxvYXQgb3ZlcnJpZGVBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIFdURjo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYS52YWx1
ZSgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIXN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KKyAgICBib29sIGlzQ3VycmVudENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1fc3R5
bGUpOyB9CisgICAgYm9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNDdXJy
ZW50Q29sb3IoKSAmJiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxw
aGE7IH0KKyAgICBmbG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8
Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVlKCk7IH0KIAogICAgIFN0
cmluZyBjb2xvcigpIGNvbnN0OwogICAgIENhbnZhc0dyYWRpZW50KiBjYW52YXNHcmFkaWVudCgp
IGNvbnN0OwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgQ2FudmFzU3R5bGUoQ3Vy
cmVudENvbG9yKTsKIAotICAgIFZhcmlhbnQ8SW52YWxpZCwgQ29sb3IsIENNWUtBQ29sb3IsIFJl
ZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiwgQ3VycmVudENvbG9y
PiBtX3N0eWxlOworICAgIHN0ZDo6dmFyaWFudDxJbnZhbGlkLCBDb2xvciwgQ01ZS0FDb2xvciwg
UmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+LCBDdXJyZW50Q29s
b3I+IG1fc3R5bGU7CiB9OwogCiBDb2xvciBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0VsZW1lbnQq
KTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGlubGluZSBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUo
KQogCiBpbmxpbmUgQ2FudmFzR3JhZGllbnQqIENhbnZhc1N0eWxlOjpjYW52YXNHcmFkaWVudCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxDYW52YXNH
cmFkaWVudD4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQ
dHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpLmdldCgp
OworICAgIHJldHVybiBzdGQ6OmdldDxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKS5n
ZXQoKTsKIH0KIAogaW5saW5lIENhbnZhc1BhdHRlcm4qIENhbnZhc1N0eWxlOjpjYW52YXNQYXR0
ZXJuKCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENh
bnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSkuZ2V0
KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHlsZSku
Z2V0KCk7CiB9CiAKIGlubGluZSBTdHJpbmcgQ2FudmFzU3R5bGU6OmNvbG9yKCkgY29uc3QKIHsK
LSAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUp
ID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHls
ZSkuY29sb3I7CisgICAgYXV0byYgY29sb3IgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSA/IHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IHN0ZDo6Z2V0PENNWUtBQ29s
b3I+KG1fc3R5bGUpLmNvbG9yOwogICAgIHJldHVybiBjb2xvci5zZXJpYWxpemVkKCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmgJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKTsKIAog
ICAgIHZvaWQgdGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxzKTsKLSAg
ICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQ
dHI8SFRNTFZpZGVvRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0
cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CiAgICAgdm9p
ZCB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBUZXhJbWFnZVNvdXJjZSYmKTsKIAogICAgIHZvaWQgY29weVRleFN1
YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xBbnkuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBj
bGFzcyBXZWJHTFRleHR1cmU7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0OwogY2xhc3Mg
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKIAotdXNpbmcgV2ViR0xBbnkgPSBWYXJpYW50PAor
dXNpbmcgV2ViR0xBbnkgPSBzdGQ6OnZhcmlhbnQ8CiAgICAgc3RkOjpudWxscHRyX3QsCiAgICAg
Ym9vbCwKICAgICBpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjIwOTE1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6YnVmZmVyRGEKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZd
KGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEo
ZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZl
ciIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdQogICAgIGlmICghZGF0YSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlz
aXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZl
clN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsK
ICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYKICAgICApOwogCi0gICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0
KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8SlNDOjpUeXBlZEFycmF5VHlwZT4gYXJyYXlU
eXBlKQpAQCAtNDIxMiw3ICs0MjEyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0
b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3Vy
Y2UudmFsdWUoKSk7CiB9CiAKIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjIw
OTE1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwogICAgIHZv
aWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdD
M0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CiAKLSAgICB1c2luZyBCdWZmZXJE
YXRhU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBCdWZmZXJEYXRhU291cmNlID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+PjsKICAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpOwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8
QnVmZmVyRGF0YVNvdXJjZT4mJiwgR0MzRGVudW0gdXNhZ2UpOwogICAgIHZvaWQgYnVmZmVyU3Vi
RGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8QnVm
ZmVyRGF0YVNvdXJjZT4mJik7CkBAIC0yNDcsOSArMjQ3LDkgQEAgcHVibGljOgogICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZp
ZXc+JiYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHVzaW5nIFRleEltYWdlU291cmNlID0g
V1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4s
IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47Cisg
ICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4s
IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiwgUmVm
UHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKICNlbHNlCi0gICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2Ug
PSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2Ug
PSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAogICAgIEV4Y2VwdGlvbk9y
PHZvaWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9w
dGlvbmFsPFRleEltYWdlU291cmNlPik7CkBAIC0yNjMsNyArMjYzLDcgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlIDxjbGFzcyBUeXBlZEFycmF5LCBjbGFzcyBEYXRhVHlwZT4KICAgICBjbGFzcyBU
eXBlZExpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBWYXJp
YW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFUeXBlPj47CisgICAgICAgIHVzaW5n
IFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERh
dGFUeXBlPj47CiAKICAgICAgICAgVHlwZWRMaXN0KFZhcmlhbnRUeXBlJiYgdmFyaWFudCkKICAg
ICAgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUodmFyaWFudCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQz
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykpKTsKICAgICB9CiAKLSAg
ICB1c2luZyBUcmFja0V2ZW50VHJhY2sgPSBWYXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVm
UHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CisgICAgdXNpbmcgVHJhY2tFdmVu
dFRyYWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJh
Y2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CiAKICAgICBzdHJ1Y3QgSW5pdCA6IHB1YmxpYyBFdmVu
dEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRyYWNrRXZlbnRUcmFjaz4gdHJhY2s7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJ
bnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZh
c05hbWUpOwogCi0gICAgdHlwZWRlZiBWYXJpYW50PAorICAgIHR5cGVkZWYgc3RkOjp2YXJpYW50
PAogICAgICAgICBDYW52YXNHcmFkaWVudCosCiAgICAgICAgIENhbnZhc1BhdHRlcm4qLAogICAg
ICAgICBIVE1MQ2FudmFzRWxlbWVudCosCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQog
CiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7
Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+
PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERh
dGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQg
dHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8g
ZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1
ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IHN0ZDo6Z2V0PFJlZlB0
cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOwogICAgICAgICBtX2V4ZWN1dGFi
bGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNlUmVzdWx0KTsKICAgICAgICAgZGF0YWJh
c2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBSZWZQ
dHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXkKICAgICAgICAga2V5UGF0aC0+c2V0QXJyYXko
V1RGTW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9KTsKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOworICAgIHJldHVy
biBzdGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJhc2Uq
IGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rp
b25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWRvbmx5KQpAQCAtMzczLDEyICsz
NzMsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBhdXRvIHJlc3Vs
dFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1
bHRWYWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkg
ewogICAgICAgICAgICAgZW5kKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJl
c3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGN1cnNvciA9IHN0ZDo6Z2V0PFJlZlB0
cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKIAogICAgICAgICBpZiAobV9za2lw
Q291bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3ItPmFkdmFuY2UobV9za2lwQ291bnQpLmhh
c0V4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25P
YnNlcnZlci5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAg
SW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVyc2VjdGlvbk9ic2VydgogICAgICwgbV9yb290TWFy
Z2luKFdURk1vdmUoaW5pdC5yb290TWFyZ2luKSkKICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShj
YWxsYmFjaykpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPihpbml0
LnRocmVzaG9sZCkpCi0gICAgICAgIG1fdGhyZXNob2xkcy5hcHBlbmQoV1RGOjpnZXQ8ZG91Ymxl
Pihpbml0LnRocmVzaG9sZCkpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJs
ZT4oaW5pdC50aHJlc2hvbGQpKQorICAgICAgICBtX3RocmVzaG9sZHMuYXBwZW5kKHN0ZDo6Z2V0
PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKICAgICBlbHNlCi0gICAgICAgIG1fdGhyZXNob2xk
cyA9IFdURjo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQudGhyZXNob2xkKSk7Cisg
ICAgICAgIG1fdGhyZXNob2xkcyA9IHN0ZDo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGlu
aXQudGhyZXNob2xkKSk7CiB9CiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUo
RWxlbWVudCYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZl
ci5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlv
bk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IHN0cnVjdCBJbml0IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3Q7CiAgICAgICAgIFN0
cmluZyByb290TWFyZ2luOwotICAgICAgICBWYXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+
IHRocmVzaG9sZDsKKyAgICAgICAgc3RkOjp2YXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+
IHRocmVzaG9sZDsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZl
cj4gY3JlYXRlKFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJ
bml0JiYgaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdo
ZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgogICAgIHZpcnR1
YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyYpIHsgfQogCi0gICAgdXNp
bmcgTGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCA9IFdURjo6VmFyaWFudDxzdGQ6
Om9wdGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4+OworICAgIHVz
aW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBzdGQ6OnZhcmlhbnQ8c3Rk
OjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+PjsKICAgICB2
aXJ0dWFsIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUoRnJhbWVWaWV3JiwgY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QmLCBib29s
IC8qIHByb2dyYW1tYXRpY1Njcm9sbCAqLywgVmlld3BvcnRSZWN0U3RhYmlsaXR5LCBTY3JvbGxp
bmdMYXllclBvc2l0aW9uQWN0aW9uKSB7IH0KIAogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hl
bmV2ZXIgdGhlIHNsb3cgcmVwYWludCBvYmplY3RzIGNvdW50ZXIgY2hhbmdlcyBiZXR3ZWVuIHpl
cm8gYW5kIG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNw
cAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIGNvbnN0IGNoYXIqIFNo
YXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmQKICNlbmRpZgogICAgICAgICBbXShjb25zdCBNYXBw
ZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YS5kYXRhKCkpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBt
X2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRh
YmxlRGF0YSk7CiB9CiAKICNpZiAhVVNFKENGKQpAQCAtMjE5LDE3ICsyMTksMjQgQEAgdm9pZCBT
aGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBzaXplX3QgU2hhcmVkQnVmZmVy
OjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byB2aXNpdG9yID0gV1RGOjpt
YWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJldHVy
biBkYXRhLnNpemUoKTsgfSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2ltbXV0YWJsZURh
dGEsCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAg
ICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfSwKICNpZiBVU0UoQ0YpCi0g
ICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7IHJldHVybiBDRkRh
dGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxD
RkRhdGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuIENGRGF0YUdl
dExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKICNlbmRpZgogI2lmIFVTRShTT1VQKQot
ICAgICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxlbmd0aCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdV
bmlxdWVQdHI8U291cEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOworICAgICAgICB9LAogI2VuZGlm
Ci0gICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNp
emUoKTsgfQorICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90
IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfQogICAgICk7Ci0g
ICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogU2hh
cmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6
OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiwxOSArMTE2LDI4IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IERhdGFTZWdtZW50KFZlY3RvcjxjaGFyPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRh
YmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRh
KFdURk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogI2lmIFVTRShDRikKICAgICAg
ICAgRGF0YVNlZ21lbnQoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQotICAgICAgICAgICAg
OiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1t
dXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNlbmRpZgog
I2lmIFVTRShTT1VQKQogICAgICAgICBEYXRhU2VnbWVudChHVW5pcXVlUHRyPFNvdXBCdWZmZXI+
JiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsg
fQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAg
eworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgRGF0YVNlZ21lbnQoTWFwcGVkRmlsZURhdGEm
JiBkYXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9
CisgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7
CisgICAgICAgIH0KIAotICAgICAgICBWYXJpYW50PFZlY3RvcjxjaGFyPiwKKyAgICAgICAgc3Rk
Ojp2YXJpYW50PAorICAgICAgICAgICAgVmVjdG9yPGNoYXI+LAogI2lmIFVTRShDRikKICAgICAg
ICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0
IFBsYXRmb3JtRGVzY3JpcHRpb24gewogICAgICAgICBOb25lLAogICAgICAgICBDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlLAogICAgIH0gdHlwZTsKLSAgICBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKKyAgICBzdGQ6
OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+IGRlc2NyaXB0aW9uOwogfTsKIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAob3RoZXIu
cGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbUJhc2ljVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBy
ZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgICAg
IHJldHVybiBvcGVyYXRvcj09KCpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVy
KSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCkBAIC0xMDIsNyArMTAyLDcgQEAg
Ym9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZQogaW5saW5lIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24u
cGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgcmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigq
V1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24u
cGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbigqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CiB9
CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJD
Ri5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1No
YXJlZEJ1ZmZlckNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBTaGFyZWRC
dWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBT
aGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2VnbWVudHMu
c2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFp
blB0cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkp
CisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVm
Pj4oJm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAgICAgICAgICAg
IHJldHVybiAqZGF0YTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51
bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKCkpLCBzaXplKCkpKTsK
QEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRT
bwogewogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAg
IGlmIChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8g
ZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihlbnRyeS5zZWdtZW50LT5t
X2ltbXV0YWJsZURhdGEpKQorICAgICAgICAgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lm
PFJldGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnkuc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkK
ICAgICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24oY29u
c3RfY2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YS0+Z2V0KCkpKSwgQ0ZEYXRhR2V0
TGVuZ3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAkocmV2aXNp
b24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE3ICs1NiwxNyBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzTm9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdN
b2RlKCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0g
RGVjb2RpbmdNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYg
c3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdN
b2RlOjpOb25lOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29k
aW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6U3luY2hyb25v
dXM7CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBzdGQ6OmdldDxEZWNvZGlu
Z01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3Vz
OwogICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9k
ZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzOworICAgICAg
ICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2Rl
Y29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXM7CiAgICAgfQog
CiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0NvbXBhdGlibGVXaXRoKGNvbnN0IERlY29kaW5nT3B0
aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoK
ICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IHNpemVGb3JEcmF3aW5nKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChoYXNTaXplKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8c3Rk
OjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUpOworICAgICAgICByZXR1
cm4gc3RkOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUp
OwogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgbWF4RGltZW5zaW9uKGNvbnN0IEludFNpemUmIHNp
emUpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogICAgIGJvb2wgaGFzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGluZ01vZGVPclNpemUpOwogICAgIH0KIAog
ICAgIGJvb2wgaGFzRGVjb2RpbmdNb2RlKCkgY29uc3QKQEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2
YXRlOgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsgYW55U2l6ZTogRGVjb2RpbmdNb2RlOjpBc3lu
Y2hyb25vdXMKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGludHJpbnNpY1NpemU6IGFuIGVtcHR5
IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+CiAgICAgLy8gLSBBc3luY2hyb25vdXMgKyBzaXplRm9y
RHJhd2luZzogYSBub25lIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+Ci0gICAgdXNpbmcg
RGVjb2RpbmdNb2RlT3JTaXplID0gVmFyaWFudDxEZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8
SW50U2l6ZT4+OworICAgIHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9IHN0ZDo6dmFyaWFudDxE
ZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OwogICAgIERlY29kaW5nTW9kZU9y
U2l6ZSBtX2RlY29kaW5nTW9kZU9yU2l6ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCShyZXZpc2lv
biAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyBGb250
UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAgICAgICAgIHJldHVybiBmb250RmFt
aWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0aW9uKTsKICAgICAgICAgfSk7CiAg
ICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVG
YW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5nZXMgPSBXVEY6OnZpc2l0KHZpc2l0
b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJhbmdlcyA9IHN0ZDo6dmlzaXQodmlz
aXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIwOTE1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdHlwZWRlZiBGb250RmFtaWx5U3BlY2lm
aWNhdGlvbk51bGwgRm9udAogCiAjZGVmaW5lIFVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tf
TElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JF
UVVJUkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFyaWFudDxBdG9taWNTdHJpbmcsIEZvbnRG
YW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uOwordHlw
ZWRlZiBzdGQ6OnZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZp
Y2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktp
dEZvbnRGYW1pbHlOYW1lczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBXZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQzo6dW5wcgogdm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6YXVk
aW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgY29uc3QgTWVkaWFU
aW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGRhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgZnJhbWVDb3VudCkKIHsKICAgICBBU1NFUlQo
ZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlw
dGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgYXV0byYgYmFzaWNEZXNjcmlwdGlv
biA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlw
dGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgIGF1dG8mIGJhc2lj
RGVzY3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKICAgICBp
ZiAoIW1faW5wdXREZXNjcmlwdGlvbiB8fCBtX2lucHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2Ny
aXB0aW9uKCkgIT0gYmFzaWNEZXNjcmlwdGlvbikKICAgICAgICAgcHJlcGFyZShiYXNpY0Rlc2Ny
aXB0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgJKHJl
dmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotdXNpbmcgU1FMVmFsdWUgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGRvdWJs
ZT47Cit1c2luZyBTUUxWYWx1ZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5n
LCBkb3VibGU+OwogCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAg
aW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLSAgICAgICAgYXV0
byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOworICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVu
dERhdGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJr
ZXItPmRhdGEoKSk7CiAgICAgICAgIGlmIChkcmFnZ2VkQ29udGVudERhdGEudGFyZ2V0Tm9kZSA9
PSAmZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkocmV2aXNpb24gMjIwOTE1KQorKysg
U291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAg
ICAgICAgU3RyaW5nIHRyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZTsKICAgICAgICAgVmVjdG9y
PFN0cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAgVmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZl
Y3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7CisgICAgICAgIHN0ZDo6
dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVu
aW9uVmFsdWU7CiAgICAgICAgIGludCBjbGFtcExvbmdWYWx1ZTsKICAgICAgICAgaW50IGVuZm9y
Y2VSYW5nZUxvbmdWYWx1ZTsKICAgICB9OwpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+
JiB0ZXN0U2VxdWVuY2VSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX3NlcXVlbmNlUmVjb3JkOyB9
CiAgICAgdm9pZCBzZXRUZXN0U2VxdWVuY2VSZWNvcmQoY29uc3QgVmVjdG9yPFdURjo6S2V5VmFs
dWVQYWlyPFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiYgdmFsdWUpIHsgbV9zZXF1ZW5jZVJlY29y
ZCA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VW5pb24gPSBWYXJpYW50PFN0cmluZywgaW50
LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKKyAgICB1c2luZyBUZXN0VW5pb24g
PSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0cjxOb2RlPiwgVmVjdG9yPGlu
dD4+OwogICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV91
bmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdFVuaW9uKFRlc3RVbmlvbiYmIHZhbHVlKSB7IG1fdW5p
b24gPSB2YWx1ZTsgfQogCkBAIC0xMzAsMTUgKzEzMCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRUZXN0RGljdGlvbmFyeShEaWN0aW9uYXJ5JiYgZGljdGlvbmFyeSkgeyBtX3Rlc3REaWN0aW9u
YXJ5ID0gZGljdGlvbmFyeTsgfQogICAgIAogCi0gICAgdXNpbmcgVGVzdENsYW1wVW5pb24gPSBW
YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CisgICAgdXNpbmcgVGVzdENsYW1wVW5p
b24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBU
ZXN0Q2xhbXBVbmlvbiYgdGVzdENsYW1wVW5pb24oKSBjb25zdCB7IHJldHVybiBtX2NsYW1wVW5p
b247IH0KICAgICB2b2lkIHNldFRlc3RDbGFtcFVuaW9uKGNvbnN0IFRlc3RDbGFtcFVuaW9uJiB2
YWx1ZSkgeyBtX2NsYW1wVW5pb24gPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcgVGVzdEVuZm9yY2VS
YW5nZVVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OworICAgIHVzaW5n
IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9y
PGludD4+OwogICAgIGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdGVzdEVuZm9yY2VSYW5n
ZVVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmZvcmNlUmFuZ2VVbmlvbjsgfQogICAgIHZvaWQg
c2V0VGVzdEVuZm9yY2VSYW5nZVVuaW9uKGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdmFs
dWUpIHsgbV9lbmZvcmNlUmFuZ2VVbmlvbiA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VHJl
YXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPFN0
cmluZz4+OworICAgIHVzaW5nIFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24gPSBzdGQ6
OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxTdHJpbmc+PjsKICAgICBjb25zdCBUZXN0VHJl
YXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB0ZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9u
KCkgY29uc3QgeyByZXR1cm4gbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb247IH0KICAgICB2
b2lkIHNldFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24oY29uc3QgVGVzdFRyZWF0TnVs
bEFzRW1wdHlTdHJpbmdVbmlvbiYgdmFsdWUpIHsgbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5p
b24gPSB2YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2
aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0SW50
ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWE1M
SHR0cFJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHVz
aW5nIFNlbmRUeXBlcyA9IFZhcmlhbnQ8UmVmUHRyPERvY3VtZW50PiwgUmVmUHRyPEJsb2I+LCBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJl
ZlB0cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CisgICAgdXNpbmcgU2VuZFR5cGVzID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxCbG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+
LCBTdHJpbmc+OwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsg
fQogICAgIFN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNCBAQAorMjAxNy0wOC0xNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OmV2
ZW50VG9TdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVFdmVudC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNv
dXJjZTo6dXJsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRh
VGFza1JlcGxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3Jr
RGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPElE
QktleVBhdGg+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RP
TS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX2h0
bWxfc2VsZWN0X2VsZW1lbnRfYWRkKToKKwogMjAxNy0wOC0xOCAgQ29tbWl0IFF1ZXVlICA8Y29t
bWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQg
cjIyMDg1NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrQ2FwdHVyZUV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHJldmlzaW9uIDIyMDkxNSkK
KysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc5LDcgKzQ3OSw3IEBAIHN0ZDo6c3RyaW5nIGV2
ZW50VG9TdHJpbmcoY29uc3QgQ2FwdHVyZUUKIHsKICAgICBqc29uIHJlc3VsdDsKIAotICAgIFdU
Rjo6dmlzaXQoWyZyZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CisgICAgc3RkOjp2aXNpdChb
JnJlc3VsdF0oY29uc3QgYXV0byYgZXZlbnQpIHsKICAgICAgICAgdXNpbmcgRXZlbnRUeXBlID0g
c3RkOjpkZWNheV90PGRlY2x0eXBlKGV2ZW50KT47CiAgICAgICAgIHJlc3VsdCA9IEpTT05Db2Rl
cjxFdmVudFR5cGU+OjplbmNvZGUoZXZlbnQpOwogICAgIH0sIGV2ZW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuaAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBzdHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7CiBzdHJ1Y3QgRGF0YVJlY2Vp
dmVkRXZlbnQ7CiBzdHJ1Y3QgRmluaXNoZWRFdmVudDsKIAotdXNpbmcgQ2FwdHVyZUV2ZW50ID0g
V1RGOjpWYXJpYW50PFJlcXVlc3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVk
aXJlY3RSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQs
IEZpbmlzaGVkRXZlbnQ+OwordXNpbmcgQ2FwdHVyZUV2ZW50ID0gc3RkOjp2YXJpYW50PFJlcXVl
c3RTZW50RXZlbnQsIFJlc3BvbnNlUmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RSZWNlaXZlZEV2ZW50
LCBSZWRpcmVjdFNlbnRFdmVudCwgRGF0YVJlY2VpdmVkRXZlbnQsIEZpbmlzaGVkRXZlbnQ+Owog
dXNpbmcgT3B0aW9uYWxDYXB0dXJlRXZlbnQgPSBzdGQ6Om9wdGlvbmFsPENhcHR1cmVFdmVudD47
CiB1c2luZyBDYXB0dXJlRXZlbnRzID0gVmVjdG9yPENhcHR1cmVFdmVudD47CiB1c2luZyBDYXB0
dXJlQ2xvY2tUeXBlID0gV1RGOjpNb25vdG9uaWNUaW1lOwpJbmRleDogU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmNwcAkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMCArNDgsMTAgQEAgY29uc3QgV2ViQ29yZTo6VVJMJiBSZXNvdXJjZTo6dXJsKCkK
ICAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKICAgICAgICAgaWYgKCFl
dmVudCkKICAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90
IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9l
dmVudEZpbGVQYXRoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCisgICAgICAgIGVsc2UgaWYgKCFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCiAgICAgICAgICAgICBERUJV
R19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBoYXZlIGEgcmVxdWVzdFNlbnQgZXZl
bnQ6IGZpbGUgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgp
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJlcXVlc3RTZW50RXZlbnQgPSBX
VEY6OmdldDxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpOworICAgICAgICAgICAgYXV0byByZXF1
ZXN0U2VudEV2ZW50ID0gc3RkOjpnZXQ8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKICAgICAg
ICAgICAgIFdlYkNvcmU6OlVSTFBhcnNlciBwYXJzZXIocmVxdWVzdFNlbnRFdmVudC5yZXF1ZXN0
LnVybCk7CiAgICAgICAgICAgICBtX3VybCA9IHBhcnNlci5yZXN1bHQoKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tSZXBsYXk6OmVucXVldWVFdmVudAogICAgICAgICAgICAgICAgIHJlcGxheUZpbmlzaGVkKGV2
ZW50KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgIFdURjo6dmlzaXQodmlzaXRvciwgKmV2
ZW50KTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCAqZXZlbnQpOwogICAgIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAJKHJldmlzaW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNzEsMTIgKzIzNzEsMTIgQEAgYm9v
bCBBcmd1bWVudENvZGVyPENhcHR1cmVEZXZpY2U+OjpkZWNvZAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogdm9pZCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUoRW5jb2Rl
ciYgZW5jb2RlciwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBib29sIGlzU3Ry
aW5nID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOworICAgIGJvb2wg
aXNTdHJpbmcgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCk7CiAgICAg
ZW5jb2RlciA8PCBpc1N0cmluZzsKICAgICBpZiAoaXNTdHJpbmcpCi0gICAgICAgIGVuY29kZXIg
PDwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6Omdl
dDxTdHJpbmc+KGtleVBhdGgpOwogICAgIGVsc2UKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6Omdl
dDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8
VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwogfQogCiBib29sIEFyZ3VtZW50Q29kZXI8SURCS2V5
UGF0aD46OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJLZXlQYXRoJiBrZXlQYXRoKQpJbmRl
eDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNyArMTcxLDcgQEAgc3RydWN0IE1lZGlhQ29uc3Ry
YWludHM7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKLXVzaW5nIElEQktleVBhdGggPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+Owor
dXNpbmcgSURCS2V5UGF0aCA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9Vc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAkocmV2aXNpb24g
MjIwOTE1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKGNvbnN0IE1lZGlhVGltZSYgdGltZSwg
Y29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGF1ZGlvRGF0YSwgY29uc3QgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIHNpemVfdCBudW1iZXJPZkZyYW1lcykgZmluYWwgewogICAg
ICAgICBpZiAobV9kZXNjcmlwdGlvbiAhPSBkZXNjcmlwdGlvbikgewogICAgICAgICAgICAgQVNT
RVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVz
Y3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgICAgICAgICAgbV9kZXNjcmlw
dGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgICAgICAgICAg
bV9kZXNjcmlwdGlvbiA9ICpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOwogCiAg
ICAgICAgICAgICAvLyBBbGxvY2F0ZSBhIHJpbmcgYnVmZmVyIGxhcmdlIGVub3VnaCB0byBjb250
YWluIDIgc2Vjb25kcyBvZiBhdWRpby4KICAgICAgICAgICAgIG1fbnVtYmVyT2ZGcmFtZXMgPSBt
X2Rlc2NyaXB0aW9uLnNhbXBsZVJhdGUoKSAqIDI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDIyMDkxNSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Z3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1OSw3ICszNTksNyBAQCB2b2lkIHdlYmtpdF9kb21faHRtbF9zZWxlY3RfZWxlbWVudF9hZGQo
CiAgICAgV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2Vs
Zik7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEVsZW1lbnQgPSBXZWJLaXQ6
OmNvcmUoZWxlbWVudCk7CiAgICAgV2ViQ29yZTo6SFRNTEVsZW1lbnQqIGNvbnZlcnRlZEJlZm9y
ZSA9IFdlYktpdDo6Y29yZShiZWZvcmUpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRp
b25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2YXJpYW50
RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNvbnZlcnRl
ZEVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZkb3duY2FzdDxXZWJDb3JlOjpI
VE1MT3B0aW9uRWxlbWVudD4oKmNvbnZlcnRlZEVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGlzPFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvbnZlcnRlZEVsZW1lbnQpKQpJbmRleDogU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTE1KQorKysgU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MTctMDgtMTcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQg
YSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIERPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbToKKyAgICAgICAgKC1b
RE9NSFRNTFNlbGVjdEVsZW1lbnQgYWRkOmJlZm9yZTpdKToKKwogMjAxNy0wOC0xNyAgRG9uIE9s
bXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtQQUxdIFJlbG9jYXRl
IFNlc3Npb25JRCB0byByb290CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
SFRNTFNlbGVjdEVsZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCShyZXZpc2lvbiAyMjA5MTUpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE4NSw3ICsxODUsNyBAQCAtICh2b2lkKWFkZDooRE9NSFRNTEVsZW1lbnQgKill
bGVtZW50IGJlCiAgICAgICAgIHJhaXNlVHlwZUVycm9yRXhjZXB0aW9uKCk7CiAKICAgICBhdXRv
JiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOwotICAgIFZhcmlhbnQ8UmVmUHRyPFdlYkNv
cmU6OkhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1l
bnQ+PiB2YXJpYW50RWxlbWVudDsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFdlYkNvcmU6OkhU
TUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+PiB2
YXJpYW50RWxlbWVudDsKICAgICBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KGNv
cmVFbGVtZW50KSkKICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93bmNhc3Q8V2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ+KGNvcmVFbGVtZW50KTsKICAgICBlbHNlIGlmIChpczxXZWJDb3Jl
OjpIVE1MT3B0R3JvdXBFbGVtZW50Pihjb3JlRWxlbWVudCkpCkluZGV4OiBUb29scy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5MTUpCisrKyBU
b29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0wOC0x
NyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJldHRl
ciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHA6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNy0wOC0xOCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIy
MDg1NC4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShy
ZXZpc2lvbiAyMjA5MTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzcgKzM3LDM3IEBAIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIAogVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKIHsKLSAgICBWYXJpYW50PGlu
dCwgZG91YmxlPiB2MTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOwogICAgIEVY
UEVDVF9UUlVFKHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50
Pih2MSkgPT0gMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CiAK
ICAgICBzdHJ1Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0KICAgICAgICAgaW50
IHZhbHVlOwogICAgIH07CiAKLSAgICBWYXJpYW50PFQsIGludD4gdjI7CisgICAgc3RkOjp2YXJp
YW50PFQsIGludD4gdjI7CiAgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKLSAgICBF
WFBFQ1RfVFJVRShXVEY6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJh
c2ljKQogewotICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIHN0ZDo6
dmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFu
dC5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkg
PT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7
Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRy
KTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkp
OwotICAgIEVYUEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFu
dCkpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAg
RVhQRUNUX1RSVUUoKnN0ZDo6Z2V0X2lmPGludD4oJnZhcmlhbnQpID09IDEpOworICAgIEVYUEVD
VF9UUlVFKHN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVY
UEVDVF9UUlVFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CiAKICAg
ICB2YXJpYW50ID0gMS4wOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsK
LSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOwotICAgIEVY
UEVDVF9UUlVFKCpXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7Ci0gICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBFWFBF
Q1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwotICAgIEVY
UEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVY
UEVDVF9UUlVFKHN0ZDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RS
VUUoKnN0ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RS
VUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1Rf
RkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVTVChX
VEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTggKzk0LDE4IEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIEJhc2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKLSAg
ICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNp
dChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwg
U3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlh
bnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFu
dCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBz
dGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6
OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZp
c2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBl
KSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQog
CkBAIC0xMjcsMTIgKzEyNywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBSZXRhaW5QdHIpCiAgICAg
CiAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmUHRyOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IHJldGFpblB0cjsKLSAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPj4gdmFyaWFudChXVEZNb3ZlKHJlZlB0cikpOwotICAgIFdURjo6dmlzaXQodmlzaXRv
ciwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPj4gdmFyaWFudChXVEZNb3ZlKHJlZlB0cikpOworICAgIHN0ZDo6dmlzaXQo
dmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmVmUHRyID09IHR5cGUp
OwogICAgIAogICAgIHZhcmlhbnQgPSBXVEZNb3ZlKHJldGFpblB0cik7Ci0gICAgV1RGOjp2aXNp
dCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwog
ICAgIEVYUEVDVF9UUlVFKFR5cGU6OlJldGFpblB0ciA9PSB0eXBlKTsKIH0KICNlbmRpZgpAQCAt
MTU0LDE4ICsxNTQsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nTWFrZVZpc2l0
bwogICAgICAgICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KICAgICApOwog
Ci0gICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwotICAgIFdURjo6
dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJpYW50PGludCwgZmxvYXQsIFN0
cmluZz4gdmFyaWFudCA9IDg7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAg
ICBFWFBFQ1RfVFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBm
OwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpGbG9hdCA9PSB0eXBlKTsKIAog
CiAgICAgdmFyaWFudCA9ICJoZWxsbyI7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50
KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5
cGU6OlN0cmluZyA9PSB0eXBlKTsKIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIFZpc2l0b3JVc2luZ1N3aXRjaE9uKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9u
ZTsKIAotICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBz
dGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKICAgICB0eXBlID0g
V1RGOjpzd2l0Y2hPbih2YXJpYW50LAogICAgICAgICBbXShpbnQpIHsgcmV0dXJuIFR5cGU6Oklu
dDsgfSwKICAgICAgICAgW10oZmxvYXQpIHsgcmV0dXJuIFR5cGU6OkZsb2F0OyB9LApAQCAtMjEz
LDcgKzIxMyw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIAog
ICAgIHsKICAgICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRy
PENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0
cik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKIAogICAgICAgICBF
WFBFQ1RfRVEoMXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNv
dW50KTsKICAgICAgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVy
OjpkZXN0cnVjdGlvbkNvdW50KTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKFdURl9WYXJpYW50
LCBSZWZQdHIpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQ
dHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+
LCBpbnQ+IHYgPSByZWY7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwg
aW50PiB2ID0gcmVmOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBk
ZXJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0yMzYsNyArMjM2
LDcgQEAgVEVTVChXVEZfVmFyaWFudCwgUmVmUHRyKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2Vy
IGEoImEiKTsKICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFy
aWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKICAg
ICB9CiAKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCku
Y19zdHIoKSk7CkBAIC0yNDcsNyArMjQ3LDcgQEAgVEVTVChXVEZfVmFyaWFudCwgUmVmKQogICAg
IHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVm
KGEpOwotICAgICAgICBWYXJpYW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJl
Zik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92
ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRh
a2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTI2NSwxMSArMjY1LDExIEBAIHB1YmxpYzoKIAogVEVT
VChXVEZfVmFyaWFudCwgT3BlcmF0b3JBbXBlcnNhbmQpCiB7Ci0gICAgVmFyaWFudDxIb2xkZXI8
aW50PiwgaW50PiB2ID0gSG9sZGVyPGludD4oMTApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0
PEhvbGRlcjxpbnQ+Pih2KS5kYXRhID09IDEwKTsKKyAgICBzdGQ6OnZhcmlhbnQ8SG9sZGVyPGlu
dD4sIGludD4gdiA9IEhvbGRlcjxpbnQ+KDEwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxI
b2xkZXI8aW50Pj4odikuZGF0YSA9PSAxMCk7CiAKICAgICB2ID0gMjA7Ci0gICAgRVhQRUNUX1RS
VUUoV1RGOjpnZXQ8aW50Pih2KSA9PSAyMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50
Pih2KSA9PSAyMCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318587</attachid>
            <date>2017-08-19 12:26:29 -0700</date>
            <delta_ts>2017-08-19 21:59:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170819122628.patch</filename>
            <type>text/plain</type>
            <size>366332</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTggIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCAzMi1iaXQgTWFjcm9Bc3NlbWJsZXI6OnByb2Jl
IHN1cHBvcnQgZm9yIFdpbmRvd3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwNzcsNyArODA3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5v
ZGUKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBjYWxsIGZ1bmN0aW9u
cyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFyaWFudDxTcGVjdWxh
dGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+
IG9wZXJhbmRzOworICAgIFZlY3RvcjxzdGQ6OnZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQs
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBKU0NfRE9N
SklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKICAg
ICBWZWN0b3I8R1BSUmVnLCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xV
RElOR19USElTPiByZWdzOwogCiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZdKEVkZ2UmIGVkZ2Up
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4OCw3ICszODg4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQoU3BlY3VsYXRlQ2VsbE9wZXJhbmQmJiBvdGhlcikKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZChTcGVjdWxhdGVDZWxsT3BlcmFuZCYmIG90aGVyKQogICAgIHsKICAgICAgICAgbV9q
aXQgPSBvdGhlci5tX2ppdDsKICAgICAgICAgbV9lZGdlID0gb3RoZXIubV9lZGdlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwyMSArNzIsMjEgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzR1BSKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVn
PihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQp
OwogICAgIH0KICAgICBGUFJSZWcgZnByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0ZQUigpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKICAgICB9CiAgICAgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSlNW
YWx1ZVJlZ3MoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJp
YW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBWYXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVn
cz4gbV92YXJpYW50OworICAgIHN0ZDo6dmFyaWFudDxHUFJSZWcsIEZQUlJlZywgSlNWYWx1ZVJl
Z3M+IG1fdmFyaWFudDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNy0w
OC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJl
dHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSW5QbGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvT3B0aW9uYWwuaDoKKyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICAobXBhcms6
OmxpYjo6Y3BwMTQ6OmFycmF5OjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKG1wYXJrOjps
aWI6OmNwcDE3OjpkZXRhaWw6Omludm9rZV9yZXN1bHQ8dm9pZF90PGRlY2x0eXBlKToKKyAgICAg
ICAgKG1wYXJrOjpsaWI6OmNwcDE3OjphZGRyZXNzb2YpOgorICAgICAgICAobXBhcms6OmxpYjo6
Y3BwMTc6OmRldGFpbDo6aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsKToKKyAgICAgICAgKG1wYXJr
OjpsaWI6OmNwcDE3OjpkZXRhaWw6OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjp0
eXBlX3BhY2tfZWxlbWVudF9pbXBsOjpkZWNsdHlwZSk6CisgICAgICAgIChzdGQ6OnRocm93X2Jh
ZF92YXJpYW50X2FjY2Vzcyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWxsKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjpmaW5kX2luZGV4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpmaW5kX2lu
ZGV4X2ltcGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnRyYWl0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpjb21tb25fdHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFp
dF9pbXBsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6
Z2V0X2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWNjZXNzOjpyZWN1cnNpdmVfdW5pb246
OmdldF9hbHRfaW1wbDo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
OjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OmJhc2U6OkFVVE9fUkVGUkVGX1JFVFVSTik6CisgICAgICAg
IChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6YXQpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6OnZpc2l0YXRpb246OmJhc2U6OnZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2spOgor
ICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZkaWFnb25hbCk6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2ltcGwp
OgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6Om1ha2VfZm1hdHJpeCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2lt
cGw6OmltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXM6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50Ojp2YWx1ZV92aXNpdG9yOjpE
RUNMVFlQRV9BVVRPX1JFVFVSTik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFsdDo6YWx0KToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTik6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6YmFzZTo6YmFzZSk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
YmFzZTo6aW5kZXhfKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjphc19iYXNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjpkYXRhKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpzaXplKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0RFU1RSVUNU
T1IpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2Fs
dCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29uc3RydWN0b3I6OmdlbmVyaWNfY29uc3RydWN0
KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1Ip
OgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6ZW1wbGFjZSk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6YXNzaWdubWVudDo6YXNzaWduZXI6Om9wZXJhdG9yKCkgY29uc3QpOgorICAg
ICAgICAoc3RkOjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmFzc2lnbl9hbHQpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmdlbmVyaWNfYXNzaWduKToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
OmltcGw6OmFzc2lnbik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcHBlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6bW92ZV9ub3Rocm93IGNvbnN0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjpvdmVybG9hZDw+OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6
dmFyaWFudDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjp2YXJpYW50OjplbXBsYWNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpnZW5lcmljX2dldF9pbXBsOjpnZW5lcmljX2dldF9pbXBsKToK
KyAgICAgICAgKHN0ZDo6Z2V0KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChzdGQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjwpOgorICAgICAgICAo
c3RkOjpvcGVyYXRvcj4pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKHN0
ZDo6b3BlcmF0b3I+PSk6CisgICAgICAgIChzdGQ6Om5vZXhjZXB0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpoYXNoOjptZWV0c19yZXF1aXJlbWVudHMpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Omhhc2g6OmlzX2VuYWJsZWQpOgorICAgICAgICAoV1RGOjpzd2l0Y2hPbik6CisgICAgICAgIChX
VEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X190aHJvd19iYWRfdmFyaWFu
dF9hY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjo9KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0X3JyZWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpf
X3ZhcmlhbnRfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fY29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fc3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3Rv
cmFnZV93cmFwcGVyPF9UeXBlOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fdmFyaWFudF9iYXNlOjp+X192YXJpYW50X2Jhc2UpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19tb3ZlX2NvbnN0cnVjdF9mdW5j
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fZGVzdHJv
eV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19iYWNr
dXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9f
ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6On5fX2Jh
Y2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmFyaWFudDw+Ojpzd2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19OT0VYQ0VQVF8pOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX3ZhcmlhbnRfYWNjZXNzb3I6OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Omdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmdldF9pZik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ol9fdmlzaXRvcl90YWJsZTo6X190cmFtcG9saW5lX2Z1bmMpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp2aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYXJnX3NlbGVjdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdF9oZWxwZXIyOjpfX3Zpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9w
ZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj49KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9faGFzaF92aXNpdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHA6CisgICAgICAgIChXVEY6Om1hcE1vZGVU
b0JhY2tpbmdJdGVyYXRvcik6CisgICAgICAgICogd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1h
Yy5tbToKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKwogMjAxNy0w
OC0xOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIwOTM4LgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcg
QEAKIAkJN0FGRUM2QUUxRUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzRjcyMzkxRDc4ODExOTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBs
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJC
RjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
U09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUz
MjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgy
QjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVB
MDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNG
RiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5k
ZW50ZXIuaCAqLywKKwkJCQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICov
LAogCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0
b3IuaCAqLywKIAkJCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
Ki8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IGNsYXNzIHZhcmlhbnQ7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PiBjbGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTcz
LDUgKzczLDQgQEAgdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJ
bXBsOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11
c2luZyBXVEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0luUGxhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNz
dGRkZWY+CisKK25hbWVzcGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGlj
aXQgaW5fcGxhY2VfdCgpID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
ST4KKyAgc3RydWN0IGluX3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90
KCkgPSBkZWZhdWx0OyB9OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5f
cGxhY2VfdHlwZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9Owor
CisgIGNvbnN0ZXhwciBpbl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+IGNvbnN0ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4g
aW5fcGxhY2VfdHlwZXt9OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDE0ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1
dGlsaXR5PgotIyBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJf
bGlzdD4KICMgaW5jbHVkZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRl
IDxpbml0aWFsaXplcl9saXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0
cmluZz4KKyMgaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGlu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBp
bmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
ICMgZGVmaW5lIFRSMl9PUFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPF9fVkFfQVJHU19fOjp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4
NCw4IEBAIGNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAy
MC41LjYsIEluLXBsYWNlIGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90
e30gaW5fcGxhY2V7fTsKLQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxh
Y2V7fTsKKy8vIGluX3BsYWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNv
IGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5n
YWdlZCBzdGF0ZSBpbmRpY2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMDc5ICsxLDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0
d2FyZSBTb2x1dGlvbnMgTHRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFy
aWFudAogLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3IKLS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlCi0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29w
eXJpZ2h0IE1pY2hhZWwgUGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWlt
ZXIuCisvLyBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0
aCwgMjAwMwogLy8KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUg
c29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRo
aXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBk
aXN0cmlidXRlLAorLy8gZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisv
LyBkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
Ci0vLyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4KLS8vIHBlcm1pc3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNv
ZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3Zl
IGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciwKKy8vIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhl
IFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJl
IHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2Vu
ZXJhdGVkIGJ5CisvLyBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAot
Ly8gSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0vLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LAotLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
Ky8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQKKy8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVU
SU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJ
U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSCisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGll
ZCBmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3
ZmE3ODg2NDhmNzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBz
Oi8vZ2l0aHViLmNvbS9tcGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFy
aWFudC5ocHAgKGMyNmI4NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8v
IE1vZGlmaWVkIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisv
LyBNb2RpZmllZCB0byB1c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgs
IGFuZCBpbmNsdWRlIFdURjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoK
KyAgIHZhcmlhbnQgc3lub3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBj
bGFzcyB0ZW1wbGF0ZSB2YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xh
c3MgdmFyaWFudCB7CisgIHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMK
KyAgICBjb25zdGV4cHIgdmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFu
dChjb25zdCB2YXJpYW50Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBi
ZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBu
b2V4Y2VwdChzZWUgYmVsb3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBB
cmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5
cGVfdDxUPiwgaW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRl
IDxzaXplX3QgSSwgY2xhc3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFu
dChpbl9wbGFjZV9pbmRleF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVf
dCBJLCBjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJp
YW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBB
cmdzJiYuLi4pOworCisgICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgp
OworCisgICAgLy8gMjAuNy4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgdmFyaWFudCYpOworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhj
ZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0
b3I9KFQmJikgbm9leGNlcHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmll
cnMKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNl
KEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4g
QXJncz4KKyAgICBUJiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCB2YXJpYW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0
aXZlPEksIHZhcmlhbnQ+JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7
CisKKyAgICAvLyAyMC43LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXpl
X3QgaW5kZXgoKSBjb25zdCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAg
dm9pZCBzd2FwKHZhcmlhbnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIw
LjcuMywgdmFyaWFudCBoZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IHZhcmlhbnRfc2l6ZTsgLy8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNv
bnN0ZXhwciBzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOwor
CisgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisK
KyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlh
bnQ8VHlwZXMuLi4+PjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEks
IGNsYXNzIFQ+CisgIHVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGls
ZSBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5
cGVzLi4uPj47CisKKyAgY29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAv
LyAyMC43LjQsIHZhbHVlIGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBl
cz4KKyAgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4u
Pj4mCisgIGdldCh2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBs
YXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBj
b25zdCYmCisgIGdldChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MuLi4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgVCYmIGdldCh2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+Cisg
IGNvbnN0ZXhwciBjb25zdCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisg
IHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9p
bnRlcl90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdl
dF9pZih2YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3Qg
SSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlh
bnQ8VHlwZXMuLi4+Kikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4u
IFR5cGVzPgorICBjb25zdGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29u
c3QgdmFyaWFudDxUeXBlcy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9u
YWwgb3BlcmF0b3JzCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMu
Li4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4oY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiYpOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+
Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4m
KTsKKworICAvLyAyMC43LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3Is
IGNsYXNzLi4uIFZhcmlhbnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3Im
JiwgVmFyaWFudHMmJi4uLik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3Ry
dWN0IG1vbm9zdGF0ZTsKKworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJh
dG9ycworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUp
IG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0
YXRlKSBub2V4Y2VwdDsKKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1v
bm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRl
LCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9z
dGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFs
Z29yaXRobXMKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFu
dDxUeXBlcy4uLj4mLCB2YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisK
KyAgLy8gMjAuNy4xMCwgY2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJp
YW50X2FjY2VzczsKKworICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBoYXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBo
YXNoPHZhcmlhbnQ8VHlwZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0
YXRlPjsKKworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgor
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxp
bWl0cy5oPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+
Ci0jaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0
aWxpdHk+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGls
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4
MTQpCisKKy8vIE1TVkMgMjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wg
JiYgKCFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vy
cm9yICJNUGFyay5WYXJpYW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNp
ZiAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hh
c19idWlsdGluCisjZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXVEYgeworI2lmbmRlZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkg
MAorI2VuZGlmCiAKLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBf
X1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5l
IF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5v
ZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19l
eGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwot
I2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19i
dWlsdGluKF9fYnVpbHRpbl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykg
JiYgX19HTlVDX18gPj0gNykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJ
TFRJTl9BRERSRVNTT0YKICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFz
X2J1aWx0aW4oX190eXBlX3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VM
RU1FTlQKKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVl
X2hvbGRlcjsKLX07CisjaWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0
ZXhwciA+PSAyMDEzMDQKKyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAor
I2lmIF9faGFzX2ZlYXR1cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0
aW9ucykKKyNkZWZpbmUgTVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFj
ZV90YWcgewotICAgIGluX3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9f
Y3BwX2dlbmVyaWNfbGFtYmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktf
R0VORVJJQ19MQU1CREFTCisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3Rh
ZygmKShfX2luX3BsYWNlX3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2Vy
X3NlcXVlbmNlKQorI2RlZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFn
KCYpKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZp
bmVkKF9fY3BwX3JldHVybl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNp
emVfdCBfSW5kZXg+Ci11c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9f
aW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQo
X19jcHBfbGliX3RyYW5zcGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFn
IGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFi
bGVfdGVtcGxhdGVzKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJM
RV9URU1QTEFURVMKKyNlbmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90
YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7
Ci0gICAgX19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFk
ZWZpbmVkKF9fR0xJQkNYWF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRT
CisjZWxpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+
KSAgLy8gPj0gbGlic3RkYysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlU
UworI2VuZGlmCiAKLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3Bs
YWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAg
X19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRf
dmFyaWFudF9hY2Nlc3M6IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4
cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgot
ICAgICAgICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQg
YmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjps
b2dpY19lcnJvcih3aGF0X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3MoY29uc3QgY2hhciogd2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJp
YW50X2FjY2Vzcyh3aGF0X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVt
ZW50YXRpb24gbW92ZWQgdG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9p
bmRleF9oZWxwZXI7CisjZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+
IGRlY2x0eXBlKF9fVkFfQVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJr
IHsKKyAgbmFtZXNwYWNlIGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IGlkZW50aXR5IHsgdXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNl
IGNwcDE0IHsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAg
ICAgc3RydWN0IGFycmF5IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10o
c3RkOjpzaXplX3QgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07
CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9o
ZWxwZXI8X09mZnNldCxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0
KzEsX1R5cGUsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9P
ZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9p
bmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4
X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2luZGV4ZWRfdHlwZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2luZGV4ZWRfdHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lk
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLl9UeXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNp
emVvZi4uLihfVHlwZXMpLTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1jbGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVj
dCB2YXJpYW50X3NpemU7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJp
YW50X3NpemU8Y29uc3QgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4g
OiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1z
dHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxf
VHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFu
dF9zaXplPFZhcmlhbnQ8X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8
c2l6ZV90LCBzaXplb2YuLi4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2Fs
dGVybmF0aXZlPF9JbmRleCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRf
Y29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1w
bGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRk
X3ZvbGF0aWxlX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQot
dGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRf
YWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlw
ZT1zdGQ6OmFkZF92b2xhdGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2
ZV90PF9JbmRleCxfVHlwZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50
PF9UeXBlcy4uLj4+ewotICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9u
cG9zPS0xOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3Qm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoCi0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJk
aWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0
X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25z
dD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRl
cl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdl
dF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYo
Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0K
LXRlbXBsYXRlPHNpemVfdCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2No
YXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9f
Y291bnQ+U0hSVF9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5U
X01BWCk+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQg
Y2hhciBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rp
c2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYg
c2lnbmVkIHNob3J0IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3Ry
dWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0
eXBlZGVmIGludCBfX3R5cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRl
ZiBzaWduZWQgbG9uZyBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCBfX3N0b3JlZF90eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAg
IHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Rhcmdl
dCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0
aWJsZXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25v
dGhyb3dfY29uc3RydWN0aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9
dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PAotICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFk
LF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0
YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9f
dmFsdWU9Ci0gICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0g
ICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlICYmCi0gICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBi
b29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55
X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQ+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVx
dWlyZWQ8VmFyaWFudDxfVHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4u
LihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotdW5pb24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3Zh
cmlhbnRfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRh
W04gPT0gMCA/IDEgOiBOXTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1
cm4gX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dl
dF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9f
dmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Cisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0
eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWdu
ZWRfc3RvcmFnZTxzaXplb2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB2b2lkIF9fY29uc3RydWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAg
ICBuZXcgKF9fcCkgX1R5cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlw
ZV90ID0gdHlwZW5hbWUgc3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0g
ICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3Rp
YmxlPF9EdW1teT46OnZhbHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6Kiko
KT46OnR5cGUgPSBudWxscHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0
eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9E
dW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFs
dWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxw
dHIpIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1l
IC4uLiBfQXJncz4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3
YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVz
aW5nIGVuYWJsZV9pZl90ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAK
LSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+
KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBf
VHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxf
VHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAg
fQotICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAg
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2Nv
bnN0X3QgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBf
VHlwZSogX19zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25z
dGV4cHIgX19zdG9yYWdlX3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2Uo
Jl9fYXJnKXt9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92
ZV9yZWZlcmVuY2VfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsK
IAotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9
Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1
cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgICBpbmxpbmUgY29uc3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAm
dCkgbm9leGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAg
ICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlLGZhbHNlPnsKLSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5
cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIg
VCAmJmZvcndhcmQocmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1
ZSIpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAg
cmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUm
JiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9f
dmFsLl9fZ2V0KCkpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBf
X2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0
KCkpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0g
ICAgICAgIF9fdmFsLl9fZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYm
bW92ZShUICYmdCkgbm9leGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAg
dHlwZWRlZiBfVHlwZSogX190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9z
ZXF1ZW5jZSA9IHN0ZDo6aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMg
Y29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpf
X3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5
cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVy
biAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYo
X190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAg
IHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90Li4uIElzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4
X3NlcXVlbmNlPElzLi4uPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFr
ZV9pbmRleF9zZXF1ZW5jZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0
YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBf
VHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rl
c3Ryb3koX190eXBlJil7fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAg
ICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRz
Li4uPjsKKyNlbHNlCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAg
IHN0cnVjdCBpbnRlZ2VyX3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsg
cmV0dXJuIHNpemVvZi4uLihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdC4uLiBJcz4KKyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1
ZW5jZTxzdGQ6OnNpemVfdCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhz
LCB0eXBlbmFtZSBSaHM+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7
CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJo
cz4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5j
ZTxMaHMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
X3NlcXVlbmNlPFJocy4uLj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxM
aHMuLi4sIChzaXplb2YuLi4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE4+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOwor
CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhf
c2VxdWVuY2UgPSB0eXBlbmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisK
KyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhf
c2VxdWVuY2VfaW1wbAorICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFr
ZV9pbmRleF9zZXF1ZW5jZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWtlX2luZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRl
PD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCl7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZT57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUg
X192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4
cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90
PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2lu
ZGV4X3NlcXVlbmNlX2ltcGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAot
ICAgIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9f
dmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9f
ZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1
Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8
MD4+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRh
PF9UeXBlJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBl
IF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lLi4uIFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFr
ZV9pbmRleF9zZXF1ZW5jZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHBy
IF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lm
ZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBz
dGQ6OmVxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29u
c3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAg
ICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihy
aHMpKQorICAgICAgfTsKKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9Bcmdz
JiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pe30KKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IG5vdF9lcXVhbF90byA9IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0
IG5vdF9lcXVhbF90byB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1l
IFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhz
LCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxo
cykgIT0gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBB
UktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47
CisjZWxzZQorICAgICAgc3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRv
cigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZv
cndhcmQ8TGhzPihsaHMpIDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5k
aWYKIAotICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0g
ICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0
X3JyZWYoX192YWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95
KF9fdmFsKTsKLSAgICB9Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUwor
ICAgICAgdXNpbmcgZ3JlYXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVj
dCBncmVhdGVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhz
PgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJo
cyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+
IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5h
bWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3Qg
X19kdW1teV90eXBle30gX19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRP
UlMKKyAgICAgIHVzaW5nIGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisg
ICAgICBzdHJ1Y3QgbGVzc19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMs
IHR5cGVuYW1lIFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCko
TGhzICYmbGhzLCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2Fy
ZDxMaHM+KGxocykgPD0gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYK
IAotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBB
UktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3Rk
OjpncmVhdGVyX2VxdWFsPD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgewor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlu
bGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25z
dAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2Fy
ZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3Bs
YWNlX2luZGV4X3Q8MD4sX0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9Cisg
ICAgaW5saW5lIG5hbWVzcGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46
Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5f
cGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlw
ZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9f
Z2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Zh
cmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZv
aWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSYmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5
cGVfdHJhaXRzPgorICAgICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29u
c3RhbnQgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVh
ZCxfUmVzdC4uLj57Ci0gICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3Zh
cmlhbnRfZGF0YTxfUmVzdC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9k
YXRhKCk6Ci0gICAgICAgIF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBf
QXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBl
bmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4PixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxh
Y2U8X0luZGV4LTE+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+
IHt9OwogCi0gICAgX0hlYWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBy
ZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMu
Li4+Ojp0eXBlOwogCi0gICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5f
cGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5f
cGxhY2U8MD4pOwotICAgIH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1l
c3BhY2Ugc3dhcHBhYmxlIHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3Jy
ZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19n
ZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBf
SW5kZXg+Ci0gICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+Ojpf
X3R5cGUmIF9fZ2V0KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAg
ICByZXR1cm4gX19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAg
ICAgIHVzaW5nIHN0ZDo6c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAg
Lypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46
Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBj
b25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYg
X19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9p
bXBsIHsKKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3Rk
OjpkZWNsdmFsPFUgJj4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpkZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRp
YyBzdGQ6OnRydWVfdHlwZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8
X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFj
ZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3ko
aW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9w
bGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICAgICAgICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4u
KTsKIAorICAgICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0
eXBlKHRlc3Q8VD4oMCkpOworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRl
eF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3Ry
dWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8
MD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2lu
ZGljZXM7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50
X2luZGljZXM8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFy
aWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rf
b3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5j
X3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAg
ICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1w
bGF0ZSBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
Z2V0PF9JbmRleD4oX19yaHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorICAgICAgICAgIHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJs
ZV9pbXBsPFQ+Ojp0eXBlOwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlb
c2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCBib29sID0gaXNfc3dhcHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90
aHJvd19zd2FwcGFibGUgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
ID0KKyAgICAgICAgICAgICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0
ZDo6ZGVjbHZhbDxUICY+KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2Nv
bnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
OgotX19mdW5jX3R5cGUKLV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19u
b3Rocm93X3N3YXBwYWJsZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5h
bWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4o
Kl9fbGhzKT1zdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0g
IC8vIG5hbWVzcGFjZSBzd2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAot
ICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyld
OwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBh
YmxlID0gZGV0YWlsOjpzd2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
bW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGlj
ZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2Fw
cGFibGUgPSBkZXRhaWw6OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlw
ZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5
X2NvbnN0cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBj
b25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3Ry
dWN0X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhz
KXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigK
LSAgICAgICAgICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0
aW9uYWw+CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGUgOiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RiwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYg
JiZmLCBBcyAmJi4uLiBhcykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5n
KHBvcCkKKyNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQg
Qjo6KnBtdiwgRCAmJmQpCisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12
KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgot
Y29uc3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rf
b3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5
WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3Rf
ZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwg
dHlwZW5hbWUgUHRyPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12
LCBQdHIgJiZwdHIpCisgICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSku
KnBtdikKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9p
ZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9h
c3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19y
aHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwg
dHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6
KnBtZiwgRCAmJmQsIEFzICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJk
PEQ+KGQpLipwbWYpKGxpYjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYu
Li4gYXMpCisgICAgICAgICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYp
KGxpYjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFj
ZSBkZXRhaWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVu
YW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBl
Pgotc3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgq
IGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19zZWxmKXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAg
ICAgICAgIF9fc2VsZi0+X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1l
LCB0eXBlbmFtZS4uLj4KKyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBz
dGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICBzdHJ1Y3QgaW52b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNs
dmFsPEFyZ3M+KCkuLi4pKT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5
PGRlY2x0eXBlKAorICAgICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+
KCksIHN0ZDo6ZGVjbHZhbDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95
X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1
bmNfdHlwZQotX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX2Rlc3Ryb3lfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNw
YWNlIGRldGFpbAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVu
YW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBl
Pgotc3RydWN0IF9fc3dhcF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0
IF9fZnVuY190eXBlKShfVmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBf
VmFyaWFudCAmIF9fbGhzLF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5k
ZXg+KF9fbGhzKSxnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9
IGRldGFpbDo6aW52b2tlX3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBj
b25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52
b2tlX3Jlc3VsdF90ID0gdHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNv
bnN0IHR5cGVuYW1lIF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRp
Y2VzKV09ewotICAgICAgICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAg
IG5hbWVzcGFjZSBkZXRhaWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAg
ICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50
Pjo6X190eXBlPgotc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9v
cF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlw
ZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9W
YXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBy
ZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAg
ICAgICBzdHJ1Y3QgaXNfaW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXpl
b2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5k
aWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9y
ZXN1bHRfdDxGLCBBcmdzLi4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1
ZV90eXBlIHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9f
ZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjpfX2VxdWFsaXR5X2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5h
bWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3Ro
YW5fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFy
ZV9mdW5jX3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAg
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9f
bGVzc190aGFuX2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9W
YXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8
Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZv
aWQsIHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19p
bnZvY2FibGVfciA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X19jb21wYXJlX2Z1bmNfdHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAg
ICB9OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tl
X3Jlc3VsdF90PEYsIEFyZ3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncy4uLj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZv
a2VfcmVzdWx0X3Q8RiwgQXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190
aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1f
X2NvbXBhcmVfZnVuY190eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV07CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlz
X2ludm9jYWJsZSA9IGRldGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3Ry
dWN0IF9fdmFyaWFudF9iYXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0
YXRpY19jYXN0PF9EZXJpdmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgdXNpbmcgaXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZv
aWQsIFIsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVj
dCBfX3ZhcmlhbnRfYmFzZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0g
ICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxf
aW5kaWNlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
PiwKLSAgICBfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Fs
bF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4sX09mZnNldD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1
ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxf
aW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zm
c2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19h
bGxfaW5kaWNlc19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0
eXBlZGVmIF9DdXJyZW50U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9z
ZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
Mj4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMxLi4uPixfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYg
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fY29tYmluZV9zZXF1ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAg
dHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0
X2luZGV4OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBf
UmVzdD4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgs
X1Jlc3QuLi4+PnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJz
dEluZGV4OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJl
bnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX09mZnNldCx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9U
eXBlPnsKLSAgICB0eXBlZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29s
IF9BY2NlcHQscHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewot
ICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfRW50cnk+Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57
Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAg
ICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVu
dFNlcXVlbmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5h
bWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0g
ICAgICAgIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVu
dFNlcXVlbmNlLAotICAgICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwK
LSAgICAgICAgICAgICAgICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlw
ZSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAg
ICAgICAwLF9faW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19h
bGxfaW5kaWNlczxfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PF9UeXBlPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192
YWx1ZV9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAg
ICAgX1R5cGUsCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAg
ICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAg
ICAgID46OnR5cGUuLi4+OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQot
ICAgIF9fY29uc3RydWN0aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19k
aXJlY3RfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAot
ICAgICAgICAoX19jb25zdHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNv
bnZlcnNpb24gY29uc3RydWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3Qg
YmUgY29uc3RydWN0aWJsZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5l
X3NlcXVlbmNlczwKLSAgICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19y
cmVmX21hdGNoZXMsCi0gICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0
Y2hlczsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmly
c3RfaW5kZXg8X19hbGxfbWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5k
ZXgsCi0gICAgICAgIGJvb2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19p
bmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVu
YW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29w
X3RhYmxlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlw
ZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFu
dCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19z
dGFnZV9yZXBsYWNlPF9JbmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1l
bW9yeT4KKyNpZmRlZiBNUEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsK
KyAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNl
CisgICAgICBuYW1lc3BhY2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9J
bmRleCwKLSAgICBib29sIF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9v
bCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9o
YXNfbm90aHJvd19tb3ZlLAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2Ug
aGFzX2FkZHJlc3NvZl9pbXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0
ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVs
cGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQg
JiYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4u
IF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9J
bmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaW1wbCgpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6
dmFsdWUgfHwgc3RkOjppc191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAg
IXN0ZDo6aXNfc2FtZTxkZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1
ZTsKKyAgICAgICAgICB9CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1
Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxz
ZSxmYWxzZSxmYWxzZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3Ys
X0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Cisg
ICAgICAgIH0gIC8vIG5hbWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSko
X1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0g
ICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMt
PnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRl
eD4oX19yaHMpKSk7Ci0gICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9
IGJvb2xfY29uc3RhbnQ8aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1
bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAg
ICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0lu
ZGV4PihfX3JocykpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNf
dHlwZSBfX21vdmVfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25z
dCBfX2NvcHlfZnVuY190eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgot
Y29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0g
ICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190
eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6
ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAg
ICAgICAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1l
IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9Owor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBU
ICphZGRyZXNzb2YoVCAmYXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4g
JmFyZzsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBf
TWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3Bz
ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3Jh
Z2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0
b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjpt
b3ZlKF9fc291cmNlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+
X19kZXN0cm95KGluX3BsYWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFt
ZXNwYWNlIGRldGFpbAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9y
YWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+
ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9y
YWdlJil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAg
IH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3Nv
ZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWls
OjpoYXNfYWRkcmVzc29mPFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3Ry
dWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVs
ZXRlOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8
Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+
Ci17Ci0gICAgdHlwZWRlZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rl
c3QsX1N0b3JhZ2UmIF9fc291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVu
Y190eXBlKShfU3RvcmFnZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4PgotICAgIHN0cnVjdCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wczxfSW5kZXgsX01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9
ICAvLyBuYW1lc3BhY2UgY3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBl
IF9fbW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVz
dHJveV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxl
PAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4g
Pjo6X19tb3ZlX2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFz
a0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9v
cHNbCi0gICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9J
bmRpY2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50
aXR5PFQ+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+Cisg
ICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4
dGVudHM8VD4ge307CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1v
dmVfYWxsX2V4dGVudHNfdCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsK
KworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQg
PSBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRy
ZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJ
bmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lf
ZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0
b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAg
ICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9f
b3BzOjpfX2Rlc3Ryb3lfZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVz
aW5nIGJvb2xfc2VxdWVuY2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVk
X3R5cGUgOiBzaXplX2NvbnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRl
IDxib29sLi4uIEJzPgorICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29s
X3NlcXVlbmNlPHRydWUsIEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisj
aWZkZWYgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlw
ZV9wYWNrX2VsZW1lbnQ8SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXpl
X3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwg
eworICAgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVj
dCBzZXQ7CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVj
dCBzZXQ8aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9
OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3Rk
OjplbmFibGVfaWY8dHJ1ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBp
bmxpbmUgc3RhdGljIHN0ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1
YmxpYzoKKyAgICAgIHVzaW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5j
ZV9mb3I8VHMuLi4+Pnt9KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRl
ZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRl
ZiBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5
cGUsdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3Bf
dGFibGVfdHlwZTsKLQotICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3Jh
Z2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0K
LSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90
eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5k
ZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1
cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19i
YWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5k
ZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0x
OwotICAgIH0KLSAgICAKLSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2Jh
Y2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNb
X19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1
cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAg
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVf
cGFja19lbGVtZW50ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46
OnR5cGU7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92
ZV9jb25zdHJ1Y3RpYmxlOworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4u
LiBUcz4KKyAgICB1c2luZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNr
X2VsZW1lbnQ8SSwgVHMuLi4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8
X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6
aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQ
RV9UUkFJVFMKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFs
bHlfY29weV9jb25zdHJ1Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9j
b25zdHJ1Y3RpYmxlPFQ+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcg
aXNfdHJpdmlhbGx5X21vdmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlh
bGx5X21vdmVfY29uc3RydWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0
ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0
ZDo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUK
KyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29u
c3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25z
dHJ1Y3RpYmxlIDogYm9vbF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFi
bGUKKyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlf
YXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxf
bW92ZV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxs
X21vdmVfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xf
Y29uc3RhbnQ8X19pc190cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAg
Ly8gbmFtZXNwYWNlIGxpYgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJF
VFVSTgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVl
ICYmIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxh
dGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBl
e307Ci0KLW5hbWVzcGFjZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lPgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX090aGVyPgotc3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19z
d2FwX3Jlc3VsdDxkZWNsdHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxz
dGQ6OmRlY2x2YWw8X090aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVz
cGFjZSBzdGQgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBw
YWJsZSB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9m
KF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYg
TVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUg
QVVUT19SRVRVUk4oLi4uKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9I
ZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3
YXBwYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVl
OwotfTsKKyNkZWZpbmUgQVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9S
RVRVUk4oLi4uKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19hbGxfc3dhcHBhYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9v
bCBfTW92ZUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhj
ZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
Y29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Nv
bnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1
Y3RfaW1wbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVz
Li4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhy
b3dfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNl
cHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8
dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbgotICAgIDogX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAg
ICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAg
ICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAg
ICAgICBfVHlwZXMuLi4+IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8p
CisjZGVmaW5lIERFQ0xUWVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU7CisjZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4u
PgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4u
Lj46OnZhbHVlOwotfTsKKyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4u
LikgXAorICAtPiBtcGFyazo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyBy
ZXR1cm4gX19WQV9BUkdTX187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5l
IEFVVE9fUkVGUkVGX1JFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgLT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19yZWZlcmVuY2U8ZGVjbHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAg
cmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmlu
ZSBERUNMVFlQRV9BVVRPX1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18p
IHsgcmV0dXJuIF9fVkFfQVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29s
IF9Db3B5Q29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFk
IGNvbnN0Jj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9p
bXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0
OgotX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1w
bGF0ZTxib29sIF9Db3B5Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFk
LF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hl
YWQoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29u
c3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6
OmRlY2x2YWw8X0hlYWQmPigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBf
X25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25v
ZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNz
IFZhcmlhbnQ6Ci0gICAgICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxf
VHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1
ZT4KLXsKLSAgICB0eXBlZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2Fs
bF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBl
OwotICAgIGZyaWVuZCBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25z
dHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWdu
X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9v
cF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFi
bGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFu
dD47Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzMj4KLSAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVu
ZCBzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFy
aWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUg
X19zdG9yYWdlOwotICAgIHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4g
KF9UeXBlcyk+OjpfX3R5cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgK
LSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKTsKLSAgICAgICAgcmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19k
ZXN0cm95X3NlbGYoKXsKLSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9f
YXBwbHlbaW5kZXgoKV0odGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAot
ICAgIHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAg
ICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAg
IGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBf
X21vdmVfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhd
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAg
ICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3Qg
X19jb3B5X2NvbnN0cnVjdChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlm
Zl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290
aGVyX2luZGV4PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2Nv
bnN0cnVjdF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9f
b3RoZXIpOwotICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJh
ZF92YXJpYW50X2FjY2VzcyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJi
YWRfdmFyaWFudF9hY2Nlc3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lk
IHRocm93X2JhZF92YXJpYW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisg
ICAgdGhyb3cgYmFkX3ZhcmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRl
KCk7CisjZW5kaWYKKyAgfQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci0gICAgdm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9o
ZWxwZXI6Ol9faGVscGVyPAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9y
YWdlX25vdGhyb3dfY29uc3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUg
fHwKLSAgICAgICAgICAgIChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0
b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAot
ICAgICAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAot
ICAgICAgICAgICAgICAgIF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+
OjpfX3RyYW1wb2xpbmUoKnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAg
IHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190
d29fc3RhZ2VfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwot
ICAgICAgICBfX3ZhcmlhbnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9w
bGFjZTwwPixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ry
b3lfc2VsZigpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAg
ICAgICBzdGQ6Om1vdmUoX19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19p
bmRleD1fSW5kZXg7Ci0gICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAg
ICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBf
X2xvY2FsX2JhY2t1cF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFj
a3VwX3N0b3JhZ2U8X0luZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2Up
OwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3Vw
Ll9fZGVzdHJveSgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4g
X19hcmdzKSB7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9j
b25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAg
ICBfX2luZGV4PV9JbmRleDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVT
CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFu
dF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3Qg
X19wcml2YXRlX3R5cGV7fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJp
YW50X3NpemU8Y29uc3QgVD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBj
b25zdGV4cHIgVmFyaWFudCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9y
YWdlKGluX3BsYWNlPDA+KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25z
dGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYm
IF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3Ry
dWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0
KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
VmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0g
ICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9j
b25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgo
X19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlh
bnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1k
ZWxldGU7Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhj
ZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAg
ICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNv
bnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChp
bl9wbGFjZV90eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3Rv
cmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiks
Ci0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUp
Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXpl
PHZvbGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlh
bnQoaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAg
IF9fc3RvcmFnZShpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
LiksCi0gICAgICAgIF9faW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0
aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3Jh
Z2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19j
b25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZv
cndhcmQ8X1R5cGU+KF9feCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25z
dHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsCi0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6
X190eXBlOjpfX2xlbmd0aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHBy
IFZhcmlhbnQoc3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0
b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90
b19jb25zdHJ1Y3Q8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3Zh
bHVlPiwKLSAgICAgICAgICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3Rv
X2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFs
dWUpCi0gICAge30KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJp
YW50JiBvcGVyYXRvcj0oX1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9J
bmRleD0KLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZTsKLSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAg
IGdldDxfSW5kZXg+KCp0aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4Pihz
dGQ6OmZvcndhcmQ8X1R5cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXpl
PGNvbnN0IHZvbGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAm
b3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAg
ICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0g
ICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0g
ICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIp
ID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3Np
Z25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRl
X3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAg
ICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCld
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9f
cmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNz
aWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8
VHMuLi4+PiA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisK
KyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50
X2FsdGVybmF0aXZlOworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgor
ICB1c2luZyB2YXJpYW50X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0
aXZlPEksIFQ+Ojp0eXBlOworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBU
PgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6
OmFkZF9jb25zdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2
ZTxJLCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFt
ZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgor
ICAgICAgOiBzdGQ6OmFkZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6Omlk
ZW50aXR5PG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAg
c3RhdGljX2Fzc2VydChJIDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFy
aWFudF9hbHRlcm5hdGl2ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0
ZXhwciBzdGQ6OnNpemVfdCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4o
LTEpOworCisgIG5hbWVzcGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29s
IGFsbCgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4K
KyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAg
IHJldHVybiBiICYmIGFsbChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6
ZV90IG5vdF9mb3VuZCA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3Rl
eHByIHN0ZDo6c2l6ZV90IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7
CisKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5k
X2luZGV4KCkgeworICAgICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVv
Zi4uLihUcyk+IG1hdGNoZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZh
bHVlLi4ufQorICAgICAgfTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsK
KyAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1hdGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9m
b3VuZCkgeworICAgICAgICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAg
ICAgICAgcmVzdWx0ID0gaTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICB9CisgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0o
Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9f
b3RoZXIpIHsKLSAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewot
ICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
KF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29w
X3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9f
b3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlw
ZT46OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgK
LSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAm
JgotICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21v
dmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAg
ICAgICAgICBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCld
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Rf
aGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAg
ICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKnRoaXM7CisjZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmlu
ZF9pbmRleF9pbXBsKHN0ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5l
IGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c2l6ZV90IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQg
PyBhbWJpZ3VvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5k
X2luZGV4X2ltcGwoaWR4LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRf
aW5kZXhfaW1wbChyZXN1bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3Rf
Zm91bmQsIDAsIHN0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2
b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFj
ZTxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBz
dGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBi
b29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICBy
ZXR1cm4gX19pbmRleD09LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgo
KSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAg
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1w
bCA9CisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkg
IT0gYW1iaWd1b3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVf
Y29uc3RhbnQ8ST4+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRz
PgorICAgIHVzaW5nIGZpbmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxm
aW5kX2luZGV4PFQsIFRzLi4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgor
ICAgIHN0cnVjdCBmaW5kX2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29u
c3RhbnQ8ST4geworICAgICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVj
aWZpZWQgdHlwZSBpcyBub3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1i
aWd1b3VzLCAidGhlIHNwZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRf
aW5kZXhfY2hlY2tlZCA9IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMu
Li4+KCk+OworCisgICAgc3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dh
cHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6
X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
ewotICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAg
ICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwot
ICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBj
bGFzcyBUcmFpdCB7IFRyaXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZT4gY2xhc3MgSXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZT4gY2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBU
cmFpdCB0cmFpdCgpIHsKKyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFs
dWUKKyAgICAgICAgICAgICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAg
ICAgICAgICAgIDogSXNBdmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJs
ZTsKKyAgICB9CisKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUuLi4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3Ry
YWl0KFRyYWl0cy4uLiB0cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2
aWFsbHlBdmFpbGFibGU7CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkg
eworICAgICAgICAgIHJlc3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBj
b21tb25fdHJhaXRfaW1wbChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1w
bGF0ZTw+Ci1jbGFzcyBWYXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsK
LSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qg
X19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIFRyYWl0cz4KKyAgICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBs
KFRyYWl0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRyYWl0IHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFpdHMuLi4gdHMpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3Rh
dGljX2Nhc3Q8aW50PihyZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2lt
cGwodCwgdHMuLi4pCisgICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0
LCB0cy4uLik7CiAgICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBf
X05PRVhDRVBUewotICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0
cy4uLiB0cykgeworICAgICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFs
bHlBdmFpbGFibGUsIHRzLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJp
YW50Jil7fQotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRy
YWl0cyB7CisgICAgICBzdGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90
cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJs
ZT4oKS4uLik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3Rp
YmxlX3RyYWl0ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVj
dGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2ln
bmFibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVf
dHJhaXQsCisgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4u
Lik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0
ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAg
ICAgICAgICAgICAgICAgICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXBhcms6OmxpYjo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAg
ICBzdGF0aWMgY29uc3RleHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAg
Y29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6aXNfZGVzdHJ1Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gX1R5cGVzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZD46OnR5cGUKLXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxf
VHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3
YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBu
YW1lc3BhY2UgYWNjZXNzIHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdl
dChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFn
ZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLX07CisgICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFS
S19SRVRVUk5fVFlQRV9ERURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+Cisg
ICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9w
bGFjZV9pbmRleF90PDA+KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8
Vj4odikuaGVhZF87CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlPihfX3YpOwotfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3Qg
ST4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYs
IGluX3BsYWNlX2luZGV4X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6
bGliOjpmb3J3YXJkPFY+KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAg
ICAgICAgfQorI2Vsc2UKKyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVt
bXkgPSB0cnVlPgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVG
IG9wZXJhdG9yKCkoViAmJnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
Z2V0X2FsdF9pbXBsPEkgLSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQor
ICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1
Y3QgZ2V0X2FsdF9pbXBsPDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFY+CisgICAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYg
JiZ2KSBjb25zdAorICAgICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZv
cndhcmQ8Vj4odikuaGVhZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFYsIHN0ZDo6c2l6ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFV
VE9fUkVGUkVGIGdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAg
QVVUT19SRUZSRUZfUkVUVVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8
Vj4odikpKQorI2VuZGlmCisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6
X192YWx1ZT4oc3RkOjptb3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAg
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRP
X1JFRlJFRl9SRVRVUk4ocmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBk
YXRhKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQor
ICAgICAgfTsKKworICAgICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
YmFzZTo6Z2V0X2FsdDxJPihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAg
IH07CisKKyAgICB9ICAvLyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRh
dGlvbiB7CisKKyAgICAgIHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNv
bnN0IFQgJmF0KGNvbnN0IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAg
ICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Ypewot
ICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9f
dik7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBl
bmFtZS4uLiBJcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6
OmxpYjo6cmVtb3ZlX2FsbF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBh
cms6OmxpYjo6YXJyYXk8VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgewor
ICAgICAgICAgIHJldHVybiBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3Qg
X1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4g
Z2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192
KSk7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5
cGVfY2hlY2soKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYs
IEZzPjo6dmFsdWUuLi4pLAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRg
IHJlcXVpcmVzIHRoZSB2aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgInJldHVybiB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3Rh
dGljIGNvbnN0ZXhwciBtcGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmNvbW1vbl90eXBlX3Q8bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAg
c2l6ZW9mLi4uKEZzKT4KKyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAg
ICAgICB1c2luZyByZXN1bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25f
dHlwZV90PG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92
aXNpdG9yX3JldHVybl90eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAor
ICAgICAgICAgICAgICAgICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19
OworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAg
IHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8g
c3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBp
bmRleCBpbiBnZXQiKSkKLSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsK
KyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAg
ICAgc3RydWN0IGltcGwgeworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVD
TFRZUEVfQVVUTyBkaXNwYXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQ
RV9BVVRPX1JFVFVSTihtcGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxGPihmKSwKKyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJ
cz4oc3RhdGljX2Nhc3Q8VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVf
dC4uLiBJcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3Bh
dGNoKG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JF
VFVSTigmZGlzcGF0Y2hlcjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRj
aCkKKworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5h
bWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlh
Z29uYWxfaW1wbCgpCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6
OmluZGV4ZWRfdHlwZTxJLCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBp
bmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19S
RVRVUk4obWFrZV9mYXJyYXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4p
KQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4u
LiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8g
bWFrZV9mZGlhZ29uYWwoKQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxf
aW1wbDxGLCBWLCBWcy4uLj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRl
eF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAg
ICAgc3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90
PFY+OjpzaXplKCkgPT0gbXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAg
ICAgICAgICAgICAiYWxsIG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7
CisgICAgICAgICAgcmV0dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAg
ICAgICAgICAgICBtcGFyazo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRl
Y2F5X3Q8Vj46OnNpemUoKT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9f
dil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAg
ICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50
IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRf
YWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYg
TVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0
aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9k
aXNwYXRjaDxGLCBWcy4uLj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYm
IF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6
Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92
ZShfX3YpKQotICAgICk7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVf
dC4uLiBJcywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHBy
IGF1dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9z
ZXF1ZW5jZTxJcy4uLj4sIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4g
bHMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8Riwg
VnMuLi4+KAorICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwg
SnM+e30sIGxzLi4uKS4uLik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlw
ZXMuLi4+OjpnZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19i
YWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwg
c3RkOjptb3ZlKF9fdikpCi0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYs
IHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1h
a2VfZm1hdHJpeCgpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMu
Li4+KAorICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAg
ICAgICAgICAgIG1wYXJrOjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVj
YXlfdDxWcz46OnNpemUoKT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1h
dHJpeF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAg
c3RydWN0IGltcGw7CisKKyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+Cisg
ICAgICAgICAgc3RydWN0IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7
CisgICAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0Cisg
ICAgICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRj
aDxGLCBWcy4uLj4obXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAg
ICAgIH07CisKKyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6
ZV90Li4uIEpzLCB0eXBlbmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6aW5kZXhfc2VxdWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4u
PiB7CisgICAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0
CisgICAgICAgICAgICAgIEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAg
ICAgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgp
Li4uKSkKKyAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUTyBtYWtlX2ZtYXRyaXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAg
ICB0eXBlbmFtZSBtYWtlX2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8Cisg
ICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAg
ICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNh
eV90PFZzPjo6c2l6ZSgpPi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9U
eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBl
X2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0
ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBp
bmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNp
emVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAg
ICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25h
bDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShh
c19iYXNlKG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAg
ICAgICBpbmRleCkobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4u
LikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2Fs
dChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVU
T19SRVRVUk4oCisgICAgICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpm
b3J3YXJkPFZzPih2cykpKS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLiko
bXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkK
KyAgICAgIH07CisKKyAgICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAg
ICAgICAgc3RydWN0IHZpc2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAg
c3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZp
c2l0b3IsIFZhbHVlcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAg
cmVxdWlyZXMgdGhlIHZpc2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2lu
dGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192
LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNp
ZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZSA6IDQxMDApCisjZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBF
X0FVVE8gb3BlcmF0b3IoKShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25z
dAorICAgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1w
YXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFs
dWVzKS4uLikpCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYK
KyAgICAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBf
X3YpewotICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAg
IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0
KF9fdikpKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAg
IHN0cnVjdCB2YWx1ZV92aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUg
Y29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0
CisgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNp
dF9leGhhdXN0aXZlX3Zpc2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3Is
CisgICAgICAgICAgICAgICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlKSkuLi4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGli
Ojpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4
cHIgQVVUTyBtYWtlX3ZhbHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAg
QVVUT19SRVRVUk4odmFsdWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZp
c2l0b3I+KHZpc2l0b3IpfSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBj
b25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9B
VVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9y
Pih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhw
ciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMp
CisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjps
aWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4u
LikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3Zh
bHVlX2F0KHN0ZDo6c2l6ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZz
ICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAg
ICB2aXNpdF9hbHRfYXQoaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3Zh
bHVlX3Zpc2l0b3IobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShW
aXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRP
X1JFVFVSTigKKyAgICAgICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFy
azo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAg
Ly8gbmFtZXNwYWNlIHZpc2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRl
eCwgdHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUg
PSBUOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0
cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlw
ZXMuLi4+OjpnZXQoX192KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
cHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHBy
IGFsdChpbl9wbGFjZV90LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFy
azo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJh
Z21hIHdhcm5pbmcocG9wKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4
KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2
YWx1ZTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJh
aXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4K
KyAgICB1bmlvbiByZWN1cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9y
Pgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBk
ZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewot
ICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2
YWw8X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3Is
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRl
ZiBWYXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0
dXJuX3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNp
dG9yJixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0g
ICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlz
aXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8
X1R5cGU+KF9fdikpOwotICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJh
aXQsIHN0ZDo6c2l6ZV90IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVj
dGlibGVUcmFpdCwgSW5kZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZF
X1VOSU9OKGRlc3RydWN0aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAg
ICAgICAgICBcCisgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIElu
ZGV4LCBULCBUcy4uLj4geyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
aW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5v
ZXhjZXB0ICAgICAgICBcCisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1
cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAg
ICAgICBcCisgICAgICAgIDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5p
b24oaW5fcGxhY2VfaW5kZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisg
ICAgICAgIDogdGFpbF8oaW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vy
c2l2ZV91bmlvbihjb25zdCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVm
YXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGRlc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlv
biAmb3BlcmF0b3I9KGNvbnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAg
XAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNoYXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJl
Y3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxf
OyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNj
ZXNzOjpyZWN1cnNpdmVfdW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICB9CisKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5
QXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVf
dW5pb24oKSA9IGRlZmF1bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihU
cmFpdDo6QXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1
cnNpdmVfdW5pb24oKSB7fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJh
aXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1
cnNpdmVfdW5pb24oKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJ
VkVfVU5JT04KKworICAgIHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1w
bGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNz
IGJhc2UgeworICAgICAgcHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBi
YXNlKHZhbHVlbGVzc190IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGlu
ZGV4XyhzdGF0aWNfY2FzdDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0
ZXhwciBiYXNlKGluX3BsYWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAg
ICA6IGRhdGFfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLiksCisgICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgICAgIHJldHVybiBpbmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAg
fQorCisgICAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFu
dF9ucG9zIDogaW5kZXhfOworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2lu
ZyBkYXRhX3QgPSByZWN1cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsK
KworICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7
IHJldHVybiBiOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZh
c19iYXNlKGNvbnN0IGJhc2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUg
Y29uc3RleHByIGJhc2UgJiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjpt
b3ZlKGIpOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNf
YmFzZShjb25zdCBiYXNlICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1
cm4gYi5kYXRhXzsgfQorICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90
ICZkYXRhKGNvbnN0IGJhc2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBp
bmxpbmUgY29uc3RleHByIGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjps
aWI6Om1vdmUoYikuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0
IGRhdGFfdCAmJmRhdGEoY29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUo
YikuZGF0YV87IH0KKworICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qg
c2l6ZSgpIHsgcmV0dXJuIHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1
bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFf
dCBkYXRhXzsKKyAgICAgIGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlz
aXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAg
Jl9fdHJhbXBvbGluZV9mdW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNz
OjpiYXNlOworICAgICAgZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9f
dHlwZQotdmlzaXQoX1Zpc2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3Yp
ewotICAgIHJldHVybiAoX192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBf
X3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIp
Ci0gICAgICAgIDogX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBv
bGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3Igewor
I2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlIDogNDEwMCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAg
ICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0
Ln5BbHQoKTsgfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlm
CisgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJp
YW50cz4KLXN0cnVjdCBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBk
ZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1Zh
cmlhbnRzPigpKS4uLikpCi0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJp
YW50SW5kZXgsdHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVu
YW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+Ojpf
X3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192
KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAg
IH0KLX07CisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5l
IElOSEVSSVRJTkdfQ1RPUih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHR5cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJ
TkdfQ1RPUih0eXBlLCBiYXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9y
X3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3Ry
dWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9I
ZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktf
VkFSSUFOVF9ERVNUUlVDVE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJv
eSkgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4u
PiwgZGVzdHJ1Y3RpYmxlX3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVi
bGljIGJhc2U8ZGVzdHJ1Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4u
PjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJs
aWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9y
PTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVj
dG9yICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3Bl
cmF0b3I9KGRlc3RydWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisg
ICAgICAgIGlubGluZSB2b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+
aW5kZXhfID0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1Q
QVJLX1ZBUklBTlRfREVTVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAg
ICAgfmRlc3RydWN0b3IoKSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVz
dHJveSgpIG5vZXhjZXB0IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkgeworICAgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7
fSwgKnRoaXMpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNf
Y2FzdDxpbmRleF90PigtMSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNU
UlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9y
KCkgPSBkZWxldGU7LAorICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBk
ZWxldGU7KTsKKworI3VuZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0
cnVjdG9yPFRyYWl0cz4geworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47
CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3Vw
ZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6Cisj
aWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlu
bGluZSB2b2lkIG9wZXJhdG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBj
b25zdCB7CisgICAgICAgICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJo
c0FsdD4ocmhzX2FsdCkudmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYg
Li4uKXsKLSAgICAgICAgcmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxp
bmUgc3RhdGljIFQgJmNvbnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3Mp
IHsKKyAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVz
c29mKGEpKSkKKyAgICAgICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAg
IH0KKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMg
dm9pZCBnZW5lcmljX2NvbnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAg
ICAgICAgbGhzLmRlc3Ryb3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAg
ICAgICAgICAgICByaHMuaW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAg
ICAgICAgICAgICAgW10oYXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAg
bGhzX2FsdCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNl
bmRpZgorICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAg
bXBhcms6OmxpYjo6Zm9yd2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSBy
aHMuaW5kZXhfOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdf
c2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVz
dCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6
X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
cmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xh
c3MgbW92ZV9jb25zdHJ1Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0Fy
Z3MuLi4+OjpfX3R5cGUmJiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAg
IHJldHVybiBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0Fy
Z3MuLi4+OjpfX3R5cGU+KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4u
Lj46Ol9fc2VsZWN0KF9fYXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVf
Q09OU1RSVUNUT1IobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+
LCBtb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMg
Y29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3Is
IHN1cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBl
cjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25z
dCBtb3ZlX2NvbnN0cnVjdG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25z
dHJ1Y3RvciAmb3BlcmF0b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAg
ICAgICAgIFwKKyAgICBtb3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3Rv
ciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5U
X01PVkVfQ09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisg
ICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVs
dDspOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3Ig
JiZ0aGF0KSBub2V4Y2VwdCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPFRzPjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVj
dG9yKHZhbHVlbGVzc190e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgq
dGhpcywgbXBhcms6OmxpYjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktf
VkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisg
ICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsK
KworI3VuZGVmIE1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFp
dD4KKyAgICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRf
Q09QWV9DT05TVFJVQ1RPUihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwK
KyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxU
cy4uLj4sIGNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1
YmxpYyBtb3ZlX2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRz
Li4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1
Y3Rvciwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5n
IHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfY29uc3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5
X2NvbnN0cnVjdG9yICZvcGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1
bHQ7ICAgICAgICAgXAorICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0
cnVjdG9yICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZB
UklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJs
ZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0
KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAg
ICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBj
b3B5X2NvbnN0cnVjdG9yICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZh
bHVlbGVzc190e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywg
dGhhdCk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9S
KAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3Io
Y29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFS
SUFOVF9DT1BZX0NPTlNUUlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgor
ICAgIGNsYXNzIGFzc2lnbm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsK
KyAgICAgIHVzaW5nIHN1cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBw
dWJsaWM6CisgICAgICBJTkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwg
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNl
KEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3Rf
YWx0KGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSkgeworICAgICAgICB0aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRo
aXMtPmNvbnN0cnVjdF9hbHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19H
RU5FUklDX0xBTUJEQVMKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3Ry
dWN0IGFzc2lnbmVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVu
YW1lIFRoYXRBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhp
c19hbHQsIFRoYXRBbHQgJiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2ln
bl9hbHQodGhpc19hbHQsIG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNl
bmRpZgogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3Is
X1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9W
YXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJp
YW50SW5kZXgtMT4oX192Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlz
aXRfaGVscGVyPF9WYXJpYW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNl
cy4uLj4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4u
KQotICAgICAgICAgICAgOiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxf
SW5kaWNlcy4uLj46Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9f
dikuLi4pOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5h
bWUgVCwgdHlwZW5hbWUgQXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwg
VD4gJmEsIEFyZyAmJmFyZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7Cisj
aWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGUgOiA0MjQ0KQorI2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZv
cndhcmQ8QXJnPihhcmcpOworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQor
I2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg
IHZvaWQgb3BlcmF0b3IoKShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0
aGlzXy0+ZW1wbGFjZTxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29u
c3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmdfKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAq
dGhpc187CisgICAgICAgICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBt
cGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGli
Ojpib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25z
dHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAg
ICAgfQogCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4u
PnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRz
PgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3Im
LF9WYXJpYW50cyYmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2Fj
Y2Vzczx0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1Zhcmlh
bnRzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVy
aWNfYXNzaWduKFRoYXQgJiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgJiYgdGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAvLyBkbyBub3RoaW5nLgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSB7CisgICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIHZpc2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAg
ICAgdGhhdC5pbmRleCgpLAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAg
ICAgICBbdGhpc10oYXV0byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgIHRoaXMtPmFzc2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBt
cGFyazo6bGliOjpmb3J3YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsK
KyAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhp
c30KKyNlbmRpZgorICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFy
aWFudF90eXBlX2NvdW50OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2Fzc2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBl
X2NvdW50PFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
X192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46
Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3Zh
cmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1l
IC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zp
c2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192
aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBy
ZXR1cm4gX192aXNpdF9oZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8
Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAg
ICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUt
MSwKLSAgICAgICAgICAgIF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAg
ICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4p
OwotICAgIH0KLX07CisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVf
YXNzaWduYWJsZV90cmFpdCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g
VHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xh
c3MgbW92ZV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4g
ICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdu
bWVudDx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3Zl
X2Fzc2lnbm1lbnQsIHN1cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25z
dCBtb3ZlX2Fzc2lnbm1lbnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBt
b3ZlX2Fzc2lnbm1lbnQobW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IG1vdmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBk
ZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAor
ICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1l
bnQgJm9wZXJhdG9yPShtb3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAg
IE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3Np
Z25tZW50ICYmdGhhdCkgbm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAg
IHRoaXMtPmdlbmVyaWNfYXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNT
SUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2ln
bm1lbnQgJm9wZXJhdG9yPShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRl
ZiBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFz
cyBjb3B5X2Fzc2lnbm1lbnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1F
TlQoY29weV9hc3NpZ25hYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICBjbGFzcyBjb3B5X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxl
X3RyYWl0PiAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIg
PSBtb3ZlX2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19D
VE9SKGNvcHlfYXNzaWdubWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25t
ZW50KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfYXNzaWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lH
Tk1FTlQoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlf
YXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZh
dWx0Oyk7CisKKyAgICBNUEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJh
aXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3Qg
Y29weV9hc3NpZ25tZW50ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24o
dGhhdCk7CisgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJL
X1ZBUklBTlRfQ09QWV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisg
ICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAm
KSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNv
cHlfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlf
YXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJ
VElOR19DVE9SKGltcGwsIHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKwor
ICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGlu
ZSB2b2lkIGFzc2lnbihBcmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nl
c3M6OmJhc2U6OmdldF9hbHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZv
aWQgc3dhcChpbXBsICZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkgJiYgdGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAv
LyBkbyBub3RoaW5nLgorICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5p
bmRleCgpKSB7CisgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMt
PmluZGV4KCksCisjaWZkZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2Fs
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0
ZDo6c3dhcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
KHRoaXNfYWx0LnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhhdF9hbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2FwcGVye30KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwg
KnJocyA9IG1wYXJrOjpsaWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5t
b3ZlX25vdGhyb3coKSAmJiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxocywgcmhzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6
OmxpYjo6bW92ZSgqcmhzKSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8v
IEVYVEVOU0lPTjogV2hlbiB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhz
YCB0aHJvd3MKKyAgICAgICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVj
dGlibGUgdGhlbiB3ZSBtb3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFu
ZCBwcm92aWRlIHRoZSBzdHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJr
OjpsaWI6Om1vdmUoKmxocykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAg
ICAgaWYgKHRtcC5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmlj
X2NvbnN0cnVjdCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhyb3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5n
ZW5lcmljX2NvbnN0cnVjdCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgor
ICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUo
dG1wKSk7CisgICAgICAgIH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3Is
dHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlz
aXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNp
dF9oZWxwZXI8c2l6ZW9mLi4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNp
dCgKLSAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwot
fQorICAgICAgcHJpdmF0ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBz
dHJ1Y3Qgc3dhcHBlciB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBl
bmFtZSBUaGF0QWx0PgorICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRo
aXNfYWx0LCBUaGF0QWx0ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKKyAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgIH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEp
IHx8Ci0gICAgICAgICBfX2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9f
ZXF1YWxpdHlfY29tcGFyZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3Jo
cykpOwotfQorICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAg
ICAgICAgICAgICAgbXBhcms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAg
ICAgICAgICAgICAgICAge3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZS4uLn0KKyAgICAgICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAg
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAg
ICByZXR1cm4gKF9fbGhzLmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xo
cy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0t
MSkgJiYKLSAgICAgICAgICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+
OjoKLSAgICAgICAgICBfX2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9f
cmhzKSkpOwotfQorICAgIHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lk
IG9wZXJhdG9yKCkoKSBjb25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9f
bGhzOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBz
dHJ1Y3Qgb3ZlcmxvYWQ8VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5n
IG92ZXJsb2FkPFRzLi4uPjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5
PFQ+IG9wZXJhdG9yKCkoVCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMp
ewotICAgIHJldHVybiAhKF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlw
ZW5hbWUgbXBhcms6OmxpYjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46
OnR5cGU7CisKKyAgfSAgLy8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBjbGFzcyB2YXJpYW50IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAor
ICAgICAgICAgICAgICAgICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBh
bHRlcm5hdGl2ZS4iKTsKKworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6
OmlzX2FycmF5PFRzPjo6dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJp
YW50IGNhbiBub3QgaGF2ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisg
ICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhIHJlZmVyZW5jZSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fz
c2VydChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUs
CisgICAgICAgICAgICAgICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMg
YW4gYWx0ZXJuYXRpdmUuIik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAg
ICB0eXBlbmFtZSBGcm9udCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMu
Li4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29u
c3RydWN0aWJsZTxGcm9udD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHBy
IHZhcmlhbnQoKSBub2V4Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29u
c3RydWN0aWJsZTxGcm9udD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4
X3Q8MD57fSkge30KKworICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7Cisg
ICAgdmFyaWFudCh2YXJpYW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQXJnLAorICAgICAgICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19z
YW1lPG1wYXJrOjpsaWI6OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBU
ID0gZGV0YWlsOjpiZXN0X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6
c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisg
ICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmc+Ojp2YWx1ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50
KEFyZyAmJmFyZykgbm9leGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3Rp
YmxlPFQsIEFyZz46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57
fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8Cisg
ICAgICAgIHN0ZDo6c2l6ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwK
KyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQs
IEFyZ3MuLi4+Ojp2YWx1ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhw
ciB2YXJpYW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYm
Li4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57
fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRl
IDwKKyAgICAgICAgc3RkOjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBl
X3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBj
b25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBu
b2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19u
b3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2lu
ZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisK
KyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4u
IEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFl
PFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGlu
ZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+
LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGlu
X3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikg
e30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5h
bWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkg
PSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAg
ICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5
cGVfdDxUPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAg
QXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6
IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pIHt9CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlh
bnQgJm9wZXJhdG9yPShjb25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZv
cGVyYXRvcj0odmFyaWFudCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEFyZywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZTxtcGFyazo6bGliOjpkZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9
IGRldGFpbDo6YmVzdF9tYXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNp
emVfdCBJID0gZGV0YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAg
ICAgICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQg
JiwgQXJnPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpp
c19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFy
Zykgbm9leGNlcHQoCisgICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFy
Zz46OnZhbHVlICYmCisgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBB
cmc+Ojp2YWx1ZSkpIHsKKyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGli
Ojpmb3J3YXJkPEFyZz4oYXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBB
cmdzLAorICAgICAgICB0eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRf
dDxJLCBUcy4uLj4sCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29u
c3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZl
bXBsYWNlKEFyZ3MgJiYuLi4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVt
cGxhY2U8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBV
cCwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJr
OjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGli
OjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4u
Pjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5l
IFQgJmVtcGxhY2Uoc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdz
KSB7CisgICAgICByZXR1cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6Omxp
Yjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICB0eXBlbmFtZSBULAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6
OnNpemVfdCBJID0gZGV0YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAor
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwg
QXJncy4uLj46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYm
Li4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJr
OjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwK
KyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVu
YW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhf
c2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJl
dHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52
YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBz
dGQ6OnNpemVfdCBpbmRleCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5p
bmRleCgpOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRy
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1t
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppc19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlh
bnQgJnRoYXQpIG5vZXhjZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAg
bXBhcms6OmxpYjo6aXNfbm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkg
eworICAgICAgaW1wbF8uc3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgIGRldGFpbDo6aW1wbDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFp
bDo6YWNjZXNzOjp2YXJpYW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9u
Ojp2YXJpYW50OworICB9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4u
LiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZ2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOwor
ICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUg
Y29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYp
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1
Y3QgZ2VuZXJpY19nZXRfaW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChp
bnQpIHt9CisKKyAgICAgIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBj
b25zdAorICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZh
cmlhbnQ6OmdldF9hbHQ8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAg
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPD0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRP
X1JFRlJFRiBnZW5lcmljX2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5l
cmljX2dldF9pbXBsPEksIFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8g
MCA6ICh0aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjps
aWI6OmZvcndhcmQ8Vj4odikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZh
cmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICZ2KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGlu
ZSBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdl
dCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZ2KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7
CisgIH0KKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlu
bGluZSBjb25zdGV4cHIgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMu
Li4+PiAmJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVy
biBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IFQgJmdldCh2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5k
X2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2
YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9j
aGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IGNvbnN0IFQgJmdldChjb25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8
ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4
cHIgY29uc3QgVCAmJmdldChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4g
Z2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjps
aWI6Om1vdmUodikpOworICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1
dG8gKiAqLyBBVVRPIGdlbmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JF
VFVSTih2ICYmIGhvbGRzX2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAg
ID8gbXBhcms6OmxpYjo6YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdiku
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVz
cGFjZSBkZXRhaWwKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+
CisgIGlubGluZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2Fs
dGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4g
KnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsK
KyAgfQorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5s
aW5lIGNvbnN0ZXhwciBtcGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19n
ZXRfaWY8ST4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgIGlubGluZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBn
ZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRl
dGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IG1wYXJrOjpsaWI6OmFkZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlh
bnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRf
aW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlv
bjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBl
cXVhbF90b3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSBy
aHMuaW5kZXgoKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8
fAorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFs
X3Rve30sIGxocywgcmhzKSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307Cisg
IHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oY29uc3QgdmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFp
bDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxf
dG87CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9
IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9h
dChsaHMuaW5kZXgoKSwgbm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0
dXJuIGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVf
YXQobGhzLmluZGV4KCksIG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0K
IAotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25v
c3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJh
dG9yIT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30K
LWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0
YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNv
bnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUg
Y29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
TW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3Ry
dWN0IF9faGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNp
emVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpo
YXNoPF9UeXBlPigpKF9feCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRz
PgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+
ICZsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPiByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJl
dHVybiAhcmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8Cisg
ICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2
YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsK
KyNlbmRpZgorICB9CiAKLS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQ
UDE0X0NPTlNURVhQUgorICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0
cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobGhzLmluZGV4KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cyk7CisjZWxzZQorICAgIHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgor
ICAgICAgICAgICAocmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+
IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkg
JiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3Jl
YXRlcnt9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNs
YXNzLi4uIEY+Ci1hdXRvIHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlz
aXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYp
KSkKLXsKLSAgICByZXR1cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4u
KSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAm
bGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRz
Li4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAg
IHVzaW5nIG1wYXJrOjpsaWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RF
WFBSCisgICAgaWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOwor
ICAgIGlmIChyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGxocy5pbmRleCgpIDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMu
aW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6
OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNl
bHNlCisgICAgcmV0dXJuIGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAg
ICAgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmlu
ZGV4KCkgPCByaHMuaW5kZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMu
aW5kZXgoKSAmJgorICAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5k
ZXgoKSwgbGVzc19lcXVhbHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5h
bWVzcGFjZSBXVEYKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6OmdyZWF0ZXJfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYg
KHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMu
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRl
eCgpID4gcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVl
X2F0KGxocy5pbmRleCgpLCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAg
cmV0dXJuIHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMu
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiBy
aHMuaW5kZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAm
JgorICAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAg
ICAgIGxocy5pbmRleCgpLCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgor
ICB9CiAKLW5hbWVzcGFjZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUuLi4gVnM+CisgIGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNp
dG9yICYmdmlzaXRvciwgVnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisg
ICAgICAgIChkZXRhaWw6OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAg
ICAgICAgICAgID8gKHZvaWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzKCkpLAorICAgICAgICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVl
KG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4o
dnMpLi4uKSkKKworICBzdHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9z
dGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0IHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj49KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3Rh
dGUsIG1vbm9zdGF0ZSkgbm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5s
aW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g
VHM+CisgIGlubGluZSBhdXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAg
ICAgICAgICB2YXJpYW50PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChy
aHMpKSkKKyAgICAgIC0+IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChy
aHMpOworICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUuLi4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5h
bWVzcGFjZSBoYXNoIHsKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+
CisgICAgICBjb25zdGV4cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJl
dHVybiBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAg
ICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAg
ICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46
OnZhbHVlOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNv
bnN0ZXhwciBib29sIGlzX2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8
Sz47CisgICAgICAgIHJldHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAg
ICAgICAgICAgc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAg
ICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAg
ICAgICAgIHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAg
IH0gIC8vIG5hbWVzcGFjZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5k
ZWYgQVVUTworI3VuZGVmIEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVm
IEFVVE9fUkVGUkVGX1JFVFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xU
WVBFX0FVVE9fUkVUVVJOCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3Qg
aGFzaDxkZXRhaWw6OmVuYWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAg
bXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNf
ZW5hYmxlZDwKKyAgICAgICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+
Ojp2YWx1ZT4+PiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+Owor
ICAgIHVzaW5nIHJlc3VsdF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0
X3R5cGUgb3BlcmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1
c2luZyBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1
bHQgPQorICAgICAgICAgIHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAg
ID8gMjk5NzkyNDU4ICAvLyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9u
IGNyZWF0aW9uCisgICAgICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1Q
QVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZh
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6
OmRlY2F5X3Q8ZGVjbHR5cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFs
dWVfdHlwZSA9IG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1
cm4gaGFzaF9jb21iaW5lKHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsK
KyAgICB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0
dXJuIDQyOworICAgIHByaXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAg
IHN0cnVjdCBoYXNoZXIgeworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlu
bGluZSBzdGQ6OnNpemVfdCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAg
ICAgIHVzaW5nIGFsdF90eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1
c2luZyB2YWx1ZV90eXBlID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90
PHR5cGVuYW1lIGFsdF90eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFs
dWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0
YXRpYyBzdGQ6OnNpemVfdCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVf
dCByaHMpIHsKKyAgICAgIHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwg
NikgKyAobGhzID4+IDIpOwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3Ry
dWN0IGhhc2g8bW9ub3N0YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0
ZTsKKyAgICB1c2luZyByZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBf
X05PRVhDRVBUIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRl
eCgpKSBeIFdURjo6dmlzaXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUg
cmVzdWx0X3R5cGUgb3BlcmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICAgIHJldHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkg
YXR0cmFjdGl2ZSByYW5kb20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3Bh
Y2Ugc3RkCit9ICAvLyBuYW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNp
bmcgV1RGOjpWYXJpYW50OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIo
Q0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3Mu
Li4gRj4KK2F1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdCht
YWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQor
eworICAgIHJldHVybiBzdGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4u
LiksIHN0ZDo6Zm9yd2FyZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdt
YSB3YXJuaW5nKHBvcCkKLSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
IAotc3RhdGljIFZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9y
UGxhdGZvcm0+IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4
dEJyZWFrSXRlcmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitz
dGF0aWMgc3RkOjp2YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRv
clBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRl
eHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQog
ewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6
OkxpbmU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gbV9sb2NhbGU7CiAgICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwg
VGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxU
ZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5n
OwogICAgIE1vZGUgbV9tb2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VNYWMubW0JKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50
PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2Rl
VG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpN
b2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFu
dDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9k
ZVRvQmFja2luZ0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6
TW9kZSBtb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKICAgICBjYXNlIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjc4IEBACisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2Nh
Y2hlL0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9j
cmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRy
YWN0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojppc0Zvcm1EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNB
cnJheUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlC
dWZmZXJWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFy
Y2hQYXJhbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmFycmF5QnVmZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJv
ZHk6OmFycmF5QnVmZmVyVmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojp0ZXh0Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsbEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaDoKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9GZXRjaFJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlL
ZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJHZXRBbGxSZXN1bHQ6OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1
bHQ6OmFkZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCR2V0QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
YXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhh
c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktl
eURhdGE6OmJpbmFyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJh
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0
aFZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJD
b3JlOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OnNldFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3Vy
Y2VPYmplY3RTdG9yZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURC
S2V5UGF0aCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFt
ZUZvclRyYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9u
OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNp
bmdTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5n
UmVzdWx0OjpjYW5kaWRhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJTb3VyY2U6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjps
ZW5ndGggY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
Om1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlS2V5UGF0aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRVbmlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2Vy
UGFyYW1ldGVyKToKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAg
ICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdWJ0bGVDcnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVD
cnlwdG8uaDoKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9y
dEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5
KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6
CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICog
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1IS0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtSE1BQzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1QQktERjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGht
UEJLREYyOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAg
ICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAg
ICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6Cisg
ICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFt
cy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hl
ZEltcG9ydFBhcmFtcy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29y
aXRobVJzYUhhc2hlZEtleUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVk
SXRlbSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBj
c3MvRE9NTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6Cisg
ICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01N
YXRyaXhSZWFkT25seTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2Vw
YXJhdGVNYXJrZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3Mp
OgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZl
bnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyOjpyZXN1bHQgY29uc3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAg
ICAgICAqIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxE
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6
CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVj
dE1lZGlhUmVzb3VyY2UpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1s
L1VSTFNlYXJjaFBhcmFtcy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHls
ZTo6aXNDdXJyZW50Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6
Omhhc092ZXJyaWRlQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6
Om92ZXJyaWRlQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNh
bnZhc0dyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52
YXNQYXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBj
b25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90
cmFjay9UcmFja0V2ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5o
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAg
ICAgICogcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBh
Z2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0
b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVk
QnVmZmVyQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90
TmVlZGVkU29vbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRh
aW5zUmVwbGFjZWRFbGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5o
OgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2Fj
aGUvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCB2b2lkIENh
Y2hlOjpkb01hdGNoKHN0ZDo6b3B0aW9uYWw8UmVxdWVzCiB7CiAgICAgUmVmUHRyPEZldGNoUmVx
dWVzdD4gcmVxdWVzdDsKICAgICBpZiAoaW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAg
ICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVl
KCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1
ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFz
ZU5vbk51bGwoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAm
JiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hUeXBl
ID09IE1hdGNoVHlwZTo6T25seUZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHByb21pc2Ut
PnJlc29sdmUoKTsKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lkIENhY2hlOjphZGRBbGwoVmVjdG9y
PFJlcXVlc3RJbmZvPiYmCiB2b2lkIENhY2hlOjpwdXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8
RmV0Y2hSZXNwb25zZT4mJiByZXNwb25zZSwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJv
bWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0OwotICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgewotICAgICAg
ICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVx
dWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6OmdldDxSZWZQdHI8RmV0Y2hS
ZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgaWYgKHJlcXVlc3QtPm1l
dGhvZCgpICE9ICJHRVQiKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24g
eyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiUmVxdWVzdCBtZXRob2QgaXMgbm90IEdFVCIpIH0p
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgQ2FjaGU6OnB1
dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjwKIHZvaWQgQ2FjaGU6OnJlbW92ZShSZXF1ZXN0SW5m
byYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgRE9NUHJvbWlzZURlZmVycmVk
PElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1
ZXN0OwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+
PihpbmZvKSkgewotICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVz
dD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6
OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiICYmICFvcHRpb25zLmlnbm9yZU1ldGhv
ZCkgewogICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTIxMyw4ICsyMTMsOCBAQCB2b2lkIENhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8
UmVxdWVzdEluCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAo
aW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hS
ZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0
PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+Pihp
bmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZl
dGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAg
IGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2Qp
IHsKICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoVmVjdG9yPFJlZjxGZXRjaFJlcXVl
c3Q+PiB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlhbENyZWF0
aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNyArMzMsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgQ3JlZGVudGlh
bENyZWF0aW9uT3B0aW9ucyB7Ci0gICAgdXNpbmcgUGFzc3dvcmRDcmVkZW50aWFsSW5pdCA9IFZh
cmlhbnQ8UGFzc3dvcmRDcmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4+Owor
ICAgIHVzaW5nIFBhc3N3b3JkQ3JlZGVudGlhbEluaXQgPSBzdGQ6OnZhcmlhbnQ8UGFzc3dvcmRD
cmVkZW50aWFsRGF0YSwgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4+OwogCiAgICAgc3RkOjpvcHRp
b25hbDxQYXNzd29yZENyZWRlbnRpYWxJbml0PiBwYXNzd29yZDsKICAgICBzdGQ6Om9wdGlvbmFs
PEZlZGVyYXRlZENyZWRlbnRpYWxJbml0PiBmZWRlcmF0ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDM2ICs0MiwzNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEZldGNoQm9keSBGZXRjaEJv
ZHk6OmV4dHJhY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSW5pdCYmIHZhbHVl
LCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxCbG9iPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBCbG9iPiBibG9iID0g
V1RGOjpnZXQ8UmVmUHRyPEJsb2I+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAo
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgeworICAgICAgICBS
ZWY8Y29uc3QgQmxvYj4gYmxvYiA9IHN0ZDo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUpLnJlbGVh
c2VOb25OdWxsKCk7CiAgICAgICAgIGNvbnRlbnRUeXBlID0gYmxvYi0+dHlwZSgpOwogICAgICAg
ICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYmxvYikpOwogICAgIH0KLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKLSAgICAgICAg
UmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IFdURjo6Z2V0PFJlZlB0cjxET01Gb3JtRGF0
YT4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKSkgeworICAgICAgICBSZWY8RE9NRm9ybURh
dGE+IGRvbUZvcm1EYXRhID0gc3RkOjpnZXQ8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFsdWUpLnJl
bGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGF1dG8gZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRl
TXVsdGlQYXJ0KGRvbUZvcm1EYXRhLmdldCgpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgJnN0
YXRpY19jYXN0PERvY3VtZW50Jj4oY29udGV4dCkpOwogICAgICAgICBjb250ZW50VHlwZSA9IG1h
a2VTdHJpbmcoIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIsIGZvcm1EYXRhLT5ib3Vu
ZGFyeSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShmb3JtRGF0
YSkpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxVUkxT
ZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFt
cz4gcGFyYW1zID0gV1RGOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxVUkxT
ZWFyY2hQYXJhbXM+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFt
cz4gcGFyYW1zID0gc3RkOjpnZXQ8UmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IEhUVFBIZWFkZXJWYWx1ZXM6OmZv
cm1VUkxFbmNvZGVkQ29udGVudFR5cGUoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZN
b3ZlKHBhcmFtcykpOwogICAgIH0KIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IFdURjo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKS5yZWxlYXNl
Tm9uTnVsbCgpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1
ZmZlcj4+KHZhbHVlKSkgeworICAgICAgICBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+IGJ1ZmZlciA9
IHN0ZDo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlcj4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwog
ICAgICAgICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkp
IHsKLSAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4gYnVmZmVyID0gV1RGOjpnZXQ8
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlm
IChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkp
IHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4gYnVmZmVyID0gc3RkOjpnZXQ8
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAg
ICByZXR1cm4gRmV0Y2hCb2R5KFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCi0gICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih2YWx1ZSkpOworICAgIEFTU0VSVChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsKICAgICBjb250ZW50VHlwZSA9IEhU
VFBIZWFkZXJWYWx1ZXM6OnRleHRQbGFpbkNvbnRlbnRUeXBlKCk7Ci0gICAgcmV0dXJuIEZldGNo
Qm9keShXVEZNb3ZlKFdURjo6Z2V0PFN0cmluZz4odmFsdWUpKSk7CisgICAgcmV0dXJuIEZldGNo
Qm9keShXVEZNb3ZlKHN0ZDo6Z2V0PFN0cmluZz4odmFsdWUpKSk7CiB9CiAKIHZvaWQgRmV0Y2hC
b2R5OjphcnJheUJ1ZmZlcihGZXRjaEJvZHlPd25lciYgb3duZXIsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hC
b2R5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJv
ZHkuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9G
ZXRjaEJvZHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTUgKzUzLDE1IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNvbnN1bWVBc1N0cmVhbShGZXRjaEJvZHlPd25lciYsIEZldGNoUmVzcG9uc2VTb3Vy
Y2UmKTsKICNlbmRpZgogCi0gICAgYm9vbCBpc0Jsb2IoKSBjb25zdCB7IHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNG
b3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEZvcm1E
YXRhPj4obV9kYXRhKTsgfQotICAgIGJvb2wgaXNBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKTsg
fQotICAgIGJvb2wgaXNBcnJheUJ1ZmZlclZpZXcoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpOyB9Ci0gICAg
Ym9vbCBpc1VSTFNlYXJjaFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlz
VGV4dCgpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2Rh
dGEpOyB9CisgICAgYm9vbCBpc0Jsb2IoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNGb3JtRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPEZvcm1EYXRhPj4obV9k
YXRhKTsgfQorICAgIGJvb2wgaXNBcnJheUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKTsgfQorICAgIGJv
b2wgaXNBcnJheUJ1ZmZlclZpZXcoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc1VS
TFNlYXJjaFBhcmFtcygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
PGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpOyB9CiAg
ICAgYm9vbCBpc1JlYWRhYmxlU3RyZWFtKCkgY29uc3QgeyByZXR1cm4gbV9pc1JlYWRhYmxlU3Ry
ZWFtOyB9CiAKLSAgICB1c2luZyBJbml0ID0gVmFyaWFudDxSZWZQdHI8QmxvYj4sIFJlZlB0cjxB
cnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+
LCBSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPiwgU3RyaW5nPjsKKyAgICB1c2luZyBJbml0ID0gc3Rk
Ojp2YXJpYW50PFJlZlB0cjxCbG9iPiwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxB
cnJheUJ1ZmZlcj4sIFJlZlB0cjxET01Gb3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+
LCBTdHJpbmc+OwogICAgIHN0YXRpYyBGZXRjaEJvZHkgZXh0cmFjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiwgSW5pdCYmLCBTdHJpbmcmKTsKICAgICBzdGF0aWMgRmV0Y2hCb2R5IGxvYWRpbmdC
b2R5KCkgeyByZXR1cm4geyB9OyB9CiAKQEAgLTk5LDE2ICs5OSwxNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgY29uc3VtZVRleHQoUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBjb25zdW1lQmxvYihGZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpOwogCi0gICAgY29uc3QgQmxvYiYgYmxvYkJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6
OmdldDxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBGb3JtRGF0YSYgZm9y
bURhdGFCb2R5KCkgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQo
KTsgfQotICAgIGNvbnN0IEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSBjb25zdCB7IHJldHVybiBX
VEY6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgY29uc3QgQXJyYXlC
dWZmZXImIGFycmF5QnVmZmVyQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25z
dCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJheUJ1ZmZlclZp
ZXcmIGFycmF5QnVmZmVyVmlld0JvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29u
c3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKS5nZXQoKTsgfQotICAgIFN0cmluZyYgdGV4dEJv
ZHkoKSB7IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KLSAgICBjb25zdCBTdHJp
bmcmIHRleHRCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9
Ci0gICAgY29uc3QgVVJMU2VhcmNoUGFyYW1zJiB1cmxTZWFyY2hQYXJhbXNCb2R5KCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSkuZ2V0
KCk7IH0KKyAgICBjb25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0
PFJlZjxjb25zdCBCbG9iPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIEZvcm1EYXRhJiBmb3JtRGF0
YUJvZHkoKSB7IHJldHVybiBzdGQ6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9
CisgICAgY29uc3QgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6
Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBBcnJheUJ1ZmZl
ciYgYXJyYXlCdWZmZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IEFy
cmF5QnVmZmVyPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVmZmVyVmlldyYg
YXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBB
cnJheUJ1ZmZlclZpZXc+PihtX2RhdGEpLmdldCgpOyB9CisgICAgU3RyaW5nJiB0ZXh0Qm9keSgp
IHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQorICAgIGNvbnN0IFN0cmluZyYg
dGV4dEJvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KKyAg
ICBjb25zdCBVUkxTZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmdldDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5nZXQoKTsg
fQogCi0gICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBC
bG9iPiwgUmVmPEZvcm1EYXRhPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFy
cmF5QnVmZmVyVmlldz4sIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAg
IHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9i
PiwgUmVmPEZvcm1EYXRhPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5
QnVmZmVyVmlldz4sIFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OwogICAgIERh
dGEgbV9kYXRhIHsgbnVsbHB0ciB9OwogCiAgICAgRmV0Y2hCb2R5Q29uc3VtZXIgbV9jb25zdW1l
ciB7IEZldGNoQm9keUNvbnN1bWVyOjpUeXBlOjpOb25lIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDggKzc3LDggQEAgc3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGFwcGVuZFRv
SGVhZGVyTQogLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVy
cy1maWxsCiBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gZmlsbEhlYWRlck1hcChIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzLCBjb25zdCBGZXRjaEhlYWRlcnM6OkluaXQmIGhlYWRlcnNJbml0LCBGZXRj
aEhlYWRlcnM6Okd1YXJkIGd1YXJkKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KSkgewotICAgICAgICBhdXRvJiBz
ZXF1ZW5jZSA9IFdURjo6Z2V0PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsK
KyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8VmVjdG9yPFN0cmluZz4+Piho
ZWFkZXJzSW5pdCkpIHsKKyAgICAgICAgYXV0byYgc2VxdWVuY2UgPSBzdGQ6OmdldDxWZWN0b3I8
VmVjdG9yPFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVy
IDogc2VxdWVuY2UpIHsKICAgICAgICAgICAgIGlmIChoZWFkZXIuc2l6ZSgpICE9IDIpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIkhlYWRlciBzdWItc2Vx
dWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zIiB9OwpAQCAtODcsNyArODcsNyBA
QCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gZmlsbEhlYWRlck1hcChICiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBhdXRvJiByZWNvcmQgPSBXVEY6OmdldDxWZWN0b3I8V1RGOjpLZXlWYWx1
ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4oaGVhZGVyc0luaXQpOworICAgICAgICBhdXRvJiByZWNv
cmQgPSBzdGQ6OmdldDxWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4o
aGVhZGVyc0luaXQpOwogICAgICAgICBmb3IgKGF1dG8mIGhlYWRlciA6IHJlY29yZCkgewogICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBhcHBlbmRUb0hlYWRlck1hcChoZWFkZXIua2V5LCBoZWFk
ZXIudmFsdWUsIGhlYWRlcnMsIGd1YXJkKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVy
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFk
ZXJzLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hIZWFkZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgICAgICBSZXNwb25zZQogICAgIH07CiAKLSAgICB1c2luZyBJbml0ID0gVmFyaWFudDxWZWN0
b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJp
bmc+Pj47CisgICAgdXNpbmcgSW5pdCA9IHN0ZDo6dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmlu
Zz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj47CiAgICAgc3Rh
dGljIEV4Y2VwdGlvbk9yPFJlZjxGZXRjaEhlYWRlcnM+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxJ
bml0PiYmKTsKIAogICAgIHN0YXRpYyBSZWY8RmV0Y2hIZWFkZXJzPiBjcmVhdGUoR3VhcmQgZ3Vh
cmQgPSBHdWFyZDo6Tm9uZSwgSFRUUEhlYWRlck1hcCYmIGhlYWRlcnMgPSB7IH0pIHsgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgRmV0Y2hIZWFkZXJzIHsgZ3VhcmQsIFdURk1vdmUoaGVhZGVycykgfSk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5j
cHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDEyICsyMzUsMTIgQEAgRXhjZXB0
aW9uT3I8UmVmPEZldGNoUmVxdWVzdD4+IEZldGNoUmVxdQogewogICAgIGF1dG8gcmVxdWVzdCA9
IGFkb3B0UmVmKCpuZXcgRmV0Y2hSZXF1ZXN0KGNvbnRleHQsIHN0ZDo6bnVsbG9wdCwgRmV0Y2hI
ZWFkZXJzOjpjcmVhdGUoRmV0Y2hIZWFkZXJzOjpHdWFyZDo6UmVxdWVzdCksIHsgfSkpOwogCi0g
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihpbnB1dCkpIHsKLSAgICAgICAg
YXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aChXVEY6OmdldDxTdHJpbmc+KGlu
cHV0KSwgV1RGTW92ZShpbml0KSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3Ry
aW5nPihpbnB1dCkpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXpl
V2l0aChzdGQ6OmdldDxTdHJpbmc+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7CiAgICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVl
c3QtPmluaXRpYWxpemVXaXRoKCpXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQp
LCBXVEZNb3ZlKGluaXQpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFs
aXplV2l0aCgqc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGlucHV0KSwgV1RGTW92ZShp
bml0KSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgVVJMU2VhcmNoUGFyYW1zOwogY2xhc3MgRmV0Y2hS
ZXF1ZXN0IGZpbmFsIDogcHVibGljIEZldGNoQm9keU93bmVyIHsKIHB1YmxpYzoKICAgICB1c2lu
ZyBJbml0ID0gRmV0Y2hSZXF1ZXN0SW5pdDsKLSAgICB1c2luZyBJbmZvID0gVmFyaWFudDxSZWZQ
dHI8RmV0Y2hSZXF1ZXN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBJbmZvID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxGZXRjaFJlcXVlc3Q+LCBTdHJpbmc+OwogCiAgICAgdXNpbmcgQ2FjaGUgPSBGZXRj
aE9wdGlvbnM6OkNhY2hlOwogICAgIHVzaW5nIENyZWRlbnRpYWxzID0gRmV0Y2hPcHRpb25zOjpD
cmVkZW50aWFsczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNvcjo6Y29udGludWVQcmkKICAgICBpZiAoc291
cmNlc0RlbGV0ZWQoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXkn
IG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qg
c3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9OwogCi0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UpKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mg
c291cmNlIGlzIG5vdCBhbiBpbmRleC4iKSB9OwogCiAgICAgYXV0byBkaXJlY3Rpb24gPSBtX2lu
Zm8uY3Vyc29yRGlyZWN0aW9uKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3IuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfklEQkN1cnNvcigpOwogCi0gICAgdXNp
bmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5k
ZXg+PjsKKyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0
b3JlPiwgUmVmUHRyPElEQkluZGV4Pj47CiAKICAgICBjb25zdCBTb3VyY2UmIHNvdXJjZSgpIGNv
bnN0OwogICAgIElEQkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDcgKzE1MSw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxJREJPYmplY3RTdG9yZT4+IElEQkRhdGEKICAgICBpZiAoa2V5UGF0aCAmJiAhaXNJREJL
ZXlQYXRoVmFsaWQoa2V5UGF0aC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmpl
Y3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGtleVBhdGggb3B0aW9uIGlzIG5vdCBhIHZh
bGlkIGtleSBwYXRoLiIpIH07CiAKLSAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9J
bmNyZW1lbnQgJiYgKChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1
ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkK
KyAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9JbmNyZW1lbnQgJiYgKChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKSAmJiBzdGQ6OmdldDxTdHJp
bmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0
ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50
IG9wdGlvbiB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFy
cmF5LiIpIH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgT2JqZWN0U3RvcmUgaW50byB0aGUg
Y29ubmVjdGlvbidzIG1ldGFkYXRhLgpAQCAtMTcxLDEwICsxNzEsMTAgQEAgRXhjZXB0aW9uT3I8
UmVmPElEQlRyYW5zYWN0aW9uPj4gSURCRGF0YQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5z
YWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9z
aW5nLiIpIH07CiAKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXM7Ci0gICAgaWYgKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQotICAgICAg
ICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5h
bWVzKSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0
b3JlTmFtZXMpKQorICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7CiAgICAgZWxzZQotICAgICAgICBvYmplY3RTdG9yZXMu
YXBwZW5kKFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkpOworICAgICAgICBv
YmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkp
OwogCiAgICAgaWYgKG9iamVjdFN0b3Jlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1
dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgc3RvcmVOYW1lcyBwYXJhbWV0
ZXIgd2FzIGVtcHR5LiIpIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDcgQEAgcHVibGljOgogCiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQk9iamVjdFN0b3JlPj4g
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBPYmplY3RTdG9yZVBhcmFtZXRl
cnMmJik7CiAKLSAgICB1c2luZyBTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyA9IFdURjo6VmFyaWFu
dDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKKyAgICB1c2luZyBTdHJpbmdPclZlY3Rvck9mU3Ry
aW5ncyA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKICAgICBFeGNlcHRp
b25PcjxSZWY8SURCVHJhbnNhY3Rpb24+PiB0cmFuc2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3Ry
aW5ncyYmIHN0b3JlTmFtZXMsIElEQlRyYW5zYWN0aW9uTW9kZSk7CiAgICAgRXhjZXB0aW9uT3I8
dm9pZD4gZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGNs
b3NlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxS
ZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkdldEFsbFJlc3VsdC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgaXNvbGF0ZWRDb3B5T2ZWYXJpYW50KGNvbnN0IFdURjo6VmFyaWFudDxWZWN0
b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgc291cmNl
LCBXVEY6OlZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6
Om51bGxwdHJfdD4mIHRhcmdldCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXNvbGF0ZWRD
b3B5T2ZWYXJpYW50KGNvbnN0IHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3Rv
cjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYgc291cmNlLCBzdGQ6OnZhcmlhbnQ8VmVjdG9y
PElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4mIHRhcmdldCkK
IHsKICAgICB0YXJnZXQgPSBWZWN0b3I8VD4oKTsKLSAgICBhdXRvJiBzb3VyY2VWZWN0b3IgPSBX
VEY6OmdldDxWZWN0b3I8VD4+KHNvdXJjZSk7Ci0gICAgYXV0byYgdGFyZ2V0VmVjdG9yID0gV1RG
OjpnZXQ8VmVjdG9yPFQ+Pih0YXJnZXQpOworICAgIGF1dG8mIHNvdXJjZVZlY3RvciA9IHN0ZDo6
Z2V0PFZlY3RvcjxUPj4oc291cmNlKTsKKyAgICBhdXRvJiB0YXJnZXRWZWN0b3IgPSBzdGQ6Omdl
dDxWZWN0b3I8VD4+KHRhcmdldCk7CiAgICAgdGFyZ2V0VmVjdG9yLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoc291cmNlVmVjdG9yLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogc291
cmNlVmVjdG9yKQogICAgICAgICB0YXJnZXRWZWN0b3IudW5jaGVja2VkQXBwZW5kKGVsZW1lbnQu
aXNvbGF0ZWRDb3B5KCkpOwpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIElEQkdldEFsbFJlc3VsdDo6
aXNvbGF0ZWRDb3B5KGNvbnN0CiB7CiAgICAgZGVzdGluYXRpb24ubV90eXBlID0gc291cmNlLm1f
dHlwZTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pihz
b3VyY2UubV9yZXN1bHRzKSkKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51
bGxwdHJfdD4oc291cmNlLm1fcmVzdWx0cykpCiAgICAgICAgIHJldHVybjsKIAogICAgIHN3aXRj
aCAoc291cmNlLm1fdHlwZSkgewpAQCAtNzIsMjkgKzcyLDI5IEBAIHZvaWQgSURCR2V0QWxsUmVz
dWx0Ojppc29sYXRlZENvcHkoY29uc3QKIHZvaWQgSURCR2V0QWxsUmVzdWx0OjphZGRLZXkoSURC
S2V5RGF0YSYmIGtleSkKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxs
VHlwZTo6S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElE
QktleURhdGE+PihtX3Jlc3VsdHMpKTsKLSAgICBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsKKyAgICBzdGQ6Omdl
dDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUoa2V5KSk7CiB9
CiAKIHZvaWQgSURCR2V0QWxsUmVzdWx0OjphZGRWYWx1ZShJREJWYWx1ZSYmIHZhbHVlKQogewog
ICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwotICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0
cykpOwotICAgIFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykuYXBwZW5kKFdU
Rk1vdmUodmFsdWUpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKKyAgICBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+Piht
X3Jlc3VsdHMpLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKIGNvbnN0IFZlY3RvcjxJREJL
ZXlEYXRhPiYgSURCR2V0QWxsUmVzdWx0OjprZXlzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90
eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsKLSAgICByZXR1
cm4gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOworICAgIEFTU0VSVChz
dGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKIH0KIAog
Y29uc3QgVmVjdG9yPElEQlZhbHVlPiYgSURCR2V0QWxsUmVzdWx0Ojp2YWx1ZXMoKSBjb25zdAog
ewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwot
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVz
dWx0cykpOwotICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMp
OworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1f
cmVzdWx0cykpOworICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3Vs
dHMpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0
aHMoKSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJl
c3VsdDo6YWxsQmxvYkYKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlw
ZTo6VmFsdWVzKTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBwYXRoU2V0OwotICAgIGZvciAoYXV0
byYgdmFsdWUgOiBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKSB7CisgICAg
Zm9yIChhdXRvJiB2YWx1ZSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykp
IHsKICAgICAgICAgZm9yIChhdXRvJiBwYXRoIDogdmFsdWUuYmxvYkZpbGVQYXRocygpKQogICAg
ICAgICAgICAgcGF0aFNldC5hZGQocGF0aCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmgJKHJldmlzaW9uIDIy
MDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3Vs
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgaXNvbGF0ZWRDb3B5KGNvbnN0IElEQkdldEFsbFJlc3VsdCYgc291cmNlLCBJREJHZXRB
bGxSZXN1bHQmIGRlc3RpbmF0aW9uKTsKIAogICAgIEluZGV4ZWREQjo6R2V0QWxsVHlwZSBtX3R5
cGUgeyBJbmRleGVkREI6OkdldEFsbFR5cGU6OktleXMgfTsKLSAgICBXVEY6OlZhcmlhbnQ8VmVj
dG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4gbV9yZXN1
bHRzIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZl
Y3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiBtX3Jlc3VsdHMgeyBudWxscHRyIH07CiB9
OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpAQCAtODQsMTAgKzg0LDEwIEBAIHZvaWQgSURC
R2V0QWxsUmVzdWx0OjplbmNvZGUoRW5jb2RlciYgZW4KIAogICAgIHN3aXRjaCAobV9yZXN1bHRz
LmluZGV4KCkpIHsKICAgICBjYXNlIDA6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSAxOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVz
dWx0cyk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9y
ZXN1bHRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgogICAgICAgICBicmVhazsKQEAg
LTEwOSwxMiArMTA5LDEyIEBAIGJvb2wgSURCR2V0QWxsUmVzdWx0OjpkZWNvZGUoRGVjb2RlciYg
ZGUKICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAgY2FzZSAwOgogICAgICAgICByZXN1bHQubV9y
ZXN1bHRzID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV9yZXN1bHRzKSkpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1
bHQubV9yZXN1bHRzKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgMToKICAgICAgICAgcmVzdWx0Lm1fcmVzdWx0cyA9IFZlY3RvcjxJREJWYWx1
ZT4oKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxWZWN0b3I8SURCVmFs
dWU+PihyZXN1bHQubV9yZXN1bHRzKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3Rk
OjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBJREJLZXk6OmlzVmFsaWQoKSBjb25zdAogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV90eXBlID09IEtleVR5cGU6OkFycmF5KSB7
Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVl
KSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4obV92
YWx1ZSkpIHsKICAgICAgICAgICAgIGlmICgha2V5LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDksOCArMTA5LDggQEAgaW50IElEQktl
eTo6Y29tcGFyZShjb25zdCBJREJLZXkmIG90aGVyKQogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpn
ZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IFdU
Rjo6Z2V0PElEQktleVZlY3Rvcj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5
ID0gc3RkOjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgb3RoZXJB
cnJheSA9IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4ob3RoZXIubV92YWx1ZSk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlckFycmF5LnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaW50IHJlc3VsdCA9IGFycmF5W2ldLT5jb21wYXJl
KCpvdGhlckFycmF5W2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTIy
LDEzICsxMjIsMTMgQEAgaW50IElEQktleTo6Y29tcGFyZShjb25zdCBJREJLZXkmIG90aGVyKQog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAg
ICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4obV92YWx1ZSksIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3Zh
bHVlKSk7CisgICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVy
PihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJl
dHVybiAtY29kZVBvaW50Q29tcGFyZShXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpLCBX
VEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIC1jb2RlUG9pbnRDb21w
YXJlKHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSksIHN0ZDo6Z2V0PFN0cmluZz4obV92
YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJl
cjogewotICAgICAgICBhdXRvIG51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7Ci0g
ICAgICAgIGF1dG8gb3RoZXJOdW1iZXIgPSBXVEY6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUp
OworICAgICAgICBhdXRvIG51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAg
ICAgIGF1dG8gb3RoZXJOdW1iZXIgPSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwog
ICAgICAgICByZXR1cm4gKG51bWJlciA8IG90aGVyTnVtYmVyKSA/IC0xIDogKChudW1iZXIgPiBv
dGhlck51bWJlcikgPyAxIDogMCk7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDMxICsxMTMsMzEgQEAgcHVibGljOgogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8SURCS2V5Pj4mIGFycmF5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVj
dG9yPFJlZlB0cjxJREJLZXk+Pj4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxW
ZWN0b3I8UmVmUHRyPElEQktleT4+PihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBTdHJp
bmcmIHN0cmluZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5
cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBk
b3VibGUgZGF0ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5
cGU6OkRhdGUpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91
YmxlIG51bWJlcigpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5
cGU6Ok51bWJlcik7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYmluYXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBpbnQgY29t
cGFyZShjb25zdCBJREJLZXkmIG90aGVyKSBjb25zdDsKQEAgLTE3MSw3ICsxNzEsNyBAQCBwcml2
YXRlOgogICAgIGV4cGxpY2l0IElEQktleShjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwog
CiAgICAgY29uc3QgS2V5VHlwZSBtX3R5cGU7Ci0gICAgVmFyaWFudDxWZWN0b3I8UmVmUHRyPElE
QktleT4+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7Cisg
ICAgc3RkOjp2YXJpYW50PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIAogICAgIGNvbnN0IHNpemVfdCBtX3NpemVF
c3RpbWF0ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCS2V5RGF0YS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3
IEBAIElEQktleURhdGE6OklEQktleURhdGEoY29uc3QgSURCS2V5KiBrZXkKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBtX3ZhbHVlID0gVmVjdG9y
PElEQktleURhdGE+KCk7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElE
QktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBmb3IgKGF1dG8mIGtleTIgOiBrZXkt
PmFycmF5KCkpCiAgICAgICAgICAgICBhcnJheS5hcHBlbmQoSURCS2V5RGF0YShrZXkyLmdldCgp
KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtODEsMjAgKzgxLDIwIEBAIFJlZlB0cjxJREJLZXk+IElE
QktleURhdGE6Om1heWJlQ3JlYXRlSUQKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52
YWxpZCgpOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAgICAgVmVjdG9yPFJlZlB0
cjxJREJLZXk+PiBhcnJheTsKLSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDogV1RGOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleURh
dGEgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKSB7CiAgICAgICAgICAg
ICBhcnJheS5hcHBlbmQoa2V5RGF0YS5tYXliZUNyZWF0ZUlEQktleSgpKTsKICAgICAgICAgICAg
IEFTU0VSVChhcnJheS5sYXN0KCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZUFycmF5KGFycmF5KTsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0g
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUJpbmFyeShXVEY6OmdldDxUaHJlYWRTYWZlRGF0
YUJ1ZmZlcj4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVCaW5hcnko
c3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKFdURjo6Z2V0
PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmco
c3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkp
OworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHN0ZDo6Z2V0PGRvdWJsZT4obV92
YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVOdW1iZXIoV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVy
biBJREJLZXk6OmNyZWF0ZU51bWJlcihzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBj
YXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkBAIC0xMjUsMjAgKzEyNSwyMCBAQCB2b2lkIElEQktleURhdGE6Omlz
b2xhdGVkQ29weShjb25zdCBJREJLCiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6
OkFycmF5OiB7CiAgICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0
YT4oKTsKLSAgICAgICAgYXV0byYgZGVzdGluYXRpb25BcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4oZGVzdGluYXRpb24ubV92YWx1ZSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5
IDogV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihzb3VyY2UubV92YWx1ZSkpCisgICAgICAg
IGF1dG8mIGRlc3RpbmF0aW9uQXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGRl
c3RpbmF0aW9uLm1fdmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4oc291cmNlLm1fdmFsdWUpKQogICAgICAgICAgICAgZGVzdGluYXRp
b25BcnJheS5hcHBlbmQoa2V5Lmlzb2xhdGVkQ29weSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1
ZSA9IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihzb3VyY2UubV92YWx1ZSk7CisgICAg
ICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4o
c291cmNlLm1fdmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJp
bmc6Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxTdHJpbmc+KHNvdXJj
ZS5tX3ZhbHVlKS5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9
IHN0ZDo6Z2V0PFN0cmluZz4oc291cmNlLm1fdmFsdWUpLmlzb2xhdGVkQ29weSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVt
YmVyOgotICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gV1RGOjpnZXQ8ZG91YmxlPihzb3Vy
Y2UubV92YWx1ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxkb3Vi
bGU+KHNvdXJjZS5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6
TWF4OgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgpAQCAtMTYwLDI1ICsxNjAsMjUgQEAgdm9pZCBJ
REJLZXlEYXRhOjplbmNvZGUoS2V5ZWRFbmNvZGVyJiBlbgogICAgIGNhc2UgS2V5VHlwZTo6SW52
YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAg
ICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwor
ICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1
ZSk7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlT2JqZWN0cygiYXJyYXkiLCBhcnJheS5iZWdpbigp
LCBhcnJheS5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJREJLZXlEYXRh
JiBrZXkpIHsKICAgICAgICAgICAgIGtleS5lbmNvZGUoZW5jb2Rlcik7CiAgICAgICAgIH0pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAg
ICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSku
ZGF0YSgpOworICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZm
ZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAgICAgICAgZW5jb2Rlci5lbmNvZGVCb29sKCJoYXNCaW5h
cnkiLCAhIWRhdGEpOwogICAgICAgICBpZiAoZGF0YSkKICAgICAgICAgICAgIGVuY29kZXIuZW5j
b2RlQnl0ZXMoImJpbmFyeSIsIGRhdGEtPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgZW5jb2Rl
ci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAg
ICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihtX3Zh
bHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2Fz
ZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlRG91YmxlKCJudW1iZXIi
LCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3Vi
bGUoIm51bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CkBAIC0yMjAs
MTIgKzIyMCwxMiBAQCBib29sIElEQktleURhdGE6OmRlY29kZShLZXllZERlY29kZXImIGRlCiAK
ICAgICBpZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpIHsKICAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3Ry
aW5nKCJzdHJpbmciLCBXVEY6OmdldDxTdHJpbmc+KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihy
ZXN1bHQubV92YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQubV90eXBlID09IEtleVR5
cGU6Ok51bWJlciB8fCByZXN1bHQubV90eXBlID09IEtleVR5cGU6OkRhdGUpIHsKICAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSAwLjA7Ci0gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJs
ZSgibnVtYmVyIiwgV1RGOjpnZXQ8ZG91YmxlPihyZXN1bHQubV92YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gZGVjb2Rlci5kZWNvZGVEb3VibGUoIm51bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4ocmVz
dWx0Lm1fdmFsdWUpKTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBl
OjpCaW5hcnkpIHsKQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIElEQktleURhdGE6OmRlY29kZShL
ZXllZERlY29kZXImIGRlCiAgICAgfTsKICAgICAKICAgICByZXN1bHQubV92YWx1ZSA9IFZlY3Rv
cjxJREJLZXlEYXRhPigpOwotICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5
IiwgV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV92YWx1ZSksIGFycmF5RnVu
Y3Rpb24pOworICAgIHJldHVybiBkZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5Iiwgc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV92YWx1ZSksIGFycmF5RnVuY3Rpb24pOwog
fQogCiBpbnQgSURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29u
c3QKQEAgLTI3Nyw4ICsyNzcsOCBAQCBpbnQgSURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJL
ZXlEYXRhCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byYgb3RoZXJBcnJh
eSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAg
IGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAg
ICAgICAgYXV0byYgb3RoZXJBcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3Ro
ZXIubV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgp
ICYmIGkgPCBvdGhlckFycmF5LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaW50IHJl
c3VsdCA9IGFycmF5W2ldLmNvbXBhcmUob3RoZXJBcnJheVtpXSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKQEAgLTI5MCwxMyArMjkwLDEzIEBAIGludCBJREJLZXlEYXRhOjpjb21w
YXJlKGNvbnN0IElEQktleURhdGEKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGNhc2Ug
S2V5VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURhdGEoV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBXVEY6OmdldDxUaHJlYWRTYWZl
RGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFy
eUtleURhdGEoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBzdGQ6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlw
ZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShXVEY6OmdldDxTdHJp
bmc+KG1fdmFsdWUpLCBXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSwgc3RkOjpn
ZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAg
IGNhc2UgS2V5VHlwZTo6TnVtYmVyOiB7Ci0gICAgICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8
ZG91YmxlPihtX3ZhbHVlKTsKLSAgICAgICAgYXV0byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRv
dWJsZT4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91
YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byBvdGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJs
ZT4ob3RoZXIubV92YWx1ZSk7CiAKICAgICAgICAgaWYgKG51bWJlciA9PSBvdGhlck51bWJlcikK
ICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzI1LDcgKzMyNSw3IEBAIFN0cmluZyBJREJLZXlE
YXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAg
ICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCI8YXJyYXk+IC0geyAiKTsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFy
cmF5W2ldLmxvZ2dpbmdTdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaSA8IGFycmF5LnNpemUo
KSAtIDEpCkBAIC0zMzksNyArMzM5LDcgQEAgU3RyaW5nIElEQktleURhdGE6OmxvZ2dpbmdTdHJp
bmcoKSBjb25zdAogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCI8YmluYXJ5PiAtICIpOwogCi0gICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOworICAgICAgICBhdXRvKiBk
YXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAg
ICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiKG51bGwpIik7
CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7CkBAIC0zNTcsMTIgKzM1
NywxMiBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmVzdWx0
ID0gIjxzdHJpbmc+IC0gIiArIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CisgICAgICAgIHJl
c3VsdCA9ICI8c3RyaW5nPiAtICIgKyBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiPGRhdGU+IC0gJWYiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8ZGF0ZT4gLSAlZiIsIHN0ZDo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIjxudW1iZXI+IC0gJWYiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8bnVtYmVyPiAtICVmIiwgc3RkOjpnZXQ8
ZG91YmxlPihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgICAgIHJldHVy
biAiPG1heGltdW0+IjsKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTQ0MiwxMyArNDQyLDEz
IEBAIGJvb2wgSURCS2V5RGF0YTo6b3BlcmF0b3I9PShjb25zdCBJREJLZXkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAgICAgY2FzZSBLZXlUeXBlOjpE
YXRlOgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSA9PSBXVEY6Omdl
dDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2Ug
S2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVl
KSA9PSBXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3Rk
OjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUp
OwogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhy
ZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpID09IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVm
ZmVyPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVE
YXRhQnVmZmVyPihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3Ro
ZXIubV92YWx1ZSk7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgcmV0dXJuIFdU
Rjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8VmVjdG9yPElE
QktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3Rv
cjxJREJLZXlEYXRhPj4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+Pihv
dGhlci5tX3ZhbHVlKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRh
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEzICsxMzEsMTMgQEAgcHVibGlj
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAg
ICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAgICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0
cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91YmxlKT4oJldURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpo
YXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAg
ICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoOjpoYXNoKFdURjo6Z2V0PFN0cmluZz4o
bV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFz
aChzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6
OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOworICAgICAgICAgICAg
YXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRh
KCk7CiAgICAgICAgICAgICBpZiAoIWRhdGEpCiAgICAgICAgICAgICAgICAgaGFzaENvZGVzLmFw
cGVuZCgwKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEtleVR5cGU6OkFycmF5
OgotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0
YT4+KG1fdmFsdWUpKQorICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQogICAgICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBl
bmQoa2V5Lmhhc2goKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU5LDM4
ICsxNTksMzggQEAgcHVibGljOgogICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpOwotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmlu
Zz4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIGRhdGUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpEYXRlKTsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+
KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGRvdWJsZSBudW1iZXIoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIpOwotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJs
ZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJp
bmFyeSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJp
bmFyeSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92
YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92
YWx1ZSk7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPElEQktleURhdGE+JiBhcnJheSgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKLSAg
ICAgICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAg
ICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgIH0K
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5RGF0
YSYgc291cmNlLCBJREJLZXlEYXRhJiBkZXN0aW5hdGlvbik7CiAKICAgICBLZXlUeXBlIG1fdHlw
ZTsKLSAgICBWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVh
ZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5
RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIAog
ICAgIGJvb2wgbV9pc051bGwgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0RlbGV0ZWRWYWx1ZSB7
IGZhbHNlIH07CkBAIC0yNDIsMTcgKzI0MiwxNyBAQCB2b2lkIElEQktleURhdGE6OmVuY29kZShF
bmNvZGVyJiBlbmNvZGVyCiAgICAgY2FzZSBLZXlUeXBlOjpNaW46CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxW
ZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtl
eVR5cGU6OkJpbmFyeToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0
YUJ1ZmZlcj4obV92YWx1ZSk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8VGhyZWFkU2Fm
ZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6
OlN0cmluZzoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwor
ICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoK
LSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICBl
bmNvZGVyIDw8IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIH0KQEAgLTI3NiwyMyArMjc2LDIzIEBAIGJvb2wgSURCS2V5RGF0YTo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheToKICAg
ICAgICAga2V5RGF0YS5tX3ZhbHVlID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihrZXlEYXRhLm1f
dmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKICAgICAgICAga2V5RGF0
YS5tX3ZhbHVlID0gVGhyZWFkU2FmZURhdGFCdWZmZXIoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkp
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZm
ZXI+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKICAgICAgICAga2V5RGF0YS5tX3Zh
bHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8U3Ry
aW5nPihrZXlEYXRhLm1fdmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6
OmdldDxTdHJpbmc+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlU
eXBlOjpOdW1iZXI6CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IDAuMDsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxkb3VibGU+KGtleURhdGEubV92YWx1ZSkpKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVl
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3Bw
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgaXNJ
REJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0aCYKICAgICAgICAgfQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRo
KTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKIH0KIAogSURCS2V5
UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKQEAgLTIyMCw3ICsy
MjAsNyBAQCBJREJLZXlQYXRoIGlzb2xhdGVkQ29weShjb25zdCBJREJLZXlQYXRoCiAgICAgICAg
IHJldHVybiB2ZWN0b3JDb3B5OwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlz
aXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yNDQsNyArMjQ0LDcgQEAgU3RyaW5nIGxvZ2dpbmdT
dHJpbmcoY29uc3QgSURCS2V5UGF0aCYgcAogICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgcGF0aCk7Cisg
ICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwgcGF0aCk7CiB9CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdXNpbmcgSURCS2V5UGF0aCA9IFdURjo6VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+PjsKK3VzaW5nIElEQktleVBhdGggPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj47CiBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmKTsKIAogZW51
bSBjbGFzcyBJREJLZXlQYXRoUGFyc2VFcnJvciB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0NDUsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURC
SW5kZXg+PiBJREJPYmplY3RTdG9yCiAgICAgaWYgKG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKIAotICAgIGlmIChwYXJhbWV0ZXJzLm11bHRp
RW50cnkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkp
CisgICAgaWYgKHBhcmFtZXRlcnMubXVsdGlFbnRyeSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElu
dmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRl
SW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRoZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBh
cnJheSBhbmQgdGhlIG11bHRpRW50cnkgb3B0aW9uIGlzIHRydWUuIikgfTsKIAogICAgIC8vIElu
c3RhbGwgdGhlIG5ldyBJbmRleCBpbnRvIHRoZSBPYmplY3RTdG9yZSdzIGluZm8uCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lkIElEQlJlcXVl
c3Q6OnNldFNvdXJjZShJREJDdXJzb3ImIGN1CiAKICAgICBtX3NvdXJjZSA9IFNvdXJjZSB7ICZj
dXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3ROb3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8
U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSkpOwotICAgICAgICBXVEY6
OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUoKSktPmRlY3JlbWVudE91dHN0
YW5kaW5nUmVxdWVzdENvdW50KCk7CisgICAgICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKSk7CisgICAgICAgIHN0ZDo6
Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJjZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0c3Rh
bmRpbmdSZXF1ZXN0Q291bnQoKTsKICAgICB9KTsKIH0KIApAQCAtMjA3LDkgKzIwNyw5IEBAIHVp
bnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWQKICAgICAgICAgcmV0dXJuIDA7
CiAKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZS52YWx1ZSgpLAotICAgICAgICBb
XSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3JlPiYgb2JqZWN0U3RvcmUpIHsgcmV0dXJuIG9i
amVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29uc3QgUmVm
UHRyPElEQkluZGV4PiYgaW5kZXgpIHsgcmV0dXJuIGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJ
ZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChjb25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIHsg
cmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9i
amVjdFN0b3JlKSAtPiB1aW50NjRfdCB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50
aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSAt
PiB1aW50NjRfdCB7IHJldHVybiBpbmRleC0+aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigp
OyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkN1cnNvcj4mKSAtPiB1aW50NjRfdCB7
IHJldHVybiAwOyB9CiAgICAgKTsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBAIEluZGV4ZWREQjo6
SW5kZXhSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnIKIHsKICAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4obV9zb3VyY2UudmFs
dWUoKSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRl
eD4+KG1fc291cmNlLnZhbHVlKCkpKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVj
b3JkVHlwZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfklEQlJlcXVlc3QoKTsKIAotICAgIHVzaW5nIFJlc3Vs
dCA9IFZhcmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4sIFJlZlB0cjxJREJEYXRhYmFzZT4sIEpTQzo6
U3Ryb25nPEpTQzo6VW5rbm93bj4+OworICAgIHVzaW5nIFJlc3VsdCA9IHN0ZDo6dmFyaWFudDxS
ZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRhdGFiYXNlPiwgSlNDOjpTdHJvbmc8SlNDOjpV
bmtub3duPj47CiAgICAgRXhjZXB0aW9uT3I8c3RkOjpvcHRpb25hbDxSZXN1bHQ+PiByZXN1bHQo
KSBjb25zdDsKIAotICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0
b3JlPiwgUmVmUHRyPElEQkluZGV4PiwgUmVmUHRyPElEQkN1cnNvcj4+OworICAgIHVzaW5nIFNv
dXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCT2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5k
ZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CiAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxTb3VyY2U+
JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQogCiAgICAgRXhjZXB0aW9uT3I8
RE9NRXJyb3IqPiBlcnJvcigpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBA
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6ZUlEQktleVBhdGgKICAgICAgICAgICAgICAg
ICBlbmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5nIiwgc3RyaW5nKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICB9KTsKLSAgICAgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVl
KCkpOworICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgudmFsdWUoKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGVuY29kZXItPmVuY29kZUVudW0oInR5cGUiLCBLZXlQYXRoVHlwZTo6
TnVsbCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIFN0cmluZyBNZWRpYUNvbnRyb2xz
SG9zdDo6ZGlzcGxheU5hbWVGb3IKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykg
eworICAgIHJldHVybiBzdGQ6OnZpc2l0KFsmcGFnZV0oYXV0byYgdHJhY2spIHsKICAgICAgICAg
cmV0dXJuIHBhZ2UtPmdyb3VwKCkuY2FwdGlvblByZWZlcmVuY2VzKCkuZGlzcGxheU5hbWVGb3JU
cmFjayh0cmFjay5nZXQoKSk7CiAgICAgfSwgdHJhY2sudmFsdWUoKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250
cm9sc0hvc3QuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPj4gc29ydGVkVHJh
Y2tMaXN0Rm9yTWVudShUZXh0VHJhY2tMaXN0Jik7CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1Ry
YWNrPj4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShBdWRpb1RyYWNrTGlzdCYpOwogCi0gICAgdXNp
bmcgVGV4dE9yQXVkaW9UcmFjayA9IFdURjo6VmFyaWFudDxSZWZQdHI8VGV4dFRyYWNrPiwgUmVm
UHRyPEF1ZGlvVHJhY2s+PjsKKyAgICB1c2luZyBUZXh0T3JBdWRpb1RyYWNrID0gc3RkOjp2YXJp
YW50PFJlZlB0cjxUZXh0VHJhY2s+LCBSZWZQdHI8QXVkaW9UcmFjaz4+OwogICAgIFN0cmluZyBk
aXNwbGF5TmFtZUZvclRyYWNrKGNvbnN0IHN0ZDo6b3B0aW9uYWw8VGV4dE9yQXVkaW9UcmFjaz4m
KTsKIAogICAgIFRleHRUcmFjayogY2FwdGlvbk1lbnVPZmZJdGVtKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRGV2aWNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgRG9jdW1lbnQq
IE1lZGlhRGV2aWNlczo6ZG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1
bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIH0KIAotc3RhdGljIE1lZGlhQ29uc3Ry
YWludHMgY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdCBWYXJpYW50PGJvb2wsIE1lZGlhVHJh
Y2tDb25zdHJhaW50cz4mIGNvbnN0cmFpbnRzKQorc3RhdGljIE1lZGlhQ29uc3RyYWludHMgY3Jl
YXRlTWVkaWFDb25zdHJhaW50cyhjb25zdCBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0Nv
bnN0cmFpbnRzPiYgY29uc3RyYWludHMpCiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29u
c3RyYWludHMsCiAgICAgICAgIFsmXSAoYm9vbCBpc1ZhbGlkKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDggKzYxLDggQEAgcHVibGljOgogICAgIHVzaW5n
IEVudW1lcmF0ZURldmljZXNQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETFNlcXVlbmNl
PElETEludGVyZmFjZTxNZWRpYURldmljZUluZm8+Pj47CiAKICAgICBzdHJ1Y3QgU3RyZWFtQ29u
c3RyYWludHMgewotICAgICAgICBWYXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4g
dmlkZW87Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiBhdWRp
bzsKKyAgICAgICAgc3RkOjp2YXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4gdmlk
ZW87CisgICAgICAgIHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1
ZGlvOwogICAgIH07CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gZ2V0VXNlck1lZGlhKGNvbnN0IFN0
cmVhbUNvbnN0cmFpbnRzJiwgUHJvbWlzZSYmKSBjb25zdDsKICAgICB2b2lkIGVudW1lcmF0ZURl
dmljZXMoRW51bWVyYXRlRGV2aWNlc1Byb21pc2UmJikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0
cmFpbnRzLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDgg
KzQyLDggQEAgc3RydWN0IENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJzIHsKIH07CiAKIHN0cnVj
dCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzIHsKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlh
bnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGV4YWN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4gaWRlYWw7CisgICAgc3RkOjpvcHRpb25hbDxz
dGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGV4YWN0OworICAgIHN0ZDo6b3B0
aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBpZGVhbDsKIH07CiAK
IHN0cnVjdCBDb25zdHJhaW5Eb3VibGVSYW5nZSA6IERvdWJsZVJhbmdlIHsKQEAgLTU2LDEwICs1
NiwxMCBAQCBzdHJ1Y3QgQ29uc3RyYWluTG9uZ1JhbmdlIDogTG9uZ1JhbmdlIHsKICAgICBzdGQ6
Om9wdGlvbmFsPGludD4gaWRlYWw7CiB9OwogCi11c2luZyBDb25zdHJhaW5Cb29sZWFuID0gVmFy
aWFudDxib29sLCBDb25zdHJhaW5Cb29sZWFuUGFyYW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5E
T01TdHJpbmcgPSBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4sIENvbnN0cmFpbkRPTVN0
cmluZ1BhcmFtZXRlcnM+OwotdXNpbmcgQ29uc3RyYWluRG91YmxlID0gVmFyaWFudDxkb3VibGUs
IENvbnN0cmFpbkRvdWJsZVJhbmdlPjsKLXVzaW5nIENvbnN0cmFpbkxvbmcgPSBWYXJpYW50PGlu
dCwgQ29uc3RyYWluTG9uZ1JhbmdlPjsKK3VzaW5nIENvbnN0cmFpbkJvb2xlYW4gPSBzdGQ6OnZh
cmlhbnQ8Ym9vbCwgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnM+OwordXNpbmcgQ29uc3RyYWlu
RE9NU3RyaW5nID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4sIENvbnN0cmFp
bkRPTVN0cmluZ1BhcmFtZXRlcnM+OwordXNpbmcgQ29uc3RyYWluRG91YmxlID0gc3RkOjp2YXJp
YW50PGRvdWJsZSwgQ29uc3RyYWluRG91YmxlUmFuZ2U+OwordXNpbmcgQ29uc3RyYWluTG9uZyA9
IHN0ZDo6dmFyaWFudDxpbnQsIENvbnN0cmFpbkxvbmdSYW5nZT47CiAKIHN0cnVjdCBNZWRpYVRy
YWNrQ29uc3RyYWludFNldCB7CiAgICAgc3RkOjpvcHRpb25hbDxDb25zdHJhaW5Mb25nPiB3aWR0
aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJ
Y2VTZXJ2ZXIuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENJY2VTZXJ2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgUlRDSWNlU2VydmVyIHsKLSAgICBWYXJp
YW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+IHVybHM7CisgICAgc3RkOjp2YXJpYW50PFN0cmlu
ZywgVmVjdG9yPFN0cmluZz4+IHVybHM7CiAgICAgU3RyaW5nIGNyZWRlbnRpYWw7CiAgICAgU3Ry
aW5nIHVzZXJuYW1lOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDggKzE4NCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IFJUQ1BlZXJDb25uZWN0aW9uOjpyZW0KIAogRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2Vp
dmVyPj4gUlRDUGVlckNvbm5lY3Rpb246OmFkZFRyYW5zY2VpdmVyKEFkZFRyYW5zY2VpdmVyVHJh
Y2tPcktpbmQmJiB3aXRoVHJhY2ssIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkK
IHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHdpdGhUcmFjaykpIHsK
LSAgICAgICAgY29uc3QgU3RyaW5nJiBraW5kID0gV1RGOjpnZXQ8U3RyaW5nPih3aXRoVHJhY2sp
OworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4od2l0aFRyYWNrKSkgewor
ICAgICAgICBjb25zdCBTdHJpbmcmIGtpbmQgPSBzdGQ6OmdldDxTdHJpbmc+KHdpdGhUcmFjayk7
CiAgICAgICAgIGlmIChraW5kICE9ICJhdWRpbyIgJiYga2luZCAhPSAidmlkZW8iKQogICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwogCkBAIC0xOTMsNyArMTkzLDcg
QEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gUlRDUAogICAgICAgICByZXR1
cm4gY29tcGxldGVBZGRUcmFuc2NlaXZlcihXVEZNb3ZlKHNlbmRlciksIGluaXQsIGNyZWF0ZUNh
bm9uaWNhbFVVSURTdHJpbmcoKSwga2luZCk7CiAgICAgfQogCi0gICAgUmVmPE1lZGlhU3RyZWFt
VHJhY2s+IHRyYWNrID0gV1RGOjpnZXQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+Pih3aXRoVHJh
Y2spLnJlbGVhc2VOb25OdWxsKCk7CisgICAgUmVmPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0g
c3RkOjpnZXQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+Pih3aXRoVHJhY2spLnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgY29uc3QgU3RyaW5nJiB0cmFja0lkID0gdHJhY2stPmlkKCk7CiAgICAgY29u
c3QgU3RyaW5nJiB0cmFja0tpbmQgPSB0cmFjay0+a2luZCgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5o
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBw
dWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrPiYmLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxN
ZWRpYVN0cmVhbT4+Jik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVtb3ZlVHJhY2soUlRDUnRw
U2VuZGVyJik7CiAKLSAgICB1c2luZyBBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kID0gVmFyaWFu
dDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4sIFN0cmluZz47CisgICAgdXNpbmcgQWRkVHJhbnNj
ZWl2ZXJUcmFja09yS2luZCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4s
IFN0cmluZz47CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJh
bnNjZWl2ZXIoQWRkVHJhbnNjZWl2ZXJUcmFja09yS2luZCYmLCBjb25zdCBSVENSdHBUcmFuc2Nl
aXZlckluaXQmKTsKIAogICAgIC8vIDYuMSBQZWVyLXRvLXBlZXIgZGF0YSBBUEkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9T
RFBQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEwIEBAIHB1YmxpYzoK
ICAgICBSZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVMaW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0
cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3Vs
dCB7Ci0gICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlkYXRlLCBSZXN1bHQ+IHJlc3VsdDsKKyAgICAg
ICAgc3RkOjp2YXJpYW50PEljZUNhbmRpZGF0ZSwgUmVzdWx0PiByZXN1bHQ7CiAKLSAgICAgICAg
UmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJlc3VsdDo6U3VjY2VzcyA6IFdURjo6Z2V0PFNE
UFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9Ci0gICAgICAgIEljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlKCkgeyByZXR1cm4gV1RGOjpnZXQ8SWNlQ2FuZGlkYXRlPihyZXN1bHQpOyB9CisgICAg
ICAgIFJlc3VsdCBwYXJzaW5nU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxJY2VDYW5kaWRhdGU+KHJlc3VsdCkgPyBSZXN1bHQ6OlN1Y2Nlc3MgOiBzdGQ6Omdl
dDxTRFBQcm9jZXNzb3I6OlJlc3VsdD4ocmVzdWx0KTsgfQorICAgICAgICBJY2VDYW5kaWRhdGUm
IGNhbmRpZGF0ZSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PEljZUNhbmRpZGF0ZT4ocmVzdWx0KTsgfQog
ICAgIH07CiAgICAgUGFyc2luZ1Jlc3VsdCBwYXJzZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5n
JiBjYW5kaWRhdGVMaW5lKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
SURMVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBl
cy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMTEgKzIyOCwxMSBAQCBzdHJ1Y3QgSURMRXJyb3Ig
OiBJRExVbnN1cHBvcnRlZFR5cGUgeyB9CiBzdHJ1Y3QgSURMRE9NRXhjZXB0aW9uIDogSURMVW5z
dXBwb3J0ZWRUeXBlIHsgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgSURM
VW5pb24gOiBJRExUeXBlPFZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4u
Lj4+IHsKK3N0cnVjdCBJRExVbmlvbiA6IElETFR5cGU8c3RkOjp2YXJpYW50PHR5cGVuYW1lIFRz
OjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiB7CiAgICAgdXNpbmcgVHlwZUxpc3QgPSBicmlnYW5k
OjpsaXN0PFRzLi4uPjsKIAotICAgIHVzaW5nIFBhcmFtZXRlclR5cGUgPSBjb25zdCBWYXJpYW50
PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+JjsKLSAgICB1c2luZyBOdWxsYWJs
ZVBhcmFtZXRlclR5cGUgPSBjb25zdCBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8dHlwZW5hbWUgVHM6
OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+JjsKKyAgICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gY29u
c3Qgc3RkOjp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+JjsKKyAg
ICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBjb25zdCBzdGQ6Om9wdGlvbmFsPHN0ZDo6
dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4mOwogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IElETEJ1ZmZlclNvdXJjZSA6IElETFdyYXBwZXI8VD4g
eyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQnVmZmVyU291cmNlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBWYXJpYW50VHlwZSA9
IFdURjo6VmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4+OworICAgIHVzaW5nIFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj47CiAKICAg
ICBCdWZmZXJTb3VyY2UoKSB7IH0KICAgICBCdWZmZXJTb3VyY2UoVmFyaWFudFR5cGUmJiB2YXJp
YW50KQpAQCAtNDUsMTQgKzQ1LDE0IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRh
dGEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVm
ZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CisgICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1
dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhfdCogewogICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXItPmRhdGEoKSk7CiAgICAgICAgIH0sIG1fdmFy
aWFudCk7CiAgICAgfQogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IHNpemVfdCB7CisgICAgICAg
IHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gc2l6ZV90IHsKICAgICAgICAg
ICAgIHJldHVybiBidWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgfSwgbV92YXJpYW50KTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlw
ZXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2Fs
bFRyYWNlclR5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZhcmlhbnQ8Cit0eXBlZGVmIHN0ZDo6dmFyaWFudDwK
ICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OkltYWdlU21vb3RoaW5nUXVhbGl0eSwKICAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OldpbmRpbmdSdWxlLAogICAgIERPTU1hdHJpeElu
aXQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MCwxMSAr
MjcwLDExIEBAIGJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGEKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKKyAgICBBU1NF
UlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKIAogICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJv
cjsKLSAgICBJREJQYXJzZUtleVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0
aEVsZW1lbnRzLCBlcnJvcik7CisgICAgSURCUGFyc2VLZXlQYXRoKHN0ZDo6Z2V0PFN0cmluZz4o
a2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJ
REJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlz
RW1wdHkoKSkKQEAgLTI5Nyw4ICsyOTcsOCBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZShFeGVjU3RhCiAKIFJlZlB0cjxJREJLZXk+IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkgewotICAgICAgICBhdXRvJiBhcnJheSA9IFdU
Rjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpIHsKKyAgICAgICAgYXV0byYgYXJyYXkg
PSBzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CiAgICAgICAgIFZlY3RvcjxSZWZQ
dHI8SURCS2V5Pj4gcmVzdWx0OwogICAgICAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShhcnJheS5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IGFycmF5KSB7CkBA
IC0zMTAsMTcgKzMxMCwxNyBAQCBSZWZQdHI8SURCS2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21T
Y3JpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KFdURk1vdmUocmVzdWx0KSk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSk7CisgICAg
cmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVj
LCB2YWx1ZSwgc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSk7CiB9CiAKIGJvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2Ny
aXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIAotICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOworICAgIEFTU0VSVChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IGtl
eVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQ
YXJzZUtleVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBl
cnJvcik7CisgICAgSURCUGFyc2VLZXlQYXRoKHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtl
eVBhdGhFbGVtZW50cywgZXJyb3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFy
c2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXplKCkpCkBAIC00
MDAsNyArNDAwLDcgQEAgc3RhdGljIFZlY3RvcjxJREJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQQog
ICAgICAgICByZXR1cm4ga2V5czsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZp
c2l0b3IsIGluZm8ua2V5UGF0aCgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBp
bmZvLmtleVBhdGgoKSk7CiB9CiAKIHZvaWQgZ2VuZXJhdGVJbmRleEtleUZvclZhbHVlKEV4ZWNT
dGF0ZSYgZXhlYywgY29uc3QgSURCSW5kZXhJbmZvJiBpbmZvLCBKU1ZhbHVlIHZhbHVlLCBJbmRl
eEtleSYgb3V0S2V5KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0VW5pb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnZlcnRVbmlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODUsNyArMzg1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydAogICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0gdHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHBy
IGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVlOwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBi
cmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50
X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFsdWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0g
YnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFu
dF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpT
VmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0aW9uVHlwZSYgdmFyaWFudCkKICAgICB7CkBA
IC0zOTYsNyArMzk2LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVy
dAogICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVuYW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVu
Y2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBlOwogICAgICAgICAgICAgaWYgKEk6OnZhbHVl
ID09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4o
c3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+Pihz
dGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmdldDxJOjp2YWx1ZT4odmFyaWFudCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0V2ViR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2NiArNjYsNjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSlNWYWx1ZSBjb252ZXJ0
VG9KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFdlYkdMQW55JiBhbnkpCiB7CiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYW55
LAotICAgICAgICBbXSAoc3RkOjpudWxscHRyX3QpIHsKKyAgICAgICAgW10gKHN0ZDo6bnVsbHB0
cl90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAgICAg
fSwKLSAgICAgICAgW10gKGJvb2wgdmFsdWUpIHsKKyAgICAgICAgW10gKGJvb2wgdmFsdWUpIC0+
IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YWx1ZSk7CiAgICAgICAg
IH0sCi0gICAgICAgIFtdIChpbnQgdmFsdWUpIHsKKyAgICAgICAgW10gKGludCB2YWx1ZSkgLT4g
SlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogICAgICAgICB9
LAotICAgICAgICBbXSAodW5zaWduZWQgdmFsdWUpIHsKKyAgICAgICAgW10gKHVuc2lnbmVkIHZh
bHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIFtdIChsb25nIGxvbmcgdmFsdWUpIHsKKyAgICAgICAgW10gKGxv
bmcgbG9uZyB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
dmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAg
W10gKGZsb2F0IHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkg
eworICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKCZzdGF0ZSwgdmFsdWUpOwogICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYgdmFsdWVzKSB7CisgICAgICAgIFsm
XSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUg
OiB2YWx1ZXMpCiAgICAgICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29sZWFuKHZhbHVlKSk7
CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoJnN0YXRlLCAwLCAmZ2xvYmFsT2Jq
ZWN0LCBsaXN0KTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQz
MkFycmF5PiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5
PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPEludDMyQXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0
cjxJbnQzMkFycmF5PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAg
ICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJyYXk+JiBhcnJheSkgeworICAgICAgICBbJl0g
KGNvbnN0IFJlZlB0cjxVaW50OEFycmF5PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAg
ICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQzMkFycmF5PiYgYXJyYXkpIHsK
KyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1
ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5
LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xCdWZm
ZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xCdWZmZXI+JiBi
dWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIFsmXSAoY29uc3Qg
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+JiBidWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAg
ICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFByb2dyYW0+JiBwcm9ncmFt
KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUHJvZ3JhbT4mIHByb2dyYW0pIC0+
IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBwcm9ncmFtLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+JiBidWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFRleHR1cmU+JiB0ZXh0dXJlKSB7Cisg
ICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVGV4dHVyZT4mIHRleHR1cmUpIC0+IEpTVmFs
dWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB0ZXh0
dXJlLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRy
PFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAg
ICAgICAgfQogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgICAgICwKLSAgICAgICAgWyZdIChjb25z
dCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdD4mIGFycmF5KSB7CisgICAgICAgIFsmXSAo
Y29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3Q+JiBhcnJheSkgLT4gSlNWYWx1ZSB7
CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5Lmdl
dCgpKTsKICAgICAgICAgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtp
bmcgY29weSkKQEAgLTcyNTEsNyArNzI1MSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxUcmFjZXJQYXJh
bWV0ZXIoKQogICAgIG15ICgkbmFtZSwgJHR5cGUsICRpbmRlbnQpID0gQF87CiAKICAgICBpZiAo
JHR5cGUtPmlzVW5pb24pIHsKLSAgICAgICAgcmV0dXJuICRpbmRlbnQgLiAiICAgIFdURjo6dmlz
aXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUp
OyB9LCAiIC4gJG5hbWUgLiAiKTsiOworICAgICAgICByZXR1cm4gJGluZGVudCAuICIgICAgc3Rk
Ojp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2
YWx1ZSk7IH0sICIgLiAkbmFtZSAuICIpOyI7CiAgICAgfQogCiAgICAgcmV0dXJuICRpbmRlbnQg
LiAiICAgIGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCgiIC4gJG5hbWUgLiAiKTsiOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFj
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIHNldEpTVGVz
dENhbGxUcmFjZXJUZQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZmFsc2Up
OwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxUcmFjaW5nQWN0aXZlKCkpKSB7CiAgICAgICAg
IFZlY3RvcjxUZXN0Q2FsbFRyYWNlckludGVyZmFjZVZhcmlhbnQ+IGNhbGxUcmFjZXJQYXJhbWV0
ZXJzOwotICAgICAgICBXVEY6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBh
cmFtZXRlcnMuYXBwZW5kKHZhbHVlKTsgfSwgbmF0aXZlVmFsdWUpOworICAgICAgICBzdGQ6OnZp
c2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKHZhbHVl
KTsgfSwgbmF0aXZlVmFsdWUpOwogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlcklu
dGVyZmFjZShpbXBsLCBBU0NJSUxpdGVyYWwoInRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudCIpLCBX
VEZNb3ZlKGNhbGxUcmFjZXJQYXJhbWV0ZXJzKSk7CiAgICAgfQogICAgIGltcGwuc2V0VGVzdEF0
dHJpYnV0ZVdpdGhWYXJpYW50KFdURk1vdmUobmF0aXZlVmFsdWUpKTsKQEAgLTQwMyw3ICs0MDMs
NyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5M
SUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgpKSkgewogICAgICAgICBWZWN0b3I8VGVzdENh
bGxUcmFjZXJJbnRlcmZhY2VWYXJpYW50PiBjYWxsVHJhY2VyUGFyYW1ldGVyczsKLSAgICAgICAg
V1RGOjp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVu
ZCh2YWx1ZSk7IH0sIHZhcmlhbnRBcmcpOworICAgICAgICBzdGQ6OnZpc2l0KFsmXSAoYXV0byYg
dmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKHZhbHVlKTsgfSwgdmFyaWFudEFy
Zyk7CiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RDYWxsVHJhY2VySW50ZXJmYWNlKGltcGwsIEFT
Q0lJTGl0ZXJhbCgidGVzdE9wZXJhdGlvbldpdGhWYXJpYW50QXJndW1lbnQiKSwgV1RGTW92ZShj
YWxsVHJhY2VyUGFyYW1ldGVycykpOwogICAgIH0KICAgICBpbXBsLnRlc3RPcGVyYXRpb25XaXRo
VmFyaWFudEFyZ3VtZW50KFdURk1vdmUodmFyaWFudEFyZykpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9DcnlwdG9BbGdvcml0aG0uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0
NSw4IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM7CiBjbGFzcyBDcnlwdG9LZXk7
CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi11c2luZyBLZXlEYXRhID0gVmFyaWFu
dDxWZWN0b3I8dWludDhfdD4sIEpzb25XZWJLZXk+OwotdXNpbmcgS2V5T3JLZXlQYWlyID0gVmFy
aWFudDxSZWZQdHI8Q3J5cHRvS2V5PiwgQ3J5cHRvS2V5UGFpcj47Cit1c2luZyBLZXlEYXRhID0g
c3RkOjp2YXJpYW50PFZlY3Rvcjx1aW50OF90PiwgSnNvbldlYktleT47Cit1c2luZyBLZXlPcktl
eVBhaXIgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPENyeXB0b0tleT4sIENyeXB0b0tleVBhaXI+Owog
CiBjbGFzcyBDcnlwdG9BbGdvcml0aG0gOiBwdWJsaWMgUmVmQ291bnRlZDxDcnlwdG9BbGdvcml0
aG0+IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBlbnVtIGNsYXNzIENyeXB0b0tleUNsYXNzIHsKIGNsYXNz
IENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxDcnlwdG9LZXk+IHsKIHB1
YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRvS2V5VHlwZTsKLSAgICB1c2luZyBLZXlBbGdv
cml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29yaXRobSwgQ3J5cHRvQWVzS2V5QWxnb3JpdGht
LCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRvSG1hY0tleUFsZ29yaXRobSwgQ3J5cHRvUnNh
SGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FLZXlBbGdvcml0aG0+OworICAgIHVzaW5nIEtl
eUFsZ29yaXRobSA9IHN0ZDo6dmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tl
eUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0s
IENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKIAog
ICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyLCBUeXBlLCBib29sIGV4dHJh
Y3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7CiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmNwcAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDE0ICs5NiwxNCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8c3RkOjp1bmlxdWVf
cHRyPENyeXB0CiAgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgewogICAgICAgICBhdXRvIG5ld1Bh
cmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNvbnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSkp
OwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwgV1RGOjpnZXQ8U3RyaW5nPihhbGdvcml0
aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0ZSwgc3RkOjpnZXQ8
U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMoc3RhdGUsIG5ld1BhcmFtcywgb3Bl
cmF0aW9uKTsKICAgICB9CiAKLSAgICBhdXRvJiB2YWx1ZSA9IFdURjo6Z2V0PEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBhdXRvJiB2YWx1ZSA9
IHN0ZDo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVy
KTsKIAogICAgIGF1dG8gcGFyYW1zID0gY29udmVydERpY3Rpb25hcnk8Q3J5cHRvQWxnb3JpdGht
UGFyYW1ldGVycz4oc3RhdGUsIHZhbHVlLmdldCgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH0pOwpAQCAtODY3LDEy
ICs4NjcsMTIgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OmV4cG9ydEtleShLZXlGb3JtYXQgZgogICAg
ICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBjYXNlIFN1
YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86
OktleUZvcm1hdDo6UmF3OiB7Ci0gICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIHJhd0tleSA9
IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50
OF90PiYgcmF3S2V5ID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOwogICAgICAgICAg
ICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZmZXIoV1RGTW92ZShjYXB0dXJlZFByb21pc2Up
LCByYXdLZXkuZGF0YSgpLCByYXdLZXkuc2l6ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpKd2s6Ci0gICAg
ICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5
Pj4oV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CisgICAgICAgICAgICBjYXB0
dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oV1RGTW92ZShz
dGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC05MzYsMTEgKzkzNiwxMSBAQCB2
b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6OkV4ZWNTdGF0CiAgICAgICAgIGNhc2UgU3Vi
dGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpL
ZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpS
YXc6Ci0gICAgICAgICAgICBieXRlcyA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsK
KyAgICAgICAgICAgIGJ5dGVzID0gc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6Okp3
azogewogICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnRpbmcgdG8gSlMganVzdCB0byBKU09O
LVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4gV2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gZ28g
ZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpTT04uCi0gICAgICAgICAgICBhdXRvIGp3ayA9
IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oKihwcm9taXNlLT5nbG9iYWxPYmplY3Qo
KS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKSksIFdURk1vdmUoV1RG
OjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAgICAgICAgICAgYXV0byBqd2sgPSB0b0pTPElE
TERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2JqZWN0KCkpLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpz
b25XZWJLZXk+KGtleSkpKTsKICAgICAgICAgICAgIFN0cmluZyBqd2tTdHJpbmcgPSBKU09OU3Ry
aW5naWZ5KHByb21pc2UtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCksIGp3aywgMCk7CiAg
ICAgICAgICAgICBDU3RyaW5nIGp3a1V0ZjhTdHJpbmcgPSBqd2tTdHJpbmcudXRmOChTdHJpY3RD
b252ZXJzaW9uKTsKICAgICAgICAgICAgIGJ5dGVzLmFwcGVuZChqd2tVdGY4U3RyaW5nLmRhdGEo
KSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
U3VidGxlQ3J5cHRvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRs
ZUNyeXB0by5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3Vi
dGxlQ3J5cHRvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAgcHVibGljOgogCiAg
ICAgdXNpbmcgS2V5Rm9ybWF0ID0gQ3J5cHRvS2V5Rm9ybWF0OwogCi0gICAgdXNpbmcgQWxnb3Jp
dGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmlu
Zz47Ci0gICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQgPSBWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgSnNvbldlYktleT47CisgICAg
dXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6
OkpTT2JqZWN0PiwgU3RyaW5nPjsKKyAgICB1c2luZyBLZXlEYXRhVmFyaWFudCA9IHN0ZDo6dmFy
aWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
cj4sIEpzb25XZWJLZXk+OwogCiAgICAgdm9pZCBlbmNyeXB0KEpTQzo6RXhlY1N0YXRlJiwgQWxn
b3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8
RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lkIGRlY3J5cHQoSlNDOjpFeGVjU3RhdGUmLCBB
bGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tleSYsIEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5jcHAJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9L
ZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNr
QWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9v
bCB7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBv
cnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DRkI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0
b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNp
emVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTExOSw3ICsxMTks
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DVFIuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMK
ICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsK
ICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5jcHAJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19HQ00uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9L
ZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNr
QWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9v
bCB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBv
cnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfS1cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMCBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19L
Vzo6aW1wb3J0S2V5KENyCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAgIHN3
aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRl
cnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tl
eUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0Sndr
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IGFsZykgLT4gYm9vbCB7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0Sndr
KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IGFsZykgLT4gYm9vbCB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxlbmd0aCkgewogICAgICAgICAg
ICAgY2FzZSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3RoMTI4OgogICAgICAgICAgICAgICAgIHJldHVy
biBhbGcuaXNOdWxsKCkgfHwgYWxnID09IEFMRzEyODsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3BwCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1FQ0RILmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KENyeXAKICAgICBSZWZQdHI8Q3J5cHRv
S2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0
ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAogICAgICAgICBib29sIGlzVXNhZ2VzQWxsb3dl
ZCA9IGZhbHNlOwogICAgICAgICBpZiAoIWtleS5kLmlzTnVsbCgpKSB7CkBAIC0xNTAsMjEgKzE1
MCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShDcnlwCiAgICAgICAg
ICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJhdyhlY1Bh
cmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RG
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVycy5pZGVudGlm
aWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBpZiAodXNhZ2VzKSB7CiAgICAg
ICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2ko
ZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3Zl
KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsK
KyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlk
ZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBpZiAodXNhZ2VzICYm
ICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUtleSkgJiYgKHVzYWdlcyBeIENyeXB0b0tl
eVVzYWdlRGVyaXZlQml0cykgJiYgKHVzYWdlcyBeIChDcnlwdG9LZXlVc2FnZURlcml2ZUtleSB8
IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlm
aWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0
ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKCFy
ZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUVDRFNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDRFNB
OjppbXBvcnRLZXkoQ3J5CiAgICAgUmVmUHRyPENyeXB0b0tleUVDPiByZXN1bHQ7CiAgICAgc3dp
dGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAg
IEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7Cisg
ICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRh
KSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2Vz
IF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBD
cnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2so
U3ludGF4RXJyb3IpOwpAQCAtMTI0LDIxICsxMjQsMjEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1F
Q0RTQTo6aW1wb3J0S2V5KENyeQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4
RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1l
dGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6Omlt
cG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUs
IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6U3BraToK
ICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7
CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9y
dFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBX
VEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0
ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBpZiAodXNh
Z2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB7CiAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVy
cy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJl
c3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwg
ZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+
PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RG
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRo
bUhLREY6OmltcG9ydEtleShDcnlwCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYWxs
YmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3Zl
KFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKKyAgICBjYWxsYmFj
ayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCB1c2FnZXMpKTsKIH0KIAogRXhjZXB0aW9u
T3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1IS0RGOjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
SE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobUhNQUM6OmltcG9ydEtleShDcnlwCiAgICAgUmVmUHRyPENyeXB0b0tleUhNQUM+IHJl
c3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpS
YXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6OmltcG9ydFJhdyhobWFjUGFyYW1l
dGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBX
VEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0UmF3KGhtYWNQYXJh
bWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIs
IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7
CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXIgaGFzaCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTIxLDcgKzEyMSw3
IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6aW1wb3J0S2V5KENyeXAKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0
ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9v
cigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNv
bldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2Fs
bGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQ
YXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZp
ZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNh
Z2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1QQktERjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RG
Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1QQktERjI6OmltcG9ydEtleShDcgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2Fs
bGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92
ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7CisgICAgY2FsbGJh
Y2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShz
dGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2VzKSk7CiB9CiAKIEV4Y2VwdGlv
bk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5
cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19Q
S0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92
MV81OjppbQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldl
YktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAg
SnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKICAg
ICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRv
S2V5VXNhZ2VEZWNyeXB0KSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9L
ZXlVc2FnZUVuY3J5cHQpKSkpIHsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRh
eEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6OmltCiAgICAgICAgICAgICBleGNlcHRpb25D
YWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50
aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJT
QTo6aW1wb3J0U3BraShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1v
dmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4
OiB7CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92
MV81OjppbQogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJT
QTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZN
b3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2Vz
KTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFf
NS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81Ojpp
CiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtl
eSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2Vi
S2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAg
IGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVz
YWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VW
ZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsK
QEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81
OjppCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3
ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9y
dFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlm
aWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJz
YVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtj
czg6IHsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81OjppCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklY
TUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6
OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElk
ZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJh
Y3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBr
Y3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIs
IFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1SU0FfT0FFUC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9y
dEtleSgKICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3Jt
YXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJL
ZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpz
b25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAg
ICAgICAgYm9vbCBpc1VzYWdlc0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKCFrZXkuZC5p
c051bGwoKSkgewpAQCAtMTU3LDcgKzE1Nyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09B
RVA6OmltcG9ydEtleSgKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAv
LyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMu
aGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6Omlt
cG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVu
dGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpQa2NzODogewpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
UlNBX09BRVA6OmltcG9ydEtleSgKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJT
QTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNo
SWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNB
X1BTUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtUlNBX1BTUy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6
aW1wb3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNo
IChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpz
b25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAg
ICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7
CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4g
Q3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlw
dG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3lu
dGF4RXJyb3IpOwpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BT
Uzo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAv
LyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMu
aGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6Omlt
cG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVu
dGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpQa2NzODogewpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGht
UlNBX1BTUzo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1l
dGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJT
QTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNo
SWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNk
c2FQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIENyeXB0b0FsZ29yaXRobUVjZHNhUGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5n
IGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlND
OjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
IGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gQ2xhc3M6OkVjZHNhUGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBh
cmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1l
dGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtSGtkZlBh
cmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoK
ICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4K
LSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7Cisg
ICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7
CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBCdWZm
ZXJTb3VyY2Ugc2FsdDsKICAgICBCdWZmZXJTb3VyY2UgaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1IbWFjS2V5UGFyYW1zLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhtYWNLZXlQYXJhbXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9B
bGdvcml0aG1IbWFjS2V5UGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5k
IGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4s
IFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVj
dD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVu
dGlmaWVyOwogICAgIHN0ZDo6b3B0aW9uYWw8c2l6ZV90PiBsZW5ndGg7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVBia2RmMlBhcmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7
CiAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25zOwogICAgIC8vIEZJWE1FOiBDb25zaWRlciBt
ZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8
SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJv
bmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzYWx0
VmVjdG9yKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFt
cy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVy
cy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0
aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBh
bmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElk
ZW50aWZpZXI7CiAKICAgICBDbGFzcyBwYXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBDbGFzczo6UnNhSGFzaGVkSW1wb3J0UGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9B
bGdvcml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5
R2VuUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zIGZpbmFs
IDogcHVibGljIENyeXB0b0FsZ29yaXRobVJzYUtleUdlblBhcmFtcyB7CiBwdWJsaWM6CiAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAg
VmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0
ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAg
IENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAgICBDbGFzcyBw
YXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDbGFzczo6UnNhSGFzaGVkS2V5
R2VuUGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRp
b24uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMg
Q1NTUHJvcGVydHlJbmZvIHBhcnNlSmF2YVNjcmlwdENTCiAKIH0KIAotc3RkOjpvcHRpb25hbDxW
YXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6bmFtZWRJdGVtKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlh
bnQ8U3RyaW5nLCBkb3VibGU+PiBDU1NTdHlsZURlY2xhcmF0aW9uOjpuYW1lZEl0ZW0oY29uc3Qg
QXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgYXV0byBwcm9wZXJ0eUluZm8gPSBw
YXJzZUphdmFTY3JpcHRDU1NQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXBy
b3BlcnR5SW5mby5wcm9wZXJ0eUlEKQpAQCAtMjU5LDE3ICsyNTksMTcgQEAgc3RkOjpvcHRpb25h
bDxWYXJpYW50PFN0cmluZywgZG91YmxlPj4gQwogICAgIGF1dG8gdmFsdWUgPSBnZXRQcm9wZXJ0
eUNTU1ZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpOwogICAgIGlmICghdmFs
dWUpIHsKICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5
IChzdWNoIGFzICJwYWRkaW5nIiksIGl0IGNhbiBvbmx5IGJlIGFjY2Vzc2VkIHVzaW5nIGdldFBy
b3BlcnR5VmFsdWUuCi0gICAgICAgIHJldHVybiBWYXJpYW50PFN0cmluZywgZG91YmxlPiB7IGdl
dFByb3BlcnR5VmFsdWVJbnRlcm5hbChwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkgfTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVl
SW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5SUQpIH07CiAgICAgfQogICAgIAogICAgIGlm
IChwcm9wZXJ0eUluZm8uaGFkUGl4ZWxPclBvc1ByZWZpeCAmJiBpczxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKSkgewogICAgICAgICAvLyBDYWxsIHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2V0dGVy
IHNvIHRoYXQsIGUuZy4sIHBpeGVsVG9wIHJldHVybnMgdG9wIGFzIGEgbnVtYmVyCiAgICAgICAg
IC8vIGluIHBpeGVsIHVuaXRzIGFuZCBwb3NUb3Agc2hvdWxkIGRvZXMgdGhlIHNhbWUgX2lmXyB0
aGlzIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50LgogICAgICAgICAvLyBGSVhNRTogSWYgbm90IGEg
cG9zaXRpb25lZCBlbGVtZW50LCBNU0lFIGRvY3VtZW50YXRpb24gc2F5cyBwb3NUb3Agc2hvdWxk
IHJldHVybiAwOyB0aGlzIHJ1bGUgaXMgbm90IGltcGxlbWVudGVkLgotICAgICAgICByZXR1cm4g
VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5mbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpIH07CisgICAgICAgIHJl
dHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSB9Owog
ICAgIH0KIAotICAgIHJldHVybiBWYXJpYW50PFN0cmluZywgZG91YmxlPiB7IHZhbHVlLT5jc3NU
ZXh0KCkgfTsKKyAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPiB7IHZhbHVl
LT5jc3NUZXh0KCkgfTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4gQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6c2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lLCBTdHJpbmcg
dmFsdWUsIGJvb2wmIHByb3BlcnR5U3VwcG9ydGVkKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICAvLyBCaW5kaW5ncyBzdXBwb3J0Lgot
ICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IG5hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcs
IGRvdWJsZT4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBFeGNlcHRpb25P
cjx2b2lkPiBzZXROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBTdHJpbmcgdmFs
dWUsIGJvb2wmIHByb3BlcnR5U3VwcG9ydGVkKTsKICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9ET01NYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXguaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIERPTU1hdHJpeCA6IHB1YmxpYyBET01NYXRyaXhSZWFkT25seSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXg+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxW
YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYmIGluaXQpCisgICAgc3RhdGljIEV4Y2Vw
dGlvbk9yPFJlZjxET01NYXRyaXg+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8
U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYgaW5pdCkKICAgICB7CiAgICAgICAgIGF1dG8gbWF0
cml4ID0gYWRvcHRSZWYoKm5ldyBET01NYXRyaXgpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVhZE9ubHkuaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IERPTVBvaW50SW5pdDsKIGNsYXNzIERPTU1hdHJpeFJl
YWRPbmx5IDogcHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIFJlZkNvdW50ZWQ8RE9NTWF0
cml4UmVhZE9ubHk+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeFJlYWRPbmx5Pj4gY3JlYXRlKHN0ZDo6
b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0KQorICAgIHN0
YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4UmVhZE9ubHk+PiBjcmVhdGUoc3RkOjpvcHRp
b25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYgaW5pdCkKICAgICB7
CiAgICAgICAgIGF1dG8gbWF0cml4ID0gYWRvcHRSZWYoKm5ldyBET01NYXRyaXhSZWFkT25seSk7
CiAgICAgICAgIGlmICghaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvRm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBmZWF0dXJlU2V0dGluZ3M7
CiAgICAgfTsKICAgICAKLSAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50PFN0cmluZywgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+PjsKKyAgICB1
c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
cj4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4+OwogICAgIHN0YXRpYyBFeGNlcHRpb25P
cjxSZWY8Rm9udEZhY2U+PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIGZhbWlseSwg
U291cmNlJiYsIGNvbnN0IERlc2NyaXB0b3JzJik7CiAgICAgc3RhdGljIFJlZjxGb250RmFjZT4g
Y3JlYXRlKENTU0ZvbnRGYWNlJik7CiAgICAgdmlydHVhbCB+Rm9udEZhY2UoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIGVudW0gY2xhc3Mg
Q3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0aW9uU3QKICAgICBDb25mbGljdHNXaXRoU3RhbmRhcmRF
bGVtZW50TmFtZQogfTsKIAotdXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IFZhcmlhbnQ8Cit1c2lu
ZyBSZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp2YXJpYW50PAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiwKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50TWFya2VyLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1
YmxpYzoKICAgICBzdHJ1Y3QgRHJhZ2dlZENvbnRlbnREYXRhIHsKICAgICAgICAgUmVmUHRyPE5v
ZGU+IHRhcmdldE5vZGU7CiAgICAgfTsKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2
ZU1hdGNoRGF0YSwgRGVzY3JpcHRpb25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRl
cm5hdGl2ZXNEYXRhLCBEcmFnZ2VkQ29udGVudERhdGE+OworICAgIHVzaW5nIERhdGEgPSBzdGQ6
OnZhcmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0
YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhPjsKIAogICAg
IERvY3VtZW50TWFya2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IGJvb2wgaXNBY3RpdmVNYXRjaCk7CiAgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNj
cmlwdGlvbiA9IFN0cmluZygpKTsKQEAgLTE5OCwxMiArMTk4LDEyIEBAIGlubGluZSB2b2lkIERv
Y3VtZW50TWFya2VyOjpzaGlmdE9mZnNldHMKIAogaW5saW5lIGNvbnN0IFN0cmluZyYgRG9jdW1l
bnRNYXJrZXI6OmRlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBl
bXB0eVN0cmluZygpOworICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4o
bV9kYXRhKSA/IHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAK
IGlubGluZSBib29sIERvY3VtZW50TWFya2VyOjppc0FjdGl2ZU1hdGNoKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxib29sPihtX2RhdGEpICYmIFdURjo6Z2V0
PGJvb2w+KG1fZGF0YSk7CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4o
bV9kYXRhKSAmJiBzdGQ6OmdldDxib29sPihtX2RhdGEpOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1
bWVudE1hcmtlcjo6c2V0QWN0aXZlTWF0Y2goYm9vbCBpc0FjdGl2ZU1hdGNoKQpAQCAtMjI3LDIy
ICsyMjcsMjIgQEAgaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYQogCiBp
bmxpbmUgY29uc3QgVmVjdG9yPFN0cmluZz4mIERvY3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMo
KSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRh
PihtX2RhdGEpLmFsdGVybmF0aXZlczsKKyAgICByZXR1cm4gc3RkOjpnZXQ8RGljdGF0aW9uQWx0
ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXM7CiB9CiAKIGlubGluZSB2b2lkIERv
Y3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBz
aXplX3QgaW5kZXgpCiB7Ci0gICAgV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4o
bV9kYXRhKS5hbHRlcm5hdGl2ZXNbaW5kZXhdID0gYWx0ZXJuYXRpdmU7CisgICAgc3RkOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNbaW5kZXhdID0g
YWx0ZXJuYXRpdmU7CiB9CiAKIGlubGluZSBpZCBEb2N1bWVudE1hcmtlcjo6bWV0YWRhdGEoKSBj
b25zdAogewotICAgIHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPiht
X2RhdGEpLm1ldGFkYXRhLmdldCgpOworICAgIHJldHVybiBzdGQ6OmdldDxEaWN0YXRpb25BbHRl
cm5hdGl2ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhLmdldCgpOwogfQogCiBpbmxpbmUgdm9pZCBE
b2N1bWVudE1hcmtlcjo6c2V0TWV0YWRhdGEoaWQgbWV0YWRhdGEpCiB7Ci0gICAgV1RGOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOwor
ICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEg
PSBtZXRhZGF0YTsKIH0KIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAgICAgaWYgKG5ld01hcmtlci50eXBl
KCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRv
IHRhcmdldE5vZGUgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRh
PihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXROb2RlKQorICAgICAgICBpZiAoYXV0byB0YXJnZXRO
b2RlID0gc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFy
a2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKICAgICAgICAgICAgIHJldHVybiB0YXJnZXROb2RlLT5y
ZW5kZXJlcigpICYmIHRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyUmVwbGFjZWQoKTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9y
QmluCiAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNl
Tm9uTnVsbCgpLCBjYXB0dXJlKTsKICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogdm9pZCBF
dmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKGNvbnN0IEF0b21pY1N0
cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgTGlzdGVu
ZXJPcHRpb25zT3JCb29sZWFuJiYgdmFyaWFudCkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEV2
ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yCiAgICAgICAgIHJlbW92ZUV2ZW50TGlz
dGVuZXIoZXZlbnRUeXBlLCAqbGlzdGVuZXIsIGNhcHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RG
Ojp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlh
bnQpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgTGlz
dGVuZXJPcHRpb25zJiBvcHRpb25zKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBvbmNlOwog
ICAgIH07CiAKLSAgICB1c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IFZh
cmlhbnQ8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMsIGJvb2w+OworICAgIHVzaW5nIEFkZEV2ZW50
TGlzdGVuZXJPcHRpb25zT3JCb29sZWFuID0gc3RkOjp2YXJpYW50PEFkZEV2ZW50TGlzdGVuZXJP
cHRpb25zLCBib29sPjsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZEV2ZW50TGlzdGVuZXJG
b3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlz
dGVuZXI+JiYsIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zT3JCb29sZWFuJiYpOwotICAgIHVzaW5n
IExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IFZhcmlhbnQ8TGlzdGVuZXJPcHRpb25zLCBib29s
PjsKKyAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBzdGQ6OnZhcmlhbnQ8TGlz
dGVuZXJPcHRpb25zLCBib29sPjsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUV2ZW50
TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRy
PEV2ZW50TGlzdGVuZXI+JiYsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBkaXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoRXZl
bnQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQmxvYjsKIAotdXNp
bmcgTWVzc2FnZUV2ZW50U291cmNlID0gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRy
PE1lc3NhZ2VQb3J0Pj47Cit1c2luZyBNZXNzYWdlRXZlbnRTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwogCiBjbGFzcyBNZXNzYWdl
RXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQgewogcHVibGljOgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIFNWR1F1YWxpZmllZE5hbWU7CiBjbGFzcyBTaGFk
b3dSb290OwogY2xhc3MgVG91Y2hFdmVudDsKIAotdXNpbmcgTm9kZU9yU3RyaW5nID0gVmFyaWFu
dDxSZWZQdHI8Tm9kZT4sIFN0cmluZz47Cit1c2luZyBOb2RlT3JTdHJpbmcgPSBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCiBjbGFzcyBOb2RlUmFyZURhdGFCYXNlIHsKIHB1
YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mjg5LDcgKzI4OSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIK
ICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKICAgICAgICAgaWYgKCFt
X3JhbmdlV2l0aEFsdGVybmF0aXZlKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmlu
ZyByZXBsYWNlbWVudFN0cmluZyA9IFdURjo6Z2V0PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ+
KG1fZGV0YWlscyk7CisgICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyA9IHN0ZDo6Z2V0
PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmIChyZXBs
YWNlbWVudFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbV9p
c0FjdGl2ZSA9IHRydWU7CkBAIC0zMjYsNyArMzI2LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjp0aW1lckZpcgogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAg
ICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpCiAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2ZURp
Y3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7CisgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNv
bnRleHQgPSBzdGQ6OmdldDxBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7
CiAgICAgICAgIGlmICghZGljdGF0aW9uQ29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CkBAIC01OTIsOSArNTkyLDkgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVAogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczogewotICAgICAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRh
dGE+KG1hcmtlci5kYXRhKCkpKQorICAgICAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOworICAgICAgICBhdXRv
JiBtYXJrZXJEYXRhID0gc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1h
cmtlci5kYXRhKCkpOwogICAgICAgICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmln
aW5hbFRleHQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIG1fcmFuZ2VXaXRo
QWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CkBAIC02NDIsOSArNjQyLDkgQEAgYm9vbCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaQogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRN
YXJrZXImIG1hcmtlcikKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0
YT4obWFya2VyLmRhdGEoKSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSk7CiAgICAgaWYgKGF1
dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQotICAgICAgICBjbGllbnQtPnJl
bW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0
aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4dCk7CisgICAgICAgIGNsaWVudC0+cmVtb3Zl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzKHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25E
YXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1h
cmtlcik7CiAjZW5kaWYKQEAgLTY1NSw3ICs2NTUsNyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyCiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAg
QVNTRVJUKG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyk7CiAgICAgaWYgKGF1dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQot
ICAgICAgICByZXR1cm4gY2xpZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOworICAg
ICAgICByZXR1cm4gY2xpZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoc3RkOjpnZXQ8RG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOwogICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWFya2VyKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBY3RpdmU7CiAgICAgICAgIEFsdGVybmF0aXZl
VGV4dFR5cGUgdHlwZTsKICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dDsKLSAgICAgICAgVmFy
aWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRl
eHQ+IGRldGFpbHM7CisgICAgICAgIHN0ZDo6dmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2Vt
ZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+IGRldGFpbHM7CiAgICAgfTsKIAogICAg
IFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JEaXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0Rpc21pc3NlZEJ5RWRp
dGluZzsKICAgICBBbHRlcm5hdGl2ZVRleHRUeXBlIG1fdHlwZTsKICAgICBTdHJpbmcgbV9vcmln
aW5hbFRleHQ7Ci0gICAgVmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5h
dGl2ZURpY3RhdGlvbkNvbnRleHQ+IG1fZGV0YWlsczsKKyAgICBzdGQ6OnZhcmlhbnQ8QXV0b2Nv
cnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFp
bHM7CiAKICAgICBTdHJpbmcgbV9vcmlnaW5hbFN0cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJl
Y3Rpb247CiAgICAgUG9zaXRpb24gbV9wb3NpdGlvbkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rp
b247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAKLXVzaW5nIEJsb2JQYXJ0VmFyaWFudCA9IFZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4sIFN0
cmluZz47Cit1c2luZyBCbG9iUGFydFZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4s
IFN0cmluZz47CiAKIGNsYXNzIEJsb2IgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMg
VVJMUmVnaXN0cmFibGUsIHB1YmxpYyBSZWZDb3VudGVkPEJsb2I+IHsKIHB1YmxpYzoKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZmlyZUV2ZW50KGNvbnN0IEF0b21pY1MK
ICAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBtX2xv
YWRlciA/IG1fbG9hZGVyLT5ieXRlc0xvYWRlZCgpIDogMCwgbV9sb2FkZXIgPyBtX2xvYWRlci0+
dG90YWxCeXRlcygpIDogMCkpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiBGaWxlUmVhZGVyOjpyZXN1bHQoKSBjb25zdAorc3Rk
OjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+
PiBGaWxlUmVhZGVyOjpyZXN1bHQoKSBjb25zdAogewogICAgIGlmICghbV9sb2FkZXIgfHwgbV9l
cnJvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlci5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6
CiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQog
ICAgIFJlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQogICAgIEZp
bGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlIHJlYWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFk
VHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyPj4+IHJlc3VsdCgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJp
YW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gcmVzdWx0KCkgY29uc3Q7CiAK
ICAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmNwcAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzLDI4ICs0MywyOCBAQCBpbmxpbmUgSFRNTEFsbENvbGxlY3Rp
b246OkhUTUxBbGxDb2xsZWN0CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcv
bXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjZG9tLWh0bWxhbGxjb2xsZWN0aW9uLWl0ZW0K
LXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxl
bWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZh
cmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENv
bGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lT3JJbmRleCkgY29uc3QKIHsKICAgICBpZiAobmFtZU9ySW5kZXguaXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBpZiAoYXV0byBpbmRleCA9IEpTQzo6cGFy
c2VJbmRleCgqbmFtZU9ySW5kZXguaW1wbCgpKSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVm
UHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7
IGl0ZW0oaW5kZXgudmFsdWUoKSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4g
eyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKIAogICAgIHJldHVybiBuYW1lZEl0ZW1Pckl0ZW1z
KG5hbWVPckluZGV4KTsKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0
aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjb25jZXB0LWdldC1hbGwtbmFtZWQKLXN0ZDo6b3B0
aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBI
VE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rp
b24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVt
cyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byBuYW1lZEl0ZW1z
ID0gdGhpcy0+bmFtZWRJdGVtcyhuYW1lKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobmFtZWRJdGVtcy5zaXpl
KCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwg
UmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1sw
XSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRl
bXNbMF0pIH0gfTsKIAotICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4s
IFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgZG93bmNhc3Q8RG9j
dW1lbnQ+KG93bmVyTm9kZSgpKS5hbGxGaWx0ZXJlZEJ5TmFtZShuYW1lKSB9IH07CisgICAgcmV0
dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+
IHsgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB7IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUo
KSkuYWxsRmlsdGVyZWRCeU5hbWUobmFtZSkgfSB9OwogfQogCiBIVE1MQWxsTmFtZWRTdWJDb2xs
ZWN0aW9uOjp+SFRNTEFsbE5hbWVkU3ViQ29sbGVjdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1
LDggQEAgY2xhc3MgSFRNTEFsbENvbGxlY3Rpb24gZmluYWwgOiBwdWJsaWMgQQogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SFRNTEFsbENvbGxlY3Rpb24+IGNyZWF0ZShEb2N1bWVudCYsIENvbGxl
Y3Rpb25UeXBlKTsKIAotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW1P
ckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3Rk
Ojp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVk
T3JJbmRleGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29u
c3Q7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcm
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1MQWxsQ29sbGVjdGlvbihEb2N1bWVudCYsIENv
bGxlY3Rpb25UeXBlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3IEBAIFJlZjxEb2N1bWVudFBhcnNlcj4gSFRN
TERvY3VtZW50OjpjcmVhdGUKIH0KIAogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9t
dWx0aXBhZ2UvZG9tLmh0bWwjZG9tLWRvY3VtZW50LW5hbWVkaXRlbQotc3RkOjpvcHRpb25hbDxW
YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29s
bGVjdGlvbj4+PiBIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRy
PEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0
ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChuYW1lLmlzTnVsbCgpIHx8
ICFoYXNEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwpAQCAtMTIwLDE2ICsxMjAsMTYgQEAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJl
ZlB0cjxET01XaW5kb3c+LAogICAgIGlmIChVTkxJS0VMWShkb2N1bWVudE5hbWVkSXRlbUNvbnRh
aW5zTXVsdGlwbGVFbGVtZW50cygqbmFtZS5pbXBsKCkpKSkgewogICAgICAgICBhdXRvIGNvbGxl
Y3Rpb24gPSBkb2N1bWVudE5hbWVkSXRlbXMobmFtZSk7CiAgICAgICAgIEFTU0VSVChjb2xsZWN0
aW9uLT5sZW5ndGgoKSA+IDEpOwotICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8RE9NV2lu
ZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxI
VE1MQ29sbGVjdGlvbj4geyBXVEZNb3ZlKGNvbGxlY3Rpb24pIH0gfTsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBXVEZNb3ZlKGNvbGxl
Y3Rpb24pIH0gfTsKICAgICB9CiAKICAgICBhdXRvJiBlbGVtZW50ID0gKmRvY3VtZW50TmFtZWRJ
dGVtKCpuYW1lLmltcGwoKSk7CiAgICAgaWYgKFVOTElLRUxZKGlzPEhUTUxJRnJhbWVFbGVtZW50
PihlbGVtZW50KSkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvbVdpbmRvdyA9IGRvd25jYXN0PEhU
TUxJRnJhbWVFbGVtZW50PihlbGVtZW50KS5jb250ZW50V2luZG93KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxET01XaW5kb3c+IHsgZG9tV2luZG93IH0gfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxF
bGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9NV2luZG93PiB7IGRv
bVdpbmRvdyB9IH07CiAgICAgfQogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRv
dz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RWxl
bWVudD4geyAmZWxlbWVudCB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9N
V2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0
cjxFbGVtZW50PiB7ICZlbGVtZW50IH0gfTsKIH0KIAogVmVjdG9yPEF0b21pY1N0cmluZz4gSFRN
TERvY3VtZW50OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHdpZHRoKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
aW50IGhlaWdodCgpOwogICAgIAotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9N
V2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50
PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgVmVjdG9yPEF0b21pY1N0
cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCiAgICAgRWxlbWVudCogZG9j
dW1lbnROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QgeyByZXR1
cm4gbV9kb2N1bWVudE5hbWVkSXRlbS5nZXRFbGVtZW50QnlEb2N1bWVudE5hbWVkSXRlbShuYW1l
LCAqdGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMTYgKzUyLDE2IEBAIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjp+SFRNTEZvcm1Db24K
IHsKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVm
UHRyPEVsZW1lbnQ+Pj4gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRl
bXMoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8
UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7
CiAgICAgYXV0byBuYW1lZEl0ZW1zID0gdGhpcy0+bmFtZWRJdGVtcyhuYW1lKTsKIAogICAgIGlm
IChuYW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAg
ICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVm
UHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsg
V1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+
IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQ
dHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlz
dD4geyBvd25lck5vZGUoKS5yYWRpb05vZGVMaXN0KG5hbWUpIH0gfTsKKyAgICByZXR1cm4gc3Rk
Ojp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0
cjxSYWRpb05vZGVMaXN0PiB7IG93bmVyTm9kZSgpLnJhZGlvTm9kZUxpc3QobmFtZSkgfSB9Owog
fQogCiBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0ZWRFbGVtZW50Kj4mIEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1lbnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24oKTsKIAogICAgIEhUTUxFbGVtZW50KiBpdGVt
KHVuc2lnbmVkIG9mZnNldCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJp
YW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJ
dGVtcyhjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFu
dDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRl
bXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICAvLyBGb3IgQ2FjaGVkSFRNTENvbGxlY3Rp
b24uCiAgICAgSFRNTEVsZW1lbnQqIGN1c3RvbUVsZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MywxNiArMTYzLDE2IEBAIEhUTUxFbGVtZW50KiBIVE1MRm9ybUVsZW1l
bnQ6Oml0ZW0odW5zaWcKICAgICByZXR1cm4gZWxlbWVudHMoKS0+aXRlbShpbmRleCk7CiB9CiAK
LXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4+IEhUTUxGb3JtRWxlbWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSkKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVm
UHRyPEVsZW1lbnQ+Pj4gSFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IG5hbWVkRWxlbWVudHMobmFtZSk7
CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBW
YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxF
bGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICByZXR1cm4gc3Rk
Ojp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0
cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAgcmV0dXJuIFZh
cmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPFJh
ZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlzdChuYW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6
dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4geyByYWRpb05vZGVMaXN0KG5hbWUpIH0gfTsKIH0KIAogVmVjdG9yPEF0
b21pY1N0cmluZz4gSFRNTEZvcm1FbGVtZW50OjpzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBIVE1MRWxlbWVudCogaXRlbSh1bnNpZ25lZCBpbmRl
eCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVm
UHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHN0ZDo6
b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1l
bnQ+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOwogICAgIFZlY3RvcjxBdG9taWNT
dHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsKIAogICAgIFN0cmluZyBlbmN0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmVuY29kaW5nVHlwZSgpOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMDk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzNjUsNyArMTM2NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0
TWVkaWFSZXNvdXIKIAogICAgICAgICAgICAgLy8gMi4gRW5kIHRoZSBzeW5jaHJvbm91cyBzZWN0
aW9uLCBjb250aW51aW5nIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgICAg
ICAgICAvLyAzLiBSdW4gdGhlIHJlc291cmNlIGZldGNoIGFsZ29yaXRobSB3aXRoIHRoZSBhc3Np
Z25lZCBtZWRpYSBwcm92aWRlciBvYmplY3QuCi0gICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoCisgICAgICAgICAgICBzdGQ6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoCiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAgICAgICAgICAgICBbdGhpc10oUmVmUHRyPE1l
ZGlhU3RyZWFtPiBzdHJlYW0pIHsgbV9tZWRpYVN0cmVhbVNyY09iamVjdCA9IHN0cmVhbTsgfSwK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgdXNpbmcgQ3VlSW50ZXJ2YWwgPSBDdWVJ
bnRlcnZhbFRyZWU6OkludAogdXNpbmcgQ3VlTGlzdCA9IFZlY3RvcjxDdWVJbnRlcnZhbD47CiAj
ZW5kaWYKIAotdXNpbmcgTWVkaWFQcm92aWRlciA9IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDwKK3Vz
aW5nIE1lZGlhUHJvdmlkZXIgPSBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDwKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogICAgIFJlZlB0cjxNZWRpYVN0cmVhbT4sCiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgRXhjZXB0
aW9uT3I8dm9pZD4gc2V0SXRlbSh1bnNpZ25lZCBpbmRleCwgSFRNTE9wdGlvbkVsZW1lbnQqKTsK
ICAgICAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRy
PEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKLSAgICB1
c2luZyBIVE1MRWxlbWVudE9ySW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+
OworICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjp2YXJpYW50PFJlZlB0
cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAg
dXNpbmcgSFRNTEVsZW1lbnRPckludCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+
LCBpbnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBP
cHRpb25Pck9wdEdyb3VwRWxlbWVudCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SFRNTEVsZW1lbnRP
ckludD4mIGJlZm9yZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmUoaW50IGluZGV4
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgdXNlc01l
bnVMaXN0KCkgY29uc3Q7CiAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IFZh
cmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1l
bnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTEVs
ZW1lbnQ+LCBpbnQ+OworICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVt
ZW50Pj47CisgICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8
SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+
IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8
SFRNTEVsZW1lbnRPckludD4mIGJlZm9yZSk7CiAKICAgICB1c2luZyBOb2RlOjpyZW1vdmU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuY3BwCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNlYXJjaFBhcmFtcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDIyICs0MSwyNSBAQCBVUkxTZWFyY2hQYXJhbXM6OlVSTFNlYXJjaFBhcmFt
cyhjb25zdCBWCiB7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxT
ZWFyY2hQYXJhbXM6OmNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3Rv
cjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYgdmFyaWFudCkK
K0V4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWFyY2hQYXJhbXM6OmNyZWF0
ZShzdGQ6OnZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFs
dWVQYWlyPFN0cmluZywgU3RyaW5nPj4sIFN0cmluZz4mJiB2YXJpYW50KQogewotICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5n
Pj4mIHZlY3RvcikgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKLSAgICAg
ICAgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4gcGFpcnM7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHZlY3RvcikgewotICAgICAgICAgICAgaWYgKHBh
aXIuc2l6ZSgpICE9IDIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVF
cnJvciB9OwotICAgICAgICAgICAgcGFpcnMuYXBwZW5kKHtwYWlyWzBdLCBwYWlyWzFdfSk7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFyaWFudCwKKyAgICAgICAgW10oY29uc3QgVmVjdG9y
PFZlY3RvcjxTdHJpbmc+PiYgdmVjdG9yKSAtPiBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFy
YW1zPj4geworICAgICAgICAgICAgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3Ry
aW5nPj4gcGFpcnM7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3Ip
IHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OworICAgICAgICAgICAgICAgIHBh
aXJzLmFwcGVuZCh7cGFpclswXSwgcGFpclsxXX0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNoUGFyYW1zKFdURk1vdmUocGFpcnMpKSk7
CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxT
dHJpbmcsIFN0cmluZz4+JiBwYWlycykgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFt
cz4+IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhw
YWlycykpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4g
RXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpbmcsIG51bGxwdHIpKTsKICAgICAgICAg
fQotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoV1RGTW92ZShw
YWlycykpKTsKLSAgICB9LCBbJl0oY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmlu
ZywgU3RyaW5nPj4mIHBhaXJzKSB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNl
YXJjaFBhcmFtcyhwYWlycykpOwotICAgIH0sIFsmXShjb25zdCBTdHJpbmcmIHN0cmluZykgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxs
cHRyKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7
CisgICAgKTsKIH0KIAogU3RyaW5nIFVSTFNlYXJjaFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuaAkocmV2
aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFVSTFNlYXJjaFBhcmFtcyA6IHB1YmxpYyBSZWZDb3VudGVkPFVSTFNlYXJjaFBhcmFtcz4g
ewogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4g
Y3JlYXRlKFZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFs
dWVQYWlyPFN0cmluZywgU3RyaW5nPj4sIFN0cmluZz4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlv
bk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0
b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBT
dHJpbmc+JiYpOwogICAgIHN0YXRpYyBSZWY8VVJMU2VhcmNoUGFyYW1zPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIERPTVVSTCogYXNzb2NpYXRlZFVSTCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpbmcsIGFzc29jaWF0ZWRVUkwp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsOSArNTgsOSBAQCBjbGFzcyBUZXh0TWV0cmljczsKIHN0cnVjdCBET01NYXRyaXhJbml0Owog
CiAjaWYgRU5BQkxFKFZJREVPKQotdXNpbmcgQ2FudmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJl
ZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8
SFRNTENhbnZhc0VsZW1lbnQ+PjsKK3VzaW5nIENhbnZhc0ltYWdlU291cmNlID0gc3RkOjp2YXJp
YW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+LCBS
ZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKICNlbHNlCi11c2luZyBDYW52YXNJbWFnZVNvdXJj
ZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0Vs
ZW1lbnQ+PjsKK3VzaW5nIENhbnZhc0ltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxI
VE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAog
Y2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQsIHB1YmxpYyBDYW52YXNQYXRoIHsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb25zdCBTdHJpbmcmKTsKIAot
ICAgIHVzaW5nIFN0eWxlID0gVmFyaWFudDxTdHJpbmcsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4s
IFJlZlB0cjxDYW52YXNQYXR0ZXJuPj47CisgICAgdXNpbmcgU3R5bGUgPSBzdGQ6OnZhcmlhbnQ8
U3RyaW5nLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+Owog
ICAgIFN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShT
dHlsZSYmKTsKICAgICBTdHlsZSBmaWxsU3R5bGUoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM1LDEyICsxMzUsMTIgQEAgQ2FudmFzU3R5bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21T
dHJpbgogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNT
dHlsZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29s
b3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5
bGUpKQotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IFdURjo6Z2V0
PENvbG9yPihvdGhlci5tX3N0eWxlKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxD
b2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4ob3RoZXIubV9z
dHlsZSkpCisgICAgICAgIHJldHVybiBzdGQ6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0gc3RkOjpn
ZXQ8Q29sb3I+KG90aGVyLm1fc3R5bGUpOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKSkgewotICAgICAgICBhdXRvJiBhID0gV1RGOjpnZXQ8Q01ZS0FD
b2xvcj4obV9zdHlsZSk7Ci0gICAgICAgIGF1dG8mIGIgPSBXVEY6OmdldDxDTVlLQUNvbG9yPihv
dGhlci5tX3N0eWxlKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9y
PihtX3N0eWxlKSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1f
c3R5bGUpKSB7CisgICAgICAgIGF1dG8mIGEgPSBzdGQ6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxl
KTsKKyAgICAgICAgYXV0byYgYiA9IHN0ZDo6Z2V0PENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUp
OwogICAgICAgICByZXR1cm4gYS5jID09IGIuYyAmJiBhLm0gPT0gYi5tICYmIGEueSA9PSBiLnkg
JiYgYS5rID09IGIuayAmJiBhLmEgPT0gYi5hOwogICAgIH0KIApAQCAtMTQ5LDE1ICsxNDksMTUg
QEAgYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IoY29ucwogCiBib29sIENhbnZh
c1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0
IGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1f
c3R5bGUpICYmIFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIsIGEg
fTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYg
c3RkOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENvbG9yIHsgciwgZywgYiwgYSB9OwogfQogCiBi
b29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9h
dCB5LCBmbG9hdCBrLCBmbG9hdCBhKSBjb25zdAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGF1dG8mIGNoYW5uZWxzID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7CisgICAgYXV0
byYgY2hhbm5lbHMgPSBzdGQ6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKTsKICAgICByZXR1cm4g
YyA9PSBjaGFubmVscy5jICYmIG0gPT0gY2hhbm5lbHMubSAmJiB5ID09IGNoYW5uZWxzLnkgJiYg
ayA9PSBjaGFubmVscy5rICYmIGEgPT0gY2hhbm5lbHMuYTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3IpOwogICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVh
dGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQg
YWxwaGEpOwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KLSAgICBib29sIGlzQ3VycmVudENvbG9y
KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1f
c3R5bGUpOyB9Ci0gICAgYm9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gaXND
dXJyZW50Q29sb3IoKSAmJiBXVEY6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRl
QWxwaGE7IH0KLSAgICBmbG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpn
ZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVlKCk7IH0KKyAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZh
bGlkPihtX3N0eWxlKTsgfQorICAgIGJvb2wgaXNDdXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVy
biBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEN1cnJlbnRDb2xvcj4obV9zdHlsZSk7IH0KKyAgICBi
b29sIGhhc092ZXJyaWRlQWxwaGEoKSBjb25zdCB7IHJldHVybiBpc0N1cnJlbnRDb2xvcigpICYm
IHN0ZDo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBoYTsgfQorICAgIGZs
b2F0IG92ZXJyaWRlQWxwaGEoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+
KG1fc3R5bGUpLm92ZXJyaWRlQWxwaGEudmFsdWUoKTsgfQogCiAgICAgU3RyaW5nIGNvbG9yKCkg
Y29uc3Q7CiAgICAgQ2FudmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3Q7CkBAIC05
MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKICAgICBDYW52YXNTdHlsZShDdXJyZW50Q29sb3IpOwog
Ci0gICAgVmFyaWFudDxJbnZhbGlkLCBDb2xvciwgQ01ZS0FDb2xvciwgUmVmUHRyPENhbnZhc0dy
YWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+LCBDdXJyZW50Q29sb3I+IG1fc3R5bGU7Cisg
ICAgc3RkOjp2YXJpYW50PEludmFsaWQsIENvbG9yLCBDTVlLQUNvbG9yLCBSZWZQdHI8Q2FudmFz
R3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4sIEN1cnJlbnRDb2xvcj4gbV9zdHlsZTsK
IH07CiAKIENvbG9yIGN1cnJlbnRDb2xvcihIVE1MQ2FudmFzRWxlbWVudCopOwpAQCAtMTA0LDIx
ICsxMDQsMjEgQEAgaW5saW5lIENhbnZhc1N0eWxlOjpDYW52YXNTdHlsZSgpCiAKIGlubGluZSBD
YW52YXNHcmFkaWVudCogQ2FudmFzU3R5bGU6OmNhbnZhc0dyYWRpZW50KCkgY29uc3QKIHsKLSAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9z
dHlsZSkpCisgICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxDYW52YXNHcmFk
aWVudD4+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RG
OjpnZXQ8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9zdHlsZSkuZ2V0KCk7CisgICAgcmV0dXJu
IHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpLmdldCgpOwogfQogCiBp
bmxpbmUgQ2FudmFzUGF0dGVybiogQ2FudmFzU3R5bGU6OmNhbnZhc1BhdHRlcm4oKSBjb25zdAog
ewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVybj4+
KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFz
UGF0dGVybj4+KG1fc3R5bGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
V1RGOjpnZXQ8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKS5nZXQoKTsKKyAgICByZXR1
cm4gc3RkOjpnZXQ8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKS5nZXQoKTsKIH0KIAog
aW5saW5lIFN0cmluZyBDYW52YXNTdHlsZTo6Y29sb3IoKSBjb25zdAogewotICAgIGF1dG8mIGNv
bG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgPyBXVEY6OmdldDxD
b2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb2xvcjsKKyAg
ICBhdXRvJiBjb2xvciA9IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpID8g
c3RkOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogc3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSku
Y29sb3I7CiAgICAgcmV0dXJuIGNvbG9yLnNlcmlhbGl6ZWQoKTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHRleEltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RzaXplaSBkZXB0aCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpOwogCiAgICAgdm9pZCB0ZXhT
dWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4mJiBwaXhlbHMpOwotICAgIHVzaW5nIFRleElt
YWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTElt
YWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9F
bGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNF
bGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKICAgICB2b2lkIHRleFN1YkltYWdl
M0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIFRleEltYWdlU291cmNlJiYpOwogCiAgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xBbnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEFueS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEFueS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyOCArMjcsMjEgQEAKIAogI2lmIEVOQUJM
RShXRUJHTCkKIAorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFt
ZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVu
ZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aCIKICNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SW50MzJBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KICNpbmNsdWRl
IDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBFeGVjU3Rh
dGU7Ci1jbGFzcyBKU1ZhbHVlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpT
RE9NR2xvYmFsT2JqZWN0OwotY2xhc3MgV2ViR0xCdWZmZXI7Ci1jbGFzcyBXZWJHTEZyYW1lYnVm
ZmVyOwotY2xhc3MgV2ViR0xQcm9ncmFtOwotY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7Ci1jbGFz
cyBXZWJHTFRleHR1cmU7Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0OwotY2xhc3MgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotdXNpbmcgV2ViR0xBbnkgPSBWYXJpYW50PAordXNp
bmcgV2ViR0xBbnkgPSBzdGQ6OnZhcmlhbnQ8CiAgICAgc3RkOjpudWxscHRyX3QsCiAgICAgYm9v
bCwKICAgICBpbnQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YnVmZmVyRGEKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZdKGF1
dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0
YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIp
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIxOCw3ICsxMjE4LDcgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdQogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQo
WyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1
YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0zNjc2LDcgKzM2NzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYKICAgICApOwogCi0gICAgcmV0dXJuIFdURjo6
dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZp
c2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAogYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8SlNDOjpUeXBlZEFycmF5VHlwZT4gYXJyYXlUeXBl
KQpAQCAtNDIxMiw3ICs0MjEyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3Is
IHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2Uu
dmFsdWUoKSk7CiB9CiAKIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGRldmljZVNjYWxlRmFjdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgIHZvaWQg
YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwogICAgIHZvaWQg
YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0Rl
bnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CiAKLSAgICB1c2luZyBCdWZmZXJEYXRh
U291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1
ZmZlclZpZXc+PjsKKyAgICB1c2luZyBCdWZmZXJEYXRhU291cmNlID0gc3RkOjp2YXJpYW50PFJl
ZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+PjsKICAgICB2b2lkIGJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2Up
OwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8QnVm
ZmVyRGF0YVNvdXJjZT4mJiwgR0MzRGVudW0gdXNhZ2UpOwogICAgIHZvaWQgYnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIHN0ZDo6b3B0aW9uYWw8QnVmZmVy
RGF0YVNvdXJjZT4mJik7CkBAIC0yNDcsOSArMjQ3LDkgQEAgcHVibGljOgogICAgIHZvaWQgdGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+
JiYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gV1RG
OjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJl
ZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CisgICAg
dXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJl
ZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiwgUmVmUHRy
PEhUTUxWaWRlb0VsZW1lbnQ+PjsKICNlbHNlCi0gICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBX
VEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Piwg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Piwg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAogICAgIEV4Y2VwdGlvbk9yPHZv
aWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9wdGlv
bmFsPFRleEltYWdlU291cmNlPik7CkBAIC0yNjMsNyArMjYzLDcgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlIDxjbGFzcyBUeXBlZEFycmF5LCBjbGFzcyBEYXRhVHlwZT4KICAgICBjbGFzcyBUeXBl
ZExpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgdXNpbmcgVmFyaWFudFR5cGUgPSBWYXJpYW50
PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFUeXBlPj47CisgICAgICAgIHVzaW5nIFZh
cmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFU
eXBlPj47CiAKICAgICAgICAgVHlwZWRMaXN0KFZhcmlhbnRUeXBlJiYgdmFyaWFudCkKICAgICAg
ICAgICAgIDogbV92YXJpYW50KFdURk1vdmUodmFyaWFudCkpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5cGUs
IGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92ZSh0cmFjaykpKTsKICAgICB9CiAKLSAgICB1
c2luZyBUcmFja0V2ZW50VHJhY2sgPSBWYXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVmUHRy
PEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CisgICAgdXNpbmcgVHJhY2tFdmVudFRy
YWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+
LCBSZWZQdHI8VGV4dFRyYWNrPj47CiAKICAgICBzdHJ1Y3QgSW5pdCA6IHB1YmxpYyBFdmVudElu
aXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRyYWNrRXZlbnRUcmFjaz4gdHJhY2s7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbnNw
ZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQmLCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05h
bWUpOwogCi0gICAgdHlwZWRlZiBWYXJpYW50PAorICAgIHR5cGVkZWYgc3RkOjp2YXJpYW50PAog
ICAgICAgICBDYW52YXNHcmFkaWVudCosCiAgICAgICAgIENhbnZhc1BhdHRlcm4qLAogICAgICAg
ICBIVE1MQ2FudmFzRWxlbWVudCosCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0g
ICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRy
PElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFyZXN1
bHRWYWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+Pihy
ZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFi
YXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFpbHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlw
ZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0
YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52
YWx1ZSgpKTsKKyAgICAgICAgYXV0byBkYXRhYmFzZVJlc3VsdCA9IHN0ZDo6Z2V0PFJlZlB0cjxJ
REJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOwogICAgICAgICBtX2V4ZWN1dGFibGVX
aXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNlUmVzdWx0KTsKICAgICAgICAgZGF0YWJhc2VS
ZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyBSZWZQdHI8
S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXkKICAgICAgICAga2V5UGF0aC0+c2V0QXJyYXkoV1RG
TW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9KTsKLSAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkpOworICAgIHJldHVybiBz
dGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgudmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBSZWZQ
dHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJhc2UqIGlk
YkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rpb25N
b2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6OlJlYWRvbmx5KQpAQCAtMzczLDEyICszNzMs
MTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBhdXRvIHJlc3VsdFZh
bHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRW
YWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewog
ICAgICAgICAgICAgZW5kKGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
Ci0gICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3Vs
dFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRvIGN1cnNvciA9IHN0ZDo6Z2V0PFJlZlB0cjxJ
REJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKIAogICAgICAgICBpZiAobV9za2lwQ291
bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3ItPmFkdmFuY2UobV9za2lwQ291bnQpLmhhc0V4
Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNl
cnZlci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsMTAgQEAgSW50
ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVyc2VjdGlvbk9ic2VydgogICAgICwgbV9yb290TWFyZ2lu
KFdURk1vdmUoaW5pdC5yb290TWFyZ2luKSkKICAgICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxs
YmFjaykpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPihpbml0LnRo
cmVzaG9sZCkpCi0gICAgICAgIG1fdGhyZXNob2xkcy5hcHBlbmQoV1RGOjpnZXQ8ZG91YmxlPihp
bml0LnRocmVzaG9sZCkpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4o
aW5pdC50aHJlc2hvbGQpKQorICAgICAgICBtX3RocmVzaG9sZHMuYXBwZW5kKHN0ZDo6Z2V0PGRv
dWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKICAgICBlbHNlCi0gICAgICAgIG1fdGhyZXNob2xkcyA9
IFdURjo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQudGhyZXNob2xkKSk7CisgICAg
ICAgIG1fdGhyZXNob2xkcyA9IHN0ZDo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQu
dGhyZXNob2xkKSk7CiB9CiAKIHZvaWQgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoRWxl
bWVudCYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5o
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9i
c2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0
cnVjdCBJbml0IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3Q7CiAgICAgICAgIFN0cmlu
ZyByb290TWFyZ2luOwotICAgICAgICBWYXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+IHRo
cmVzaG9sZDsKKyAgICAgICAgc3RkOjp2YXJpYW50PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+IHRo
cmVzaG9sZDsKICAgICB9OwogCiAgICAgc3RhdGljIFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4g
Y3JlYXRlKFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJbml0
JiYgaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5l
dmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBiZWVuIGxhaWQgb3V0LgogICAgIHZpcnR1YWwg
dm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyYpIHsgfQogCi0gICAgdXNpbmcg
TGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRlUmVjdCA9IFdURjo6VmFyaWFudDxzdGQ6Om9w
dGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6Om9wdGlvbmFsPEZsb2F0UmVjdD4+OworICAgIHVzaW5n
IExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpv
cHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9hdFJlY3Q+PjsKICAgICB2aXJ0
dWFsIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5nU3RhdGUoRnJhbWVWaWV3JiwgY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QmLCBib29sIC8q
IHByb2dyYW1tYXRpY1Njcm9sbCAqLywgVmlld3BvcnRSZWN0U3RhYmlsaXR5LCBTY3JvbGxpbmdM
YXllclBvc2l0aW9uQWN0aW9uKSB7IH0KIAogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2
ZXIgdGhlIHNsb3cgcmVwYWludCBvYmplY3RzIGNvdW50ZXIgY2hhbmdlcyBiZXR3ZWVuIHplcm8g
YW5kIG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcgKzIwOCw3IEBAIGNvbnN0IGNoYXIqIFNoYXJl
ZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmQKICNlbmRpZgogICAgICAgICBbXShjb25zdCBNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YS5kYXRhKCkpOyB9CiAgICAgKTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2lt
bXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxl
RGF0YSk7CiB9CiAKICNpZiAhVVNFKENGKQpAQCAtMjE5LDE3ICsyMTksMjQgQEAgdm9pZCBTaGFy
ZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogCiBzaXplX3QgU2hhcmVkQnVmZmVyOjpE
YXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtl
VmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJldHVybiBk
YXRhLnNpemUoKTsgfSwKKyAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX2ltbXV0YWJsZURhdGEs
CisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAg
ICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfSwKICNpZiBVU0UoQ0YpCi0gICAg
ICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSB7IHJldHVybiBDRkRhdGFH
ZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRh
dGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeworICAgICAgICAgICAgcmV0dXJuIENGRGF0YUdldExl
bmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSwKICNlbmRpZgogI2lmIFVTRShTT1VQKQotICAg
ICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBkYXRhKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxlbmd0aCk7IH0sCisgICAgICAgIFtdKGNvbnN0IEdVbmlx
dWVQdHI8U291cEJ1ZmZlcj4mIGRhdGEpIC0+IHNpemVfdCB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOworICAgICAgICB9LAogI2VuZGlmCi0g
ICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRhJiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUo
KTsgfQorICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90IHsK
KyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAgICAgICAgfQogICAgICk7Ci0gICAg
cmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKIH0KIAogU2hhcmVk
QnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRhdGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBwb3NpdGlvbldpdGhpblNlZ21lbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNiwxOSArMTE2LDI4IEBAIHB1YmxpYzoKIAogICAgIHByaXZhdGU6CiAgICAgICAgIERh
dGFTZWdtZW50KFZlY3RvcjxjaGFyPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRhYmxl
RGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdU
Rk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogI2lmIFVTRShDRikKICAgICAgICAg
RGF0YVNlZ21lbnQoUmV0YWluUHRyPENGRGF0YVJlZj4mJiBkYXRhKQotICAgICAgICAgICAgOiBt
X2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1tdXRh
YmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNlbmRpZgogI2lm
IFVTRShTT1VQKQogICAgICAgICBEYXRhU2VnbWVudChHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiYg
ZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQor
ICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAgewor
ICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgRGF0YVNlZ21lbnQoTWFwcGVkRmlsZURhdGEmJiBk
YXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9Cisg
ICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7Cisg
ICAgICAgIH0KIAotICAgICAgICBWYXJpYW50PFZlY3RvcjxjaGFyPiwKKyAgICAgICAgc3RkOjp2
YXJpYW50PAorICAgICAgICAgICAgVmVjdG9yPGNoYXI+LAogI2lmIFVTRShDRikKICAgICAgICAg
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0IFBs
YXRmb3JtRGVzY3JpcHRpb24gewogICAgICAgICBOb25lLAogICAgICAgICBDQUF1ZGlvU3RyZWFt
QmFzaWNUeXBlLAogICAgIH0gdHlwZTsKLSAgICBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKKyAgICBzdGQ6OnZh
cmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+
IGRlc2NyaXB0aW9uOwogfTsKIAogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgICAgICBpZiAob3RoZXIucGxh
dGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0
cmVhbUJhc2ljVHlwZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICByZXR1
cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgICAgIHJl
dHVybiBvcGVyYXRvcj09KCpzdGQ6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKICAgICB9CiAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7
IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCkBAIC0xMDIsNyArMTAyLDcgQEAgYm9v
bCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRlY29kZShEZQogaW5saW5lIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxh
dGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0
cmVhbUJhc2ljVHlwZSk7Ci0gICAgcmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqV1RG
OjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxh
dGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CisgICAgcmV0dXJuIENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbigqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
Kj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKSk7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5j
cHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJl
ZEJ1ZmZlckNGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBTaGFyZWRCdWZm
ZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2VnbWVudHMuc2l6
ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0
cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCisg
ICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4o
Jm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAgICAgICAgICAgIHJl
dHVybiAqZGF0YTsKICAgICB9CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxw
dHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihkYXRhKCkpLCBzaXplKCkpKTsKQEAg
LTYwLDcgKzYwLDcgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwog
ewogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX3NlZ21lbnRzKSB7CiAgICAgICAgIGlm
IChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gZGF0
YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihlbnRyeS5zZWdtZW50LT5tX2lt
bXV0YWJsZURhdGEpKQorICAgICAgICAgICAgaWYgKGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPFJl
dGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnkuc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAg
ICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6aGludE1lbW9yeU5vdE5lZWRlZFNvb24oY29uc3Rf
Y2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQdHIoZGF0YS0+Z2V0KCkpKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE3ICs1NiwxNyBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzTm9uZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2Rl
KCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVj
b2RpbmdNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3Rk
OjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2Rl
OjpOb25lOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3luY2hyb25vdXMoKSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5n
TW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6U3luY2hyb25vdXM7
CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBzdGQ6OmdldDxEZWNvZGluZ01v
ZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzOwog
ICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXMoKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNv
ZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNocm9ub3VzOworICAgICAgICBy
ZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29k
aW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXM7CiAgICAgfQogCiAg
ICAgYm9vbCBpc0FzeW5jaHJvbm91c0NvbXBhdGlibGVXaXRoKGNvbnN0IERlY29kaW5nT3B0aW9u
cyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdApAQCAtMTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAg
ICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IHNpemVGb3JEcmF3aW5nKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIEFTU0VSVChoYXNTaXplKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8c3RkOjpv
cHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUpOworICAgICAgICByZXR1cm4g
c3RkOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01vZGVPclNpemUpOwog
ICAgIH0KIAogICAgIHN0YXRpYyBpbnQgbWF4RGltZW5zaW9uKGNvbnN0IEludFNpemUmIHNpemUp
CkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
ICAgIGJvb2wgaGFzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JTaXplKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGluZ01vZGVPclNpemUpOwogICAgIH0KIAogICAg
IGJvb2wgaGFzRGVjb2RpbmdNb2RlKCkgY29uc3QKQEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2YXRl
OgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsgYW55U2l6ZTogRGVjb2RpbmdNb2RlOjpBc3luY2hy
b25vdXMKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGludHJpbnNpY1NpemU6IGFuIGVtcHR5IHN0
ZDo6b3B0aW9uYWw8SW50U2l6ZT4+CiAgICAgLy8gLSBBc3luY2hyb25vdXMgKyBzaXplRm9yRHJh
d2luZzogYSBub25lIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+Ci0gICAgdXNpbmcgRGVj
b2RpbmdNb2RlT3JTaXplID0gVmFyaWFudDxEZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50
U2l6ZT4+OworICAgIHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9IHN0ZDo6dmFyaWFudDxEZWNv
ZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OwogICAgIERlY29kaW5nTW9kZU9yU2l6
ZSBtX2RlY29kaW5nTW9kZU9yU2l6ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3IEBAIHN0YXRpYyBGb250UmFu
Z2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAgICAgICAgICAgIHJldHVybiBmb250RmFtaWx5
U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2NyaXB0aW9uKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkgPSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1p
bHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byByYW5nZXMgPSBXVEY6OnZpc2l0KHZpc2l0b3Is
IGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRvIHJhbmdlcyA9IHN0ZDo6dmlzaXQodmlzaXRv
ciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlmICghcmFuZ2VzLmlzTnVsbCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgdHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNh
dGlvbk51bGwgRm9udAogCiAjZGVmaW5lIFVTRV9QTEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElT
VCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFyaWFudDxBdG9taWNTdHJpbmcsIEZvbnRGYW1p
bHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uOwordHlwZWRl
ZiBzdGQ6OnZhcmlhbnQ8QXRvbWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0
aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZv
bnRGYW1pbHlOYW1lczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVy
QVZGT2JqQzo6dW5wcgogdm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6YXVkaW9T
YW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiwgY29uc3QgTWVkaWFUaW1l
JiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGRhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgZnJhbWVDb3VudCkKIHsKICAgICBBU1NFUlQoZGVz
Y3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlv
bjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgYXV0byYgYmFzaWNEZXNjcmlwdGlvbiA9
ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlv
bi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pOworICAgIGF1dG8mIGJhc2ljRGVz
Y3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4o
ZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKICAgICBpZiAo
IW1faW5wdXREZXNjcmlwdGlvbiB8fCBtX2lucHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0
aW9uKCkgIT0gYmFzaWNEZXNjcmlwdGlvbikKICAgICAgICAgcHJlcGFyZShiYXNpY0Rlc2NyaXB0
aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
dXNpbmcgU1FMVmFsdWUgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGRvdWJsZT47
Cit1c2luZyBTUUxWYWx1ZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBk
b3VibGU+OwogCiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgaW5s
aW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLSAgICAgICAgYXV0byYg
ZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250
ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOworICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVudERh
dGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJrZXIt
PmRhdGEoKSk7CiAgICAgICAgIGlmIChkcmFnZ2VkQ29udGVudERhdGEudGFyZ2V0Tm9kZSA9PSAm
ZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291
cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKICAgICAg
ICAgU3RyaW5nIHRyZWF0TnVsbEFzRW1wdHlTdHJpbmdWYWx1ZTsKICAgICAgICAgVmVjdG9yPFN0
cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAgVmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3Rv
cjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7CisgICAgICAgIHN0ZDo6dmFy
aWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9u
VmFsdWU7CiAgICAgICAgIGludCBjbGFtcExvbmdWYWx1ZTsKICAgICAgICAgaW50IGVuZm9yY2VS
YW5nZUxvbmdWYWx1ZTsKICAgICB9OwpAQCAtMTIyLDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+JiB0
ZXN0U2VxdWVuY2VSZWNvcmQoKSBjb25zdCB7IHJldHVybiBtX3NlcXVlbmNlUmVjb3JkOyB9CiAg
ICAgdm9pZCBzZXRUZXN0U2VxdWVuY2VSZWNvcmQoY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQ
YWlyPFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiYgdmFsdWUpIHsgbV9zZXF1ZW5jZVJlY29yZCA9
IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VW5pb24gPSBWYXJpYW50PFN0cmluZywgaW50LCBi
b29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKKyAgICB1c2luZyBUZXN0VW5pb24gPSBz
dGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2wsIFJlZlB0cjxOb2RlPiwgVmVjdG9yPGludD4+
OwogICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmlv
bjsgfQogICAgIHZvaWQgc2V0VGVzdFVuaW9uKFRlc3RVbmlvbiYmIHZhbHVlKSB7IG1fdW5pb24g
PSB2YWx1ZTsgfQogCkBAIC0xMzAsMTUgKzEzMCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRU
ZXN0RGljdGlvbmFyeShEaWN0aW9uYXJ5JiYgZGljdGlvbmFyeSkgeyBtX3Rlc3REaWN0aW9uYXJ5
ID0gZGljdGlvbmFyeTsgfQogICAgIAogCi0gICAgdXNpbmcgVGVzdENsYW1wVW5pb24gPSBWYXJp
YW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47CisgICAgdXNpbmcgVGVzdENsYW1wVW5pb24g
PSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0
Q2xhbXBVbmlvbiYgdGVzdENsYW1wVW5pb24oKSBjb25zdCB7IHJldHVybiBtX2NsYW1wVW5pb247
IH0KICAgICB2b2lkIHNldFRlc3RDbGFtcFVuaW9uKGNvbnN0IFRlc3RDbGFtcFVuaW9uJiB2YWx1
ZSkgeyBtX2NsYW1wVW5pb24gPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcgVGVzdEVuZm9yY2VSYW5n
ZVVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OworICAgIHVzaW5nIFRl
c3RFbmZvcmNlUmFuZ2VVbmlvbiA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGlu
dD4+OwogICAgIGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdGVzdEVuZm9yY2VSYW5nZVVu
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmZvcmNlUmFuZ2VVbmlvbjsgfQogICAgIHZvaWQgc2V0
VGVzdEVuZm9yY2VSYW5nZVVuaW9uKGNvbnN0IFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiYgdmFsdWUp
IHsgbV9lbmZvcmNlUmFuZ2VVbmlvbiA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VHJlYXRO
dWxsQXNFbXB0eVN0cmluZ1VuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPFN0cmlu
Zz4+OworICAgIHVzaW5nIFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24gPSBzdGQ6OnZh
cmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxTdHJpbmc+PjsKICAgICBjb25zdCBUZXN0VHJlYXRO
dWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB0ZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb247IH0KICAgICB2b2lk
IHNldFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24oY29uc3QgVGVzdFRyZWF0TnVsbEFz
RW1wdHlTdHJpbmdVbmlvbiYgdmFsdWUpIHsgbV90cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24g
PSB2YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGljOgogICAgIEV2ZW50VGFyZ2V0SW50ZXJm
YWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gWE1MSHR0
cFJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7IH0KICAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
QWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0KIAotICAgIHVzaW5n
IFNlbmRUeXBlcyA9IFZhcmlhbnQ8UmVmUHRyPERvY3VtZW50PiwgUmVmUHRyPEJsb2I+LCBSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJlZlB0
cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CisgICAgdXNpbmcgU2VuZFR5cGVzID0gc3RkOjp2YXJp
YW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxCbG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+LCBT
dHJpbmc+OwogCiAgICAgY29uc3QgVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQog
ICAgIFN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyNCBAQAorMjAxNy0wOC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhcHR1cmU6OmV2ZW50
VG9TdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVFdmVudC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJj
ZTo6dXJsKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0
YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRsZXIpOgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoSVBDOjpBcmd1bWVudENvZGVyPElEQktl
eVBhdGg+OjplbmNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHA6CisgICAgICAgICh3ZWJraXRfZG9tX2h0bWxf
c2VsZWN0X2VsZW1lbnRfYWRkKToKKwogMjAxNy0wOC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFtCZWFjb25dIEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVF
dmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ3OSw3ICs0NzksNyBAQCBzdGQ6OnN0cmluZyBldmVudFRvU3RyaW5n
KGNvbnN0IENhcHR1cmVFCiB7CiAgICAganNvbiByZXN1bHQ7CiAKLSAgICBXVEY6OnZpc2l0KFsm
cmVzdWx0XShjb25zdCBhdXRvJiBldmVudCkgeworICAgIHN0ZDo6dmlzaXQoWyZyZXN1bHRdKGNv
bnN0IGF1dG8mIGV2ZW50KSB7CiAgICAgICAgIHVzaW5nIEV2ZW50VHlwZSA9IHN0ZDo6ZGVjYXlf
dDxkZWNsdHlwZShldmVudCk+OwogICAgICAgICByZXN1bHQgPSBKU09OQ29kZXI8RXZlbnRUeXBl
Pjo6ZW5jb2RlKGV2ZW50KTsKICAgICB9LCBldmVudCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcg
QEAgc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Owogc3RydWN0IERhdGFSZWNlaXZlZEV2ZW50Owog
c3RydWN0IEZpbmlzaGVkRXZlbnQ7CiAKLXVzaW5nIENhcHR1cmVFdmVudCA9IFdURjo6VmFyaWFu
dDxSZXF1ZXN0U2VudEV2ZW50LCBSZXNwb25zZVJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0UmVjZWl2
ZWRFdmVudCwgUmVkaXJlY3RTZW50RXZlbnQsIERhdGFSZWNlaXZlZEV2ZW50LCBGaW5pc2hlZEV2
ZW50PjsKK3VzaW5nIENhcHR1cmVFdmVudCA9IHN0ZDo6dmFyaWFudDxSZXF1ZXN0U2VudEV2ZW50
LCBSZXNwb25zZVJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RT
ZW50RXZlbnQsIERhdGFSZWNlaXZlZEV2ZW50LCBGaW5pc2hlZEV2ZW50PjsKIHVzaW5nIE9wdGlv
bmFsQ2FwdHVyZUV2ZW50ID0gc3RkOjpvcHRpb25hbDxDYXB0dXJlRXZlbnQ+OwogdXNpbmcgQ2Fw
dHVyZUV2ZW50cyA9IFZlY3RvcjxDYXB0dXJlRXZlbnQ+OwogdXNpbmcgQ2FwdHVyZUNsb2NrVHlw
ZSA9IFdURjo6TW9ub3RvbmljVGltZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5j
cHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAg
KzQ4LDEwIEBAIGNvbnN0IFdlYkNvcmU6OlVSTCYgUmVzb3VyY2U6OnVybCgpCiAgICAgICAgIGF1
dG8gZXZlbnQgPSBldmVudHMubmV4dEV2ZW50KCk7CiAgICAgICAgIGlmICghZXZlbnQpCiAgICAg
ICAgICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBjb250YWluIGV2
ZW50czogZmlsZSA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0
aCkpOwotICAgICAgICBlbHNlIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZXF1ZXN0U2Vu
dEV2ZW50PigqZXZlbnQpKQorICAgICAgICBlbHNlIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpKQogICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9S
KCJFdmVudCBzdHJlYW0gZG9lcyBub3QgaGF2ZSBhIHJlcXVlc3RTZW50IGV2ZW50OiBmaWxlID0g
IiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9ldmVudEZpbGVQYXRoKSk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgYXV0byByZXF1ZXN0U2VudEV2ZW50ID0gV1RGOjpnZXQ8UmVx
dWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKKyAgICAgICAgICAgIGF1dG8gcmVxdWVzdFNlbnRFdmVu
dCA9IHN0ZDo6Z2V0PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCk7CiAgICAgICAgICAgICBXZWJD
b3JlOjpVUkxQYXJzZXIgcGFyc2VyKHJlcXVlc3RTZW50RXZlbnQucmVxdWVzdC51cmwpOwogICAg
ICAgICAgICAgbV91cmwgPSBwYXJzZXIucmVzdWx0KCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrRGF0YVRhc2tSZXBsYXkuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5Ojpl
bnF1ZXVlRXZlbnQKICAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hlZChldmVudCk7CiAgICAg
ICAgICAgICB9KTsKIAotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsICpldmVudCk7CisgICAg
ICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgKmV2ZW50KTsKICAgICB9KTsKIH0KIApJbmRleDogU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgzLDEyICsyNTgzLDEyIEBAIGJvb2wgQXJndW1lbnRD
b2RlcjxDYXB0dXJlRGV2aWNlPjo6ZGVjb2QKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
IHZvaWQgQXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7Ci0gICAgYm9vbCBpc1N0cmluZyA9IFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRoKTsKKyAgICBib29sIGlzU3RyaW5nID0g
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpOwogICAgIGVuY29kZXIgPDwg
aXNTdHJpbmc7CiAgICAgaWYgKGlzU3RyaW5nKQotICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0
PFN0cmluZz4oa2V5UGF0aCk7CisgICAgICAgIGVuY29kZXIgPDwgc3RkOjpnZXQ8U3RyaW5nPihr
ZXlQYXRoKTsKICAgICBlbHNlCi0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPFN0
cmluZz4+KGtleVBhdGgpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFZlY3RvcjxTdHJp
bmc+PihrZXlQYXRoKTsKIH0KIAogYm9vbCBBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgSURCS2V5UGF0aCYga2V5UGF0aCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIHN0cnVjdCBNZWRpYUNvbnN0cmFpbnRzOwogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBJ
REJLZXlQYXRoID0gVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKK3VzaW5nIElEQktl
eVBhdGggPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBNZWRpYVRpbWUmIHRpbWUsIGNvbnN0IFBsYXRm
b3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRl
c2NyaXB0aW9uLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpIGZpbmFsIHsKICAgICAgICAgaWYgKG1f
ZGVzY3JpcHRpb24gIT0gZGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgIEFTU0VSVChkZXNjcmlw
dGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpD
QUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKLSAgICAgICAgICAgIG1fZGVzY3JpcHRpb24gPSAqV1RG
OjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxh
dGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIG1fZGVzY3JpcHRp
b24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3Jp
cHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsKIAogICAgICAgICAgICAg
Ly8gQWxsb2NhdGUgYSByaW5nIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiAyIHNlY29u
ZHMgb2YgYXVkaW8uCiAgICAgICAgICAgICBtX251bWJlck9mRnJhbWVzID0gbV9kZXNjcmlwdGlv
bi5zYW1wbGVSYXRlKCkgKiAyOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0
ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2Vi
S2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5
LDcgQEAgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkKAogICAgIFdlYkNv
cmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0gV2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdl
YkNvcmU6OkhUTUxFbGVtZW50KiBjb252ZXJ0ZWRFbGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1l
bnQpOwogICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb252ZXJ0ZWRCZWZvcmUgPSBXZWJLaXQ6
OmNvcmUoYmVmb3JlKTsKLSAgICBWYXJpYW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1l
bnQ7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4s
IFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CiAg
ICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Pihjb252ZXJ0ZWRFbGVtZW50KSkK
ICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93bmNhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVs
ZW1lbnQ+KCpjb252ZXJ0ZWRFbGVtZW50KTsKICAgICBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1M
T3B0R3JvdXBFbGVtZW50Pihjb252ZXJ0ZWRFbGVtZW50KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA4LTE5ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0
ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUhUTUxTZWxl
Y3RFbGVtZW50IGFkZDpiZWZvcmU6XSk6CisKIDIwMTctMDgtMTcgIERvbiBPbG1zdGVhZCAgPGRv
bi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbUEFMXSBSZWxvY2F0ZSBTZXNzaW9uSUQg
dG8gcm9vdApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RF
bGVtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01I
VE1MU2VsZWN0RWxlbWVudC5tbQkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODUsNyArMTg1LDcgQEAgLSAodm9pZClhZGQ6KERPTUhUTUxFbGVtZW50ICopZWxlbWVudCBiZQog
ICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlvbigpOwogCiAgICAgYXV0byYgY29yZUVsZW1l
bnQgPSAqY29yZShlbGVtZW50KTsKLSAgICBWYXJpYW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0
aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFu
dEVsZW1lbnQ7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1l
bnQ7CiAgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Pihjb3JlRWxlbWVudCkp
CiAgICAgICAgIHZhcmlhbnRFbGVtZW50ID0gJmRvd25jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50Pihjb3JlRWxlbWVudCk7CiAgICAgZWxzZSBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudD4oY29yZUVsZW1lbnQpKQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDgtMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJp
YW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6VEVTVCk6CisKIDIwMTctMDgtMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBs
ZS5jb20+CiAKICAgICAgICAgW2lPUyBXSzJdIEFkZCBhIHZlcnNpb24gb2YgRGF0YUludGVyYWN0
aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VBdHRyaWJ1dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUg
dGhhdCBkb2Vzbid0IGhpdCBhIGRlYnVnIGFzc2VydGlvbgpJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywz
NyArMzcsMzcgQEAgbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBURVNUKFdURl9WYXJpYW50
LCBJbml0aWFsKQogewotICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOworICAgIHN0ZDo6dmFy
aWFudDxpbnQsIGRvdWJsZT4gdjE7CiAgICAgRVhQRUNUX1RSVUUodjEuaW5kZXgoKSA9PSAwKTsK
LSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYxKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmdldDxpbnQ+KHYxKSA9PSAwKTsKIAogICAgIHN0cnVjdCBUIHsKICAgICAgICAgVCgp
IDogdmFsdWUoMTUpIHsgfQogICAgICAgICBpbnQgdmFsdWU7CiAgICAgfTsKIAotICAgIFZhcmlh
bnQ8VCwgaW50PiB2MjsKKyAgICBzdGQ6OnZhcmlhbnQ8VCwgaW50PiB2MjsKICAgICBFWFBFQ1Rf
VFJVRSh2Mi5pbmRleCgpID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PFQ+KHYyKS52
YWx1ZSA9PSAxNSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8VD4odjIpLnZhbHVlID09IDE1
KTsKIH0KIAogVEVTVChXVEZfVmFyaWFudCwgQmFzaWMpCiB7Ci0gICAgVmFyaWFudDxpbnQsIGRv
dWJsZT4gdmFyaWFudCA9IDE7CisgICAgc3RkOjp2YXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50
ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50LmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNU
X1RSVUUoV1RGOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqV1RG
OjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9p
Zjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVDVF9UUlVFKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpn
ZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpnZXRfaWY8aW50
PigmdmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXRfaWY8ZG91YmxlPigm
dmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKIAogICAgIHZhcmlhbnQgPSAxLjA7CiAgICAgRVhQRUNU
X1RSVUUodmFyaWFudC5pbmRleCgpID09IDEpOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRv
dWJsZT4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGRvdWJs
ZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9pZjxpbnQ+KHZh
cmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8ZG91YmxlPih2YXJpYW50KSk7Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8ZG91YmxlPih2
YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJVRSgqc3RkOjpnZXRfaWY8ZG91YmxlPigmdmFy
aWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldF9pZjxpbnQ+KCZ2YXJpYW50
KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRv
dWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9GQUxTRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdURl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCkBA
IC05NCwxOCArOTQsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAg
VHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAgIFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5n
PiB2YXJpYW50ID0gODsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwor
ICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0
ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6
SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gMS4wZjsKLSAgICBXVEY6OnZpc2l0KFZp
c2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFy
aWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZh
cmlhbnQgPSAiaGVsbG8iOwotICAgIFdURjo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7
CisgICAgc3RkOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJV
RShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAKQEAgLTEyNywxMiArMTI3LDEyIEBAIFRFU1Qo
V1RGX1ZhcmlhbnQsIFJldGFpblB0cikKICAgICAKICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQ
dHI7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcmV0YWluUHRyOwotICAgIFZhcmlhbnQ8UmVm
UHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVm
UHRyKSk7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1v
dmUocmVmUHRyKSk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBF
Q1RfVFJVRShUeXBlOjpSZWZQdHIgPT0gdHlwZSk7CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1v
dmUocmV0YWluUHRyKTsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0
ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWlu
UHRyID09IHR5cGUpOwogfQogI2VuZGlmCkBAIC0xNTQsMTggKzE1NCwxOCBAQCBURVNUKFdURl9W
YXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvCiAgICAgICAgIFsmXShTdHJpbmcpIHsgdHlw
ZSA9IFR5cGU6OlN0cmluZzsgfQogICAgICk7CiAKLSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0
cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAg
ICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6
OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0
eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2
YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9U
UlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAg
ICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBA
IC0xODAsNyArMTgwLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nU3dpdGNoT24p
CiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25lOwogCi0gICAgVmFyaWFudDxpbnQsIGZsb2F0
LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJp
bmc+IHZhcmlhbnQgPSA4OwogICAgIHR5cGUgPSBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCiAgICAg
ICAgIFtdKGludCkgeyByZXR1cm4gVHlwZTo6SW50OyB9LAogICAgICAgICBbXShmbG9hdCkgeyBy
ZXR1cm4gVHlwZTo6RmxvYXQ7IH0sCkBAIC0yMTMsNyArMjEzLDcgQEAgVEVTVChXVEZfVmFyaWFu
dCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogCiAgICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0
ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAg
ICAgICAgVmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRl
cj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PHN0
ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RG
TW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAgIEVYUEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0
cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUs
IENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMjI4
LDcgKzIyOCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJlZlB0cikKICAgICB7CiAgICAgICAgIFJl
ZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAg
ICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IHJlZjsKKyAgICAgICAgc3Rk
Ojp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAg
QVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRlcmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dT
dHIoKS5jX3N0cigpKTsKQEAgLTIzNiw3ICsyMzYsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQ
dHIpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVm
TG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+
IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2Vy
PiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVm
KGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTI0Nyw3ICsyNDcsNyBA
QCBURVNUKFdURl9WYXJpYW50LCBSZWYpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIp
OwogICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYoYSk7Ci0gICAgICAgIFZhcmlhbnQ8UmVmPFJl
ZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJl
ZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJU
X1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFrZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMjY1
LDExICsyNjUsMTEgQEAgcHVibGljOgogCiBURVNUKFdURl9WYXJpYW50LCBPcGVyYXRvckFtcGVy
c2FuZCkKIHsKLSAgICBWYXJpYW50PEhvbGRlcjxpbnQ+LCBpbnQ+IHYgPSBIb2xkZXI8aW50Pigx
MCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8SG9sZGVyPGludD4+KHYpLmRhdGEgPT0gMTAp
OworICAgIHN0ZDo6dmFyaWFudDxIb2xkZXI8aW50PiwgaW50PiB2ID0gSG9sZGVyPGludD4oMTAp
OworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PEhvbGRlcjxpbnQ+Pih2KS5kYXRhID09IDEwKTsK
IAogICAgIHYgPSAyMDsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+KHYpID09IDIwKTsK
KyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYpID09IDIwKTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318596</attachid>
            <date>2017-08-19 21:59:27 -0700</date>
            <delta_ts>2017-08-19 22:21:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170819215926.patch</filename>
            <type>text/plain</type>
            <size>370113</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTggIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCAzMi1iaXQgTWFjcm9Bc3NlbWJsZXI6OnByb2Jl
IHN1cHBvcnQgZm9yIFdpbmRvd3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwNzcsNyArODA3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5v
ZGUKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBjYWxsIGZ1bmN0aW9u
cyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFyaWFudDxTcGVjdWxh
dGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+
IG9wZXJhbmRzOworICAgIFZlY3RvcjxzdGQ6OnZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQs
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBKU0NfRE9N
SklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKICAg
ICBWZWN0b3I8R1BSUmVnLCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xV
RElOR19USElTPiByZWdzOwogCiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZdKEVkZ2UmIGVkZ2Up
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4OCw3ICszODg4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQoU3BlY3VsYXRlQ2VsbE9wZXJhbmQmJiBvdGhlcikKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZChTcGVjdWxhdGVDZWxsT3BlcmFuZCYmIG90aGVyKQogICAgIHsKICAgICAgICAgbV9q
aXQgPSBvdGhlci5tX2ppdDsKICAgICAgICAgbV9lZGdlID0gb3RoZXIubV9lZGdlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwyMSArNzIsMjEgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzR1BSKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVn
PihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQp
OwogICAgIH0KICAgICBGUFJSZWcgZnByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0ZQUigpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKICAgICB9CiAgICAgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSlNW
YWx1ZVJlZ3MoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJp
YW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBWYXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVn
cz4gbV92YXJpYW50OworICAgIHN0ZDo6dmFyaWFudDxHUFJSZWcsIEZQUlJlZywgSlNWYWx1ZVJl
Z3M+IG1fdmFyaWFudDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNy0w
OC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJl
dHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSW5QbGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvT3B0aW9uYWwuaDoKKyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICAobXBhcms6
OmxpYjo6Y3BwMTQ6OmFycmF5OjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKG1wYXJrOjps
aWI6OmNwcDE3OjpkZXRhaWw6Omludm9rZV9yZXN1bHQ8dm9pZF90PGRlY2x0eXBlKToKKyAgICAg
ICAgKG1wYXJrOjpsaWI6OmNwcDE3OjphZGRyZXNzb2YpOgorICAgICAgICAobXBhcms6OmxpYjo6
Y3BwMTc6OmRldGFpbDo6aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsKToKKyAgICAgICAgKG1wYXJr
OjpsaWI6OmNwcDE3OjpkZXRhaWw6OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjp0
eXBlX3BhY2tfZWxlbWVudF9pbXBsOjpkZWNsdHlwZSk6CisgICAgICAgIChzdGQ6OnRocm93X2Jh
ZF92YXJpYW50X2FjY2Vzcyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWxsKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjpmaW5kX2luZGV4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpmaW5kX2lu
ZGV4X2ltcGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnRyYWl0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpjb21tb25fdHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFp
dF9pbXBsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6
Z2V0X2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWNjZXNzOjpyZWN1cnNpdmVfdW5pb246
OmdldF9hbHRfaW1wbDo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
OjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OmJhc2U6OkFVVE9fUkVGUkVGX1JFVFVSTik6CisgICAgICAg
IChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6YXQpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6OnZpc2l0YXRpb246OmJhc2U6OnZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2spOgor
ICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZkaWFnb25hbCk6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2ltcGwp
OgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6Om1ha2VfZm1hdHJpeCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2lt
cGw6OmltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXM6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50Ojp2YWx1ZV92aXNpdG9yOjpE
RUNMVFlQRV9BVVRPX1JFVFVSTik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFsdDo6YWx0KToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTik6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6YmFzZTo6YmFzZSk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
YmFzZTo6aW5kZXhfKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjphc19iYXNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjpkYXRhKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpzaXplKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0RFU1RSVUNU
T1IpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2Fs
dCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29uc3RydWN0b3I6OmdlbmVyaWNfY29uc3RydWN0
KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1Ip
OgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6ZW1wbGFjZSk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6YXNzaWdubWVudDo6YXNzaWduZXI6Om9wZXJhdG9yKCkgY29uc3QpOgorICAg
ICAgICAoc3RkOjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmFzc2lnbl9hbHQpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmdlbmVyaWNfYXNzaWduKToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
OmltcGw6OmFzc2lnbik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcHBlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6bW92ZV9ub3Rocm93IGNvbnN0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjpvdmVybG9hZDw+OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6
dmFyaWFudDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjp2YXJpYW50OjplbXBsYWNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpnZW5lcmljX2dldF9pbXBsOjpnZW5lcmljX2dldF9pbXBsKToK
KyAgICAgICAgKHN0ZDo6Z2V0KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChzdGQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjwpOgorICAgICAgICAo
c3RkOjpvcGVyYXRvcj4pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKHN0
ZDo6b3BlcmF0b3I+PSk6CisgICAgICAgIChzdGQ6Om5vZXhjZXB0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpoYXNoOjptZWV0c19yZXF1aXJlbWVudHMpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Omhhc2g6OmlzX2VuYWJsZWQpOgorICAgICAgICAoV1RGOjpzd2l0Y2hPbik6CisgICAgICAgIChX
VEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X190aHJvd19iYWRfdmFyaWFu
dF9hY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjo9KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0X3JyZWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpf
X3ZhcmlhbnRfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fY29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fc3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3Rv
cmFnZV93cmFwcGVyPF9UeXBlOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fdmFyaWFudF9iYXNlOjp+X192YXJpYW50X2Jhc2UpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19tb3ZlX2NvbnN0cnVjdF9mdW5j
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fZGVzdHJv
eV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19iYWNr
dXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9f
ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6On5fX2Jh
Y2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmFyaWFudDw+Ojpzd2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19OT0VYQ0VQVF8pOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX3ZhcmlhbnRfYWNjZXNzb3I6OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Omdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmdldF9pZik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ol9fdmlzaXRvcl90YWJsZTo6X190cmFtcG9saW5lX2Z1bmMpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp2aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYXJnX3NlbGVjdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdF9oZWxwZXIyOjpfX3Zpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9w
ZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj49KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9faGFzaF92aXNpdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHA6CisgICAgICAgIChXVEY6Om1hcE1vZGVU
b0JhY2tpbmdJdGVyYXRvcik6CisgICAgICAgICogd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1h
Yy5tbToKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKwogMjAxNy0w
OC0xOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIwOTM4LgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcg
QEAKIAkJN0FGRUM2QUUxRUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzRjcyMzkxRDc4ODExOTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBs
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJC
RjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
U09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUz
MjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgy
QjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVB
MDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNG
RiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5k
ZW50ZXIuaCAqLywKKwkJCQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICov
LAogCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0
b3IuaCAqLywKIAkJCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
Ki8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IGNsYXNzIHZhcmlhbnQ7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PiBjbGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTcz
LDUgKzczLDQgQEAgdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJ
bXBsOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11
c2luZyBXVEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0luUGxhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNz
dGRkZWY+CisKK25hbWVzcGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGlj
aXQgaW5fcGxhY2VfdCgpID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
ST4KKyAgc3RydWN0IGluX3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90
KCkgPSBkZWZhdWx0OyB9OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5f
cGxhY2VfdHlwZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9Owor
CisgIGNvbnN0ZXhwciBpbl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+IGNvbnN0ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4g
aW5fcGxhY2VfdHlwZXt9OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDE0ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1
dGlsaXR5PgotIyBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJf
bGlzdD4KICMgaW5jbHVkZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRl
IDxpbml0aWFsaXplcl9saXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0
cmluZz4KKyMgaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGlu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBp
bmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
ICMgZGVmaW5lIFRSMl9PUFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPF9fVkFfQVJHU19fOjp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4
NCw4IEBAIGNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAy
MC41LjYsIEluLXBsYWNlIGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90
e30gaW5fcGxhY2V7fTsKLQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxh
Y2V7fTsKKy8vIGluX3BsYWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNv
IGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5n
YWdlZCBzdGF0ZSBpbmRpY2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMDc5ICsxLDIzMzcgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0
d2FyZSBTb2x1dGlvbnMgTHRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFy
aWFudAogLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3IKLS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlCi0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29w
eXJpZ2h0IE1pY2hhZWwgUGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWlt
ZXIuCisvLyBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0
aCwgMjAwMwogLy8KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUg
c29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRo
aXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBk
aXN0cmlidXRlLAorLy8gZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisv
LyBkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
Ci0vLyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4KLS8vIHBlcm1pc3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNv
ZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3Zl
IGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciwKKy8vIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhl
IFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJl
IHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2Vu
ZXJhdGVkIGJ5CisvLyBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAot
Ly8gSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0vLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LAotLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
Ky8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQKKy8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVU
SU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJ
U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSCisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGll
ZCBmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3
ZmE3ODg2NDhmNzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBz
Oi8vZ2l0aHViLmNvbS9tcGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFy
aWFudC5ocHAgKGMyNmI4NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8v
IE1vZGlmaWVkIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisv
LyBNb2RpZmllZCB0byB1c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgs
IGFuZCBpbmNsdWRlIFdURjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoK
KyAgIHZhcmlhbnQgc3lub3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBj
bGFzcyB0ZW1wbGF0ZSB2YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xh
c3MgdmFyaWFudCB7CisgIHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMK
KyAgICBjb25zdGV4cHIgdmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFu
dChjb25zdCB2YXJpYW50Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBi
ZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBu
b2V4Y2VwdChzZWUgYmVsb3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBB
cmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5
cGVfdDxUPiwgaW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRl
IDxzaXplX3QgSSwgY2xhc3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFu
dChpbl9wbGFjZV9pbmRleF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVf
dCBJLCBjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJp
YW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBB
cmdzJiYuLi4pOworCisgICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgp
OworCisgICAgLy8gMjAuNy4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgdmFyaWFudCYpOworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhj
ZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0
b3I9KFQmJikgbm9leGNlcHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmll
cnMKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNl
KEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4g
QXJncz4KKyAgICBUJiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCB2YXJpYW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0
aXZlPEksIHZhcmlhbnQ+JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7
CisKKyAgICAvLyAyMC43LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXpl
X3QgaW5kZXgoKSBjb25zdCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAg
dm9pZCBzd2FwKHZhcmlhbnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIw
LjcuMywgdmFyaWFudCBoZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IHZhcmlhbnRfc2l6ZTsgLy8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNv
bnN0ZXhwciBzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOwor
CisgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisK
KyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlh
bnQ8VHlwZXMuLi4+PjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEks
IGNsYXNzIFQ+CisgIHVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGls
ZSBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5
cGVzLi4uPj47CisKKyAgY29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAv
LyAyMC43LjQsIHZhbHVlIGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBl
cz4KKyAgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4u
Pj4mCisgIGdldCh2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBs
YXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBj
b25zdCYmCisgIGdldChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MuLi4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgVCYmIGdldCh2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+Cisg
IGNvbnN0ZXhwciBjb25zdCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisg
IHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9p
bnRlcl90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdl
dF9pZih2YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3Qg
SSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlh
bnQ8VHlwZXMuLi4+Kikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4u
IFR5cGVzPgorICBjb25zdGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29u
c3QgdmFyaWFudDxUeXBlcy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9u
YWwgb3BlcmF0b3JzCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMu
Li4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4oY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiYpOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+
Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4m
KTsKKworICAvLyAyMC43LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3Is
IGNsYXNzLi4uIFZhcmlhbnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3Im
JiwgVmFyaWFudHMmJi4uLik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3Ry
dWN0IG1vbm9zdGF0ZTsKKworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJh
dG9ycworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUp
IG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0
YXRlKSBub2V4Y2VwdDsKKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1v
bm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRl
LCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9z
dGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFs
Z29yaXRobXMKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFu
dDxUeXBlcy4uLj4mLCB2YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisK
KyAgLy8gMjAuNy4xMCwgY2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJp
YW50X2FjY2VzczsKKworICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBoYXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBo
YXNoPHZhcmlhbnQ8VHlwZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0
YXRlPjsKKworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgor
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxp
bWl0cy5oPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+
Ci0jaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0
aWxpdHk+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGls
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4
MTQpCisKKy8vIE1TVkMgMjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wg
JiYgKCFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vy
cm9yICJNUGFyay5WYXJpYW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNp
ZiAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hh
c19idWlsdGluCisjZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXVEYgeworI2lmbmRlZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkg
MAorI2VuZGlmCiAKLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBf
X1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5l
IF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5v
ZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19l
eGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwot
I2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19i
dWlsdGluKF9fYnVpbHRpbl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykg
JiYgX19HTlVDX18gPj0gNykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJ
TFRJTl9BRERSRVNTT0YKICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFz
X2J1aWx0aW4oX190eXBlX3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VM
RU1FTlQKKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVl
X2hvbGRlcjsKLX07CisjaWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0
ZXhwciA+PSAyMDEzMDQKKyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAor
I2lmIF9faGFzX2ZlYXR1cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0
aW9ucykKKyNkZWZpbmUgTVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFj
ZV90YWcgewotICAgIGluX3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9f
Y3BwX2dlbmVyaWNfbGFtYmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktf
R0VORVJJQ19MQU1CREFTCisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3Rh
ZygmKShfX2luX3BsYWNlX3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2Vy
X3NlcXVlbmNlKQorI2RlZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFn
KCYpKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZp
bmVkKF9fY3BwX3JldHVybl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNp
emVfdCBfSW5kZXg+Ci11c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9f
aW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQo
X19jcHBfbGliX3RyYW5zcGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFn
IGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFi
bGVfdGVtcGxhdGVzKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJM
RV9URU1QTEFURVMKKyNlbmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90
YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7
Ci0gICAgX19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFk
ZWZpbmVkKF9fR0xJQkNYWF9fKQorI2RlZmluZSBNUEFSS19UUklWSUFMSVRZX1RZUEVfVFJBSVRT
CisjZWxpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPGNvZGVjdnQ+
KSAgLy8gPj0gbGlic3RkYysrLTUKKyNkZWZpbmUgTVBBUktfVFJJVklBTElUWV9UWVBFX1RSQUlU
UworI2VuZGlmCiAKLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4PgotaW5fcGxhY2VfdGFnIGluX3Bs
YWNlKF9faW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiAmKSB7Ci0gICAg
X19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQogCi1jbGFzcyBiYWRf
dmFyaWFudF9hY2Nlc3M6IHB1YmxpYyBzdGQ6OmxvZ2ljX2Vycm9yewotcHVibGljOgotICAgIGV4
cGxpY2l0IGJhZF92YXJpYW50X2FjY2Vzcyhjb25zdCBzdGQ6OnN0cmluZyYgd2hhdF9hcmcpOgot
ICAgICAgICBzdGQ6OmxvZ2ljX2Vycm9yKHdoYXRfYXJnKQotICAgIHt9Ci0gICAgZXhwbGljaXQg
YmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IGNoYXIqIHdoYXRfYXJnKToKLSAgICAgICAgc3RkOjps
b2dpY19lcnJvcih3aGF0X2FyZykKLSAgICB7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LU5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggaW5saW5lIFQgX190aHJvd19iYWRfdmFyaWFudF9hY2Nl
c3MoY29uc3QgY2hhciogd2hhdF9hcmcpewotICAgIF9fVEhST1dfRVhDRVBUSU9OKGJhZF92YXJp
YW50X2FjY2Vzcyh3aGF0X2FyZykpCi19CisvLyBOT1RFOiBzdGQ6OmluX3BsYWNlX3QgaW1wbGVt
ZW50YXRpb24gbW92ZWQgdG8gV1RGL0luUGxhY2UuaAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9p
bmRleF9oZWxwZXI7CisjZGVmaW5lIFJFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICBub2V4Y2VwdChub2V4Y2VwdChfX1ZBX0FSR1NfXykpIC0+
IGRlY2x0eXBlKF9fVkFfQVJHU19fKSB7IFwKKyAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworbmFtZXNwYWNlIG1wYXJr
IHsKKyAgbmFtZXNwYWNlIGxpYiB7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IGlkZW50aXR5IHsgdXNpbmcgdHlwZSA9IFQ7IH07CisKKyAgICBpbmxpbmUgbmFtZXNwYWNl
IGNwcDE0IHsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOPgorICAg
ICAgc3RydWN0IGFycmF5IHsKKyAgICAgICAgY29uc3RleHByIGNvbnN0IFQgJm9wZXJhdG9yW10o
c3RkOjpzaXplX3QgaW5kZXgpIGNvbnN0IHsKKyAgICAgICAgICByZXR1cm4gZGF0YVtpbmRleF07
CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRleF9o
ZWxwZXI8X09mZnNldCxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0
KzEsX1R5cGUsX1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9P
ZmZzZXQsdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fdHlwZV9p
bmRleF9oZWxwZXI8X09mZnNldCxfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT1fT2Zmc2V0OwotfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXh7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgX190eXBlX2luZGV4
X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2luZGV4ZWRfdHlwZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2luZGV4ZWRfdHlwZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB2b2lk
IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9faW5kZXhlZF90eXBlPF9JbmRleCxfSGVhZCxf
UmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLl9UeXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNp
emVvZi4uLihfVHlwZXMpLTEpKT8tMTpfSW5kZXgrMTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IC4uLiBfVHlwZXM+Ci1jbGFzcyBWYXJpYW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZT4KLXN0cnVj
dCB2YXJpYW50X3NpemU7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJp
YW50X3NpemU8Y29uc3QgX1R5cGU+IDogdmFyaWFudF9zaXplPF9UeXBlPiB7fTsKLQotdGVtcGxh
dGUgPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4g
OiB2YXJpYW50X3NpemU8X1R5cGU+IHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+Ci1z
dHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZvbGF0aWxlIF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxf
VHlwZT4ge307Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZS4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFu
dF9zaXplPFZhcmlhbnQ8X1R5cGVzLi4uPj4KLSAgICA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8
c2l6ZV90LCBzaXplb2YuLi4oX1R5cGVzKT4ge307Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTsKLQotdGVtcGxhdGU8
c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7Ci0KLXRl
bXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2Fs
dGVybmF0aXZlPF9JbmRleCwgY29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRf
Y29uc3RfdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OwotCi10ZW1w
bGF0ZSA8c2l6ZV90IF9JbmRleCwgdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxfSW5kZXgsIHZvbGF0aWxlIF9UeXBlPnsKLSAgICB1c2luZyB0eXBlPXN0ZDo6YWRk
X3ZvbGF0aWxlX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PF9JbmRleCxfVHlwZT4+OwotfTsKLQot
dGVtcGxhdGUgPHNpemVfdCBfSW5kZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRf
YWx0ZXJuYXRpdmU8X0luZGV4LCB2b2xhdGlsZSBjb25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlw
ZT1zdGQ6OmFkZF92b2xhdGlsZV90PHN0ZDo6YWRkX2NvbnN0X3Q8dmFyaWFudF9hbHRlcm5hdGl2
ZV90PF9JbmRleCxfVHlwZT4+PjsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxWYXJpYW50
PF9UeXBlcy4uLj4+ewotICAgIHVzaW5nIHR5cGU9dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdHlwZTsKLX07Ci0KLWNvbnN0ZXhwciBzaXplX3QgdmFyaWFudF9u
cG9zPS0xOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
Y29uc3RleHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgX1R5cGUgY29uc3Qm
IGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYmIGdldChWYXJpYW50PF9U
eXBlcy4uLj4mJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgY29uc3QgX1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlw
ZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4
LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8
X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mJik7Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhw
ciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0
JiBnZXQoCi0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlIDxwdHJk
aWZmX3QgX0luZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5h
bWUgX19pbmRleGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJp
YW50PF9UeXBlcy4uLj4gY29uc3QgJiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZT4gZ2V0
X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25z
dD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwotCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRl
cl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdl
dF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYo
Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3I7Ci0K
LXRlbXBsYXRlPHNpemVfdCBfX2NvdW50LAotICAgICAgICAgYm9vbCBfX2xhcmdlcl90aGFuX2No
YXI9KF9fY291bnQ+U0NIQVJfTUFYKSwKLSAgICBib29sIF9fbGFyZ2VyX3RoYW5fc2hvcnQ9KF9f
Y291bnQ+U0hSVF9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9pbnQ9KF9fY291bnQ+SU5U
X01BWCk+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5cGV7Ci0gICAgdHlwZWRlZiBzaWduZWQg
Y2hhciBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX19jb3VudD4KLXN0cnVjdCBfX2Rp
c2NyaW1pbmF0b3JfdHlwZTxfX2NvdW50LHRydWUsZmFsc2UsZmFsc2U+ewotICAgIHR5cGVkZWYg
c2lnbmVkIHNob3J0IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3Ry
dWN0IF9fZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0
eXBlZGVmIGludCBfX3R5cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3Qg
X19kaXNjcmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRl
ZiBzaWduZWQgbG9uZyBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0
cnVjdCBfX3N0b3JlZF90eXBlewotICAgIHR5cGVkZWYgX1R5cGUgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yZWRfdHlwZTxfVHlwZSY+ewotICAg
IHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBib29sIF9fdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgot
c3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGU+IHsKLSAgICBzdGF0aWMg
Y29uc3RleHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgc3RkOjppc190cml2aWFsbHlfZGVzdHJ1
Y3RpYmxlPHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+Ojp2YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBf
X2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fYWxsX3RyaXZpYWxseV9kZXN0cnVj
dGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Rhcmdl
dCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0
aWJsZXsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25v
dGhyb3dfY29uc3RydWN0aWJsZTxfVGFyZ2V0LCBfQXJncy4uLj46OnZhbHVlOwotfTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19t
b3ZlX2NvbnN0cnVjdGlibGU8PiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9
dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfVHlwZT4gewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxl
PAotICAgICAgICB0eXBlbmFtZSBfX3N0b3JlZF90eXBlPF9UeXBlPjo6X190eXBlPjo6dmFsdWU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4uPiB7
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9SZXN0Li4uPjo6X192YWx1ZTsKLX07
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3Jh
Z2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8MCxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgX192YWx1ZT1fX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGli
bGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTwtMSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFk
LF9SZXN0Li4uPjo6X192YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9u
b3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0
YXRpYyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVf
Y29uc3RydWN0aWJsZTxfSGVhZD46Ol9fdmFsdWUgJiYKLSAgICAgICAgX19vdGhlcl9zdG9yYWdl
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9JbmRleC0xLF9SZXN0Li4uPjo6X192YWx1ZTsK
LX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9f
dmFsdWU9Ci0gICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0g
ICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlICYmCi0gICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVj
dCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBjb25zdCBi
b29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWly
ZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYW55
X2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkX2ltcGw8X0luZGV4LDAsX1R5cGVzLi4uPnsKLSAgICBz
dGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPWZhbHNlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1ZhcmlhbnQ+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVx
dWlyZWQ8VmFyaWFudDxfVHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192YWx1
ZT0KLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVvZi4u
LihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotdW5pb24gX192YXJpYW50X2RhdGE7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVjdCBfX3Zh
cmlhbnRfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAgVCBkYXRh
W04gPT0gMCA/IDEgOiBOXTsKKyAgICAgIH07CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBl
JiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0KLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4
cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1
cm4gX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dl
dF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9f
dmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07Cisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGFkZF9wb2ludGVyX3QgPSB0
eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcnsKLSAgICB0eXBlbmFtZSBzdGQ6OmFsaWdu
ZWRfc3RvcmFnZTxzaXplb2YoX1R5cGUpLGFsaWdub2YoX1R5cGUpPjo6dHlwZSBfX3N0b3JhZ2U7
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciB2b2lkIF9fY29uc3RydWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAg
ICBuZXcgKF9fcCkgX1R5cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyBjb21tb25fdHlw
ZV90ID0gdHlwZW5hbWUgc3RkOjpjb21tb25fdHlwZTxUcy4uLj46OnR5cGU7CiAKLSAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgX0R1bW15ID0gX1R5cGU+Ci0gICAgX19zdG9yYWdlX3dyYXBwZXIoCi0g
ICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZGVmYXVsdF9jb25zdHJ1Y3Rp
YmxlPF9EdW1teT46OnZhbHVlLAotICAgICAgICB2b2lkIChfX3N0b3JhZ2Vfd3JhcHBlcjo6Kiko
KT46OnR5cGUgPSBudWxscHRyKSB7Ci0gICAgICBfX2NvbnN0cnVjdCgmX19zdG9yYWdlKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0
eXBlbmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlOwogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9E
dW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFs
dWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxw
dHIpIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVuYW1l
IC4uLiBfQXJncz4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpmb3J3
YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8Ym9vbCBCLCB0eXBlbmFtZSBUID0gdm9pZD4KKyAgICAgIHVz
aW5nIGVuYWJsZV9pZl90ID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgVD46OnR5cGU7CiAK
LSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlwZSo+
KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBf
VHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxf
VHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0gICAg
fQotICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0gICAg
fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgcmVtb3ZlX2Nv
bnN0X3QgPSB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9jb25zdDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19zdG9yYWdlX3dyYXBwZXI8X1R5cGUmPnsKLSAgICBf
VHlwZSogX19zdG9yYWdlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBjb25z
dGV4cHIgX19zdG9yYWdlX3dyYXBwZXIoX0FyZyYgX19hcmcpOgotICAgICAgICBfX3N0b3JhZ2Uo
Jl9fYXJnKXt9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIHJlbW92
ZV9yZWZlcmVuY2VfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZTsK
IAotICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9
Ci0gICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1
cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
ICAgICBpbmxpbmUgY29uc3RleHByIFQgJiZmb3J3YXJkKHJlbW92ZV9yZWZlcmVuY2VfdDxUPiAm
dCkgbm9leGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAg
ICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlLGZhbHNlPnsKLSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9UeXBlPiBfX3R5
cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIg
VCAmJmZvcndhcmQocmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAg
ICBzdGF0aWNfYXNzZXJ0KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1
ZSIpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAg
cmV0dXJuIF9fdmFsLl9fZ2V0KCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUm
JiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9f
dmFsLl9fZ2V0KCkpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiBf
X2dldChfX3R5cGUgY29uc3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsLl9fZ2V0KCk7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKF9f
dHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3ZlKF9fdmFsLl9fZ2V0
KCkpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJiBfX3ZhbCl7Ci0g
ICAgICAgIF9fdmFsLl9fZGVzdHJveSgpOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgcmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYm
bW92ZShUICYmdCkgbm9leGNlcHQgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cmVtb3Zl
X3JlZmVyZW5jZV90PFQ+ICYmPih0KTsKKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmLF9fYj57Ci0gICAg
dHlwZWRlZiBfVHlwZSogX190eXBlOworI2lmZGVmIE1QQVJLX0lOVEVHRVJfU0VRVUVOQ0UKKyAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4uIElzPgorICAgICAgdXNpbmcgaW50ZWdlcl9z
ZXF1ZW5jZSA9IHN0ZDo6aW50ZWdlcl9zZXF1ZW5jZTxULCBJcy4uLj47CiAKLSAgICBzdGF0aWMg
Y29uc3RleHByIF9UeXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpf
X3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihfX3R5
cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuICpfX3ZhbDsKLSAgICB9Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVy
biAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0X3JyZWYo
X190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAg
IHN0YXRpYyB2b2lkIF9fZGVzdHJveShfX3R5cGUmKXt9Ci19OworICAgICAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90Li4uIElzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBzdGQ6OmluZGV4
X3NlcXVlbmNlPElzLi4uPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1z
dHJ1Y3QgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUq
IF9fdHlwZTsKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFr
ZV9pbmRleF9zZXF1ZW5jZSA9IHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxOPjsKIAotICAgIHN0
YXRpYyBjb25zdGV4cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgX1R5cGUmJiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBfVHlwZSYmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBf
VHlwZSYmIF9fZ2V0X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxfVHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rl
c3Ryb3koX190eXBlJil7fQotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAg
ICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlX2ZvciA9IHN0ZDo6aW5kZXhfc2VxdWVuY2VfZm9yPFRz
Li4uPjsKKyNlbHNlCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgVC4uLiBJcz4KKyAgICAg
IHN0cnVjdCBpbnRlZ2VyX3NlcXVlbmNlIHsKKyAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IFQ7
CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qgc2l6ZSgpIG5vZXhjZXB0IHsg
cmV0dXJuIHNpemVvZi4uLihJcyk7IH0KKyAgICAgIH07CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdC4uLiBJcz4KKyAgICAgIHVzaW5nIGluZGV4X3NlcXVlbmNlID0gaW50ZWdlcl9zZXF1
ZW5jZTxzdGQ6OnNpemVfdCwgSXMuLi4+OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhz
LCB0eXBlbmFtZSBSaHM+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ7
CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBMaHMsIHN0ZDo6c2l6ZV90Li4uIFJo
cz4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNhdDxpbmRleF9zZXF1ZW5j
ZTxMaHMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
X3NlcXVlbmNlPFJocy4uLj4+CisgICAgICAgICAgOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTxM
aHMuLi4sIChzaXplb2YuLi4oTGhzKSArIFJocykuLi4+PiB7fTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IE4+CisgICAgICBzdHJ1Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsOwor
CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHVzaW5nIG1ha2VfaW5kZXhf
c2VxdWVuY2UgPSB0eXBlbmFtZSBtYWtlX2luZGV4X3NlcXVlbmNlX2ltcGw8Tj46OnR5cGU7CisK
KyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhf
c2VxdWVuY2VfaW1wbAorICAgICAgICAgIDogbWFrZV9pbmRleF9zZXF1ZW5jZV9jb25jYXQ8bWFr
ZV9pbmRleF9zZXF1ZW5jZTxOIC8gMj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWtlX2luZGV4X3NlcXVlbmNlPE4gLSAoTiAvIDIpPj4ge307CiAKLXRlbXBsYXRl
PD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRh
KCl7fQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZT57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX3R5cGUg
X192YWw7Ci0gICAgc3RydWN0IF9fZHVtbXlfdHlwZXt9IF9fZHVtbXk7Ci0KLSAgICBjb25zdGV4
cHIgX192YXJpYW50X2RhdGEoKTpfX2R1bW15KCl7fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9BcmdzPgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90
PDA+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKHN0ZDo6Zm9yd2FyZDxfQXJn
cz4oX19hcmdzKS4uLil7fQorICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2lu
ZGV4X3NlcXVlbmNlX2ltcGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAot
ICAgIF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICAvKmNvbnN0
ZXhwciovIF9UeXBlJiYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAg
cmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAg
fQotICAgIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikg
Y29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9fZ2V0KF9f
dmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihpbl9w
bGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdl
PF9UeXBlPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGlu
X3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZT46Ol9f
ZGVzdHJveShfX3ZhbCk7Ci0gICAgfQotfTsKKyAgICAgIHRlbXBsYXRlIDw+CisgICAgICBzdHJ1
Y3QgbWFrZV9pbmRleF9zZXF1ZW5jZV9pbXBsPDE+IDogaWRlbnRpdHk8aW5kZXhfc2VxdWVuY2U8
MD4+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRh
PF9UeXBlJj57Ci0gICAgdHlwZW5hbWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X190eXBl
IF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15X3R5cGV7fSBfX2R1bW15OworICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lLi4uIFRzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gbWFr
ZV9pbmRleF9zZXF1ZW5jZTxzaXplb2YuLi4oVHMpPjsKKyNlbmRpZgogCi0gICAgY29uc3RleHBy
IF9fdmFyaWFudF9kYXRhKCk6X19kdW1teSgpe30KKyAgICAgIC8vIDxmdW5jdGlvbmFsPgorI2lm
ZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZXF1YWxfdG8gPSBz
dGQ6OmVxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0IGVxdWFsX3RvIHsKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29u
c3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAg
ICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA9PSBsaWI6OmZvcndhcmQ8UmhzPihy
aHMpKQorICAgICAgfTsKKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9Bcmdz
JiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fdmFsKCZzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJn
cykuLi4pe30KKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRPUlMKKyAgICAgIHVzaW5n
IG5vdF9lcXVhbF90byA9IHN0ZDo6bm90X2VxdWFsX3RvPD47CisjZWxzZQorICAgICAgc3RydWN0
IG5vdF9lcXVhbF90byB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMsIHR5cGVuYW1l
IFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCkoTGhzICYmbGhz
LCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxMaHM+KGxo
cykgIT0gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYKIAotICAgIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9U
eXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9CisjaWZkZWYgTVBB
UktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBsZXNzID0gc3RkOjpsZXNzPD47
CisjZWxzZQorICAgICAgc3RydWN0IGxlc3MgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
TGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRv
cigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAgICAgICAgIFJFVFVSTihsaWI6OmZv
cndhcmQ8TGhzPihsaHMpIDwgbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5k
aWYKIAotICAgIF9UeXBlJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0g
ICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYgX19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+
KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fZ2V0
X3JyZWYoX192YWwpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19kZXN0cm95
KF9fdmFsKTsKLSAgICB9Ci19OworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUwor
ICAgICAgdXNpbmcgZ3JlYXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UKKyAgICAgIHN0cnVj
dCBncmVhdGVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhz
PgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJo
cyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+
IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGUmJj57Ci0gICAgdHlwZW5h
bWUgX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fdHlwZSBfX3ZhbDsKLSAgICBzdHJ1Y3Qg
X19kdW1teV90eXBle30gX19kdW1teTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVOVF9PUEVSQVRP
UlMKKyAgICAgIHVzaW5nIGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsKKyNlbHNlCisg
ICAgICBzdHJ1Y3QgbGVzc19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBMaHMs
IHR5cGVuYW1lIFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9wZXJhdG9yKCko
TGhzICYmbGhzLCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2Fy
ZDxMaHM+KGxocykgPD0gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07CisjZW5kaWYK
IAotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisjaWZkZWYgTVBB
UktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBncmVhdGVyX2VxdWFsID0gc3Rk
OjpncmVhdGVyX2VxdWFsPD47CisjZWxzZQorICAgICAgc3RydWN0IGdyZWF0ZXJfZXF1YWwgewor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlu
bGluZSBjb25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25z
dAorICAgICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID49IGxpYjo6Zm9yd2Fy
ZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCisgICAgfSAgLy8gbmFtZXNwYWNlIGNwcDE0
CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQXJnPgotICAgIF9fdmFyaWFudF9kYXRhKGluX3Bs
YWNlX2luZGV4X3Q8MD4sX0FyZyYmIF9fYXJnKToKLSAgICAgICAgX192YWwoJl9fYXJnKXt9Cisg
ICAgaW5saW5lIG5hbWVzcGFjZSBjcHAxNyB7CiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46
Ol9fZ2V0KF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxh
Y2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxf
VHlwZSYmPjo6X19nZXQoX192YWwpOwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5f
cGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlw
ZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9f
Z2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Zh
cmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZv
aWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSYmPjo6X19kZXN0cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgLy8gPHR5
cGVfdHJhaXRzPgorICAgICAgdGVtcGxhdGUgPGJvb2wgQj4KKyAgICAgIHVzaW5nIGJvb2xfY29u
c3RhbnQgPSBzdGQ6OmludGVncmFsX2NvbnN0YW50PGJvb2wsIEI+OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTxfSGVh
ZCxfUmVzdC4uLj57Ci0gICAgX192YXJpYW50X2RhdGE8X0hlYWQ+IF9faGVhZDsKLSAgICBfX3Zh
cmlhbnRfZGF0YTxfUmVzdC4uLj4gX19yZXN0OwotCi0gICAgY29uc3RleHByIF9fdmFyaWFudF9k
YXRhKCk6Ci0gICAgICAgIF9faGVhZCgpe30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIC4uLiBf
QXJncz4KLSAgICBjb25zdGV4cHIgX192YXJpYW50X2RhdGEoaW5fcGxhY2VfaW5kZXhfdDwwPixf
QXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX2hlYWQoaW5fcGxhY2U8MD4sc3RkOjpmb3J3
YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9Ci0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBl
bmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2lu
ZGV4X3Q8X0luZGV4PixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3Jlc3QoaW5fcGxh
Y2U8X0luZGV4LTE+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uPgorICAgICAgc3RydWN0IHZvaWRlciA6IGlkZW50aXR5PHZvaWQ+
IHt9OwogCi0gICAgX0hlYWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBy
ZXR1cm4gX19oZWFkLl9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUuLi4gVHM+CisgICAgICB1c2luZyB2b2lkX3QgPSB0eXBlbmFtZSB2b2lkZXI8VHMu
Li4+Ojp0eXBlOwogCi0gICAgLypjb25zdGV4cHIqLyBfSGVhZCYmIF9fZ2V0X3JyZWYoaW5fcGxh
Y2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXRfcnJlZihpbl9wbGFj
ZTwwPik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYgX19nZXQoaW5f
cGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19nZXQoaW5f
cGxhY2U8MD4pOwotICAgIH0KKyAgICAgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgICAgICBuYW1l
c3BhY2Ugc3dhcHBhYmxlIHsKIAotICAgIGNvbnN0ZXhwciBjb25zdCBfSGVhZCYmIF9fZ2V0X3Jy
ZWYoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX2hlYWQuX19n
ZXRfcnJlZihpbl9wbGFjZTwwPik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHNpemVfdCBf
SW5kZXg+Ci0gICAgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEsX1Jlc3QuLi4+Ojpf
X3R5cGUmIF9fZ2V0KAotICAgICAgICBpbl9wbGFjZV9pbmRleF90PF9JbmRleD4pewotICAgICAg
ICByZXR1cm4gX19yZXN0Ll9fZ2V0KGluX3BsYWNlPF9JbmRleC0xPik7Ci0gICAgfQorICAgICAg
ICAgIHVzaW5nIHN0ZDo6c3dhcDsKIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAg
Lypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46
Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXgtMT4pOwot
ICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNvbnN0ZXhwciBj
b25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSYg
X19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7Ci0gICAgICAg
IHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9CisgICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgc3RydWN0IGlzX3N3YXBwYWJsZV9p
bXBsIHsKKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVSwKKyAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSA9IGRlY2x0eXBlKHN3YXAoc3Rk
OjpkZWNsdmFsPFUgJj4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpkZWNsdmFsPFUgJj4oKSkpPgorICAgICAgICAgICAgaW5saW5lIHN0YXRp
YyBzdGQ6OnRydWVfdHlwZSB0ZXN0KGludCk7CiAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4
PgotICAgIGNvbnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8
X0luZGV4PikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFj
ZTxfSW5kZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICAKLSAgICB2b2lkIF9fZGVzdHJveShpbl9w
bGFjZV9pbmRleF90PDA+KXsKLSAgICAgICAgX19oZWFkLl9fZGVzdHJveShpbl9wbGFjZTwwPik7
Ci0gICAgfQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXg+Ci0gICAgdm9pZCBfX2Rlc3Ryb3ko
aW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+KXsKLSAgICAgICAgX19yZXN0Ll9fZGVzdHJveShpbl9w
bGFjZTxfSW5kZXgtMT4pOwotICAgIH0KLX07CisgICAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4KKyAgICAgICAgICAgIGlubGluZSBzdGF0aWMgc3RkOjpmYWxzZV90eXBlIHRlc3QoLi4u
KTsKIAorICAgICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgdHlwZSA9IGRlY2x0
eXBlKHRlc3Q8VD4oMCkpOworICAgICAgICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdC4uLiBf
SW5kaWNlcz4KLXN0cnVjdCBfX2luZGV4X3NlcXVlbmNlewotICAgIHR5cGVkZWYgX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLixzaXplb2YuLi4oX0luZGljZXMpPiBfX25leHQ7Ci0gICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgX19sZW5ndGg9c2l6ZW9mLi4uKF9JbmRpY2VzKTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBfX3R5cGVfaW5kaWNlczw+ewotICAgIHR5cGVkZWYgX19pbmRl
eF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3Ry
dWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8
MD4gX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fdHlwZV9pbmRpY2VzPF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVm
IHR5cGVuYW1lIF9fdHlwZV9pbmRpY2VzPF9SZXN0Li4uPjo6X190eXBlOjpfX25leHQgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQ+Ci1zdHJ1Y3QgX192YXJpYW50X2lu
ZGljZXM7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192YXJpYW50
X2luZGljZXM8VmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV9pbmRpY2VzPF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFy
aWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rf
b3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0lu
ZGljZXM+Ci1zdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19mdW5j
X3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAg
ICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1w
bGF0ZSBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAgICAgICBzdGQ6Om1vdmUo
Z2V0PF9JbmRleD4oX19yaHMpKSk7Ci0gICAgfQorICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorICAgICAgICAgIHVzaW5nIGlzX3N3YXBwYWJsZSA9IHR5cGVuYW1lIGlzX3N3YXBwYWJs
ZV9pbXBsPFQ+Ojp0eXBlOwogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlb
c2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
LCBib29sID0gaXNfc3dhcHBhYmxlPFQ+Ojp2YWx1ZT4KKyAgICAgICAgICBzdHJ1Y3QgaXNfbm90
aHJvd19zd2FwcGFibGUgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVl
ID0KKyAgICAgICAgICAgICAgICBub2V4Y2VwdChzd2FwKHN0ZDo6ZGVjbHZhbDxUICY+KCksIHN0
ZDo6ZGVjbHZhbDxUICY+KCkpKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19tb3ZlX2Nv
bnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
OgotX19mdW5jX3R5cGUKLV9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fbW92ZV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIHN0cnVjdCBpc19u
b3Rocm93X3N3YXBwYWJsZTxULCBmYWxzZT4gOiBzdGQ6OmZhbHNlX3R5cGUge307CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5h
bWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19tb3ZlX2Fz
c2lnbl9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4u
LiBfSW5kaWNlcz4KLXN0cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgZ2V0PF9JbmRleD4o
Kl9fbGhzKT1zdGQ6Om1vdmUoZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9CisgICAgICAgIH0g
IC8vIG5hbWVzcGFjZSBzd2FwcGFibGUKKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAot
ICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyld
OwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfc3dhcHBh
YmxlID0gZGV0YWlsOjpzd2FwcGFibGU6OmlzX3N3YXBwYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9f
bW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4u
Lj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5k
ZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGlj
ZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgdXNpbmcgaXNfbm90aHJvd19zd2Fw
cGFibGUgPSBkZXRhaWw6OnN3YXBwYWJsZTo6aXNfbm90aHJvd19zd2FwcGFibGU8VD47CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlw
ZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5
X2NvbnN0cnVjdF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJp
YW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBj
b25zdCBfX2Z1bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAg
dGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3Ry
dWN0X2Z1bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhz
KXsKLSAgICAgICAgX19saHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigK
LSAgICAgICAgICAgIGdldDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQorICAgICAgLy8gPGZ1bmN0
aW9uYWw+CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3
YXJuaW5nKGRpc2FibGUgOiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RiwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKEYg
JiZmLCBBcyAmJi4uLiBhcykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPEY+KGYpKGxp
Yjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5n
KHBvcCkKKyNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBlIF9fYXBwbHlbc2l6
ZW9mLi4uKF9JbmRpY2VzKV07Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEIsIHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQg
Qjo6KnBtdiwgRCAmJmQpCisgICAgICAgICAgUkVUVVJOKGxpYjo6Zm9yd2FyZDxEPihkKS4qcG12
KQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgot
Y29uc3QgdHlwZW5hbWUgX19jb3B5X2NvbnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rf
b3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5
WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3Rf
ZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwg
dHlwZW5hbWUgUHRyPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12
LCBQdHIgJiZwdHIpCisgICAgICAgICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSku
KnBtdikKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fY29weV9hc3NpZ25fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9p
ZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQgY29uc3QmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fY29weV9h
c3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19y
aHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19saHMpPWdldDxfSW5kZXg+KF9fcmhzKTsKLSAg
ICB9CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRCwg
dHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFQgQjo6
KnBtZiwgRCAmJmQsIEFzICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigobGliOjpmb3J3YXJk
PEQ+KGQpLipwbWYpKGxpYjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotICAgIHN0YXRpYyBjb25z
dCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBQbWYsIHR5cGVuYW1lIFB0ciwgdHlwZW5hbWUuLi4gQXM+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIGF1dG8gaW52b2tlKFBtZiBwbWYsIFB0ciAmJnB0ciwgQXMgJiYu
Li4gYXMpCisgICAgICAgICAgUkVUVVJOKCgoKmxpYjo6Zm9yd2FyZDxQdHI+KHB0cikpLipwbWYp
KGxpYjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fY29weV9hc3NpZ25fb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190
eXBlCi1fX2NvcHlfYXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX2NvcHlfYXNzaWduX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAgIG5hbWVzcGFj
ZSBkZXRhaWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVu
YW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBl
Pgotc3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zh
cmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgq
IGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRp
ZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9W
YXJpYW50ICogX19zZWxmKXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAg
ICAgICAgIF9fc2VsZi0+X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKLSAg
ICAgICAgfQotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZvaWQsIHR5cGVuYW1l
LCB0eXBlbmFtZS4uLj4KKyAgICAgICAgc3RydWN0IGludm9rZV9yZXN1bHQge307CiAKLSAgICBz
dGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAg
ICBzdHJ1Y3QgaW52b2tlX3Jlc3VsdDx2b2lkX3Q8ZGVjbHR5cGUobGliOjppbnZva2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8Rj4oKSwgc3RkOjpkZWNs
dmFsPEFyZ3M+KCkuLi4pKT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+CisgICAgICAgICAgICA6IGlkZW50aXR5
PGRlY2x0eXBlKAorICAgICAgICAgICAgICAgICAgbGliOjppbnZva2Uoc3RkOjpkZWNsdmFsPEY+
KCksIHN0ZDo6ZGVjbHZhbDxBcmdzPigpLi4uKSk+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19kZXN0cm95
X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2Z1
bmNfdHlwZQotX19kZXN0cm95X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6X19hcHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAg
ICZfX2Rlc3Ryb3lfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgfSAgLy8gbmFtZXNw
YWNlIGRldGFpbAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVu
YW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBl
Pgotc3RydWN0IF9fc3dhcF9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0
IF9fZnVuY190eXBlKShfVmFyaWFudCYsX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxw
dHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fc3dhcF9mdW5jKAotICAgICAgICBf
VmFyaWFudCAmIF9fbGhzLF9WYXJpYW50ICYgX19yaHMpewotICAgICAgICBzd2FwKGdldDxfSW5k
ZXg+KF9fbGhzKSxnZXQ8X0luZGV4PihfX3JocykpOwotICAgIH0KKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9
IGRldGFpbDo6aW52b2tlX3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotICAgIHN0YXRpYyBj
b25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52
b2tlX3Jlc3VsdF90ID0gdHlwZW5hbWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsK
IAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNv
bnN0IHR5cGVuYW1lIF9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj46OgotX19mdW5jX3R5cGUKLV9fc3dhcF9vcF90YWJsZTxfVmFyaWFudCxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRp
Y2VzKV09ewotICAgICAgICAmX19zd2FwX2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICAg
IG5hbWVzcGFjZSBkZXRhaWwgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAg
ICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50
Pjo6X190eXBlPgotc3RydWN0IF9fZXF1YWxpdHlfb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9v
cF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdHlw
ZWRlZiBib29sKCogY29uc3QgX19jb21wYXJlX2Z1bmNfdHlwZSkoX1ZhcmlhbnQgY29uc3QmLF9W
YXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgY29uc3RleHByIGJvb2wgX19lcXVhbGl0eV9jb21wYXJlX2Z1bmMoCi0gICAgICAg
IF9WYXJpYW50IGNvbnN0JiBfX2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBy
ZXR1cm4gZ2V0PF9JbmRleD4oX19saHMpPT1nZXQ8X0luZGV4PihfX3Jocyk7Ci0gICAgfQorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAg
ICAgICBzdHJ1Y3QgaXNfaW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190eXBlIF9fZXF1YWxpdHlfY29tcGFyZVtzaXpl
b2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYzxfSW5k
aWNlcz4uLi4KLSAgICB9OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGU8dm9pZF90PGludm9rZV9y
ZXN1bHRfdDxGLCBBcmdzLi4uPj4sIEYsIEFyZ3MuLi4+CisgICAgICAgICAgICA6IHN0ZDo6dHJ1
ZV90eXBlIHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9f
ZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+
OjpfX2VxdWFsaXR5X2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5h
bWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3Ro
YW5fb3BfdGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4g
X0luZGljZXM+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9z
ZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFy
ZV9mdW5jX3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAg
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9f
bGVzc190aGFuX2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9W
YXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8
Z2V0PF9JbmRleD4oX19yaHMpOwotICAgIH0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZv
aWQsIHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpc19p
bnZvY2FibGVfciA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKIAotICAgIHN0YXRpYyBjb25zdGV4cHIg
X19jb21wYXJlX2Z1bmNfdHlwZSBfX2xlc3NfdGhhbl9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fbGVzc190aGFuX2NvbXBhcmVfZnVuYzxfSW5kaWNlcz4uLi4KLSAg
ICB9OwotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tl
X3Jlc3VsdF90PEYsIEFyZ3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJncy4uLj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZv
a2VfcmVzdWx0X3Q8RiwgQXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190
aGFuX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1f
X2NvbXBhcmVfZnVuY190eXBlCi1fX2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4
X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV07CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7CisgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIHVzaW5nIGlz
X2ludm9jYWJsZSA9IGRldGFpbDo6aXNfaW52b2NhYmxlPHZvaWQsIEYsIEFyZ3MuLi4+OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZCxib29sIF9fdHJpdmlhbF9kZXN0cnVjdG9yPgotc3Ry
dWN0IF9fdmFyaWFudF9iYXNlCi17Ci0gICAgfl9fdmFyaWFudF9iYXNlKCl7Ci0gICAgICAgIHN0
YXRpY19jYXN0PF9EZXJpdmVkKj4odGhpcyktPl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQotfTsK
KyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdz
PgorICAgICAgdXNpbmcgaXNfaW52b2NhYmxlX3IgPSBkZXRhaWw6OmlzX2ludm9jYWJsZV9yPHZv
aWQsIFIsIEYsIEFyZ3MuLi4+OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfRGVyaXZlZD4KLXN0cnVj
dCBfX3ZhcmlhbnRfYmFzZTxfRGVyaXZlZCx0cnVlPnsKLX07Ci0KLQotdGVtcGxhdGU8cHRyZGlm
Zl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1l
IF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfaW5kaWNlc19oZWxwZXI7
Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHB0cmRpZmZfdCAuLi4gX0luZGljZXMsCi0g
ICAgICAgICB0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxf
aW5kaWNlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
PiwKLSAgICBfVHlwZSxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2Fs
bF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4sX09mZnNldD4sX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUKLSAgICAgICAgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1
ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4u
LiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxf
aW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIF9PZmZzZXQrMSxfQ3VycmVudFNlcXVlbmNlLF9UeXBl
LF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zm
c2V0LHR5cGVuYW1lIF9DdXJyZW50U2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19h
bGxfaW5kaWNlc19oZWxwZXI8X09mZnNldCxfQ3VycmVudFNlcXVlbmNlLF9UeXBlPnsKLSAgICB0
eXBlZGVmIF9DdXJyZW50U2VxdWVuY2UgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzewotICAgIHR5
cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9z
ZXF1ZW5jZTw+LF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1NlcXVlbmNlcz4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzOwot
Ci10ZW1wbGF0ZTxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzMSxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
Mj4KLXN0cnVjdCBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgIF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMxLi4uPixfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMi4uLj4+ewotICAgIHR5cGVkZWYg
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4sX0luZGljZXMyLi4uPiBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0
IF9fY29tYmluZV9zZXF1ZW5jZXM8X1NlcXVlbmNlLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgIF9TZXF1ZW5jZSwKLSAgICAgICAg
dHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczxfUmVzdC4uLj46Ol9fdHlwZT46Ol9fdHlwZSBf
X3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2ZpcnN0
X2luZGV4OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0ZpcnN0SW5kZXgscHRyZGlmZl90IC4uLiBf
UmVzdD4KLXN0cnVjdCBfX2ZpcnN0X2luZGV4PF9faW5kZXhfc2VxdWVuY2U8X0ZpcnN0SW5kZXgs
X1Jlc3QuLi4+PnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9GaXJz
dEluZGV4OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJl
bnRTZXF1ZW5jZSwKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyOwotCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX09mZnNldCx0eXBlbmFtZSBfU2VxdWVuY2UsdHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3Qg
X19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgIF9PZmZzZXQsX1NlcXVlbmNlLF9U
eXBlPnsKLSAgICB0eXBlZGVmIF9TZXF1ZW5jZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxib29s
IF9BY2NlcHQscHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29yX2VtcHR5ewot
ICAgIHR5cGVkZWYgX19pbmRleF9zZXF1ZW5jZTw+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHB0
cmRpZmZfdCBfRW50cnk+Ci1zdHJ1Y3QgX19zZXF1ZW5jZV9vcl9lbXB0eTx0cnVlLF9FbnRyeT57
Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9FbnRyeT4gX190eXBlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSwKLSAgICAg
ICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0
cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAgX09mZnNldCxfQ3VycmVu
dFNlcXVlbmNlLF9UeXBlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmCi0gICAgdHlwZW5h
bWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEsCi0g
ICAgICAgIHR5cGVuYW1lIF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAgICAgICAgICBfQ3VycmVu
dFNlcXVlbmNlLAotICAgICAgICAgICAgdHlwZW5hbWUgX19zZXF1ZW5jZV9vcl9lbXB0eTwKLSAg
ICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8X0hlYWQsX1R5cGU+Ojp2YWx1ZSwK
LSAgICAgICAgICAgICAgICBfT2Zmc2V0Pjo6X190eXBlPjo6X190eXBlLAotICAgICAgICBfVHlw
ZSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXNfaGVscGVyPAotICAg
ICAgICAwLF9faW5kZXhfc2VxdWVuY2U8PixfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19h
bGxfaW5kaWNlczxfVHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX19kaXJlY3RfbWF0Y2hlczsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXM8Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX2NvbnN0PAotICAgICAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNl
PF9UeXBlPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZSxfVHlwZXMuLi4+OjpfX3R5cGUgX192
YWx1ZV9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAgICAg
ICAgX1R5cGUsCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PAotICAgICAgICAg
ICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfcmVmZXJlbmNlPF9UeXBlcz46OnR5cGUKLSAgICAgICAg
ICAgID46OnR5cGUuLi4+OjpfX3R5cGUgX19ycmVmX21hdGNoZXM7Ci0KLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29uc3RydWN0aWJsZV9tYXRjaGVzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZQot
ICAgIF9fY29uc3RydWN0aWJsZXM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoX19k
aXJlY3RfbWF0Y2hlczo6X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fdmFsdWVfbWF0Y2hlczo6
X19sZW5ndGg+MCkgfHwKLSAgICAgICAgKF9fcnJlZl9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAot
ICAgICAgICAoX19jb25zdHJ1Y3RpYmxlczo6X19sZW5ndGg9PTEpLAotICAgICAgICAiRm9yIGNv
bnZlcnNpb24gY29uc3RydWN0aW9uIG9mIHZhcmlhbnRzLCBleGFjdGx5IG9uZSB0eXBlIG11c3Qg
YmUgY29uc3RydWN0aWJsZSIpOwotICAgIAotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5l
X3NlcXVlbmNlczwKLSAgICAgICAgX19kaXJlY3RfbWF0Y2hlcyxfX3ZhbHVlX21hdGNoZXMsX19y
cmVmX21hdGNoZXMsCi0gICAgICAgIF9fY29uc3RydWN0aWJsZXM+OjpfX3R5cGUgX19hbGxfbWF0
Y2hlczsKLSAgICAKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVlPV9fZmly
c3RfaW5kZXg8X19hbGxfbWF0Y2hlcz46Ol9fdmFsdWU7Ci19OwotCi1zdHJ1Y3QgX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXJ7Ci0gICAgdGVtcGxhdGU8Ci0gICAgICAgIHB0cmRpZmZfdCBfSW5k
ZXgsCi0gICAgICAgIGJvb2wgX19jb25zdHJ1Y3RfZGlyZWN0bHksCi0gICAgICAgIGJvb2wgX19p
bmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAgICAgICAgYm9vbCBfX290aGVyX3R5cGVz
X2hhdmVfbm90aHJvd19tb3ZlPgotICAgIHN0cnVjdCBfX2hlbHBlcjsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVu
YW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgotICAgIHN0cnVjdCBfX29w
X3RhYmxlOwotfTsKLQotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICBib29s
IF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci1zdHJ1Y3QgX19yZXBsYWNlX2NvbnN0
cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSx0cnVlLF9fb3RoZXJfdHlw
ZXNfaGF2ZV9ub3Rocm93X21vdmU+ewotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFu
dCYgX192LF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX3R3b19z
dGFnZV9yZXBsYWNlPF9JbmRleD4oX19hcmdzLi4uKTsKLSAgICB9Ci19OworICAgICAgLy8gPG1l
bW9yeT4KKyNpZmRlZiBNUEFSS19CVUlMVElOX0FERFJFU1NPRgorICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsK
KyAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9hZGRyZXNzb2YoYXJnKTsKKyAgICAgIH0KKyNlbHNl
CisgICAgICBuYW1lc3BhY2UgZGV0YWlsIHsKIAotdGVtcGxhdGU8Ci0gICAgcHRyZGlmZl90IF9J
bmRleCwKLSAgICBib29sIF9faW5kZXhlZF90eXBlX2hhc19ub3Rocm93X21vdmUsCi0gICAgYm9v
bCBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPgotc3RydWN0IF9fcmVwbGFjZV9jb25z
dHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsdHJ1ZSxfX2luZGV4ZWRfdHlwZV9o
YXNfbm90aHJvd19tb3ZlLAotICAgIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+ewot
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAg
IHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2RpcmVjdF9yZXBsYWNlPF9JbmRleD4oc3RkOjpm
b3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAgICBuYW1lc3BhY2Ug
aGFzX2FkZHJlc3NvZl9pbXBsIHsKIAorICAgICAgICAgIHN0cnVjdCBmYWlsOwogCi10ZW1wbGF0
ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4Pgotc3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVs
cGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgsZmFsc2UsZmFsc2UsdHJ1ZT57CisgICAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgaW5saW5lIGZhaWwgb3BlcmF0b3ImKFQg
JiYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIHN0YXRpYyB2b2lkIF9fdHJhbXBvbGluZShfVmFyaWFudCYgX192LF9BcmdzJiYgLi4u
IF9fYXJncyl7Ci0gICAgICAgIF9fdi50ZW1wbGF0ZSBfX2xvY2FsX2JhY2t1cF9yZXBsYWNlPF9J
bmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci19OworICAgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgaW1wbCgpIHsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjppc19jbGFzczxUPjo6
dmFsdWUgfHwgc3RkOjppc191bmlvbjxUPjo6dmFsdWUpICYmCisgICAgICAgICAgICAgICAgICAg
IXN0ZDo6aXNfc2FtZTxkZWNsdHlwZSgmc3RkOjpkZWNsdmFsPFQgJj4oKSksIGZhaWw+Ojp2YWx1
ZTsKKyAgICAgICAgICB9CiAKLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1
Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxz
ZSxmYWxzZSxmYWxzZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFt
ZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3Ys
X0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxh
Y2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Cisg
ICAgICAgIH0gIC8vIG5hbWVzcGFjZSBoYXNfYWRkcmVzc29mX2ltcGwKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3JlcGxhY2Vf
Y29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9J
bmRpY2VzLi4uPj57Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19tb3ZlX2Z1bmNfdHlwZSko
X1ZhcmlhbnQqLF9WYXJpYW50Jik7Ci0gICAgdHlwZWRlZiB2b2lkKCogY29uc3QgX19jb3B5X2Z1
bmNfdHlwZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8
cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX21vdmVfYXNzaWduX2Z1bmMoCi0g
ICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQmIF9fcmhzKXsKLSAgICAgICAgX19saHMt
PnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihzdGQ6Om1vdmUoZ2V0PF9JbmRl
eD4oX19yaHMpKSk7Ci0gICAgICAgIF9fcmhzLl9fZGVzdHJveV9zZWxmKCk7Ci0gICAgfQorICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgdXNpbmcgaGFzX2FkZHJlc3NvZiA9
IGJvb2xfY29uc3RhbnQ8aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsPFQ+KCk+OwogCi0gICAgdGVt
cGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfYXNzaWduX2Z1
bmMoCi0gICAgICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAg
ICAgICAgX19saHMtPnRlbXBsYXRlIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PihnZXQ8X0lu
ZGV4PihfX3JocykpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY29uc3QgX19tb3ZlX2Z1bmNf
dHlwZSBfX21vdmVfYXNzaWduW3NpemVvZi4uLihfSW5kaWNlcyldOwotICAgIHN0YXRpYyBjb25z
dCBfX2NvcHlfZnVuY190eXBlIF9fY29weV9hc3NpZ25bc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgot
Y29uc3QgdHlwZW5hbWUgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0g
ICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfZnVuY190
eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFu
dCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fbW92ZV9hc3NpZ25bCi0gICAgc2l6
ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2Fzc2lnbl9mdW5jPF9JbmRpY2Vz
Pi4uLgotICAgIH07CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6dHJ1ZV90eXBlKSB7CisgICAg
ICAgICAgcmV0dXJuIHN0ZDo6YWRkcmVzc29mKGFyZyk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1l
IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPAotICAgIF9WYXJpYW50LF9f
aW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19jb3B5X2Z1bmNfdHlwZQotX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfYXNzaWduWwotICAgIHNpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fY29weV9hc3NpZ25fZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9Owor
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBU
ICphZGRyZXNzb2YoVCAmYXJnLCBzdGQ6OmZhbHNlX3R5cGUpIHsKKyAgICAgICAgICByZXR1cm4g
JmFyZzsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBf
TWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3Bz
ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1N0b3Jh
Z2UgKiBfX2Rlc3QsX1N0b3JhZ2UmIF9fc291cmNlKXsKLSAgICAgICAgbmV3KF9fZGVzdCkgX1N0
b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTxfSW5kZXg+LAotICAgICAgICAgICAgc3RkOjpt
b3ZlKF9fc291cmNlLl9fZ2V0KGluX3BsYWNlPF9JbmRleD4pKSk7Ci0gICAgfQotICAgIHN0YXRp
YyB2b2lkIF9fZGVzdHJveV9mdW5jKF9TdG9yYWdlICogX19vYmopewotICAgICAgICBfX29iai0+
X19kZXN0cm95KGluX3BsYWNlPF9JbmRleD4pOwotICAgIH07Ci19OworICAgICAgfSAgLy8gbmFt
ZXNwYWNlIGRldGFpbAogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9TdG9y
YWdlPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BzPF9JbmRleCxfSW5kZXgsX1N0b3JhZ2U+
ewotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9jb25zdHJ1Y3RfZnVuYyhfU3RvcmFnZSAqLF9TdG9y
YWdlJil7Ci0gICAgICAgIF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAg
IH07Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKil7Ci0gICAgICAg
IF9fVEhST1dfRVhDRVBUSU9OKHN0ZDo6YmFkX2FsbG9jKCkpOwotICAgIH07Ci19OworICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3Nv
ZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJuIGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWls
OjpoYXNfYWRkcmVzc29mPFQ+e30pOworICAgICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRp
ZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHR5cGVuYW1lIF9JbmRpY2VzPgotc3Ry
dWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVs
ZXRlOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0eXBlbmFtZSBfU3RvcmFnZSxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8
Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+
Ci17Ci0gICAgdHlwZWRlZiB2b2lkICgqX19tb3ZlX2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX2Rl
c3QsX1N0b3JhZ2UmIF9fc291cmNlKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpfX2Rlc3Ryb3lfZnVu
Y190eXBlKShfU3RvcmFnZSAqIF9fb2JqKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4PgotICAgIHN0cnVjdCBfX2hlbHBlcnsKLSAgICAgICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9y
YWdlX29wczxfSW5kZXgsX01hc2tJbmRleCxfU3RvcmFnZT4gX19vcHM7Ci0gICAgfTsKKyAgICB9
ICAvLyBuYW1lc3BhY2UgY3BwMTcKIAotICAgIHN0YXRpYyBjb25zdCBfX21vdmVfZnVuY190eXBl
IF9fbW92ZV9vcHNbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0gICAgc3RhdGljIGNvbnN0IF9fZGVz
dHJveV9mdW5jX3R5cGUgX19kZXN0cm95X29wc1tzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0K
LXRlbXBsYXRlPHB0cmRpZmZfdCBfTWFza0luZGV4LHR5cGVuYW1lIF9TdG9yYWdlLHB0cmRpZmZf
dCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxl
PAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4g
Pjo6X19tb3ZlX2Z1bmNfdHlwZQotX19iYWNrdXBfc3RvcmFnZV9vcF90YWJsZTwKLSAgICBfTWFz
a0luZGV4LF9TdG9yYWdlLF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+ID46Ol9fbW92ZV9v
cHNbCi0gICAgICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9faGVscGVyPF9J
bmRpY2VzPjo6X19vcHM6Ol9fbW92ZV9jb25zdHJ1Y3RfZnVuYy4uLgotICAgIH07CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50
aXR5PFQ+IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4+Cisg
ICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50czxhcnJheTxULCBOPj4gOiByZW1vdmVfYWxsX2V4
dGVudHM8VD4ge307CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1v
dmVfYWxsX2V4dGVudHNfdCA9IHR5cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsK
KworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgIHVzaW5nIHNpemVfY29uc3RhbnQg
PSBzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPjsKIAotdGVtcGxhdGU8cHRy
ZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJ
bmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX2Rlc3Ryb3lf
ZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0
b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6X19kZXN0cm95X29wc1sKLSAg
ICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hlbHBlcjxfSW5kaWNlcz46Ol9f
b3BzOjpfX2Rlc3Ryb3lfZnVuYy4uLgorICAgIHRlbXBsYXRlIDxib29sLi4uIEJzPgorICAgIHVz
aW5nIGJvb2xfc2VxdWVuY2UgPSBpbnRlZ2VyX3NlcXVlbmNlPGJvb2wsIEJzLi4uPjsKKworICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpbmRleGVk
X3R5cGUgOiBzaXplX2NvbnN0YW50PEk+LCBpZGVudGl0eTxUPiB7fTsKKworICAgIHRlbXBsYXRl
IDxib29sLi4uIEJzPgorICAgIHVzaW5nIGFsbCA9CisgICAgICAgIHN0ZDo6aXNfc2FtZTxib29s
X3NlcXVlbmNlPHRydWUsIEJzLi4uPiwgYm9vbF9zZXF1ZW5jZTxCcy4uLiwgdHJ1ZT4+OworCisj
aWZkZWYgTVBBUktfVFlQRV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
SSwgdHlwZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlw
ZV9wYWNrX2VsZW1lbnQ8SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXpl
X3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwg
eworICAgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVj
dCBzZXQ7CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVj
dCBzZXQ8aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9
OworCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBzdGF0aWMgc3Rk
OjplbmFibGVfaWY8dHJ1ZSwgVD4gaW1wbChpbmRleGVkX3R5cGU8SSwgVD4pOworCisgICAgICBp
bmxpbmUgc3RhdGljIHN0ZDo6ZW5hYmxlX2lmPGZhbHNlPiBpbXBsKC4uLik7CisKKyAgICAgIHB1
YmxpYzoKKyAgICAgIHVzaW5nIHR5cGUgPSBkZWNsdHlwZShpbXBsKHNldDxpbmRleF9zZXF1ZW5j
ZV9mb3I8VHMuLi4+Pnt9KSk7CiAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRl
ZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMuLi4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRl
ZiBfX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5
cGUsdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3Bf
dGFibGVfdHlwZTsKLQotICAgIHB0cmRpZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3Jh
Z2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0K
LSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90
eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgotICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5k
ZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xpdmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1
cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19i
YWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7
Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5k
ZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsKLSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0g
ICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhd
KAotICAgICAgICAgICAgICAgICZfX2JhY2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0x
OwotICAgIH0KLSAgICAKLSAgICB+X19iYWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2Jh
Y2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNb
X19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1
cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3koKTsKLSAgICAgICAgfQotICAgIH0KLX07CisgICAg
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIHR5cGVf
cGFja19lbGVtZW50ID0gdHlwZW5hbWUgdHlwZV9wYWNrX2VsZW1lbnRfaW1wbDxJLCBUcy4uLj46
OnR5cGU7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92
ZV9jb25zdHJ1Y3RpYmxlOworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4u
LiBUcz4KKyAgICB1c2luZyB0eXBlX3BhY2tfZWxlbWVudF90ID0gdHlwZW5hbWUgdHlwZV9wYWNr
X2VsZW1lbnQ8SSwgVHMuLi4+Ojp0eXBlOworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8
X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6
aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19OworI2lmZGVmIE1QQVJLX1RSSVZJQUxJVFlfVFlQ
RV9UUkFJVFMKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBpc190cml2aWFs
bHlfY29weV9jb25zdHJ1Y3RpYmxlID0KKyAgICAgICAgc3RkOjppc190cml2aWFsbHlfY29weV9j
b25zdHJ1Y3RpYmxlPFQ+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcg
aXNfdHJpdmlhbGx5X21vdmVfY29uc3RydWN0aWJsZSA9CisgICAgICAgIHN0ZDo6aXNfdHJpdmlh
bGx5X21vdmVfY29uc3RydWN0aWJsZTxUPjsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX21v
dmVfY29uc3RydWN0aWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0
ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZTxUPjsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU7CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA9IHN0
ZDo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNlCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUK
KyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29u
c3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5KFQpPiB7fTsKKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFsbHlfbW92ZV9jb25z
dHJ1Y3RpYmxlIDogYm9vbF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9OworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5X2Fzc2lnbmFi
bGUKKyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlf
YXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3NpZ24oVCk+IHt9OwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxf
bW92ZV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCB2YWx1ZT1zdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxs
X21vdmVfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBzdHJ1Y3QgaXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSA6IGJvb2xf
Y29uc3RhbnQ8X19pc190cml2aWFsKFQpPiB7fTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgX19hbGxfbW92ZV9hc3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgfSAg
Ly8gbmFtZXNwYWNlIGxpYgorfSAgLy8gbmFtZXNwYWNlIG1wYXJrCiAKLXRlbXBsYXRlPHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworI3VuZGVmIFJF
VFVSTgogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1
Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlPF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxfSGVhZD46OnZhbHVl
ICYmIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKIAotdGVtcGxh
dGU8Pgotc3RydWN0IF9fYWxsX2NvcHlfYXNzaWduYWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBl
e307Ci0KLW5hbWVzcGFjZSBfX3N3YXBfdGVzdF9kZXRhaWx7Ci11c2luZyBzdGQ6OnN3YXA7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9PdGhlcj4KLXN0cnVjdCBfX3N3YXBfcmVzdWx0e307Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lPgotc3RhdGljIGNoYXIgX190ZXN0KC4uLik7Ci10ZW1wbGF0ZSA8dHlw
ZW5hbWUgX090aGVyPgotc3RhdGljIHN0ZDo6cGFpcjxjaGFyLCBzdGQ6OnBhaXI8Y2hhciwgX19z
d2FwX3Jlc3VsdDxkZWNsdHlwZSgKLSAgICBzd2FwKHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSxz
dGQ6OmRlY2x2YWw8X090aGVyICY+KCkpKT4+PgotX190ZXN0KF9PdGhlciAqKTsKLX0KK25hbWVz
cGFjZSBzdGQgewogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+IHN0cnVjdCBfX2lzX3N3YXBw
YWJsZSB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc2l6ZW9m
KF9fc3dhcF90ZXN0X2RldGFpbDo6X190ZXN0PF9UeXBlPigwKSkgIT0gMTsKLX07CisjaWZkZWYg
TVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlOworI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUg
QVVUT19SRVRVUk4oLi4uKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBhYmxlPF9I
ZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1fX2lzX3N3
YXBwYWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX3N3YXBwYWJsZTxfUmVzdC4uLj46OnZhbHVl
OwotfTsKKyNkZWZpbmUgQVVUT19SRUZSRUYgYXV0byAmJgorI2RlZmluZSBBVVRPX1JFRlJFRl9S
RVRVUk4oLi4uKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3Qg
X19hbGxfc3dhcHBhYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotdGVtcGxhdGU8Ym9v
bCBfTW92ZUNvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhj
ZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1wbHt9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVf
Y29uc3RydWN0X2ltcGw8dHJ1ZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZhbHVlPW5vZXhjZXB0KF9IZWFkKHN0ZDo6ZGVjbHZhbDxfSGVhZCYmPigpKSkgJiYg
X19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8dHJ1ZSxfUmVzdC4uLj46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Nv
bnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0
X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3Q6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1
Y3RfaW1wbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsX1R5cGVz
Li4uPgote307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVBc3NpZ25hYmxlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGx7fTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIF9IZWFkLCB0eXBlbmFtZS4uLiBfUmVzdD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfSGVhZCwgX1Jlc3QuLi4+IHsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPQotICAgICAgICBzdGQ6OmlzX25vdGhy
b3dfbW92ZV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYKLSAgICAgICAgc3RkOjppc19ub3Ro
cm93X21vdmVfY29uc3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIF9fbm9leGNl
cHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8
dHJ1ZT57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXRydWU7Ci19OwotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3Zl
X2Fzc2lnbgotICAgIDogX19ub2V4Y2VwdF92YXJpYW50X21vdmVfYXNzaWduX2ltcGw8Ci0gICAg
ICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAg
ICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAg
ICAgICBfVHlwZXMuLi4+IHt9OworI2RlZmluZSBERUNMVFlQRV9BVVRPIGRlY2x0eXBlKGF1dG8p
CisjZGVmaW5lIERFQ0xUWVBFX0FVVE9fUkVUVVJOKC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU7CisjZWxzZQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAu
Li4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9IZWFkLF9SZXN0Li4u
PgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6OmlzX2NvcHlfY29uc3Ry
dWN0aWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfUmVzdC4u
Lj46OnZhbHVlOwotfTsKKyNkZWZpbmUgQVVUTyBhdXRvCisjZGVmaW5lIEFVVE9fUkVUVVJOKC4u
LikgXAorICAtPiBtcGFyazo6bGliOjpkZWNheV90PGRlY2x0eXBlKF9fVkFfQVJHU19fKT4geyBy
ZXR1cm4gX19WQV9BUkdTX187IH0KKworI2RlZmluZSBBVVRPX1JFRlJFRiBhdXRvCisjZGVmaW5l
IEFVVE9fUkVGUkVGX1JFVFVSTiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgLT4gZGVjbHR5cGUoKF9fVkFfQVJHU19fKSkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19yZWZlcmVuY2U8ZGVjbHR5cGUoKF9fVkFfQVJHU19fKSk+Ojp2YWx1ZSwgIiIpOyBcCisgICAg
cmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgfQorCisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gYXV0bworI2RlZmlu
ZSBERUNMVFlQRV9BVVRPX1JFVFVSTiguLi4pIFwKKyAgLT4gZGVjbHR5cGUoX19WQV9BUkdTX18p
IHsgcmV0dXJuIF9fVkFfQVJHU19fOyB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9OwotCi10ZW1wbGF0ZTxib29s
IF9Db3B5Q29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fbm9leGNl
cHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRf
Y29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFk
IGNvbnN0Jj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9p
bXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlPnsKLSAgICBzdGF0
aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0
OgotX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGw8X19hbGxfY29w
eV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9OwotCi10ZW1w
bGF0ZTxib29sIF9Db3B5Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0X2ltcGx7fTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFk
LF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hl
YWQoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29u
c3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFsdWU7Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVj
dF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsK
LQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3Zhcmlh
bnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+
Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBfU3dhcHBhYmxlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbHt9Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9SZXN0Pgotc3RydWN0IF9f
bm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6
OmRlY2x2YWw8X0hlYWQmPigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkpKSAmJgotICAgICAgICBf
X25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4uPjo6dmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXBfaW1wbDx0cnVlPnsK
LSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3YXA6Ci1fX25v
ZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxfVHlwZXMuLi4+Ojp2YWx1
ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNz
IFZhcmlhbnQ6Ci0gICAgICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8Ci0gICAgVmFyaWFudDxf
VHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5cGVzLi4uPjo6X192YWx1
ZT4KLXsKLSAgICB0eXBlZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8X1R5cGVzLi4uPixfX2Fs
bF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFsdWU+IF9fYmFzZV90eXBl
OwotICAgIGZyaWVuZCBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3RydWN0IF9fY29weV9jb25z
dHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2NvcHlfYXNzaWdu
X29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19tb3ZlX2NvbnN0cnVjdF9v
cF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFi
bGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFu
dD47Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzMj4KLSAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKLQotICAgIGZyaWVu
ZCBzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAgICB0eXBlZGVmIF9fdmFy
aWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAgX19zdG9yYWdlX3R5cGUg
X19zdG9yYWdlOwotICAgIHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90eXBlPHNpemVvZiAuLi4g
KF9UeXBlcyk+OjpfX3R5cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgs
dHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2VfY29uc3RydWN0KF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBfX3N0b3JhZ2VfdHlwZSgK
LSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3Mp
Li4uKTsKLSAgICAgICAgcmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAgIAotICAgIHZvaWQgX19k
ZXN0cm95X3NlbGYoKXsKLSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFibGU8VmFyaWFudD46Ol9f
YXBwbHlbaW5kZXgoKV0odGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7Ci0gICAgfQotICAgIAot
ICAgIHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9fb3RoZXIpewotICAgICAg
ICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmluZGV4KCk7Ci0gICAgICAg
IGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBf
X21vdmVfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W19fb3RoZXJfaW5kZXhd
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95X3NlbGYoKTsKLSAgICAg
ICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQorI2VuZGlmCiAKLSAgICBwdHJkaWZmX3Qg
X19jb3B5X2NvbnN0cnVjdChWYXJpYW50IGNvbnN0JiBfX290aGVyKXsKLSAgICAgICAgcHRyZGlm
Zl90IGNvbnN0IF9fb3RoZXJfaW5kZXg9X19vdGhlci5pbmRleCgpOwotICAgICAgICBpZihfX290
aGVyX2luZGV4PT0tMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX19jb3B5X2Nv
bnN0cnVjdF9vcF90YWJsZTxWYXJpYW50Pjo6X19hcHBseVtfX290aGVyX2luZGV4XSh0aGlzLF9f
b3RoZXIpOwotICAgICAgICByZXR1cm4gX19vdGhlcl9pbmRleDsKLSAgICB9CisgIGNsYXNzIGJh
ZF92YXJpYW50X2FjY2VzcyA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgor
ICAgIHZpcnR1YWwgY29uc3QgY2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJi
YWRfdmFyaWFudF9hY2Nlc3MiOyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lk
IHRocm93X2JhZF92YXJpYW50X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisg
ICAgdGhyb3cgYmFkX3ZhcmlhbnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRl
KCk7CisjZW5kaWYKKyAgfQogCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci0gICAgdm9pZCBfX3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJn
cyl7Ci0gICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3RoaXNfdHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9o
ZWxwZXI6Ol9faGVscGVyPAotICAgICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9y
YWdlX25vdGhyb3dfY29uc3RydWN0aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUg
fHwKLSAgICAgICAgICAgIChzaXplb2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0
b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAot
ICAgICAgICAgICAgX19vdGhlcl9zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAot
ICAgICAgICAgICAgICAgIF9JbmRleCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+
OjpfX3RyYW1wb2xpbmUoKnRoaXMsc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAg
ICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudDsKIAotICAg
IHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHZvaWQgX190
d29fc3RhZ2VfcmVwbGFjZShfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwot
ICAgICAgICBfX3ZhcmlhbnRfZGF0YTxfX3R5cGU+IF9fbG9jYWwoCi0gICAgICAgICAgICBpbl9w
bGFjZTwwPixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBfX2Rlc3Ry
b3lfc2VsZigpOwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oCi0gICAgICAg
ICAgICBzdGQ6Om1vdmUoX19sb2NhbC5fX2dldChpbl9wbGFjZTwwPikpKTsKLSAgICAgICAgX19p
bmRleD1fSW5kZXg7Ci0gICAgICAgIF9fbG9jYWwuX19kZXN0cm95KGluX3BsYWNlPDA+KTsKLSAg
ICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplOwogCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBf
X2xvY2FsX2JhY2t1cF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFj
a3VwX3N0b3JhZ2U8X0luZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2Up
OwotICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3Vw
Ll9fZGVzdHJveSgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4g
X19hcmdzKSB7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9j
b25zdHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAg
ICBfX2luZGV4PV9JbmRleDsKLSAgICB9CisjaWZkZWYgTVBBUktfVkFSSUFCTEVfVEVNUExBVEVT
CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBjb25zdGV4cHIgc3RkOjpzaXplX3QgdmFyaWFu
dF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOworI2VuZGlmCiAKLSAgICBzdHJ1Y3Qg
X19wcml2YXRlX3R5cGV7fTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJp
YW50X3NpemU8Y29uc3QgVD4gOiB2YXJpYW50X3NpemU8VD4ge307CiAKLXB1YmxpYzoKLSAgICBj
b25zdGV4cHIgVmFyaWFudCgpCi0gICAgICAgIF9fTk9FWENFUFRfKG5vZXhjZXB0KHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPDAsX1R5cGVzLi4uPjo6X190eXBlKCkpKToKLSAgICAgICAgX19zdG9y
YWdlKGluX3BsYWNlPDA+KSwKLSAgICAgICAgX19pbmRleCgwKQotICAgIHt9Ci0KLSAgICBjb25z
dGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYm
IF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3Ry
dWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAgICAgICAgX19pbmRleChfX21vdmVfY29uc3RydWN0
KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6
OmNvbmRpdGlvbmFsPCFfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUs
VmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5cGUmJiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0g
ICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9jb3B5
X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46
OnR5cGUmIF9fb3RoZXIpCi0gICAgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X25vbl9j
b25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgo
X19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAgICB7fQotCi0gICAgY29uc3RleHByIFZhcmlh
bnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwhX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlJiBfX290aGVyKT1k
ZWxldGU7Ci0KLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFs
PF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSBjb25zdCYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhj
ZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAg
ICAgICBfX2luZGV4KF9fY29weV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNv
bnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX2NvcHlfY29u
c3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlw
ZSBjb25zdCYgX19vdGhlcik9ZGVsZXRlOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBleHBsaWNpdCBjb25zdGV4cHIgVmFyaWFudChp
bl9wbGFjZV90eXBlX3Q8X1R5cGU+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAgIF9fc3Rv
cmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+
OjpfX3ZhbHVlPiwKLSAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLiks
Ci0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUp
Ci0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxfVHlw
ZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0aWJsZSBmcm9tIGFyZ3Mi
KTsKLSAgICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXpl
PHZvbGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgZXhwbGljaXQgY29uc3RleHByIFZhcmlh
bnQoaW5fcGxhY2VfaW5kZXhfdDxfSW5kZXg+LF9BcmdzJiYgLi4uIF9fYXJncyk6Ci0gICAgICAg
IF9fc3RvcmFnZShpbl9wbGFjZTxfSW5kZXg+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4u
LiksCi0gICAgICAgIF9faW5kZXgoX0luZGV4KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2NvbnN0cnVjdGlibGU8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9U
eXBlcy4uLj46Ol9fdHlwZSxfQXJncy4uLj46OnZhbHVlLCJUeXBlIG11c3QgYmUgY29uc3RydWN0
aWJsZSBmcm9tIGFyZ3MiKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5
cGU+Ci0gICAgY29uc3RleHByIFZhcmlhbnQoX1R5cGUmJiBfX3gpOgotICAgICAgICBfX3N0b3Jh
Z2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19j
b25zdHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAgICAgICAgICBzdGQ6OmZv
cndhcmQ8X1R5cGU+KF9feCkpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25z
dHJ1Y3Q8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSkKLSAgICB7fQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsCi0gICAgICAgICAgICAgdHlwZW5hbWUgX0VuYWJsZT0KLSAgICAgICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgKF9fY29uc3Ry
dWN0aWJsZV9tYXRjaGVzPHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6
X190eXBlOjpfX2xlbmd0aD4wKQotICAgICAgICAgICAgID46OnR5cGU+Ci0gICAgY29uc3RleHBy
IFZhcmlhbnQoc3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPiBfX3gpOgotICAgICAgICBfX3N0
b3JhZ2UoCi0gICAgICAgICAgICBpbl9wbGFjZTwKLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90
b19jb25zdHJ1Y3Q8c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3Zh
bHVlPiwKLSAgICAgICAgICAgIF9feCksCi0gICAgICAgIF9faW5kZXgoX190eXBlX2luZGV4X3Rv
X2NvbnN0cnVjdDxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdmFs
dWUpCi0gICAge30KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLSAgICBWYXJp
YW50JiBvcGVyYXRvcj0oX1R5cGUmJiBfX3gpewotICAgICAgICBjb25zdGV4cHIgc2l6ZV90IF9J
bmRleD0KLSAgICAgICAgICAgIF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZTsKLSAgICAgICAgaWYoX0luZGV4PT1fX2luZGV4KXsKLSAgICAgICAgICAg
IGdldDxfSW5kZXg+KCp0aGlzKT1zdGQ6OmZvcndhcmQ8X1R5cGU+KF9feCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Q8X0luZGV4Pihz
dGQ6OmZvcndhcmQ8X1R5cGU+KF9feCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICB9CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXpl
PGNvbnN0IHZvbGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi0gICAgVmFyaWFudCAm
b3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAg
ICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAg
ICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0g
ICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0g
ICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgY29uc3QgJl9fb3RoZXIp
ID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3Rp
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfY29weV9hc3Np
Z25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRl
X3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAg
ICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCld
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9f
cmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNz
aWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlhbnQ8
VHMuLi4+PiA6IG1wYXJrOjpsaWI6OnNpemVfY29uc3RhbnQ8c2l6ZW9mLi4uKFRzKT4ge307CisK
KyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50
X2FsdGVybmF0aXZlOworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgor
ICB1c2luZyB2YXJpYW50X2FsdGVybmF0aXZlX3QgPSB0eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0
aXZlPEksIFQ+Ojp0eXBlOworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBU
PgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPgorICAgICAgOiBzdGQ6
OmFkZF9jb25zdDx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2
ZTxJLCB2b2xhdGlsZSBUPgorICAgICAgOiBzdGQ6OmFkZF92b2xhdGlsZTx2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8SSwgVD4+IHt9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFt
ZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPgor
ICAgICAgOiBzdGQ6OmFkZF9jdjx2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgVD4+IHt9OworCisg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgc3RydWN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgdmFyaWFudDxUcy4uLj4+CisgICAgICA6IG1wYXJrOjpsaWI6Omlk
ZW50aXR5PG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+PiB7CisgICAg
c3RhdGljX2Fzc2VydChJIDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJgdmFy
aWFudF9hbHRlcm5hdGl2ZWAgaW5kZXggb3V0IG9mIHJhbmdlLiIpOworICB9OworCisgIGNvbnN0
ZXhwciBzdGQ6OnNpemVfdCB2YXJpYW50X25wb3MgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4o
LTEpOworCisgIG5hbWVzcGFjZSBkZXRhaWwgeworCisgICAgaW5saW5lIGNvbnN0ZXhwciBib29s
IGFsbCgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBCcz4K
KyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgYWxsKGJvb2wgYiwgQnMuLi4gYnMpIHsKKyAgICAg
IHJldHVybiBiICYmIGFsbChicy4uLik7CisgICAgfQorCisgICAgY29uc3RleHByIHN0ZDo6c2l6
ZV90IG5vdF9mb3VuZCA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMSk7CisgICAgY29uc3Rl
eHByIHN0ZDo6c2l6ZV90IGFtYmlndW91cyA9IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PigtMik7
CisKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5k
X2luZGV4KCkgeworICAgICAgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVv
Zi4uLihUcyk+IG1hdGNoZXMgPSB7CisgICAgICAgICAge3N0ZDo6aXNfc2FtZTxULCBUcz46OnZh
bHVlLi4ufQorICAgICAgfTsKKyAgICAgIHN0ZDo6c2l6ZV90IHJlc3VsdCA9IG5vdF9mb3VuZDsK
KyAgICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBzaXplb2YuLi4oVHMpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1hdGNoZXNbaV0pIHsKKyAgICAgICAgICBpZiAocmVzdWx0ICE9IG5vdF9m
b3VuZCkgeworICAgICAgICAgICAgcmV0dXJuIGFtYmlndW91czsKKyAgICAgICAgICB9CisgICAg
ICAgICAgcmVzdWx0ID0gaTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICB9CisgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBWYXJpYW50ICZvcGVyYXRvcj0o
Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8Ci0gICAgICAgICAgICAhKF9fYWxs
X2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBf
X2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAg
ICAgX19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAg
IFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgPSBkZWxldGU7Ci0KLSAg
ICBWYXJpYW50ICZvcGVyYXRvcj0oCi0gICAgICAgIHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8
Ci0gICAgICAgICAgICBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUg
JiYKLSAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUgJl9f
b3RoZXIpIHsKLSAgICAgICAgaWYoX19vdGhlci52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpewot
ICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
KF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29w
X3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVy
OjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9f
b3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
KnRoaXM7Ci0gICAgfQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgICEoX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxl
PF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfYXNzaWduYWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlw
ZT46OnR5cGUgJiZfX290aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgK
LSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxfX2FsbF9tb3ZlX2NvbnN0cnVjdGli
bGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAm
JgotICAgICAgICAgICAgX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4Y2VwdF92YXJpYW50X21v
dmVfYXNzaWduPF9UeXBlcy4uLj46OnZhbHVlKSB7Ci0gICAgICAgIGlmIChfX290aGVyLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0cm95X3NlbGYoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09aW5kZXgoKSl7Ci0gICAg
ICAgICAgICBfX21vdmVfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5W2luZGV4KCld
KHRoaXMsX19vdGhlcik7Ci0gICAgICAgICAgICBfX290aGVyLl9fZGVzdHJveV9zZWxmKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZXsKLSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3Rf
aGVscGVyOjpfX29wX3RhYmxlPFZhcmlhbnQ+OjpfX21vdmVfYXNzaWduWwotICAgICAgICAgICAg
ICAgIF9fb3RoZXIuaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gKnRoaXM7CisjZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmlu
ZF9pbmRleF9pbXBsKHN0ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdCkgeworICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQnM+CisgICAgaW5saW5l
IGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBmaW5kX2luZGV4X2ltcGwoc3RkOjpzaXplX3QgcmVzdWx0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c2l6ZV90IGlkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQnMuLi4gYnMpIHsKKyAgICAgIHJldHVybiBiID8gKHJlc3VsdCAhPSBub3RfZm91bmQg
PyBhbWJpZ3VvdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmaW5k
X2luZGV4X2ltcGwoaWR4LCBpZHggKyAxLCBicy4uLikpCisgICAgICAgICAgICAgICA6IGZpbmRf
aW5kZXhfaW1wbChyZXN1bHQsIGlkeCArIDEsIGJzLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBzdGQ6
OnNpemVfdCBmaW5kX2luZGV4KCkgeworICAgICAgcmV0dXJuIGZpbmRfaW5kZXhfaW1wbChub3Rf
Zm91bmQsIDAsIHN0ZDo6aXNfc2FtZTxULCBUcz46OnZhbHVlLi4uKTsKICAgICB9CisjZW5kaWYK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2
b2lkIGVtcGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFj
ZTxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZT4oCi0gICAgICAgICAgICBz
dGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIGVtcGxhY2UoX0Fy
Z3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6
Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLik7Ci0gICAgfQotICAgIAotICAgIGNvbnN0ZXhwciBi
b29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICBy
ZXR1cm4gX19pbmRleD09LTE7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgo
KSBjb25zdCBfX05PRVhDRVBUewotICAgICAgICByZXR1cm4gX19pbmRleDsKLSAgICB9CisgICAg
dGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEk+CisgICAgdXNpbmcgZmluZF9pbmRleF9zZmluYWVfaW1w
bCA9CisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PEkgIT0gbm90X2ZvdW5kICYmIEkg
IT0gYW1iaWd1b3VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OnNpemVf
Y29uc3RhbnQ8ST4+OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRz
PgorICAgIHVzaW5nIGZpbmRfaW5kZXhfc2ZpbmFlID0gZmluZF9pbmRleF9zZmluYWVfaW1wbDxm
aW5kX2luZGV4PFQsIFRzLi4uPigpPjsKKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgor
ICAgIHN0cnVjdCBmaW5kX2luZGV4X2NoZWNrZWRfaW1wbCA6IG1wYXJrOjpsaWI6OnNpemVfY29u
c3RhbnQ8ST4geworICAgICAgc3RhdGljX2Fzc2VydChJICE9IG5vdF9mb3VuZCwgInRoZSBzcGVj
aWZpZWQgdHlwZSBpcyBub3QgZm91bmQuIik7CisgICAgICBzdGF0aWNfYXNzZXJ0KEkgIT0gYW1i
aWd1b3VzLCAidGhlIHNwZWNpZmllZCB0eXBlIGlzIGFtYmlndW91cy4iKTsKKyAgICB9OworCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIGZpbmRf
aW5kZXhfY2hlY2tlZCA9IGZpbmRfaW5kZXhfY2hlY2tlZF9pbXBsPGZpbmRfaW5kZXg8VCwgVHMu
Li4+KCk+OworCisgICAgc3RydWN0IHZhbHVlbGVzc190IHt9OwogCi0gICAgdm9pZCBzd2FwKAot
ICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dh
cHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19u
b2V4Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9f
b3RoZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6
X19hcHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
ewotICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAg
ICAgICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwot
ICAgICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7CisgICAgZW51bSBj
bGFzcyBUcmFpdCB7IFRyaXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWlsYWJsZSB9
OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCisgICAgICAgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZT4gY2xhc3MgSXNUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZT4gY2xhc3MgSXNBdmFpbGFibGU+CisgICAgaW5saW5lIGNvbnN0ZXhwciBU
cmFpdCB0cmFpdCgpIHsKKyAgICAgIHJldHVybiBJc1RyaXZpYWxseUF2YWlsYWJsZTxUPjo6dmFs
dWUKKyAgICAgICAgICAgICAgICAgPyBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlCisgICAgICAg
ICAgICAgICAgIDogSXNBdmFpbGFibGU8VD46OnZhbHVlID8gVHJhaXQ6OkF2YWlsYWJsZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFRyYWl0OjpVbmF2YWlsYWJs
ZTsKKyAgICB9CisKKyNpZmRlZiBNUEFSS19DUFAxNF9DT05TVEVYUFIKKyAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUuLi4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3Ry
YWl0KFRyYWl0cy4uLiB0cmFpdHMpIHsKKyAgICAgIFRyYWl0IHJlc3VsdCA9IFRyYWl0OjpUcml2
aWFsbHlBdmFpbGFibGU7CisgICAgICBmb3IgKFRyYWl0IHQgOiB7dHJhaXRzLi4ufSkgeworICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pih0KSA+IHN0YXRpY19jYXN0PGludD4ocmVzdWx0KSkg
eworICAgICAgICAgIHJlc3VsdCA9IHQ7CiAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQotfTsKKyNlbHNlCisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBj
b21tb25fdHJhaXRfaW1wbChUcmFpdCByZXN1bHQpIHsgcmV0dXJuIHJlc3VsdDsgfQogCi10ZW1w
bGF0ZTw+Ci1jbGFzcyBWYXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFyaWFudCgpPWRlbGV0ZTsK
LSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qg
X19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
Li4uIFRyYWl0cz4KKyAgICBpbmxpbmUgY29uc3RleHByIFRyYWl0IGNvbW1vbl90cmFpdF9pbXBs
KFRyYWl0IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRyYWl0IHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUcmFpdHMuLi4gdHMpIHsKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHQpID4gc3Rh
dGljX2Nhc3Q8aW50PihyZXN1bHQpCisgICAgICAgICAgICAgICAgID8gY29tbW9uX3RyYWl0X2lt
cGwodCwgdHMuLi4pCisgICAgICAgICAgICAgICAgIDogY29tbW9uX3RyYWl0X2ltcGwocmVzdWx0
LCB0cy4uLik7CiAgICAgfQotICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBf
X05PRVhDRVBUewotICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0KFRyYWl0
cy4uLiB0cykgeworICAgICAgcmV0dXJuIGNvbW1vbl90cmFpdF9pbXBsKFRyYWl0OjpUcml2aWFs
bHlBdmFpbGFibGUsIHRzLi4uKTsKICAgICB9CisjZW5kaWYKIAotICAgIHZvaWQgc3dhcChWYXJp
YW50Jil7fQotfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHRy
YWl0cyB7CisgICAgICBzdGF0aWMgY29uc3RleHByIFRyYWl0IGNvcHlfY29uc3RydWN0aWJsZV90
cmFpdCA9CisgICAgICAgICAgY29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9jb25zdHJ1Y3RpYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJs
ZT4oKS4uLik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9jb25zdHJ1Y3Rp
YmxlX3RyYWl0ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3RyaXZpYWxseV9tb3ZlX2NvbnN0cnVj
dGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBUcmFpdCBjb3B5X2Fzc2ln
bmFibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90cmFpdChjb3B5X2NvbnN0cnVjdGlibGVf
dHJhaXQsCisgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0PFRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfY29weV9hc3NpZ25hYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZT4oKS4u
Lik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgbW92ZV9hc3NpZ25hYmxlX3RyYWl0
ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LAorICAg
ICAgICAgICAgICAgICAgICAgICB0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXBhcms6OmxpYjo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU+KCkuLi4pOworCisgICAg
ICBzdGF0aWMgY29uc3RleHByIFRyYWl0IGRlc3RydWN0aWJsZV90cmFpdCA9CisgICAgICAgICAg
Y29tbW9uX3RyYWl0KHRyYWl0PFRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6aXNfZGVzdHJ1Y3RpYmxlPigpLi4uKTsKKyAgICB9OwogCi10ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4gX1R5cGVzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19hbGxfc3dhcHBhYmxlPF9U
eXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxfbW92
ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZD46OnR5cGUKLXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZfX2xocywgVmFyaWFudDxf
VHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4Y2VwdF92YXJpYW50X3N3
YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9fcmhzKTsKLX0KKyAgICBu
YW1lc3BhY2UgYWNjZXNzIHsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcnsKLSAgICB0eXBlZGVmIHR5cGVu
YW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgX190eXBlOwotICAg
IHN0YXRpYyBjb25zdGV4cHIgX190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5kZXg+KTsKLSAg
ICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmIF9fdil7Ci0gICAgICAgIHJldHVybiBfX3YuX19zdG9yYWdlLl9fZ2V0KGlu
X3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYmIGdl
dChWYXJpYW50PF9UeXBlcy4uLj4mJiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFn
ZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4pOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IF9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3Ypewot
ICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldF9ycmVmKGluX3BsYWNlPF9JbmRleD4p
OwotICAgIH0KLX07CisgICAgICBzdHJ1Y3QgcmVjdXJzaXZlX3VuaW9uIHsKKyNpZmRlZiBNUEFS
S19SRVRVUk5fVFlQRV9ERURVQ1RJT04KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFY+Cisg
ICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gJiZnZXRfYWx0KFYgJiZ2LCBpbl9w
bGFjZV9pbmRleF90PDA+KSB7CisgICAgICAgICAgcmV0dXJuIG1wYXJrOjpsaWI6OmZvcndhcmQ8
Vj4odikuaGVhZF87CisgICAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYg
X192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3Zh
bHVlPihfX3YpOwotfQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3RkOjpzaXplX3Qg
ST4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9hbHQoViAmJnYs
IGluX3BsYWNlX2luZGV4X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2FsdChtcGFyazo6
bGliOjpmb3J3YXJkPFY+KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9KTsKKyAg
ICAgICAgfQorI2Vsc2UKKyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIGJvb2wgRHVt
bXkgPSB0cnVlPgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE9fUkVGUkVG
IG9wZXJhdG9yKCkoViAmJnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
Z2V0X2FsdF9pbXBsPEkgLSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikudGFpbF8pKQor
ICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAgICAgICBzdHJ1
Y3QgZ2V0X2FsdF9pbXBsPDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFY+CisgICAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYg
JiZ2KSBjb25zdAorICAgICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJrOjpsaWI6OmZv
cndhcmQ8Vj4odikuaGVhZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFYsIHN0ZDo6c2l6ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFV
VE9fUkVGUkVGIGdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisgICAgICAgICAg
QVVUT19SRUZSRUZfUkVUVVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8
Vj4odikpKQorI2VuZGlmCisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6
X192YWx1ZT4oc3RkOjptb3ZlKF9fdikpOwotfQorICAgICAgc3RydWN0IGJhc2UgeworICAgICAg
ICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRP
X1JFRlJFRl9SRVRVUk4ocmVjdXJzaXZlX3VuaW9uOjpnZXRfYWx0KAorICAgICAgICAgICAgICBk
YXRhKG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odikpLCBpbl9wbGFjZV9pbmRleF90PEk+e30pKQor
ICAgICAgfTsKKworICAgICAgc3RydWN0IHZhcmlhbnQgeworICAgICAgICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUT19SRUZSRUYgZ2V0X2FsdChWICYmdikKKyAgICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4o
YmFzZTo6Z2V0X2FsdDxJPihtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLmltcGxfKSkKKyAgICAg
IH07CisKKyAgICB9ICAvLyBuYW1lc3BhY2UgYWNjZXNzCisKKyAgICBuYW1lc3BhY2UgdmlzaXRh
dGlvbiB7CisKKyAgICAgIHN0cnVjdCBiYXNlIHsKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGNv
bnN0IFQgJmF0KGNvbnN0IFQgJmVsZW0pIHsKKyAgICAgICAgICByZXR1cm4gZWxlbTsKKyAgICAg
ICAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29u
c3RleHByIF9UeXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Ypewot
ICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9f
dik7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBl
bmFtZS4uLiBJcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6
OmxpYjo6cmVtb3ZlX2FsbF9leHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBh
cms6OmxpYjo6YXJyYXk8VCwgTj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgewor
ICAgICAgICAgIHJldHVybiBhdChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3Qg
X1R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4g
Z2V0PF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihzdGQ6Om1vdmUoX192
KSk7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5
cGVfY2hlY2soKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydChhbGwoc3RkOjppc19zYW1lPEYs
IEZzPjo6dmFsdWUuLi4pLAorICAgICAgICAgICAgICAgICAgICAgICAgImBtcGFyazo6dmlzaXRg
IHJlcXVpcmVzIHRoZSB2aXNpdG9yIHRvIGhhdmUgYSBzaW5nbGUgIgorICAgICAgICAgICAgICAg
ICAgICAgICAgInJldHVybiB0eXBlLiIpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CiAKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEZzPgorICAgICAgICBpbmxpbmUgc3Rh
dGljIGNvbnN0ZXhwciBtcGFyazo6bGliOjphcnJheTwKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmNvbW1vbl90eXBlX3Q8bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAgICAg
c2l6ZW9mLi4uKEZzKT4KKyAgICAgICAgbWFrZV9mYXJyYXkoRnMgJiYuLi4gZnMpIHsKKyAgICAg
ICAgICB1c2luZyByZXN1bHQgPSBtcGFyazo6bGliOjphcnJheTxtcGFyazo6bGliOjpjb21tb25f
dHlwZV90PG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZi4uLihGcyk+OworICAgICAgICAgIHJldHVybiB2aXNpdF92
aXNpdG9yX3JldHVybl90eXBlX2NoZWNrPG1wYXJrOjpsaWI6OmRlY2F5X3Q8RnM+Li4uPigpLAor
ICAgICAgICAgICAgICAgICByZXN1bHR7e21wYXJrOjpsaWI6OmZvcndhcmQ8RnM+KGZzKS4uLn19
OworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9U
eXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4u
Pjo6X190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3YpewotICAg
IHJldHVybiAqKAotICAgICAgICAoX0luZGV4IT1fX3YuaW5kZXgoKSkKLSAgICAgICAgICAgID8g
c3RkOjphZGRyZXNzb2YoX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFyaWFudCBp
bmRleCBpbiBnZXQiKSkKLSAgICAgICAgICAgIDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSkKLSAgICApOwotfQorICAgICAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIHN0cnVjdCBkaXNwYXRjaGVyIHsK
KyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAg
ICAgc3RydWN0IGltcGwgeworICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVD
TFRZUEVfQVVUTyBkaXNwYXRjaChGIGYsIFZzLi4uIHZzKQorICAgICAgICAgICAgICBERUNMVFlQ
RV9BVVRPX1JFVFVSTihtcGFyazo6bGliOjppbnZva2UoCisgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxGPihmKSwKKyAgICAgICAgICAgICAgICAgIGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJ
cz4oc3RhdGljX2Nhc3Q8VnM+KHZzKSkuLi4pKQorICAgICAgICAgIH07CisgICAgICAgIH07CisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVf
dC4uLiBJcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgQVVUTyBtYWtlX2Rpc3Bh
dGNoKG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPikKKyAgICAgICAgICBBVVRPX1JF
VFVSTigmZGlzcGF0Y2hlcjxJcy4uLj46OnRlbXBsYXRlIGltcGw8RiwgVnMuLi4+OjpkaXNwYXRj
aCkKKworICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgRiwgdHlwZW5h
bWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9mZGlh
Z29uYWxfaW1wbCgpCisgICAgICAgICAgQVVUT19SRVRVUk4obWFrZV9kaXNwYXRjaDxGLCBWcy4u
Lj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6
OmluZGV4ZWRfdHlwZTxJLCBWcz46OnZhbHVlLi4uPnt9KSkKKworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBp
bmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRPIG1ha2VfZmRpYWdvbmFsX2ltcGwoCisgICAgICAg
ICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4pCisgICAgICAgICAgQVVUT19S
RVRVUk4obWFrZV9mYXJyYXkobWFrZV9mZGlhZ29uYWxfaW1wbDxJcywgRiwgVnMuLi4+KCkuLi4p
KQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZSBWLCB0eXBlbmFtZS4u
LiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgLyogYXV0byAqICovIGF1dG8g
bWFrZV9mZGlhZ29uYWwoKQorICAgICAgICAgICAgLT4gZGVjbHR5cGUobWFrZV9mZGlhZ29uYWxf
aW1wbDxGLCBWLCBWcy4uLj4oCisgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRl
eF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNheV90PFY+OjpzaXplKCk+e30pKSB7CisgICAgICAg
ICAgc3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgYWxsKChtcGFyazo6bGliOjpkZWNheV90
PFY+OjpzaXplKCkgPT0gbXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4pLAorICAg
ICAgICAgICAgICAiYWxsIG9mIHRoZSB2YXJpYW50cyBtdXN0IGJlIHRoZSBzYW1lIHNpemUuIik7
CisgICAgICAgICAgcmV0dXJuIG1ha2VfZmRpYWdvbmFsX2ltcGw8RiwgViwgVnMuLi4+KAorICAg
ICAgICAgICAgICBtcGFyazo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRl
Y2F5X3Q8Vj46OnNpemUoKT57fSk7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9J
bmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mIF9f
dil7Ci0gICAgcmV0dXJuICooCi0gICAgICAgIChfSW5kZXghPV9fdi5pbmRleCgpKQotICAgICAg
ICAgICAgPyBzdGQ6OmFkZHJlc3NvZihfX3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJj4oIkJhZCBWYXJpYW50
IGluZGV4IGluIGdldCIpKQotICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRf
YWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKQotICAgICk7Ci19CisjaWZkZWYg
TVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBWcywgc3RkOjpzaXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0
aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4gaXMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9k
aXNwYXRjaDxGLCBWcy4uLj4oaXMpOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBf
SW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRf
dHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYm
IF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6
Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6bW92
ZShfX3YpKQotICAgICk7Ci19CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUuLi4gVnMsCisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVf
dC4uLiBJcywKKyAgICAgICAgICAgICAgICAgIHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUuLi4gTHM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHBy
IGF1dG8gbWFrZV9mbWF0cml4X2ltcGwoCisgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9z
ZXF1ZW5jZTxJcy4uLj4sIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4g
bHMpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8Riwg
VnMuLi4+KAorICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwg
SnM+e30sIGxzLi4uKS4uLik7CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRl
eCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGNvbnN0IHR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+
IGNvbnN0JiYgX192KXsKLSAgICByZXR1cm4gX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlw
ZXMuLi4+OjpnZXQoCi0gICAgICAgICgoKF9JbmRleCE9X192LmluZGV4KCkpID8gX190aHJvd19i
YWRfdmFyaWFudF9hY2Nlc3M8aW50PigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikgOiAwKSwg
c3RkOjptb3ZlKF9fdikpCi0gICAgKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYs
IHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1h
a2VfZm1hdHJpeCgpIHsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMu
Li4+KAorICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAg
ICAgICAgICAgIG1wYXJrOjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVj
YXlfdDxWcz46OnNpemUoKT57fS4uLik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgc3RydWN0IG1ha2VfZm1h
dHJpeF9pbXBsIHsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CisgICAgICAgICAg
c3RydWN0IGltcGw7CisKKyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXM+Cisg
ICAgICAgICAgc3RydWN0IGltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+PiB7
CisgICAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0Cisg
ICAgICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAgICAgICAgbWFrZV9kaXNwYXRj
aDxGLCBWcy4uLj4obXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMuLi4+e30pKQorICAgICAg
ICAgIH07CisKKyAgICAgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QuLi4gSXMsIHN0ZDo6c2l6
ZV90Li4uIEpzLCB0eXBlbmFtZS4uLiBMcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbDxtcGFyazo6
bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgbXBhcms6
OmxpYjo6aW5kZXhfc2VxdWVuY2U8SnMuLi4+LAorICAgICAgICAgICAgICAgICAgICAgIExzLi4u
PiB7CisgICAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFVVE8gb3BlcmF0b3IoKSgpIGNvbnN0
CisgICAgICAgICAgICAgIEFVVE9fUkVUVVJOKG1ha2VfZmFycmF5KAorICAgICAgICAgICAgICAg
ICAgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+LCBMcy4uLj57fSgp
Li4uKSkKKyAgICAgICAgICB9OworICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIg
QVVUTyBtYWtlX2ZtYXRyaXgoKQorICAgICAgICAgIEFVVE9fUkVUVVJOKAorICAgICAgICAgICAg
ICB0eXBlbmFtZSBtYWtlX2ZtYXRyaXhfaW1wbDxGLCBWcy4uLj46OnRlbXBsYXRlIGltcGw8Cisg
ICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+LAorICAgICAgICAg
ICAgICAgICAgbXBhcms6OmxpYjo6bWFrZV9pbmRleF9zZXF1ZW5jZTxtcGFyazo6bGliOjpkZWNh
eV90PFZzPjo6c2l6ZSgpPi4uLj57fSgpKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PF9U
eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoX190eXBl
X2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9fdi5pbmRleCgpKT9udWxscHRyOnN0
ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192KSk7Ci19CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBp
bmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNp
emVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAg
ICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25h
bDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShh
c19iYXNlKG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAg
ICAgICBpbmRleCkobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4u
LikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2Fs
dChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVU
T19SRVRVUk4oCisgICAgICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpm
b3J3YXJkPFZzPih2cykpKS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLiko
bXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkK
KyAgICAgIH07CisKKyAgICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAg
ICAgICAgc3RydWN0IHZpc2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAg
c3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZp
c2l0b3IsIFZhbHVlcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAg
cmVxdWlyZXMgdGhlIHZpc2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2lu
dGVyX3Q8X1R5cGUgY29uc3Q+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fdil7
Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192
LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2YoZ2V0PF9UeXBlPihfX3YpKTsKLX0KKyNp
ZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlz
YWJsZSA6IDQxMDApCisjZW5kaWYKKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIERFQ0xUWVBF
X0FVVE8gb3BlcmF0b3IoKShWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZXMgJiYuLi4gdmFsdWVzKSBjb25z
dAorICAgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4obXBhcms6OmxpYjo6aW52b2tlKG1w
YXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZhbHVlcz4odmFs
dWVzKS4uLikpCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYK
KyAgICAgICAgfTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5
cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlw
ZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBf
X3YpewotICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAg
IHN0ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0
KF9fdikpKTsKLX0KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3I+CisgICAgICAg
IHN0cnVjdCB2YWx1ZV92aXNpdG9yIHsKKyAgICAgICAgICBWaXNpdG9yICYmdmlzaXRvcl87CisK
KyAgICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gQWx0cz4KKyAgICAgICAgICBpbmxpbmUg
Y29uc3RleHByIERFQ0xUWVBFX0FVVE8gb3BlcmF0b3IoKShBbHRzICYmLi4uIGFsdHMpIGNvbnN0
CisgICAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgICB2aXNp
dF9leGhhdXN0aXZlX3Zpc2l0b3JfY2hlY2s8CisgICAgICAgICAgICAgICAgICAgIFZpc2l0b3Is
CisgICAgICAgICAgICAgICAgICAgIGRlY2x0eXBlKChtcGFyazo6bGliOjpmb3J3YXJkPEFsdHM+
KGFsdHMpLnZhbHVlKSkuLi4+e30oCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZv
cndhcmQ8VmlzaXRvcj4odmlzaXRvcl8pLAorICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGli
Ojpmb3J3YXJkPEFsdHM+KGFsdHMpLnZhbHVlLi4uKSkKKyAgICAgICAgfTsKKworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4
cHIgQVVUTyBtYWtlX3ZhbHVlX3Zpc2l0b3IoVmlzaXRvciAmJnZpc2l0b3IpCisgICAgICAgICAg
QVVUT19SRVRVUk4odmFsdWVfdmlzaXRvcjxWaXNpdG9yPnttcGFyazo6bGliOjpmb3J3YXJkPFZp
c2l0b3I+KHZpc2l0b3IpfSkKKworICAgICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBj
b25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF9hbHRfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9B
VVRPX1JFVFVSTigKKyAgICAgICAgICAgICAgYmFzZTo6dmlzaXRfYWx0X2F0KGluZGV4LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9y
Pih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhw
ciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMp
CisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oYmFzZTo6dmlzaXRfYWx0KG1wYXJrOjps
aWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS5pbXBsXy4u
LikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3Zh
bHVlX2F0KHN0ZDo6c2l6ZV90IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZz
ICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAg
ICB2aXNpdF9hbHRfYXQoaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlX3Zh
bHVlX3Zpc2l0b3IobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQor
CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAg
ICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdF92YWx1ZShW
aXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykKKyAgICAgICAgICBERUNMVFlQRV9BVVRP
X1JFVFVSTigKKyAgICAgICAgICAgICAgdmlzaXRfYWx0KG1ha2VfdmFsdWVfdmlzaXRvcihtcGFy
azo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS4uLikpCisgICAgICB9OworCisgICAgfSAg
Ly8gbmFtZXNwYWNlIHZpc2l0YXRpb24KKworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJbmRl
eCwgdHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgYWx0IHsKKyAgICAgIHVzaW5nIHZhbHVlX3R5cGUg
PSBUOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1j
b25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigKLSAgICBWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7Ci0gICAgcmV0dXJuICgoX0luZGV4IT1fX3YuaW5kZXgoKSk/bnVsbHB0
cjoKLSAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlw
ZXMuLi4+OjpnZXQoX192KSkpOwotfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
cHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHBy
IGFsdChpbl9wbGFjZV90LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFy
azo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJh
Z21hIHdhcm5pbmcocG9wKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4
KCk9PV9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgICAgVCB2
YWx1ZTsKKyAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4g
X1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTsKKyAgICB0ZW1wbGF0ZSA8VHJh
aXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4K
KyAgICB1bmlvbiByZWN1cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9y
Pgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcj57Ci0gICAgdHlwZWRlZiBk
ZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKCkpIF9fdHlwZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX0hlYWQsX1Jlc3QuLi4+ewot
ICAgIHR5cGVkZWYgZGVjbHR5cGUoc3RkOjpkZWNsdmFsPF9WaXNpdG9yJj4oKShzdGQ6OmRlY2x2
YWw8X0hlYWQmPigpKSkgX190eXBlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3Is
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3Zpc2l0b3JfdGFibGV7Ci0gICAgdHlwZWRl
ZiBWYXJpYW50PF9UeXBlcy4uLj4gX192YXJpYW50X3R5cGU7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlIF9fcmV0
dXJuX3R5cGU7Ci0gICAgdHlwZWRlZiBfX3JldHVybl90eXBlICgqX19mdW5jX3R5cGUpKF9WaXNp
dG9yJixfX3ZhcmlhbnRfdHlwZSYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0g
ICAgc3RhdGljIF9fcmV0dXJuX3R5cGUgX190cmFtcG9saW5lX2Z1bmMoX1Zpc2l0b3ImIF9fdmlz
aXRvcixfX3ZhcmlhbnRfdHlwZSYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8
X1R5cGU+KF9fdikpOwotICAgIH0KKyAgICB0ZW1wbGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJh
aXQsIHN0ZDo6c2l6ZV90IEluZGV4PgorICAgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVj
dGlibGVUcmFpdCwgSW5kZXg+IHt9OworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZF
X1VOSU9OKGRlc3RydWN0aWJsZV90cmFpdCwgZGVzdHJ1Y3RvcikgICAgICBcCisgIHRlbXBsYXRl
IDxzdGQ6OnNpemVfdCBJbmRleCwgdHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+ICAgICAgICAg
ICAgICAgICBcCisgIHVuaW9uIHJlY3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIElu
ZGV4LCBULCBUcy4uLj4geyAgICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
aW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5pb24odmFsdWVsZXNzX3QpIG5v
ZXhjZXB0ICAgICAgICBcCisgICAgICAgIDogZHVtbXlfe30ge30gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1
cnNpdmVfdW5pb24oaW5fcGxhY2VfaW5kZXhfdDwwPiwgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAg
ICAgICBcCisgICAgICAgIDogaGVhZF8oaW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fSAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVt
cGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciByZWN1cnNpdmVfdW5p
b24oaW5fcGxhY2VfaW5kZXhfdDxJPiwgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJncyAmJi4uLiBhcmdzKSAgICAgICAgICAgICBcCisg
ICAgICAgIDogdGFpbF8oaW5fcGxhY2VfaW5kZXhfdDxJIC0gMT57fSwgbXBhcms6OmxpYjo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLikge30gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vy
c2l2ZV91bmlvbihjb25zdCByZWN1cnNpdmVfdW5pb24gJikgPSBkZWZhdWx0OyAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlvbihyZWN1cnNpdmVfdW5pb24gJiYpID0gZGVm
YXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGRlc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJlY3Vyc2l2ZV91bmlv
biAmb3BlcmF0b3I9KGNvbnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAg
XAorICAgIHJlY3Vyc2l2ZV91bmlvbiAmb3BlcmF0b3I9KHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHByaXZhdGU6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIGNoYXIgZHVtbXlfOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFsdDxJbmRleCwgVD4gaGVhZF87ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHJl
Y3Vyc2l2ZV91bmlvbjxkZXN0cnVjdGlibGVfdHJhaXQsIEluZGV4ICsgMSwgVHMuLi4+IHRhaWxf
OyAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZyaWVuZCBzdHJ1Y3QgYWNj
ZXNzOjpyZWN1cnNpdmVfdW5pb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICB9CisKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihUcmFpdDo6VHJpdmlhbGx5
QXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1cnNpdmVf
dW5pb24oKSA9IGRlZmF1bHQ7KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihU
cmFpdDo6QXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1
cnNpdmVfdW5pb24oKSB7fSk7CisgICAgTVBBUktfVkFSSUFOVF9SRUNVUlNJVkVfVU5JT04oVHJh
aXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5yZWN1
cnNpdmVfdW5pb24oKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9SRUNVUlNJ
VkVfVU5JT04KKworICAgIHVzaW5nIGluZGV4X3QgPSB1bnNpZ25lZCBpbnQ7CisKKyAgICB0ZW1w
bGF0ZSA8VHJhaXQgRGVzdHJ1Y3RpYmxlVHJhaXQsIHR5cGVuYW1lLi4uIFRzPgorICAgIGNsYXNz
IGJhc2UgeworICAgICAgcHVibGljOgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciBi
YXNlKHZhbHVlbGVzc190IHRhZykgbm9leGNlcHQKKyAgICAgICAgICA6IGRhdGFfKHRhZyksIGlu
ZGV4XyhzdGF0aWNfY2FzdDxpbmRleF90PigtMSkpIHt9CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6
OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0
ZXhwciBiYXNlKGluX3BsYWNlX2luZGV4X3Q8ST4sIEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAg
ICA6IGRhdGFfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLiksCisgICAgICAgICAgICBpbmRleF8oSSkge30KKworICAgICAgaW5saW5lIGNv
bnN0ZXhwciBib29sIHZhbHVlbGVzc19ieV9leGNlcHRpb24oKSBjb25zdCBub2V4Y2VwdCB7Cisg
ICAgICAgIHJldHVybiBpbmRleF8gPT0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAg
fQorCisgICAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9l
eGNlcHQgeworICAgICAgICByZXR1cm4gdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpID8gdmFyaWFu
dF9ucG9zIDogaW5kZXhfOworICAgICAgfQorCisgICAgICBwcm90ZWN0ZWQ6CisgICAgICB1c2lu
ZyBkYXRhX3QgPSByZWN1cnNpdmVfdW5pb248RGVzdHJ1Y3RpYmxlVHJhaXQsIDAsIFRzLi4uPjsK
KworICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgYmFzZSAmYXNfYmFzZShiYXNlICZiKSB7
IHJldHVybiBiOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICZh
c19iYXNlKGNvbnN0IGJhc2UgJmIpIHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUg
Y29uc3RleHByIGJhc2UgJiZhc19iYXNlKGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjpt
b3ZlKGIpOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBiYXNlICYmYXNf
YmFzZShjb25zdCBiYXNlICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92ZShiKTsgfQorCisg
ICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBkYXRhX3QgJmRhdGEoYmFzZSAmYikgeyByZXR1
cm4gYi5kYXRhXzsgfQorICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29uc3QgZGF0YV90
ICZkYXRhKGNvbnN0IGJhc2UgJmIpIHsgcmV0dXJuIGIuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBp
bmxpbmUgY29uc3RleHByIGRhdGFfdCAmJmRhdGEoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjps
aWI6Om1vdmUoYikuZGF0YV87IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0
IGRhdGFfdCAmJmRhdGEoY29uc3QgYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6Om1vdmUo
YikuZGF0YV87IH0KKworICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXplX3Qg
c2l6ZSgpIHsgcmV0dXJuIHNpemVvZi4uLihUcyk7IH0KIAotICAgIHN0YXRpYyBjb25zdCBfX2Z1
bmNfdHlwZSBfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldOwotfTsKKyAgICAgIGRhdGFf
dCBkYXRhXzsKKyAgICAgIGluZGV4X3QgaW5kZXhfOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlz
aXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9yX3RhYmxl
PF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxfVmlzaXRv
cixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAgICAgICAg
Jl9fdHJhbXBvbGluZV9mdW5jPF9UeXBlcz4uLi4KKyAgICAgIGZyaWVuZCBzdHJ1Y3QgYWNjZXNz
OjpiYXNlOworICAgICAgZnJpZW5kIHN0cnVjdCB2aXNpdGF0aW9uOjpiYXNlOwogICAgIH07CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4
cHIgdHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9f
dHlwZQotdmlzaXQoX1Zpc2l0b3ImJiBfX3Zpc2l0b3IsVmFyaWFudDxfVHlwZXMuLi4+JiBfX3Yp
ewotICAgIHJldHVybiAoX192LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkKLSAgICAgICAgPyBf
X3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1R5cGVzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIp
Ci0gICAgICAgIDogX192aXNpdG9yX3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHJhbXBv
bGluZVtfX3YuaW5kZXgoKV0oX192aXNpdG9yLF9fdik7Ci19CisgICAgc3RydWN0IGR0b3Igewor
I2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhk
aXNhYmxlIDogNDEwMCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAg
ICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0IG5vZXhjZXB0IHsgYWx0
Ln5BbHQoKTsgfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlm
CisgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJp
YW50cz4KLXN0cnVjdCBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBk
ZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1Zh
cmlhbnRzPigpKS4uLikpCi0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJp
YW50SW5kZXgsdHlwZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRl
bXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxf
X2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVu
YW1lIF9fbXVsdGlfdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+Ojpf
X3R5cGUKLSAgICBfX3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192
KXsKLSAgICAgICAgcmV0dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAg
IH0KLX07CisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxOTEwCisjZGVmaW5l
IElOSEVSSVRJTkdfQ1RPUih0eXBlLCBiYXNlKSAgICAgICAgICAgICAgIFwKKyAgdGVtcGxhdGUg
PHR5cGVuYW1lLi4uIEFyZ3M+ICAgICAgICAgICAgICAgICAgICAgXAorICBpbmxpbmUgZXhwbGlj
aXQgY29uc3RleHByIHR5cGUoQXJncyAmJi4uLiBhcmdzKSBcCisgICAgICA6IGJhc2UobXBhcms6
OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKyNlbHNlCisjZGVmaW5lIElOSEVSSVRJ
TkdfQ1RPUih0eXBlLCBiYXNlKSB1c2luZyBiYXNlOjpiYXNlOworI2VuZGlmCiAKLXRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3NlbGVjdG9y
X3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3Ry
dWN0aWJsZV90cmFpdD4KKyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDwwLF9I
ZWFkLF9SZXN0Li4uPnsKLSAgICB0eXBlZGVmIF9IZWFkIF9fdHlwZTsKKyNkZWZpbmUgTVBBUktf
VkFSSUFOVF9ERVNUUlVDVE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJv
eSkgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4u
PiwgZGVzdHJ1Y3RpYmxlX3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVi
bGljIGJhc2U8ZGVzdHJ1Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4u
PjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJs
aWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9y
PTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVj
dG9yICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVj
dG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3Bl
cmF0b3I9KGRlc3RydWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6
VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisg
ICAgICAgIGlubGluZSB2b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+
aW5kZXhfID0gc3RhdGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1Q
QVJLX1ZBUklBTlRfREVTVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAg
ICAgfmRlc3RydWN0b3IoKSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVz
dHJveSgpIG5vZXhjZXB0IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkgeworICAgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7
fSwgKnRoaXMpOworICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNf
Y2FzdDxpbmRleF90PigtMSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNU
UlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9y
KCkgPSBkZWxldGU7LAorICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBk
ZWxldGU7KTsKKworI3VuZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFRyYWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0
cnVjdG9yPFRyYWl0cz4geworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47
CisKKyAgICAgIHB1YmxpYzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3Vw
ZXIpCisgICAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6Cisj
aWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlu
bGluZSB2b2lkIG9wZXJhdG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBj
b25zdCB7CisgICAgICAgICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJo
c0FsdD4ocmhzX2FsdCkudmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLSAg
ICBzdGF0aWMgY29uc3RleHByIF9fdHlwZSYgX19zZWxlY3QoX0hlYWQmIF9faGVhZCxfUmVzdCYg
Li4uKXsKLSAgICAgICAgcmV0dXJuIF9faGVhZDsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxp
bmUgc3RhdGljIFQgJmNvbnN0cnVjdF9hbHQoYWx0PEksIFQ+ICZhLCBBcmdzICYmLi4uIGFyZ3Mp
IHsKKyAgICAgICAgOjpuZXcgKHN0YXRpY19jYXN0PHZvaWQgKj4obXBhcms6OmxpYjo6YWRkcmVz
c29mKGEpKSkKKyAgICAgICAgICAgIGFsdDxJLCBUPihpbl9wbGFjZV90e30sIG1wYXJrOjpsaWI6
OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICByZXR1cm4gYS52YWx1ZTsKKyAgICAg
IH0KKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFJocz4KKyAgICAgIGlubGluZSBzdGF0aWMg
dm9pZCBnZW5lcmljX2NvbnN0cnVjdChjb25zdHJ1Y3RvciAmbGhzLCBSaHMgJiZyaHMpIHsKKyAg
ICAgICAgbGhzLmRlc3Ryb3koKTsKKyAgICAgICAgaWYgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpKSB7CisgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAg
ICAgICAgICAgICByaHMuaW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklDX0xBTUJEQVMKKyAg
ICAgICAgICAgICAgW10oYXV0byAmbGhzX2FsdCwgYXV0byAmJnJoc19hbHQpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2FsdCgKKyAgICAgICAgICAgICAgICAgICAg
bGhzX2FsdCwgbXBhcms6OmxpYjo6Zm9yd2FyZDxkZWNsdHlwZShyaHNfYWx0KT4ocmhzX2FsdCku
dmFsdWUpOworICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICBjdG9ye30KKyNl
bmRpZgorICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGxocywKKyAgICAgICAgICAgICAg
bXBhcms6OmxpYjo6Zm9yd2FyZDxSaHM+KHJocykpOworICAgICAgICAgIGxocy5pbmRleF8gPSBy
aHMuaW5kZXhfOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKIAotdGVtcGxhdGU8c2l6ZV90
IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdf
c2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46Ol9fdHlwZSBfX3R5cGU7Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9IZWFkJixfUmVzdCYgLi4uIF9fcmVz
dCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleC0xLF9SZXN0Li4uPjo6
X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
cmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xh
c3MgbW92ZV9jb25zdHJ1Y3RvcjsKIAotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAu
Li4gX0FyZ3M+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0Fy
Z3MuLi4+OjpfX3R5cGUmJiBfX2FyZ19zZWxlY3RvcihfQXJncyYmIC4uLiBfX2FyZ3MpewotICAg
IHJldHVybiBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0Fy
Z3MuLi4+OjpfX3R5cGU+KAotICAgICAgICBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4u
Lj46Ol9fc2VsZWN0KF9fYXJncy4uLikpOwotfQorI2RlZmluZSBNUEFSS19WQVJJQU5UX01PVkVf
Q09OU1RSVUNUT1IobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+
LCBtb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMg
Y29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+PjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVfY29uc3RydWN0b3Is
IHN1cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBl
cjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25zdHJ1Y3Rvcihjb25z
dCBtb3ZlX2NvbnN0cnVjdG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25z
dHJ1Y3RvciAmb3BlcmF0b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAg
ICAgICAgIFwKKyAgICBtb3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92ZV9jb25zdHJ1Y3Rv
ciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5U
X01PVkVfQ09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisg
ICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRoYXQpID0gZGVmYXVs
dDspOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFp
dDo6QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVfY29uc3RydWN0b3Ig
JiZ0aGF0KSBub2V4Y2VwdCgKKyAgICAgICAgICAgIGFsbChzdGQ6OmlzX25vdGhyb3dfbW92ZV9j
b25zdHJ1Y3RpYmxlPFRzPjo6dmFsdWUuLi4pKQorICAgICAgICAgICAgOiBtb3ZlX2NvbnN0cnVj
dG9yKHZhbHVlbGVzc190e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgq
dGhpcywgbXBhcms6OmxpYjo6bW92ZSh0aGF0KSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktf
VkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisg
ICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWxldGU7KTsK
KworI3VuZGVmIE1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUgorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfY29uc3RydWN0aWJsZV90cmFp
dD4KKyAgICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yOworCisjZGVmaW5lIE1QQVJLX1ZBUklBTlRf
Q09QWV9DT05TVFJVQ1RPUihjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQsIGRlZmluaXRpb24pIFwK
KyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICBjbGFzcyBjb3B5X2NvbnN0cnVjdG9yPHRyYWl0czxU
cy4uLj4sIGNvcHlfY29uc3RydWN0aWJsZV90cmFpdD4gICAgICAgICAgICBcCisgICAgICA6IHB1
YmxpYyBtb3ZlX2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlciA9IG1vdmVfY29uc3RydWN0b3I8dHJhaXRzPFRz
Li4uPj47ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9jb25zdHJ1
Y3Rvciwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5n
IHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfY29uc3RydWN0b3IoY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfmNvcHlfY29uc3RydWN0b3IoKSA9IGRlZmF1
bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5
X2NvbnN0cnVjdG9yICZvcGVyYXRvcj0oY29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlZmF1
bHQ7ICAgICAgICAgXAorICAgIGNvcHlfY29uc3RydWN0b3IgJm9wZXJhdG9yPShjb3B5X2NvbnN0
cnVjdG9yICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZB
UklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJs
ZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBjb3B5X2NvbnN0cnVjdG9yICZ0aGF0
KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAg
ICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgY29weV9jb25zdHJ1Y3Rvcihjb25zdCBj
b3B5X2NvbnN0cnVjdG9yICZ0aGF0KQorICAgICAgICAgICAgOiBjb3B5X2NvbnN0cnVjdG9yKHZh
bHVlbGVzc190e30pIHsKKyAgICAgICAgICB0aGlzLT5nZW5lcmljX2NvbnN0cnVjdCgqdGhpcywg
dGhhdCk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0NPTlNUUlVDVE9S
KAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0b3Io
Y29uc3QgY29weV9jb25zdHJ1Y3RvciAmKSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFS
SUFOVF9DT1BZX0NPTlNUUlVDVE9SCisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzPgor
ICAgIGNsYXNzIGFzc2lnbm1lbnQgOiBwdWJsaWMgY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+IHsK
KyAgICAgIHVzaW5nIHN1cGVyID0gY29weV9jb25zdHJ1Y3RvcjxUcmFpdHM+OworCisgICAgICBw
dWJsaWM6CisgICAgICBJTkhFUklUSU5HX0NUT1IoYXNzaWdubWVudCwgc3VwZXIpCisgICAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwg
dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgIGlubGluZSAvKiBhdXRvICYgKi8gYXV0byBlbXBsYWNl
KEFyZ3MgJiYuLi4gYXJncykKKyAgICAgICAgICAtPiBkZWNsdHlwZSh0aGlzLT5jb25zdHJ1Y3Rf
YWx0KGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KSkgeworICAgICAgICB0aGlzLT5kZXN0cm95KCk7CisgICAgICAgIGF1dG8gJnJlc3VsdCA9IHRo
aXMtPmNvbnN0cnVjdF9hbHQoYWNjZXNzOjpiYXNlOjpnZXRfYWx0PEk+KCp0aGlzKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAgICAgdGhpcy0+aW5kZXhfID0gSTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgIH0KKworICAgICAgcHJvdGVjdGVkOgorI2lmbmRlZiBNUEFSS19H
RU5FUklDX0xBTUJEQVMKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGF0PgorICAgICAgc3Ry
dWN0IGFzc2lnbmVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRoaXNBbHQsIHR5cGVu
YW1lIFRoYXRBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoVGhpc0FsdCAmdGhp
c19hbHQsIFRoYXRBbHQgJiZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHNlbGYtPmFzc2ln
bl9hbHQodGhpc19hbHQsIG1wYXJrOjpsaWI6OmZvcndhcmQ8VGhhdEFsdD4odGhhdF9hbHQpLnZh
bHVlKTsKKyAgICAgICAgfQorICAgICAgICBhc3NpZ25tZW50ICpzZWxmOworICAgICAgfTsKKyNl
bmRpZgogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHNpemVfdCBfVmFyaWFudEluZGV4LHB0
cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXIyewotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3Is
X1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9W
YXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICByZXR1cm4gKF9fYXJnX3NlbGVjdG9yPF9WYXJp
YW50SW5kZXgtMT4oX192Li4uKS5pbmRleCgpPT1fSW5kZXgpCi0gICAgICAgICAgICA/IF9fdmlz
aXRfaGVscGVyPF9WYXJpYW50SW5kZXgtMSxfX2luZGV4X3NlcXVlbmNlPF9JbmRleCxfSW5kaWNl
cy4uLj4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4u
KQotICAgICAgICAgICAgOiBfX3Zpc2l0X2hlbHBlcjI8X0luZGV4LTEsX1ZhcmlhbnRJbmRleCxf
SW5kaWNlcy4uLj46Ol9fdmlzaXQoX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9f
dikuLi4pOwotICAgIH0KLX07CisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5h
bWUgVCwgdHlwZW5hbWUgQXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduX2FsdChhbHQ8SSwg
VD4gJmEsIEFyZyAmJmFyZykgeworICAgICAgICBpZiAodGhpcy0+aW5kZXgoKSA9PSBJKSB7Cisj
aWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGUgOiA0MjQ0KQorI2VuZGlmCisgICAgICAgICAgYS52YWx1ZSA9IG1wYXJrOjpsaWI6OmZv
cndhcmQ8QXJnPihhcmcpOworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQor
I2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg
IHZvaWQgb3BlcmF0b3IoKShzdGQ6OnRydWVfdHlwZSkgY29uc3QgeworICAgICAgICAgICAgICB0
aGlzXy0+ZW1wbGFjZTxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdm9pZCBvcGVyYXRvcigpKHN0ZDo6ZmFsc2VfdHlwZSkgY29u
c3QgeworICAgICAgICAgICAgICB0aGlzXy0+ZW1wbGFjZTxJPihUKG1wYXJrOjpsaWI6OmZvcndh
cmQ8QXJnPihhcmdfKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzaWdubWVudCAq
dGhpc187CisgICAgICAgICAgICBBcmcgJiZhcmdfOworICAgICAgICAgIH0gaW1wbHt0aGlzLCBt
cGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnKX07CisgICAgICAgICAgaW1wbChtcGFyazo6bGli
Ojpib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25z
dHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlIHx8CisgICAgICAgICAgICAgICAgICAgIXN0ZDo6aXNf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VD46OnZhbHVlPnt9KTsKKyAgICAgICAgfQorICAg
ICAgfQogCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJkaWZmX3QgLi4uIF9JbmRp
Y2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudEluZGV4LF9JbmRpY2VzLi4u
PnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRz
PgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90
eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3Im
LF9WYXJpYW50cyYmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93X2JhZF92YXJpYW50X2Fj
Y2Vzczx0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1Zhcmlh
bnRzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFudCIpOwotICAgIH0KLX07
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIGlubGluZSB2b2lkIGdlbmVy
aWNfYXNzaWduKFRoYXQgJiZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgJiYgdGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAg
ICAvLyBkbyBub3RoaW5nLgorICAgICAgICB9IGVsc2UgaWYgKHRoYXQudmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKSB7CisgICAgICAgICAgdGhpcy0+ZGVzdHJveSgpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIHZpc2l0YXRpb246OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAg
ICAgdGhhdC5pbmRleCgpLAorI2lmZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAg
ICAgICBbdGhpc10oYXV0byAmdGhpc19hbHQsIGF1dG8gJiZ0aGF0X2FsdCkgeworICAgICAgICAg
ICAgICAgIHRoaXMtPmFzc2lnbl9hbHQoCisgICAgICAgICAgICAgICAgICAgIHRoaXNfYWx0LCBt
cGFyazo6bGliOjpmb3J3YXJkPGRlY2x0eXBlKHRoYXRfYWx0KT4odGhhdF9hbHQpLnZhbHVlKTsK
KyAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgYXNzaWduZXI8VGhhdD57dGhp
c30KKyNlbmRpZgorICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgICp0aGlzLAorICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFRoYXQ+KHRoYXQpKTsKKyAgICAgICAgfQorICAg
ICAgfQorICAgIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFy
aWFudF90eXBlX2NvdW50OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjptb3ZlX2Fzc2lnbmFibGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50
OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF90eXBl
X2NvdW50PFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
X192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJp
YW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJpYW50Jj57Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudD46
Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudD4KLXN0cnVjdCBfX3Zh
cmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBjb25zdCY+ewotICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1ZhcmlhbnQ+OjpfX3ZhbHVlOwot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LF9faW5kZXhfc2VxdWVuY2U8
X0luZGljZXMuLi4+PnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1l
IC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zp
c2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi0gICAgX192
aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4uLiBfX3YpewotICAgICAgICBy
ZXR1cm4gX192aXNpdF9oZWxwZXIyPAotICAgICAgICAgICAgX192YXJpYW50X3R5cGVfY291bnQ8
Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDwKLSAgICAgICAgICAg
ICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9WYXJpYW50cy4uLj46Ol9fdHlwZT46Ol9fdmFsdWUt
MSwKLSAgICAgICAgICAgIF9WYXJpYW50SW5kZXgsX0luZGljZXMuLi4+OjpfX3Zpc2l0KAotICAg
ICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzJiY+KF9fdikuLi4p
OwotICAgIH0KLX07CisjZGVmaW5lIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKG1vdmVf
YXNzaWduYWJsZV90cmFpdCwgZGVmaW5pdGlvbikgXAorICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g
VHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xh
c3MgbW92ZV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4sIG1vdmVfYXNzaWduYWJsZV90cmFpdD4g
ICAgICAgICAgICBcCisgICAgICA6IHB1YmxpYyBhc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVzaW5nIHN1cGVyID0gYXNzaWdu
bWVudDx0cmFpdHM8VHMuLi4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIElOSEVSSVRJTkdfQ1RPUihtb3Zl
X2Fzc2lnbm1lbnQsIHN1cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudChjb25z
dCBtb3ZlX2Fzc2lnbm1lbnQgJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgIFwKKyAgICBt
b3ZlX2Fzc2lnbm1lbnQobW92ZV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgfm1vdmVfYXNzaWdubWVudCgpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1vdmVfYXNzaWdubWVudCAmb3Bl
cmF0b3I9KGNvbnN0IG1vdmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgIFwKKyAgICBk
ZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAor
ICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2lnbm1l
bnQgJm9wZXJhdG9yPShtb3ZlX2Fzc2lnbm1lbnQgJiZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAg
IE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxl
LAorICAgICAgICBtb3ZlX2Fzc2lnbm1lbnQgJgorICAgICAgICBvcGVyYXRvcj0obW92ZV9hc3Np
Z25tZW50ICYmdGhhdCkgbm9leGNlcHQoCisgICAgICAgICAgICBhbGwoKHN0ZDo6aXNfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPFRzPjo6dmFsdWUpLi4uKSkgeworICAgICAgICAg
IHRoaXMtPmdlbmVyaWNfYXNzaWduKG1wYXJrOjpsaWI6Om1vdmUodGhhdCkpOworICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgfSk7CisKKyAgICBNUEFSS19WQVJJQU5UX01PVkVfQVNT
SUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2Fzc2ln
bm1lbnQgJm9wZXJhdG9yPShtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRl
ZiBNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmNvcHlfYXNzaWduYWJsZV90cmFpdD4KKyAgICBjbGFz
cyBjb3B5X2Fzc2lnbm1lbnQ7CisKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1F
TlQoY29weV9hc3NpZ25hYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICBjbGFzcyBjb3B5X2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgY29weV9hc3NpZ25hYmxl
X3RyYWl0PiAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIG1vdmVfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIg
PSBtb3ZlX2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPj47ICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19D
VE9SKGNvcHlfYXNzaWdubWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25t
ZW50KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfYXNzaWdubWVudChjb3B5X2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB+Y29weV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGNvcHlfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvcHlfYXNzaWdubWVudCAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lH
Tk1FTlQoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlf
YXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAmdGhhdCkgPSBkZWZh
dWx0Oyk7CisKKyAgICBNUEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJh
aXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3Qg
Y29weV9hc3NpZ25tZW50ICZ0aGF0KSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24o
dGhhdCk7CisgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKworICAgIE1QQVJL
X1ZBUklBTlRfQ09QWV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisg
ICAgICAgIGNvcHlfYXNzaWdubWVudCAmb3BlcmF0b3I9KGNvbnN0IGNvcHlfYXNzaWdubWVudCAm
KSA9IGRlbGV0ZTspOworCisjdW5kZWYgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICBjbGFzcyBpbXBsIDogcHVibGljIGNv
cHlfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlf
YXNzaWdubWVudDx0cmFpdHM8VHMuLi4+PjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJ
VElOR19DVE9SKGltcGwsIHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKwor
ICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGlu
ZSB2b2lkIGFzc2lnbihBcmcgJiZhcmcpIHsKKyAgICAgICAgdGhpcy0+YXNzaWduX2FsdChhY2Nl
c3M6OmJhc2U6OmdldF9hbHQ8ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1w
YXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpKTsKKyAgICAgIH0KKworICAgICAgaW5saW5lIHZv
aWQgc3dhcChpbXBsICZ0aGF0KSB7CisgICAgICAgIGlmICh0aGlzLT52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkgJiYgdGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAv
LyBkbyBub3RoaW5nLgorICAgICAgICB9IGVsc2UgaWYgKHRoaXMtPmluZGV4KCkgPT0gdGhhdC5p
bmRleCgpKSB7CisgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KHRoaXMt
PmluZGV4KCksCisjaWZkZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGF1dG8gJnRoaXNfYWx0LCBhdXRvICZ0aGF0X2Fs
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHN0
ZDo6c3dhcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
KHRoaXNfYWx0LnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhhdF9hbHQudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2FwcGVye30KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICBpbXBsICpsaHMgPSB0aGlzOworICAgICAgICAgIGltcGwg
KnJocyA9IG1wYXJrOjpsaWI6OmFkZHJlc3NvZih0aGF0KTsKKyAgICAgICAgICBpZiAobGhzLT5t
b3ZlX25vdGhyb3coKSAmJiAhcmhzLT5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgc3Rk
Ojpzd2FwKGxocywgcmhzKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaW1wbCB0bXAobXBhcms6
OmxpYjo6bW92ZSgqcmhzKSk7CisjaWZkZWYgTVBBUktfRVhDRVBUSU9OUworICAgICAgICAgIC8v
IEVYVEVOU0lPTjogV2hlbiB0aGUgbW92ZSBjb25zdHJ1Y3Rpb24gb2YgYGxoc2AgaW50byBgcmhz
YCB0aHJvd3MKKyAgICAgICAgICAvLyBhbmQgYHRtcGAgaXMgbm90aHJvdyBtb3ZlIGNvbnN0cnVj
dGlibGUgdGhlbiB3ZSBtb3ZlIGB0bXBgIGJhY2sKKyAgICAgICAgICAvLyBpbnRvIGByaHNgIGFu
ZCBwcm92aWRlIHRoZSBzdHJvbmcgZXhjZXB0aW9uIHNhZmV0eSBndWFyYW50ZWUuCisgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJr
OjpsaWI6Om1vdmUoKmxocykpOworICAgICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICAg
ICAgaWYgKHRtcC5tb3ZlX25vdGhyb3coKSkgeworICAgICAgICAgICAgICB0aGlzLT5nZW5lcmlj
X2NvbnN0cnVjdCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKHRtcCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdGhyb3c7CisgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICB0aGlzLT5n
ZW5lcmljX2NvbnN0cnVjdCgqcmhzLCBtcGFyazo6bGliOjptb3ZlKCpsaHMpKTsKKyNlbmRpZgor
ICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpsaHMsIG1wYXJrOjpsaWI6Om1vdmUo
dG1wKSk7CisgICAgICAgIH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3Is
dHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX211bHRpX3Zpc2l0
b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlCi12aXNpdChfVmlz
aXRvciYmIF9fdmlzaXRvcixfVmFyaWFudHMmJiAuLi4gX192KXsKLSAgICByZXR1cm4gX192aXNp
dF9oZWxwZXI8c2l6ZW9mLi4uKF9WYXJpYW50cyksX19pbmRleF9zZXF1ZW5jZTw+Pjo6X192aXNp
dCgKLSAgICAgICAgX192aXNpdG9yLHN0ZDo6Zm9yd2FyZDxfVmFyaWFudHM+KF9fdikuLi4pOwot
fQorICAgICAgcHJpdmF0ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICBz
dHJ1Y3Qgc3dhcHBlciB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBl
bmFtZSBUaGF0QWx0PgorICAgICAgICBpbmxpbmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRo
aXNfYWx0LCBUaGF0QWx0ICZ0aGF0X2FsdCkgY29uc3QgeworICAgICAgICAgIHVzaW5nIHN0ZDo6
c3dhcDsKKyAgICAgICAgICBzd2FwKHRoaXNfYWx0LnZhbHVlLCB0aGF0X2FsdC52YWx1ZSk7Cisg
ICAgICAgIH0KKyAgICAgIH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBf
X2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gKF9fbGhz
LmluZGV4KCk9PV9fcmhzLmluZGV4KCkpICYmCi0gICAgICAgICgoX19saHMuaW5kZXgoKT09LTEp
IHx8Ci0gICAgICAgICBfX2VxdWFsaXR5X29wX3RhYmxlPFZhcmlhbnQ8X1R5cGVzLi4uPj46Ol9f
ZXF1YWxpdHlfY29tcGFyZVtfX2xocy5pbmRleCgpXSgKLSAgICAgICAgICAgICBfX2xocyxfX3Jo
cykpOwotfQorICAgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIG1vdmVfbm90aHJvdygpIGNvbnN0
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fAorICAg
ICAgICAgICAgICAgbXBhcms6OmxpYjo6YXJyYXk8Ym9vbCwgc2l6ZW9mLi4uKFRzKT57CisgICAg
ICAgICAgICAgICAgICAge3N0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2
YWx1ZS4uLn0KKyAgICAgICAgICAgICAgIH1bdGhpcy0+aW5kZXgoKV07CisgICAgICB9CisgICAg
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz09X19yaHMpOwotfQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3Qgb3ZlcmxvYWQ7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwoVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAg
ICByZXR1cm4gKF9fbGhzLmluZGV4KCk8X19yaHMuaW5kZXgoKSkgfHwKLSAgICAgICAgKChfX2xo
cy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAgKChfX2xocy5pbmRleCgpIT0t
MSkgJiYKLSAgICAgICAgICBfX2xlc3NfdGhhbl9vcF90YWJsZTxWYXJpYW50PF9UeXBlcy4uLj4+
OjoKLSAgICAgICAgICBfX2xlc3NfdGhhbl9jb21wYXJlW19fbGhzLmluZGV4KCldKF9fbGhzLF9f
cmhzKSkpOwotfQorICAgIHRlbXBsYXRlIDw+CisgICAgc3RydWN0IG92ZXJsb2FkPD4geyB2b2lk
IG9wZXJhdG9yKCkoKSBjb25zdCB7fSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIF9fcmhzPF9f
bGhzOwotfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICBz
dHJ1Y3Qgb3ZlcmxvYWQ8VCwgVHMuLi4+IDogb3ZlcmxvYWQ8VHMuLi4+IHsKKyAgICAgIHVzaW5n
IG92ZXJsb2FkPFRzLi4uPjo6b3BlcmF0b3IoKTsKKyAgICAgIG1wYXJrOjpsaWI6OmlkZW50aXR5
PFQ+IG9wZXJhdG9yKCkoVCkgY29uc3QgeyByZXR1cm4ge307IH0KKyAgICB9OwogCi10ZW1wbGF0
ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShWYXJpYW50
PF9UeXBlcy4uLj4gY29uc3QmIF9fbGhzLFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19yaHMp
ewotICAgIHJldHVybiAhKF9fbGhzPF9fcmhzKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgYmVzdF9tYXRjaF90ID0KKyAgICAgICAgdHlw
ZW5hbWUgbXBhcms6OmxpYjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj46
OnR5cGU7CisKKyAgfSAgLy8gZGV0YWlsCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBjbGFzcyB2YXJpYW50IHsKKyAgICBzdGF0aWNfYXNzZXJ0KDAgPCBzaXplb2YuLi4oVHMpLAor
ICAgICAgICAgICAgICAgICAgInZhcmlhbnQgbXVzdCBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBh
bHRlcm5hdGl2ZS4iKTsKKworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6
OmlzX2FycmF5PFRzPjo6dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJp
YW50IGNhbiBub3QgaGF2ZSBhbiBhcnJheSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisg
ICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfcmVmZXJlbmNlPFRzPjo6
dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IGNhbiBub3QgaGF2
ZSBhIHJlZmVyZW5jZSB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgc3RhdGljX2Fz
c2VydChtcGFyazo6bGliOjphbGw8IXN0ZDo6aXNfdm9pZDxUcz46OnZhbHVlLi4uPjo6dmFsdWUs
CisgICAgICAgICAgICAgICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSB2b2lkIHR5cGUgYXMg
YW4gYWx0ZXJuYXRpdmUuIik7CisKKyAgICBwdWJsaWM6CisgICAgdGVtcGxhdGUgPAorICAgICAg
ICB0eXBlbmFtZSBGcm9udCA9IG1wYXJrOjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8MCwgVHMu
Li4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2RlZmF1bHRfY29u
c3RydWN0aWJsZTxGcm9udD46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgY29uc3RleHBy
IHZhcmlhbnQoKSBub2V4Y2VwdCgKKyAgICAgICAgc3RkOjppc19ub3Rocm93X2RlZmF1bHRfY29u
c3RydWN0aWJsZTxGcm9udD46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4
X3Q8MD57fSkge30KKworICAgIHZhcmlhbnQoY29uc3QgdmFyaWFudCAmKSA9IGRlZmF1bHQ7Cisg
ICAgdmFyaWFudCh2YXJpYW50ICYmKSA9IGRlZmF1bHQ7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQXJnLAorICAgICAgICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwhc3RkOjppc19z
YW1lPG1wYXJrOjpsaWI6OmRlY2F5X3Q8QXJnPiwgdmFyaWFudD46OnZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwLAorICAgICAgICAgICAgICB0eXBlbmFtZSBU
ID0gZGV0YWlsOjpiZXN0X21hdGNoX3Q8QXJnLCBUcy4uLj4sCisgICAgICAgICAgICAgIHN0ZDo6
c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisg
ICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJs
ZTxULCBBcmc+Ojp2YWx1ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50
KEFyZyAmJmFyZykgbm9leGNlcHQoCisgICAgICAgIHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3Rp
YmxlPFQsIEFyZz46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57
fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZykpIHt9CisKKyAgICB0ZW1wbGF0ZSA8Cisg
ICAgICAgIHN0ZDo6c2l6ZV90IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAg
IHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwK
KyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQs
IEFyZ3MuLi4+Ojp2YWx1ZSwgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhw
ciB2YXJpYW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+LAorICAgICAgICBBcmdzICYm
Li4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57
fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikge30KKworICAgIHRlbXBsYXRl
IDwKKyAgICAgICAgc3RkOjpzaXplX3QgSSwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAg
IHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFyazo6bGliOjp0eXBl
X3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lm
X3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSBleHBsaWNpdCBj
b25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhfdDxJPiwKKyAgICAgICAg
c3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBu
b2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19u
b3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGluX3BsYWNlX2lu
ZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisK
KyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVuYW1lLi4u
IEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFl
PFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6
aXNfY29uc3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGlu
ZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfdHlwZV90PFQ+
LAorICAgICAgICBBcmdzICYmLi4uIGFyZ3MpIG5vZXhjZXB0KHN0ZDo6aXNfbm90aHJvd19jb25z
dHJ1Y3RpYmxlPFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6IGltcGxfKGlu
X3BsYWNlX2luZGV4X3Q8ST57fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikg
e30KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5h
bWUgVXAsCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkg
PSBkZXRhaWw6OmZpbmRfaW5kZXhfc2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1w
YXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAg
ICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5
cGVfdDxUPiwKKyAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwKKyAgICAgICAg
QXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpc19ub3Rocm93X2NvbnN0cnVjdGlibGU8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJncy4uLj46OnZhbHVlKQorICAgICAgICA6
IGltcGxfKGluX3BsYWNlX2luZGV4X3Q8ST57fSwgaWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJn
cz4oYXJncykuLi4pIHt9CisKKyAgICB+dmFyaWFudCgpID0gZGVmYXVsdDsKKworICAgIHZhcmlh
bnQgJm9wZXJhdG9yPShjb25zdCB2YXJpYW50ICYpID0gZGVmYXVsdDsKKyAgICB2YXJpYW50ICZv
cGVyYXRvcj0odmFyaWFudCAmJikgPSBkZWZhdWx0OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IEFyZywKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfc2Ft
ZTxtcGFyazo6bGliOjpkZWNheV90PEFyZz4sIHZhcmlhbnQ+Ojp2YWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMCwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVCA9
IGRldGFpbDo6YmVzdF9tYXRjaF90PEFyZywgVHMuLi4+LAorICAgICAgICAgICAgICBzdGQ6OnNp
emVfdCBJID0gZGV0YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAg
ICAgICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDwoc3RkOjppc19hc3NpZ25hYmxlPFQg
JiwgQXJnPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpp
c19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdmFyaWFudCAmb3BlcmF0b3I9KEFyZyAmJmFy
Zykgbm9leGNlcHQoCisgICAgICAgIChzdGQ6OmlzX25vdGhyb3dfYXNzaWduYWJsZTxUICYsIEFy
Zz46OnZhbHVlICYmCisgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBB
cmc+Ojp2YWx1ZSkpIHsKKyAgICAgIGltcGxfLnRlbXBsYXRlIGFzc2lnbjxJPihtcGFyazo6bGli
Ojpmb3J3YXJkPEFyZz4oYXJnKSk7CisgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZS4uLiBB
cmdzLAorICAgICAgICB0eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRf
dDxJLCBUcy4uLj4sCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29u
c3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlubGluZSBUICZl
bXBsYWNlKEFyZ3MgJiYuLi4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVt
cGxhY2U8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBlbmFtZSBV
cCwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJr
OjpsaWI6OnR5cGVfcGFja19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGli
OjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAm
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4u
Pjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5l
IFQgJmVtcGxhY2Uoc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiBpbCwgQXJncyAmJi4uLiBhcmdz
KSB7CisgICAgICByZXR1cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihpbCwgbXBhcms6Omxp
Yjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAg
ICAgICB0eXBlbmFtZSBULAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6
OnNpemVfdCBJID0gZGV0YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAor
ICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwg
QXJncy4uLj46OnZhbHVlLCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShBcmdzICYm
Li4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KG1wYXJr
OjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDwK
KyAgICAgICAgdHlwZW5hbWUgVCwKKyAgICAgICAgdHlwZW5hbWUgVXAsCisgICAgICAgIHR5cGVu
YW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhf
c2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJl
dHVybiBpbXBsXy50ZW1wbGF0ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgdmFsdWVs
ZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy52
YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCk7CisgICAgfQorCisgICAgaW5saW5lIGNvbnN0ZXhwciBz
dGQ6OnNpemVfdCBpbmRleCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICAgIHJldHVybiBpbXBsXy5p
bmRleCgpOworICAgIH0KKworICAgIHRlbXBsYXRlIDwKKyAgICAgICAgYm9vbCBEdW1teSA9IHRy
dWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PG1wYXJrOjpsaWI6OmFsbDxEdW1t
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RkOjppc19tb3ZlX2NvbnN0
cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjppc19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgdm9pZCBzd2FwKHZhcmlh
bnQgJnRoYXQpIG5vZXhjZXB0KAorICAgICAgICBtcGFyazo6bGliOjphbGw8KHN0ZDo6aXNfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8VHM+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgICAg
bXBhcms6OmxpYjo6aXNfbm90aHJvd19zd2FwcGFibGU8VHM+Ojp2YWx1ZSkuLi4+Ojp2YWx1ZSkg
eworICAgICAgaW1wbF8uc3dhcCh0aGF0LmltcGxfKTsKKyAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgIGRldGFpbDo6aW1wbDxUcy4uLj4gaW1wbF87CisKKyAgICBmcmllbmQgc3RydWN0IGRldGFp
bDo6YWNjZXNzOjp2YXJpYW50OworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjp2aXNpdGF0aW9u
Ojp2YXJpYW50OworICB9OworCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4u
LiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZ2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIHYuaW5kZXgoKSA9PSBJOwor
ICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUg
Y29uc3RleHByIGJvb2wgaG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYp
IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gaG9sZHNfYWx0ZXJuYXRpdmU8ZGV0YWlsOjpmaW5kX2lu
ZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICBuYW1lc3BhY2UgZGV0
YWlsIHsKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBzdHJ1
Y3QgZ2VuZXJpY19nZXRfaW1wbCB7CisgICAgICBjb25zdGV4cHIgZ2VuZXJpY19nZXRfaW1wbChp
bnQpIHt9CisKKyAgICAgIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVyYXRvcigpKFYgJiZ2KSBj
b25zdAorICAgICAgICBBVVRPX1JFRlJFRl9SRVRVUk4oCisgICAgICAgICAgICBhY2Nlc3M6OnZh
cmlhbnQ6OmdldF9hbHQ8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSkudmFsdWUpCisgICAg
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPD0oVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4g
Y29uc3QmIF9fcmhzKXsKLSAgICByZXR1cm4gIShfX2xocz5fX3Jocyk7Ci19CisgICAgdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFY+CisgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRP
X1JFRlJFRiBnZW5lcmljX2dldChWICYmdikKKyAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihnZW5l
cmljX2dldF9pbXBsPEksIFY+KAorICAgICAgICAgIGhvbGRzX2FsdGVybmF0aXZlPEk+KHYpID8g
MCA6ICh0aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoKSwgMCkpKAorICAgICAgICAgIG1wYXJrOjps
aWI6OmZvcndhcmQ8Vj4odikpKQorICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxh
dGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZh
cmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIHZhcmlh
bnQ8VHMuLi4+ICZ2KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7Cisg
IH0KKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGlu
ZSBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+PiAmJmdl
dCgKKyAgICAgIHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVybiBkZXRhaWw6OmdlbmVy
aWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJmdldCgKKyAgICAgIGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZ2KSB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19nZXQ8ST4odik7
CisgIH0KKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgIGlu
bGluZSBjb25zdGV4cHIgY29uc3QgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMu
Li4+PiAmJmdldCgKKyAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICYmdikgeworICAgIHJldHVy
biBkZXRhaWw6OmdlbmVyaWNfZ2V0PEk+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IFQgJmdldCh2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8ZGV0YWlsOjpmaW5k
X2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgVCAmJmdldCh2
YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9j
aGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjpsaWI6Om1vdmUodikpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IGNvbnN0IFQgJmdldChjb25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBnZXQ8
ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7CisgIH0KKwor
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4
cHIgY29uc3QgVCAmJmdldChjb25zdCB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAgICByZXR1cm4g
Z2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KG1wYXJrOjps
aWI6Om1vdmUodikpOworICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVj4KKyAgICBpbmxpbmUgY29uc3RleHByIC8qIGF1
dG8gKiAqLyBBVVRPIGdlbmVyaWNfZ2V0X2lmKFYgKnYpIG5vZXhjZXB0CisgICAgICBBVVRPX1JF
VFVSTih2ICYmIGhvbGRzX2FsdGVybmF0aXZlPEk+KCp2KQorICAgICAgICAgICAgICAgICAgICAg
ID8gbXBhcms6OmxpYjo6YWRkcmVzc29mKGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPigqdiku
dmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgOiBudWxscHRyKQorCisgIH0gIC8vIG5hbWVz
cGFjZSBkZXRhaWwKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+
CisgIGlubGluZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDx2YXJpYW50X2Fs
dGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUcy4uLj4+PgorICBnZXRfaWYodmFyaWFudDxUcy4uLj4g
KnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldF9pZjxJPih2KTsK
KyAgfQorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5s
aW5lIGNvbnN0ZXhwciBtcGFyazo6bGliOjphZGRfcG9pbnRlcl90PAorICAgICAgY29uc3QgdmFy
aWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAgZ2V0X2lmKGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6Z2VuZXJpY19n
ZXRfaWY8ST4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4g
VHM+CisgIGlubGluZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50ZXJfdDxUPgorICBn
ZXRfaWYodmFyaWFudDxUcy4uLj4gKnYpIG5vZXhjZXB0IHsKKyAgICByZXR1cm4gZ2V0X2lmPGRl
dGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYpOworICB9CisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHBy
IG1wYXJrOjpsaWI6OmFkZF9wb2ludGVyX3Q8Y29uc3QgVD4KKyAgZ2V0X2lmKGNvbnN0IHZhcmlh
bnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRf
aW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0
eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlv
bjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjplcXVhbF90bzsKKyNpZmRlZiBNUEFS
S19DUFAxNF9DT05TVEVYUFIKKyAgICBpZiAobGhzLmluZGV4KCkgIT0gcmhzLmluZGV4KCkpIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgcmV0dXJu
IHRydWU7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBl
cXVhbF90b3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiBsaHMuaW5kZXgoKSA9PSBy
aHMuaW5kZXgoKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8
fAorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVfYXQobGhzLmluZGV4KCksIGVxdWFs
X3Rve30sIGxocywgcmhzKSk7CisjZW5kaWYKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307Cisg
IHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yIT0oY29uc3QgdmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFp
bDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3RfZXF1YWxf
dG87CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRleCgpICE9
IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19ieV9leGNl
cHRpb24oKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9h
dChsaHMuaW5kZXgoKSwgbm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0
dXJuIGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhzLnZhbHVl
bGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRfdmFsdWVf
YXQobGhzLmluZGV4KCksIG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0K
IAotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0YXRlIGNvbnN0JixNb25v
c3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQotY29uc3RleHByIGlubGluZSBib29sIG9wZXJh
dG9yIT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30K
LWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0
YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRv
cjw9KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNv
bnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUg
Y29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcjwo
TW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLQotc3Ry
dWN0IF9faGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIHNp
emVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAgICByZXR1cm4gc3RkOjpo
YXNoPF9UeXBlPigpKF9feCk7Ci0gICAgfQotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRz
PgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+
ICZsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxU
cy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAg
ICB1c2luZyBtcGFyazo6bGliOjpsZXNzOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPiByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJl
dHVybiAhcmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZh
bHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8Cisg
ICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2
YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsK
KyNlbmRpZgorICB9CiAKLS8vIC0tIFdlYktpdCBBZGRpdGlvbnMgLS0KKyAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZh
cmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQ
UDE0X0NPTlNURVhQUgorICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1
cm4gZmFsc2U7CisgICAgaWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0
cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAobGhzLmluZGV4KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cyk7CisjZWxzZQorICAgIHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgor
ICAgICAgICAgICAocmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+
IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkg
JiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3Jl
YXRlcnt9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPGNsYXNzIFYsIGNs
YXNzLi4uIEY+Ci1hdXRvIHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlz
aXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYp
KSkKLXsKLSAgICByZXR1cm4gdmlzaXQobWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4u
KSwgc3RkOjpmb3J3YXJkPFY+KHYpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAm
bGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRz
Li4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAg
IHVzaW5nIG1wYXJrOjpsaWI6Omxlc3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RF
WFBSCisgICAgaWYgKGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOwor
ICAgIGlmIChyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKGxocy5pbmRleCgpIDwgcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMu
aW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6
OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNl
bHNlCisgICAgcmV0dXJuIGxocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAg
ICAgKCFyaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmlu
ZGV4KCkgPCByaHMuaW5kZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMu
aW5kZXgoKSAmJgorICAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5k
ZXgoKSwgbGVzc19lcXVhbHt9LCBsaHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi19IC8vIG5h
bWVzcGFjZSBXVEYKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I+PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7Cisg
ICAgdXNpbmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjps
aWI6OmdyZWF0ZXJfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYg
KHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMu
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRl
eCgpID4gcmhzLmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJo
cy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVl
X2F0KGxocy5pbmRleCgpLCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAg
cmV0dXJuIHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMu
dmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiBy
aHMuaW5kZXgoKSB8fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAm
JgorICAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAg
ICAgIGxocy5pbmRleCgpLCBncmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgor
ICB9CiAKLW5hbWVzcGFjZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlw
ZW5hbWUuLi4gVnM+CisgIGlubGluZSBjb25zdGV4cHIgREVDTFRZUEVfQVVUTyB2aXNpdChWaXNp
dG9yICYmdmlzaXRvciwgVnMgJiYuLi4gdnMpCisgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisg
ICAgICAgIChkZXRhaWw6OmFsbCghdnMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4uKQorICAg
ICAgICAgICAgID8gKHZvaWQpMAorICAgICAgICAgICAgIDogdGhyb3dfYmFkX3ZhcmlhbnRfYWNj
ZXNzKCkpLAorICAgICAgICBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ6OnZpc2l0X3ZhbHVl
KG1wYXJrOjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvciksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4o
dnMpLi4uKSkKKworICBzdHJ1Y3QgbW9ub3N0YXRlIHt9OworCisgIGlubGluZSBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gZmFsc2U7CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9z
dGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAg
aW5saW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0IHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlubGluZSBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj49KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShtb25vc3Rh
dGUsIG1vbm9zdGF0ZSkgbm9leGNlcHQgeworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgaW5s
aW5lIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhj
ZXB0IHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4g
VHM+CisgIGlubGluZSBhdXRvIHN3YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAg
ICAgICAgICB2YXJpYW50PFRzLi4uPiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChy
aHMpKSkKKyAgICAgIC0+IGRlY2x0eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChy
aHMpOworICB9CisKKyAgbmFtZXNwYWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgdHlwZW5hbWUuLi4+CisgICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5h
bWVzcGFjZSBoYXNoIHsKKworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+
CisgICAgICBjb25zdGV4cHIgYm9vbCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJl
dHVybiBzdGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAg
ICAgIHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAg
ICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46
OnZhbHVlOworICAgICAgfQorCisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNv
bnN0ZXhwciBib29sIGlzX2VuYWJsZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8
Sz47CisgICAgICAgIHJldHVybiBtZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAg
ICAgICAgICAgc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAg
ICAgICAgICAgICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAg
ICAgICAgIHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAg
IH0gIC8vIG5hbWVzcGFjZSBoYXNoCisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5k
ZWYgQVVUTworI3VuZGVmIEFVVE9fUkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVm
IEFVVE9fUkVGUkVGX1JFVFVSTgorCisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xU
WVBFX0FVVE9fUkVUVVJOCisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3Qg
aGFzaDxkZXRhaWw6OmVuYWJsZWRfdHlwZTwKKyAgICAgIHZhcmlhbnQ8VHMuLi4+LAorICAgICAg
bXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8bXBhcms6OmxpYjo6YWxsPGRldGFpbDo6aGFzaDo6aXNf
ZW5hYmxlZDwKKyAgICAgICAgICBtcGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDxUcz4+KCkuLi4+
Ojp2YWx1ZT4+PiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IHZhcmlhbnQ8VHMuLi4+Owor
ICAgIHVzaW5nIHJlc3VsdF90eXBlID0gc3RkOjpzaXplX3Q7CisKKyAgICBpbmxpbmUgcmVzdWx0
X3R5cGUgb3BlcmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICZ2KSBjb25zdCB7CisgICAgICB1
c2luZyBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgICAgICBzdGQ6OnNpemVfdCByZXN1
bHQgPQorICAgICAgICAgIHYudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpCisgICAgICAgICAgICAg
ID8gMjk5NzkyNDU4ICAvLyBSYW5kb20gdmFsdWUgY2hvc2VuIGJ5IHRoZSB1bml2ZXJzZSB1cG9u
IGNyZWF0aW9uCisgICAgICAgICAgICAgIDogdmFyaWFudDo6dmlzaXRfYWx0KAorI2lmZGVmIE1Q
QVJLX0dFTkVSSUNfTEFNQkRBUworICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvICZh
bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICB1c2luZyBhbHRfdHlwZSA9IG1wYXJrOjpsaWI6
OmRlY2F5X3Q8ZGVjbHR5cGUoYWx0KT47CisgICAgICAgICAgICAgICAgICAgICAgdXNpbmcgdmFs
dWVfdHlwZSA9IG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBhbHRfdHlwZTo6dmFsdWVfdHlwZT47CisgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGhhc2g8dmFsdWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBoYXNoZXJ7fQorI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgdik7CisgICAgICByZXR1
cm4gaGFzaF9jb21iaW5lKHJlc3VsdCwgaGFzaDxzdGQ6OnNpemVfdD57fSh2LmluZGV4KCkpKTsK
KyAgICB9CiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNoPFdURjo6TW9ub3N0YXRlPnsKLSAgICBz
aXplX3Qgb3BlcmF0b3IoKShXVEY6Ok1vbm9zdGF0ZSkgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0
dXJuIDQyOworICAgIHByaXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRBUworICAg
IHN0cnVjdCBoYXNoZXIgeworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFsdD4KKyAgICAgIGlu
bGluZSBzdGQ6OnNpemVfdCBvcGVyYXRvcigpKGNvbnN0IEFsdCAmYWx0KSBjb25zdCB7CisgICAg
ICAgIHVzaW5nIGFsdF90eXBlID0gbXBhcms6OmxpYjo6ZGVjYXlfdDxBbHQ+OworICAgICAgICB1
c2luZyB2YWx1ZV90eXBlID0KKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90
PHR5cGVuYW1lIGFsdF90eXBlOjp2YWx1ZV90eXBlPjsKKyAgICAgICAgcmV0dXJuIGhhc2g8dmFs
dWVfdHlwZT57fShhbHQudmFsdWUpOworICAgICAgfQorICAgIH07CisjZW5kaWYKKworICAgIHN0
YXRpYyBzdGQ6OnNpemVfdCBoYXNoX2NvbWJpbmUoc3RkOjpzaXplX3QgbGhzLCBzdGQ6OnNpemVf
dCByaHMpIHsKKyAgICAgIHJldHVybiBsaHMgXj0gcmhzICsgMHg5ZTM3NzliOSArIChsaHMgPDwg
NikgKyAobGhzID4+IDIpOwogICAgIH0KLX07CisgIH07CisKKyAgdGVtcGxhdGUgPD4KKyAgc3Ry
dWN0IGhhc2g8bW9ub3N0YXRlPiB7CisgICAgdXNpbmcgYXJndW1lbnRfdHlwZSA9IG1vbm9zdGF0
ZTsKKyAgICB1c2luZyByZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBlcy4uLj4+ewot
ICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0ICZ2KSBf
X05PRVhDRVBUIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+KCkodi5pbmRl
eCgpKSBeIFdURjo6dmlzaXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAgICBpbmxpbmUg
cmVzdWx0X3R5cGUgb3BlcmF0b3IoKShjb25zdCBhcmd1bWVudF90eXBlICYpIGNvbnN0IG5vZXhj
ZXB0IHsKKyAgICAgIHJldHVybiA2Njc0MDgzMTsgIC8vIHJldHVybiBhIGZ1bmRhbWVudGFsbHkg
YXR0cmFjdGl2ZSByYW5kb20gdmFsdWUuCiAgICAgfQotfTsKKyAgfTsKIAotfSAvLyBuYW1lc3Bh
Y2Ugc3RkCit9ICAvLyBuYW1lc3BhY2Ugc3RkCiAKLXVzaW5nIFdURjo6TW9ub3N0YXRlOwotdXNp
bmcgV1RGOjpWYXJpYW50OworbmFtZXNwYWNlIFdURiB7CiAKLSNlbmRpZiAvLyAhQ09NUElMRVIo
Q0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAordGVtcGxhdGU8Y2xhc3MgViwgY2xhc3Mu
Li4gRj4KK2F1dG8gc3dpdGNoT24oViYmIHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdCht
YWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQor
eworICAgIHJldHVybiBzdGQ6OnZpc2l0KG1ha2VWaXNpdG9yKHN0ZDo6Zm9yd2FyZDxGPihmKS4u
LiksIHN0ZDo6Zm9yd2FyZDxWPih2KSk7Cit9CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdt
YSB3YXJuaW5nKHBvcCkKLSNlbmRpZgorfQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0
QnJlYWtJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL3Rl
eHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
IG5hbWVzcGFjZSBXVEYgewogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykK
IAotc3RhdGljIFZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9y
UGxhdGZvcm0+IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4
dEJyZWFrSXRlcmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitz
dGF0aWMgc3RkOjp2YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRv
clBsYXRmb3JtPiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRl
eHRCcmVha0l0ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQog
ewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6
OkxpbmU6CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5oCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gbV9sb2NhbGU7CiAgICAgfQogCi0gICAgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwg
VGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5nOworICAgIHN0ZDo6dmFyaWFudDxU
ZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbV9iYWNraW5n
OwogICAgIE1vZGUgbV9tb2RlOwogICAgIEF0b21pY1N0cmluZyBtX2xvY2FsZTsKIH07CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L21hYy9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJh
dG9ySW50ZXJuYWxJQ1VNYWMubW0JKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJuYWxJQ1VNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBWYXJpYW50
PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtYXBNb2Rl
VG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0ZXJhdG9yOjpN
b2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQorc3RhdGljIHN0ZDo6dmFyaWFu
dDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFrSXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9k
ZVRvQmFja2luZ0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6
TW9kZSBtb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsZSkKIHsKICAgICBzd2l0Y2ggKG1v
ZGUpIHsKICAgICBjYXNlIFRleHRCcmVha0l0ZXJhdG9yOjpNb2RlOjpMaW5lOgpJbmRleDogU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjc4IEBACisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1bGVzL2Nh
Y2hlL0NhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjpkb01hdGNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnJlbW92
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZTo6a2V5cyk6CisgICAgICAgICogTW9kdWxlcy9j
cmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmg6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9GZXRjaEJvZHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpleHRy
YWN0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5oOgorICAgICAgICAoV2Vi
Q29yZTo6RmV0Y2hCb2R5Ojppc0Jsb2IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojppc0Zvcm1EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNB
cnJheUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQXJyYXlC
dWZmZXJWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6aXNVUkxTZWFy
Y2hQYXJhbXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojppc1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5OjpibG9iQm9keSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSk6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmZvcm1EYXRhQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRj
aEJvZHk6OmFycmF5QnVmZmVyQm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJv
ZHk6OmFycmF5QnVmZmVyVmlld0JvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojp0ZXh0Qm9keSk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OnRleHRCb2R5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dXJsU2VhcmNoUGFyYW1zQm9keSBj
b25zdCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsbEhlYWRlck1hcCk6CisgICAgICAgICogTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuaDoKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGZXRjaFJlcXVlc3Q6OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxl
cy9mZXRjaC9GZXRjaFJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpjb250aW51ZVByaW1hcnlL
ZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weU9mVmFyaWFudCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJHZXRBbGxSZXN1bHQ6OmFkZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1
bHQ6OmFkZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6a2V5cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OnZhbHVlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMgY29u
c3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6SURCR2V0QWxsUmVzdWx0OjplbmNvZGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCR2V0QWxsUmVzdWx0OjpkZWNvZGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmlzVmFsaWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5Ojpjb21wYXJlIGNvbnN0KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6
YXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpzdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5OjpkYXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQktleTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6YmluYXJ5
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OklEQktleURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6bWF5YmVDcmVhdGVJREJLZXkgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6Y29tcGFyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleURhdGE6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQktleURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6Omhh
c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6c3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmRhdGUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCS2V5RGF0YTo6bnVtYmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktl
eURhdGE6OmJpbmFyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjphcnJh
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjplbmNvZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6ZGVjb2RlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSURCS2V5UGF0
aFZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChXZWJD
b3JlOjpsb2dnaW5nU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6OnNldFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3Vy
Y2VPYmplY3RTdG9yZUlkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURC
S2V5UGF0aCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNI
b3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhQ29udHJvbHNIb3N0OjpkaXNwbGF5TmFt
ZUZvclRyYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9s
c0hvc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNZWRpYUNvbnN0cmFpbnRzKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5oOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENJY2VTZXJ2ZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9u
OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6OlBhcnNpbmdSZXN1bHQ6OnBhcnNp
bmdTdGF0dXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U0RQUHJvY2Vzc29yOjpQYXJzaW5n
UmVzdWx0OjpjYW5kaWRhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL0lETFR5cGVzLmg6CisgICAg
ICAgICogYmluZGluZ3MvanMvQnVmZmVyU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpCdWZm
ZXJTb3VyY2U6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QnVmZmVyU291cmNlOjps
ZW5ndGggY29uc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
Om1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlS2V5UGF0aEFycmF5KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnZl
cnRVbmlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVDYWxsVHJhY2Vy
UGFyYW1ldGVyKToKKyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmg6CisgICAgICAg
ICogY3J5cHRvL0NyeXB0b0tleS5oOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVDcnlwdG8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpTdWJ0bGVDcnlwdG86OmV4cG9ydEtleSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdWJ0bGVDcnlwdG86OndyYXBLZXkpOgorICAgICAgICAqIGNyeXB0by9TdWJ0bGVD
cnlwdG8uaDoKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
Q0JDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DQkM6OmltcG9y
dEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NG
Qi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5
KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19HQ006OmltcG9ydEtleSk6
CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleSk6CisgICAgICAgICog
Y3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSEtERi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1IS0RGOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtSE1BQzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1QQktERjIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGht
UEJLREYyOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobVJTQUVTX1BLQ1MxX3YxXzUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxn
b3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1SU0FfT0FFUDo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfUFNTLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleSk6CisgICAg
ICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaDoKKyAg
ICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1zLmg6Cisg
ICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5o
OgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFt
cy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hl
ZEltcG9ydFBhcmFtcy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29y
aXRobVJzYUhhc2hlZEtleUdlblBhcmFtcy5oOgorICAgICAgICAqIGNzcy9DU1NTdHlsZURlY2xh
cmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlRGVjbGFyYXRpb246Om5hbWVk
SXRlbSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBj
c3MvRE9NTWF0cml4Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01NYXRyaXg6OmNyZWF0ZSk6Cisg
ICAgICAgICogY3NzL0RPTU1hdHJpeFJlYWRPbmx5Lmg6CisgICAgICAgIChXZWJDb3JlOjpET01N
YXRyaXhSZWFkT25seTo6Y3JlYXRlKToKKyAgICAgICAgKiBjc3MvRm9udEZhY2UuaDoKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBkb20vRG9jdW1lbnRNYXJrZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6aXNBY3RpdmVNYXRjaCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6bWV0YWRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZEluc2VydEFzU2Vw
YXJhdGVNYXJrZXIpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFRhcmdldDo6YWRkRXZlbnRMaXN0ZW5lckZvckJpbmRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3Mp
OgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIGRvbS9NZXNzYWdlRXZl
bnQuaDoKKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAqIGVkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjp0aW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
OjpkaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIpOgorICAgICAgICAqIGVkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyOjpyZXN1bHQgY29uc3QpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAg
ICAgICAqIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFsbENvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxE
b2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnQ6Om5hbWVkSXRlbSk6
CisgICAgICAgICogaHRtbC9IVE1MRG9jdW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3Jt
Q29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hU
TUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpuYW1lZEl0ZW0pOgor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVj
dE1lZGlhUmVzb3VyY2UpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorICAg
ICAgICAqIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg6CisgICAgICAgICogaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFNlYXJjaFBhcmFtczo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1s
L1VSTFNlYXJjaFBhcmFtcy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDb2xvciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EgY29uc3QpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHls
ZTo6aXNDdXJyZW50Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6
Omhhc092ZXJyaWRlQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6
Om92ZXJyaWRlQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmNh
bnZhc0dyYWRpZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjYW52
YXNQYXR0ZXJuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjpjb2xvciBj
b25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQW55Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6CisgICAgICAgICogaHRtbC90
cmFjay9UcmFja0V2ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5o
OgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAg
ICAgICogcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcnNlY3Rpb25PYnNlcnZlcjo6SW50ZXJzZWN0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAqIHBh
Z2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9h
dWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjp0
b0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2YvU2hhcmVk
QnVmZmVyQ0YuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90
TmVlZGVkU29vbiBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmg6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzTm9uZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzU3luY2hyb25vdXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjppc0FzeW5jaHJvbm91cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OnNpemVGb3JEcmF3aW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aGFzIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnJlYWxpemVOZXh0RmFsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDOjphdWRpb1NhbXBsZXNBdmFpbGFibGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmFnZ2VkQ29udGVudENvbnRh
aW5zUmVwbGFjZWRFbGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5o
OgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorCiAyMDE3LTA4LTE5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dlYkNyeXB0b10gUmVtb3ZlIHRoZSBL
ZXlBbGdvcml0aG0gdHlwZSBoaWVyYXJjaHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Y2FjaGUvQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2Fj
aGUvQ2FjaGUuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2NhY2hlL0NhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMsOCBAQCB2b2lkIENh
Y2hlOjpkb01hdGNoKHN0ZDo6b3B0aW9uYWw8UmVxdWVzCiB7CiAgICAgUmVmUHRyPEZldGNoUmVx
dWVzdD4gcmVxdWVzdDsKICAgICBpZiAoaW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAg
ICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVl
KCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1
ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFz
ZU5vbk51bGwoKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAm
JiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2hUeXBl
ID09IE1hdGNoVHlwZTo6T25seUZpcnN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHByb21pc2Ut
PnJlc29sdmUoKTsKQEAgLTEyMiw4ICsxMjIsOCBAQCB2b2lkIENhY2hlOjphZGRBbGwoVmVjdG9y
PFJlcXVlc3RJbmZvPiYmCiB2b2lkIENhY2hlOjpwdXQoUmVxdWVzdEluZm8mJiBpbmZvLCBSZWY8
RmV0Y2hSZXNwb25zZT4mJiByZXNwb25zZSwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJv
bWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0OwotICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKSkgewotICAgICAg
ICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVx
dWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6OmdldDxSZWZQdHI8RmV0Y2hS
ZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgaWYgKHJlcXVlc3QtPm1l
dGhvZCgpICE9ICJHRVQiKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlamVjdChFeGNlcHRpb24g
eyBUeXBlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiUmVxdWVzdCBtZXRob2QgaXMgbm90IEdFVCIpIH0p
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkyLDggKzE5Miw4IEBAIHZvaWQgQ2FjaGU6OnB1
dChSZXF1ZXN0SW5mbyYmIGluZm8sIFJlZjwKIHZvaWQgQ2FjaGU6OnJlbW92ZShSZXF1ZXN0SW5m
byYmIGluZm8sIENhY2hlUXVlcnlPcHRpb25zJiYgb3B0aW9ucywgRE9NUHJvbWlzZURlZmVycmVk
PElETEJvb2xlYW4+JiYgcHJvbWlzZSkKIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1
ZXN0OwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+
PihpbmZvKSkgewotICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVz
dD4+KGluZm8pLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7CisgICAgICAgIHJlcXVlc3QgPSBzdGQ6
OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKICAgICAg
ICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiICYmICFvcHRpb25zLmlnbm9yZU1ldGhv
ZCkgewogICAgICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTIxMyw4ICsyMTMsOCBAQCB2b2lkIENhY2hlOjprZXlzKHN0ZDo6b3B0aW9uYWw8
UmVxdWVzdEluCiB7CiAgICAgUmVmUHRyPEZldGNoUmVxdWVzdD4gcmVxdWVzdDsKICAgICBpZiAo
aW5mbykgewotICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hS
ZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKSkgewotICAgICAgICAgICAgcmVxdWVzdCA9IFdURjo6Z2V0
PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpLnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+Pihp
bmZvLnZhbHVlKCkpKSB7CisgICAgICAgICAgICByZXF1ZXN0ID0gc3RkOjpnZXQ8UmVmUHRyPEZl
dGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAg
IGlmIChyZXF1ZXN0LT5tZXRob2QoKSAhPSAiR0VUIiAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2Qp
IHsKICAgICAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoVmVjdG9yPFJlZjxGZXRjaFJlcXVl
c3Q+PiB7IH0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0
b3JhZ2VDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDI0ICsxNTgsMzIgQEAg
dm9pZCBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOjpwdXRSZWNvcmRzQwogCiBDYWNoZVN0b3JhZ2VD
b25uZWN0aW9uOjpSZXNwb25zZUJvZHkgQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbjo6aXNvbGF0ZWRS
ZXNwb25zZUJvZHkoY29uc3QgUmVzcG9uc2VCb2R5JiBib2R5KQogewotICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSB7Ci0gICAg
ICAgIHJldHVybiBmb3JtRGF0YS0+aXNvbGF0ZWRDb3B5KCk7Ci0gICAgfSwgW10oY29uc3QgUmVm
PFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgICAgICByZXR1cm4gYnVmZmVyLT5jb3B5KCk7
Ci0gICAgfSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7Ci0gICAgICAgIHJldHVybiBDYWNo
ZVN0b3JhZ2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeyB9OwotICAgIH0pOworICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGJvZHksCisgICAgICAgIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZv
cm1EYXRhKSAtPiBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeworICAgICAg
ICAgICAgcmV0dXJuIGZvcm1EYXRhLT5pc29sYXRlZENvcHkoKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgW10oY29uc3QgUmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgLT4gQ2FjaGVTdG9yYWdlQ29u
bmVjdGlvbjo6UmVzcG9uc2VCb2R5IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXItPmNvcHko
KTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSAtPiBDYWNo
ZVN0b3JhZ2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICApOwogfQogCiBzdGF0aWMgaW5saW5lIENhY2hlU3RvcmFn
ZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSBjb3B5UmVzcG9uc2VCb2R5KGNvbnN0IENhY2hlU3Rv
cmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSYgYm9keSkKIHsKLSAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihib2R5LCBbXShjb25zdCBSZWY8Rm9ybURhdGE+JiBmb3JtRGF0YSkgewotICAgICAg
ICByZXR1cm4gZm9ybURhdGEuY29weVJlZigpOwotICAgIH0sIFtdKGNvbnN0IFJlZjxTaGFyZWRC
dWZmZXI+JiBidWZmZXIpIHsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlci5jb3B5UmVmKCk7Ci0gICAg
fSwgW10oY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7Ci0gICAgICAgIHJldHVybiBDYWNoZVN0b3Jh
Z2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeyB9OwotICAgIH0pOworICAgIHJldHVybiBXVEY6
OnN3aXRjaE9uKGJvZHksCisgICAgICAgIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRh
KSAtPiBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeworICAgICAgICAgICAg
cmV0dXJuIGZvcm1EYXRhLmNvcHlSZWYoKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3Qg
UmVmPFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgLT4gQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbjo6UmVz
cG9uc2VCb2R5IHsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXIuY29weVJlZigpOworICAgICAg
ICB9LAorICAgICAgICBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIC0+IENhY2hlU3RvcmFnZUNv
bm5lY3Rpb246OlJlc3BvbnNlQm9keSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgfQorICAgICk7CiB9CiAKIENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlY29yZCBDYWNo
ZVN0b3JhZ2VDb25uZWN0aW9uOjpSZWNvcmQ6OmNvcHkoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvY2FjaGUvQ2FjaGVT
dG9yYWdlQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1Ymxp
YzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIHF1ZXJ5Q2FjaGVNYXRjaChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgY2FjaGVk
UmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IENhY2hlUXVlcnlPcHRpb25z
Jik7CiAKLSAgICB1c2luZyBSZXNwb25zZUJvZHkgPSBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBS
ZWY8Rm9ybURhdGE+LCBSZWY8U2hhcmVkQnVmZmVyPj47CisgICAgdXNpbmcgUmVzcG9uc2VCb2R5
ID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBSZWY8Rm9ybURhdGE+LCBSZWY8U2hhcmVk
QnVmZmVyPj47CiAgICAgc3RhdGljIFJlc3BvbnNlQm9keSBpc29sYXRlZFJlc3BvbnNlQm9keShj
b25zdCBSZXNwb25zZUJvZHkmKTsKIAogICAgIHN0cnVjdCBSZWNvcmQgewpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9jcmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jcmVkZW50aWFscy9DcmVkZW50
aWFsQ3JlYXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY3JlZGVudGlhbHMvQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBD
cmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIHsKLSAgICB1c2luZyBQYXNzd29yZENyZWRlbnRpYWxJ
bml0ID0gVmFyaWFudDxQYXNzd29yZENyZWRlbnRpYWxEYXRhLCBSZWZQdHI8SFRNTEZvcm1FbGVt
ZW50Pj47CisgICAgdXNpbmcgUGFzc3dvcmRDcmVkZW50aWFsSW5pdCA9IHN0ZDo6dmFyaWFudDxQ
YXNzd29yZENyZWRlbnRpYWxEYXRhLCBSZWZQdHI8SFRNTEZvcm1FbGVtZW50Pj47CiAKICAgICBz
dGQ6Om9wdGlvbmFsPFBhc3N3b3JkQ3JlZGVudGlhbEluaXQ+IHBhc3N3b3JkOwogICAgIHN0ZDo6
b3B0aW9uYWw8RmVkZXJhdGVkQ3JlZGVudGlhbEluaXQ+IGZlZGVyYXRlZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHAJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDIsMzYgKzQyLDM2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRmV0Y2hCb2R5
IEZldGNoQm9keTo6ZXh0cmFjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJbml0
JiYgdmFsdWUsIFN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPEJsb2I+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVmPGNvbnN0IEJsb2I+
IGJsb2IgPSBXVEY6OmdldDxSZWZQdHI8QmxvYj4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxCbG9iPj4odmFsdWUpKSB7Cisg
ICAgICAgIFJlZjxjb25zdCBCbG9iPiBibG9iID0gc3RkOjpnZXQ8UmVmUHRyPEJsb2I+Pih2YWx1
ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgY29udGVudFR5cGUgPSBibG9iLT50eXBlKCk7
CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShibG9iKSk7CiAgICAgfQotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxET01Gb3JtRGF0YT4+KHZhbHVlKSkgewot
ICAgICAgICBSZWY8RE9NRm9ybURhdGE+IGRvbUZvcm1EYXRhID0gV1RGOjpnZXQ8UmVmUHRyPERP
TUZvcm1EYXRhPj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxE
T01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBzdGQ6OmdldDxSZWZQdHI8RE9NRm9ybURhdGE+Pih2
YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgYXV0byBmb3JtRGF0YSA9IEZvcm1EYXRh
OjpjcmVhdGVNdWx0aVBhcnQoZG9tRm9ybURhdGEuZ2V0KCksIGRvbUZvcm1EYXRhLT5lbmNvZGlu
ZygpLCAmc3RhdGljX2Nhc3Q8RG9jdW1lbnQmPihjb250ZXh0KSk7CiAgICAgICAgIGNvbnRlbnRU
eXBlID0gbWFrZVN0cmluZygibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IiwgZm9ybURh
dGEtPmJvdW5kYXJ5KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3Zl
KGZvcm1EYXRhKSk7CiAgICAgfQogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgVVJMU2Vh
cmNoUGFyYW1zPiBwYXJhbXMgPSBXVEY6OmdldDxSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPj4odmFs
dWUpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPFVSTFNlYXJjaFBhcmFtcz4+KHZhbHVlKSkgeworICAgICAgICBSZWY8Y29uc3QgVVJMU2Vh
cmNoUGFyYW1zPiBwYXJhbXMgPSBzdGQ6OmdldDxSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPj4odmFs
dWUpLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgIGNvbnRlbnRUeXBlID0gSFRUUEhlYWRlclZh
bHVlczo6Zm9ybVVSTEVuY29kZWRDb250ZW50VHlwZSgpOwogICAgICAgICByZXR1cm4gRmV0Y2hC
b2R5KFdURk1vdmUocGFyYW1zKSk7CiAgICAgfQogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPEFycmF5QnVmZmVyPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBB
cnJheUJ1ZmZlcj4gYnVmZmVyID0gV1RGOjpnZXQ8UmVmUHRyPEFycmF5QnVmZmVyPj4odmFsdWUp
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRy
PEFycmF5QnVmZmVyPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gc3RkOjpnZXQ8UmVmUHRyPEFycmF5QnVmZmVyPj4odmFsdWUpLnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShidWZmZXIpKTsKICAgICB9
Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+
KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3PiBidWZmZXIgPSBX
VEY6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7
CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEFycmF5QnVmZmVyVmlldz4+
KHZhbHVlKSkgeworICAgICAgICBSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3PiBidWZmZXIgPSBz
dGQ6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj4odmFsdWUpLnJlbGVhc2VOb25OdWxsKCk7
CiAgICAgICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShidWZmZXIpKTsKICAgICB9CiAKLSAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CisgICAgQVNT
RVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPih2YWx1ZSkpOwogICAgIGNvbnRlbnRU
eXBlID0gSFRUUEhlYWRlclZhbHVlczo6dGV4dFBsYWluQ29udGVudFR5cGUoKTsKLSAgICByZXR1
cm4gRmV0Y2hCb2R5KFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5nPih2YWx1ZSkpKTsKKyAgICByZXR1
cm4gRmV0Y2hCb2R5KFdURk1vdmUoc3RkOjpnZXQ8U3RyaW5nPih2YWx1ZSkpKTsKIH0KIAogdm9p
ZCBGZXRjaEJvZHk6OmFycmF5QnVmZmVyKEZldGNoQm9keU93bmVyJiBvd25lciwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRj
aC9GZXRjaEJvZHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNo
L0ZldGNoQm9keS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoQm9keS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNSArNTMsMTUgQEAgcHVi
bGljOgogICAgIHZvaWQgY29uc3VtZUFzU3RyZWFtKEZldGNoQm9keU93bmVyJiwgRmV0Y2hSZXNw
b25zZVNvdXJjZSYpOwogI2VuZGlmCiAKLSAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9Ci0gICAg
Ym9vbCBpc0Zvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxS
ZWY8Rm9ybURhdGE+PihtX2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+Piht
X2RhdGEpOyB9Ci0gICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsgcmV0dXJuIFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSk7
IH0KLSAgICBib29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQotICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQmxvYigpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEJsb2I+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0Zv
cm1EYXRhKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Rm9ybURh
dGE+PihtX2RhdGEpOyB9CisgICAgYm9vbCBpc0FycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4g
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+PihtX2RhdGEpOyB9
CisgICAgYm9vbCBpc0FycmF5QnVmZmVyVmlldygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+KG1fZGF0YSk7IH0KKyAgICBi
b29sIGlzVVJMU2VhcmNoUGFyYW1zKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNU
ZXh0KCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0
YSk7IH0KICAgICBib29sIGlzUmVhZGFibGVTdHJlYW0oKSBjb25zdCB7IHJldHVybiBtX2lzUmVh
ZGFibGVTdHJlYW07IH0KIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFJlZlB0cjxCbG9iPiwg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxET01G
b3JtRGF0YT4sIFJlZlB0cjxVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAgIHVzaW5nIElu
aXQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Piwg
UmVmUHRyPEFycmF5QnVmZmVyPiwgUmVmUHRyPERPTUZvcm1EYXRhPiwgUmVmUHRyPFVSTFNlYXJj
aFBhcmFtcz4sIFN0cmluZz47CiAgICAgc3RhdGljIEZldGNoQm9keSBleHRyYWN0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmLCBJbml0JiYsIFN0cmluZyYpOwogICAgIHN0YXRpYyBGZXRjaEJvZHkg
bG9hZGluZ0JvZHkoKSB7IHJldHVybiB7IH07IH0KIApAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6
CiAKICAgICBSZWZQdHI8Rm9ybURhdGE+IGJvZHlBc0Zvcm1EYXRhKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmKSBjb25zdDsKIAotICAgIHVzaW5nIFRha2VuRGF0YSA9IFZhcmlhbnQ8c3RkOjpudWxs
cHRyX3QsIFJlZjxGb3JtRGF0YT4sIFJlZjxTaGFyZWRCdWZmZXI+PjsKKyAgICB1c2luZyBUYWtl
bkRhdGEgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxGb3JtRGF0YT4sIFJlZjxT
aGFyZWRCdWZmZXI+PjsKICAgICBUYWtlbkRhdGEgdGFrZSgpOwogCiAgICAgdm9pZCBzZXRBc0Zv
cm1EYXRhKFJlZjxGb3JtRGF0YT4mJiBkYXRhKSB7IG1fZGF0YSA9IFdURk1vdmUoZGF0YSk7IH0K
QEAgLTk5LDE2ICs5OSwxNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29uc3VtZVRleHQoUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBjb25zdW1lQmxvYihG
ZXRjaEJvZHlPd25lciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwogCi0gICAgY29uc3QgQmxv
YiYgYmxvYkJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgQmxvYj4+KG1f
ZGF0YSkuZ2V0KCk7IH0KLSAgICBGb3JtRGF0YSYgZm9ybURhdGFCb2R5KCkgeyByZXR1cm4gV1RG
OjpnZXQ8UmVmPEZvcm1EYXRhPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIGNvbnN0IEZvcm1EYXRh
JiBmb3JtRGF0YUJvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+Piht
X2RhdGEpLmdldCgpOyB9Ci0gICAgY29uc3QgQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyQm9keSgp
IGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1fZGF0YSku
Z2V0KCk7IH0KLSAgICBjb25zdCBBcnJheUJ1ZmZlclZpZXcmIGFycmF5QnVmZmVyVmlld0JvZHko
KSBjb25zdCB7IHJldHVybiBXVEY6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9k
YXRhKS5nZXQoKTsgfQotICAgIFN0cmluZyYgdGV4dEJvZHkoKSB7IHJldHVybiBXVEY6OmdldDxT
dHJpbmc+KG1fZGF0YSk7IH0KLSAgICBjb25zdCBTdHJpbmcmIHRleHRCb2R5KCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpOyB9Ci0gICAgY29uc3QgVVJMU2VhcmNoUGFy
YW1zJiB1cmxTZWFyY2hQYXJhbXNCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNv
bnN0IFVSTFNlYXJjaFBhcmFtcz4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBCbG9iJiBi
bG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBCbG9iPj4obV9kYXRh
KS5nZXQoKTsgfQorICAgIEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSB7IHJldHVybiBzdGQ6Omdl
dDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9CisgICAgY29uc3QgRm9ybURhdGEmIGZv
cm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0
YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXJCb2R5KCkgY29u
c3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4obV9kYXRhKS5nZXQo
KTsgfQorICAgIGNvbnN0IEFycmF5QnVmZmVyVmlldyYgYXJyYXlCdWZmZXJWaWV3Qm9keSgpIGNv
bnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+PihtX2RhdGEp
LmdldCgpOyB9CisgICAgU3RyaW5nJiB0ZXh0Qm9keSgpIHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmlu
Zz4obV9kYXRhKTsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dEJvZHkoKSBjb25zdCB7IHJldHVy
biBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KKyAgICBjb25zdCBVUkxTZWFyY2hQYXJhbXMm
IHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3Qg
VVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5nZXQoKTsgfQogCi0gICAgdXNpbmcgRGF0YSA9IFZh
cmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwgUmVmPEZvcm1EYXRhPiwgUmVm
PGNvbnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4sIFJlZjxjb25z
dCBVUkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OworICAgIHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlh
bnQ8c3RkOjpudWxscHRyX3QsIFJlZjxjb25zdCBCbG9iPiwgUmVmPEZvcm1EYXRhPiwgUmVmPGNv
bnN0IEFycmF5QnVmZmVyPiwgUmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4sIFJlZjxjb25zdCBV
UkxTZWFyY2hQYXJhbXM+LCBTdHJpbmc+OwogICAgIERhdGEgbV9kYXRhIHsgbnVsbHB0ciB9Owog
CiAgICAgRmV0Y2hCb2R5Q29uc3VtZXIgbV9jb25zdW1lciB7IEZldGNoQm9keUNvbnN1bWVyOjpU
eXBlOjpOb25lIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVh
ZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRj
aEhlYWRlcnMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2ZldGNoL0ZldGNoSGVhZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAg
c3RhdGljIEV4Y2VwdGlvbk9yPHZvaWQ+IGFwcGVuZFRvSGVhZGVyTQogLy8gaHR0cHM6Ly9mZXRj
aC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1maWxsCiBzdGF0aWMgRXhjZXB0aW9u
T3I8dm9pZD4gZmlsbEhlYWRlck1hcChIVFRQSGVhZGVyTWFwJiBoZWFkZXJzLCBjb25zdCBGZXRj
aEhlYWRlcnM6OkluaXQmIGhlYWRlcnNJbml0LCBGZXRjaEhlYWRlcnM6Okd1YXJkIGd1YXJkKQog
ewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KSkgewotICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IFdURjo6Z2V0PFZlY3Rv
cjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxWZWN0b3I8VmVjdG9yPFN0cmluZz4+PihoZWFkZXJzSW5pdCkpIHsKKyAgICAgICAg
YXV0byYgc2VxdWVuY2UgPSBzdGQ6OmdldDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+PihoZWFkZXJz
SW5pdCk7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogc2VxdWVuY2UpIHsKICAgICAgICAg
ICAgIGlmIChoZWFkZXIuc2l6ZSgpICE9IDIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFR5cGVFcnJvciwgIkhlYWRlciBzdWItc2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0
bHkgdHdvIGl0ZW1zIiB9OwpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9p
ZD4gZmlsbEhlYWRlck1hcChICiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBhdXRvJiByZWNv
cmQgPSBXVEY6OmdldDxWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4o
aGVhZGVyc0luaXQpOworICAgICAgICBhdXRvJiByZWNvcmQgPSBzdGQ6OmdldDxWZWN0b3I8V1RG
OjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj4oaGVhZGVyc0luaXQpOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6IHJlY29yZCkgewogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBh
cHBlbmRUb0hlYWRlck1hcChoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUsIGhlYWRlcnMsIGd1YXJk
KTsKICAgICAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBSZXNwb25zZQogICAgIH07
CiAKLSAgICB1c2luZyBJbml0ID0gVmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0
b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj47CisgICAgdXNpbmcgSW5pdCA9
IHN0ZDo6dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1
ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Pj47CiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxGZXRj
aEhlYWRlcnM+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxJbml0PiYmKTsKIAogICAgIHN0YXRpYyBS
ZWY8RmV0Y2hIZWFkZXJzPiBjcmVhdGUoR3VhcmQgZ3VhcmQgPSBHdWFyZDo6Tm9uZSwgSFRUUEhl
YWRlck1hcCYmIGhlYWRlcnMgPSB7IH0pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmV0Y2hIZWFk
ZXJzIHsgZ3VhcmQsIFdURk1vdmUoaGVhZGVycykgfSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjM1LDEyICsyMzUsMTIgQEAgRXhjZXB0aW9uT3I8UmVmPEZldGNoUmVxdWVzdD4+
IEZldGNoUmVxdQogewogICAgIGF1dG8gcmVxdWVzdCA9IGFkb3B0UmVmKCpuZXcgRmV0Y2hSZXF1
ZXN0KGNvbnRleHQsIHN0ZDo6bnVsbG9wdCwgRmV0Y2hIZWFkZXJzOjpjcmVhdGUoRmV0Y2hIZWFk
ZXJzOjpHdWFyZDo6UmVxdWVzdCksIHsgfSkpOwogCi0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8U3RyaW5nPihpbnB1dCkpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5p
bml0aWFsaXplV2l0aChXVEY6OmdldDxTdHJpbmc+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7Cisg
ICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihpbnB1dCkpIHsKKyAgICAgICAg
YXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aChzdGQ6OmdldDxTdHJpbmc+KGlu
cHV0KSwgV1RGTW92ZShpbml0KSk7CiAgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkp
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9IGVs
c2UgewotICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKCpXVEY6
OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSByZXF1ZXN0LT5pbml0aWFsaXplV2l0aCgqc3RkOjpnZXQ8UmVmUHRy
PEZldGNoUmVxdWVzdD4+KGlucHV0KSwgV1RGTW92ZShpbml0KSk7CiAgICAgICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNo
UmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0
Y2hSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZmV0Y2gvRmV0Y2hSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgVVJMU2VhcmNoUGFyYW1zOwogY2xhc3MgRmV0Y2hSZXF1ZXN0IGZpbmFsIDogcHVibGljIEZl
dGNoQm9keU93bmVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBJbml0ID0gRmV0Y2hSZXF1ZXN0SW5p
dDsKLSAgICB1c2luZyBJbmZvID0gVmFyaWFudDxSZWZQdHI8RmV0Y2hSZXF1ZXN0PiwgU3RyaW5n
PjsKKyAgICB1c2luZyBJbmZvID0gc3RkOjp2YXJpYW50PFJlZlB0cjxGZXRjaFJlcXVlc3Q+LCBT
dHJpbmc+OwogCiAgICAgdXNpbmcgQ2FjaGUgPSBGZXRjaE9wdGlvbnM6OkNhY2hlOwogICAgIHVz
aW5nIENyZWRlbnRpYWxzID0gRmV0Y2hPcHRpb25zOjpDcmVkZW50aWFsczsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25zZS5oCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2ZldGNoL0ZldGNoUmVzcG9uc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjYW5jZWwoKTsK
ICNlbmRpZgogCi0gICAgdXNpbmcgUmVzcG9uc2VEYXRhID0gVmFyaWFudDxzdGQ6Om51bGxwdHJf
dCwgUmVmPEZvcm1EYXRhPiwgUmVmPFNoYXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFJlc3BvbnNl
RGF0YSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPEZvcm1EYXRhPiwgUmVmPFNo
YXJlZEJ1ZmZlcj4+OwogICAgIFJlc3BvbnNlRGF0YSBjb25zdW1lQm9keSgpOwogICAgIHZvaWQg
c2V0Qm9keURhdGEoUmVzcG9uc2VEYXRhJiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MSw3ICsxODEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJREJDdXJzb3I6OmNvbnRp
bnVlUHJpCiAgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAn
Y29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vyc29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBv
ciBlZmZlY3RpdmUgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIikgfTsKIAotICAgIGlm
ICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZSkpCisg
ICAgaWYgKCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNl
KSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY29udGludWVQcmltYXJ5S2V5JyBvbiAnSURCQ3Vy
c29yJzogVGhlIGN1cnNvcidzIHNvdXJjZSBpcyBub3QgYW4gaW5kZXguIikgfTsKIAogICAgIGF1
dG8gZGlyZWN0aW9uID0gbV9pbmZvLmN1cnNvckRpcmVjdGlvbigpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIH5JREJD
dXJzb3IoKTsKIAotICAgIHVzaW5nIFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0
b3JlPiwgUmVmUHRyPElEQkluZGV4Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50
PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJbmRleD4+OwogCiAgICAgY29uc3Qg
U291cmNlJiBzb3VyY2UoKSBjb25zdDsKICAgICBJREJDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9u
KCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw3ICsx
NTEsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCT2JqZWN0U3RvcmU+PiBJREJEYXRhCiAgICAgaWYg
KGtleVBhdGggJiYgIWlzSURCS2V5UGF0aFZhbGlkKGtleVBhdGgudmFsdWUoKSkpCiAgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8g
ZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJEYXRhYmFzZSc6IFRoZSBrZXlQYXRo
IG9wdGlvbiBpcyBub3QgYSB2YWxpZCBrZXkgcGF0aC4iKSB9OwogCi0gICAgaWYgKGtleVBhdGgg
JiYgcGFyYW1ldGVycy5hdXRvSW5jcmVtZW50ICYmICgoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGtleVBhdGgudmFsdWUoKSkgJiYgV1RGOjpnZXQ8U3RyaW5nPihrZXlQYXRoLnZhbHVl
KCkpLmlzRW1wdHkoKSkgfHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4o
a2V5UGF0aC52YWx1ZSgpKSkpCisgICAgaWYgKGtleVBhdGggJiYgcGFyYW1ldGVycy5hdXRvSW5j
cmVtZW50ICYmICgoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgudmFsdWUo
KSkgJiYgc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoLnZhbHVlKCkpLmlzRW1wdHkoKSkgfHwgc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aC52YWx1ZSgpKSkpCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2NyZWF0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2Un
OiBUaGUgYXV0b0luY3JlbWVudCBvcHRpb24gd2FzIHNldCBidXQgdGhlIGtleVBhdGggb3B0aW9u
IHdhcyBlbXB0eSBvciBhbiBhcnJheS4iKSB9OwogCiAgICAgLy8gSW5zdGFsbCB0aGUgbmV3IE9i
amVjdFN0b3JlIGludG8gdGhlIGNvbm5lY3Rpb24ncyBtZXRhZGF0YS4KQEAgLTE3MSwxMCArMTcx
LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJUcmFuc2FjdGlvbj4+IElEQkRhdGEKICAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxl
ZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhlIGRhdGFiYXNl
IGNvbm5lY3Rpb24gaXMgY2xvc2luZy4iKSB9OwogCiAgICAgVmVjdG9yPFN0cmluZz4gb2JqZWN0
U3RvcmVzOwotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+Pihz
dG9yZU5hbWVzKSkKLSAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RGTW92ZShXVEY6OmdldDxWZWN0
b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSkKKyAgICAgICAgb2JqZWN0U3RvcmVzID0gV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oc3RvcmVOYW1lcykpOwogICAgIGVsc2UKLSAg
ICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChXVEZNb3ZlKFdURjo6Z2V0PFN0cmluZz4oc3RvcmVO
YW1lcykpKTsKKyAgICAgICAgb2JqZWN0U3RvcmVzLmFwcGVuZChXVEZNb3ZlKHN0ZDo6Z2V0PFN0
cmluZz4oc3RvcmVOYW1lcykpKTsKIAogICAgIGlmIChvYmplY3RTdG9yZXMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yLCBBU0NJSUxpdGVy
YWwoIkZhaWxlZCB0byBleGVjdXRlICd0cmFuc2FjdGlvbicgb24gJ0lEQkRhdGFiYXNlJzogVGhl
IHN0b3JlTmFtZXMgcGFyYW1ldGVyIHdhcyBlbXB0eS4iKSB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKIAogICAgIEV4Y2VwdGlvbk9yPFJl
ZjxJREJPYmplY3RTdG9yZT4+IGNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
T2JqZWN0U3RvcmVQYXJhbWV0ZXJzJiYpOwogCi0gICAgdXNpbmcgU3RyaW5nT3JWZWN0b3JPZlN0
cmluZ3MgPSBXVEY6OlZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47CisgICAgdXNpbmcg
U3RyaW5nT3JWZWN0b3JPZlN0cmluZ3MgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj47CiAgICAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gdHJhbnNhY3Rpb24o
U3RyaW5nT3JWZWN0b3JPZlN0cmluZ3MmJiBzdG9yZU5hbWVzLCBJREJUcmFuc2FjdGlvbk1vZGUp
OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgdm9pZCBjbG9zZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCR2V0QWxsUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGlzb2xhdGVkQ29weU9mVmFyaWFudChjb25z
dCBXVEY6OlZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6
Om51bGxwdHJfdD4mIHNvdXJjZSwgV1RGOjpWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVj
dG9yPElEQlZhbHVlPiwgc3RkOjpudWxscHRyX3Q+JiB0YXJnZXQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB2b2lkIGlzb2xhdGVkQ29weU9mVmFyaWFudChjb25zdCBzdGQ6OnZhcmlhbnQ8VmVjdG9y
PElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4mIHNvdXJjZSwg
c3RkOjp2YXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3RkOjpu
dWxscHRyX3Q+JiB0YXJnZXQpCiB7CiAgICAgdGFyZ2V0ID0gVmVjdG9yPFQ+KCk7Ci0gICAgYXV0
byYgc291cmNlVmVjdG9yID0gV1RGOjpnZXQ8VmVjdG9yPFQ+Pihzb3VyY2UpOwotICAgIGF1dG8m
IHRhcmdldFZlY3RvciA9IFdURjo6Z2V0PFZlY3RvcjxUPj4odGFyZ2V0KTsKKyAgICBhdXRvJiBz
b3VyY2VWZWN0b3IgPSBzdGQ6OmdldDxWZWN0b3I8VD4+KHNvdXJjZSk7CisgICAgYXV0byYgdGFy
Z2V0VmVjdG9yID0gc3RkOjpnZXQ8VmVjdG9yPFQ+Pih0YXJnZXQpOwogICAgIHRhcmdldFZlY3Rv
ci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvdXJjZVZlY3Rvci5zaXplKCkpOwogICAgIGZvciAo
YXV0byYgZWxlbWVudCA6IHNvdXJjZVZlY3RvcikKICAgICAgICAgdGFyZ2V0VmVjdG9yLnVuY2hl
Y2tlZEFwcGVuZChlbGVtZW50Lmlzb2xhdGVkQ29weSgpKTsKQEAgLTU2LDcgKzU2LDcgQEAgdm9p
ZCBJREJHZXRBbGxSZXN1bHQ6Omlzb2xhdGVkQ29weShjb25zdAogewogICAgIGRlc3RpbmF0aW9u
Lm1fdHlwZSA9IHNvdXJjZS5tX3R5cGU7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxzdGQ6Om51bGxwdHJfdD4oc291cmNlLm1fcmVzdWx0cykpCisgICAgaWYgKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KHNvdXJjZS5tX3Jlc3VsdHMpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBzd2l0Y2ggKHNvdXJjZS5tX3R5cGUpIHsKQEAgLTcyLDI5ICs3MiwyOSBA
QCB2b2lkIElEQkdldEFsbFJlc3VsdDo6aXNvbGF0ZWRDb3B5KGNvbnN0CiB2b2lkIElEQkdldEFs
bFJlc3VsdDo6YWRkS2V5KElEQktleURhdGEmJiBrZXkpCiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9
PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OktleXMpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKSk7Ci0gICAgV1RGOjpnZXQ8
VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpLmFwcGVuZChXVEZNb3ZlKGtleSkpOworICAg
IEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1
bHRzKSk7CisgICAgc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpLmFwcGVu
ZChXVEZNb3ZlKGtleSkpOwogfQogCiB2b2lkIElEQkdldEFsbFJlc3VsdDo6YWRkVmFsdWUoSURC
VmFsdWUmJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxs
VHlwZTo6VmFsdWVzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8
SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKLSAgICBXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+Piht
X3Jlc3VsdHMpLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNf
YWx0ZXJuYXRpdmU8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKSk7CisgICAgc3RkOjpnZXQ8
VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKS5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQog
CiBjb25zdCBWZWN0b3I8SURCS2V5RGF0YT4mIElEQkdldEFsbFJlc3VsdDo6a2V5cygpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJbmRleGVkREI6OkdldEFsbFR5cGU6OktleXMpOwot
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJREJLZXlEYXRhPj4obV9y
ZXN1bHRzKSk7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1
bHRzKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCS2V5RGF0
YT4+KG1fcmVzdWx0cykpOworICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+
KG1fcmVzdWx0cyk7CiB9CiAKIGNvbnN0IFZlY3RvcjxJREJWYWx1ZT4mIElEQkdldEFsbFJlc3Vs
dDo6dmFsdWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0
QWxsVHlwZTo6VmFsdWVzKTsKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0
b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKLSAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElE
QlZhbHVlPj4obV9yZXN1bHRzKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxW
ZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9y
PElEQlZhbHVlPj4obV9yZXN1bHRzKTsKIH0KIAogVmVjdG9yPFN0cmluZz4gSURCR2V0QWxsUmVz
dWx0OjphbGxCbG9iRmlsZVBhdGhzKCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBWZWN0b3I8
U3RyaW5nPiBJREJHZXRBbGxSZXN1bHQ6OmFsbEJsb2JGCiAgICAgQVNTRVJUKG1fdHlwZSA9PSBJ
bmRleGVkREI6OkdldEFsbFR5cGU6OlZhbHVlcyk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4gcGF0
aFNldDsKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogV1RGOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4o
bV9yZXN1bHRzKSkgeworICAgIGZvciAoYXV0byYgdmFsdWUgOiBzdGQ6OmdldDxWZWN0b3I8SURC
VmFsdWU+PihtX3Jlc3VsdHMpKSB7CiAgICAgICAgIGZvciAoYXV0byYgcGF0aCA6IHZhbHVlLmJs
b2JGaWxlUGF0aHMoKSkKICAgICAgICAgICAgIHBhdGhTZXQuYWRkKHBhdGgpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJl
c3VsdC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJHZXRBbGxSZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBw
cml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGlzb2xhdGVkQ29weShjb25zdCBJREJHZXRBbGxSZXN1
bHQmIHNvdXJjZSwgSURCR2V0QWxsUmVzdWx0JiBkZXN0aW5hdGlvbik7CiAKICAgICBJbmRleGVk
REI6OkdldEFsbFR5cGUgbV90eXBlIHsgSW5kZXhlZERCOjpHZXRBbGxUeXBlOjpLZXlzIH07Ci0g
ICAgV1RGOjpWYXJpYW50PFZlY3RvcjxJREJLZXlEYXRhPiwgVmVjdG9yPElEQlZhbHVlPiwgc3Rk
OjpudWxscHRyX3Q+IG1fcmVzdWx0cyB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnZhcmlhbnQ8VmVj
dG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4gbV9yZXN1
bHRzIHsgbnVsbHB0ciB9OwogfTsKIAogdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KQEAgLTg0LDEw
ICs4NCwxMCBAQCB2b2lkIElEQkdldEFsbFJlc3VsdDo6ZW5jb2RlKEVuY29kZXImIGVuCiAKICAg
ICBzd2l0Y2ggKG1fcmVzdWx0cy5pbmRleCgpKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBlbmNv
ZGVyIDw8IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRzKTsKKyAgICAgICAg
ZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cyk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxWZWN0
b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoK
ICAgICAgICAgYnJlYWs7CkBAIC0xMDksMTIgKzEwOSwxMiBAQCBib29sIElEQkdldEFsbFJlc3Vs
dDo6ZGVjb2RlKERlY29kZXImIGRlCiAgICAgc3dpdGNoIChpbmRleCkgewogICAgIGNhc2UgMDoK
ICAgICAgICAgcmVzdWx0Lm1fcmVzdWx0cyA9IFZlY3RvcjxJREJLZXlEYXRhPigpOwotICAgICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0
Lm1fcmVzdWx0cykpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3Rv
cjxJREJLZXlEYXRhPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE6CiAgICAgICAgIHJlc3VsdC5tX3Jlc3Vs
dHMgPSBWZWN0b3I8SURCVmFsdWU+KCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RG
OjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4ocmVzdWx0Lm1fcmVzdWx0cykpKQorICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KHJlc3VsdC5tX3Jlc3Vs
dHMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSAyOgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuY3Bw
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIGJvb2wgSURCS2V5Ojpp
c1ZhbGlkKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fdHlwZSA9
PSBLZXlUeXBlOjpBcnJheSkgewotICAgICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PElE
QktleVZlY3Rvcj4obV92YWx1ZSkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBrZXkgOiBzdGQ6Omdl
dDxJREJLZXlWZWN0b3I+KG1fdmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAoIWtleS0+aXNWYWxp
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA5LDgg
KzEwOSw4IEBAIGludCBJREJLZXk6OmNvbXBhcmUoY29uc3QgSURCS2V5JiBvdGhlcikKIAogICAg
IHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAgICAgICBh
dXRvJiBhcnJheSA9IFdURjo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSk7Ci0gICAgICAgIGF1
dG8mIG90aGVyQXJyYXkgPSBXVEY6OmdldDxJREJLZXlWZWN0b3I+KG90aGVyLm1fdmFsdWUpOwor
ICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSk7Cisg
ICAgICAgIGF1dG8mIG90aGVyQXJyYXkgPSBzdGQ6OmdldDxJREJLZXlWZWN0b3I+KG90aGVyLm1f
dmFsdWUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKSAmJiBp
IDwgb3RoZXJBcnJheS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGludCByZXN1bHQg
PSBhcnJheVtpXS0+Y29tcGFyZSgqb3RoZXJBcnJheVtpXSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKQEAgLTEyMiwxMyArMTIyLDEzIEBAIGludCBJREJLZXk6OmNvbXBhcmUoY29u
c3QgSURCS2V5JiBvdGhlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGNhc2UgS2V5
VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURhdGEoV1RGOjpn
ZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0
YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtl
eURhdGEoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLCBzdGQ6OmdldDxU
aHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6
U3RyaW5nOgotICAgICAgICByZXR1cm4gLWNvZGVQb2ludENvbXBhcmUoV1RGOjpnZXQ8U3RyaW5n
PihvdGhlci5tX3ZhbHVlKSwgV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CisgICAgICAgIHJl
dHVybiAtY29kZVBvaW50Q29tcGFyZShzdGQ6OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpLCBz
dGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAg
Y2FzZSBLZXlUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgYXV0byBudW1iZXIgPSBXVEY6OmdldDxk
b3VibGU+KG1fdmFsdWUpOwotICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gV1RGOjpnZXQ8ZG91
YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgYXV0byBudW1iZXIgPSBzdGQ6OmdldDxkb3Vi
bGU+KG1fdmFsdWUpOworICAgICAgICBhdXRvIG90aGVyTnVtYmVyID0gc3RkOjpnZXQ8ZG91Ymxl
PihvdGhlci5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuIChudW1iZXIgPCBvdGhlck51bWJlcikg
PyAtMSA6ICgobnVtYmVyID4gb3RoZXJOdW1iZXIpID8gMSA6IDApOwogICAgIH0KICAgICBjYXNl
IEtleVR5cGU6OkludmFsaWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJLZXkuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMywzMSArMTEzLDMxIEBAIHB1
YmxpYzoKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPElEQktleT4+JiBhcnJheSgpIGNvbnN0CiAg
ICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkFycmF5KTsKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4+KG1fdmFsdWUpOworICAgICAg
ICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4obV92YWx1ZSk7CiAgICAg
fQogCiAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpTdHJpbmcpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8
U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1
ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIGRhdGUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpEYXRlKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRv
dWJsZT4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUp
OwogICAgIH0KIAogICAgIGRvdWJsZSBudW1iZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKG1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8
ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1
ZSk7CiAgICAgfQogCiAgICAgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFyeSgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFyeSk7Ci0g
ICAgICAgIHJldHVybiBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAg
ICAgfQogCiAgICAgaW50IGNvbXBhcmUoY29uc3QgSURCS2V5JiBvdGhlcikgY29uc3Q7CkBAIC0x
NzEsNyArMTcxLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBJREJLZXkoY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImKTsKIAogICAgIGNvbnN0IEtleVR5cGUgbV90eXBlOwotICAgIFZhcmlh
bnQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+PiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRh
QnVmZmVyPiBtX3ZhbHVlOworICAgIHN0ZDo6dmFyaWFudDxWZWN0b3I8UmVmUHRyPElEQktleT4+
LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CiAKICAgICBj
b25zdCBzaXplX3QgbV9zaXplRXN0aW1hdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsNyBAQCBJREJLZXlEYXRhOjpJREJLZXlEYXRhKGNvbnN0IElEQktl
eSoga2V5CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6IHsKICAgICAg
ICAgbV92YWx1ZSA9IFZlY3RvcjxJREJLZXlEYXRhPigpOwotICAgICAgICBhdXRvJiBhcnJheSA9
IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFy
cmF5ID0gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAgZm9y
IChhdXRvJiBrZXkyIDoga2V5LT5hcnJheSgpKQogICAgICAgICAgICAgYXJyYXkuYXBwZW5kKElE
QktleURhdGEoa2V5Mi5nZXQoKSkpOwogICAgICAgICBicmVhazsKQEAgLTgxLDIwICs4MSwyMCBA
QCBSZWZQdHI8SURCS2V5PiBJREJLZXlEYXRhOjptYXliZUNyZWF0ZUlECiAgICAgICAgIHJldHVy
biBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAg
ICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gYXJyYXk7Ci0gICAgICAgIGZvciAoYXV0byYg
a2V5RGF0YSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBrZXlEYXRhIDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Zh
bHVlKSkgewogICAgICAgICAgICAgYXJyYXkuYXBwZW5kKGtleURhdGEubWF5YmVDcmVhdGVJREJL
ZXkoKSk7CiAgICAgICAgICAgICBBU1NFUlQoYXJyYXkubGFzdCgpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShhcnJheSk7CiAgICAgfQogICAgIGNhc2Ug
S2V5VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVCaW5hcnkoV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlQmluYXJ5KHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVl
KSk7CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNy
ZWF0ZVN0cmluZyhXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlU3RyaW5nKHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOwogICAgIGNhc2Ug
S2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZShXVEY6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZShz
dGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKFdURjo6Z2V0PGRvdWJsZT4obV92YWx1
ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAgY2FzZSBLZXlUeXBlOjpN
aW46CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTI1LDIwICsxMjUsMjAgQEAg
dm9pZCBJREJLZXlEYXRhOjppc29sYXRlZENvcHkoY29uc3QgSURCSwogICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewogICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVl
ID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uQXJyYXkg
PSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGRlc3RpbmF0aW9uLm1fdmFsdWUpOwotICAg
ICAgICBmb3IgKGF1dG8mIGtleSA6IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4oc291cmNl
Lm1fdmFsdWUpKQorICAgICAgICBhdXRvJiBkZXN0aW5hdGlvbkFycmF5ID0gc3RkOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihkZXN0aW5hdGlvbi5tX3ZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRv
JiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KHNvdXJjZS5tX3ZhbHVlKSkKICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uQXJyYXkuYXBwZW5kKGtleS5pc29sYXRlZENvcHkoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAg
IGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oc291
cmNlLm1fdmFsdWUpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gc3RkOjpnZXQ8VGhy
ZWFkU2FmZURhdGFCdWZmZXI+KHNvdXJjZS5tX3ZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICBkZXN0aW5hdGlvbi5tX3ZhbHVlID0gV1RG
OjpnZXQ8U3RyaW5nPihzb3VyY2UubV92YWx1ZSkuaXNvbGF0ZWRDb3B5KCk7CisgICAgICAgIGRl
c3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxTdHJpbmc+KHNvdXJjZS5tX3ZhbHVlKS5pc29s
YXRlZENvcHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKICAg
ICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdU
Rjo6Z2V0PGRvdWJsZT4oc291cmNlLm1fdmFsdWUpOworICAgICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gc3RkOjpnZXQ8ZG91YmxlPihzb3VyY2UubV92YWx1ZSk7CiAgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtleVR5cGU6Ok1pbjoKQEAgLTE2MCwy
NSArMTYwLDI1IEBAIHZvaWQgSURCS2V5RGF0YTo6ZW5jb2RlKEtleWVkRW5jb2RlciYgZW4KICAg
ICBjYXNlIEtleVR5cGU6OkludmFsaWQ6CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEtleVR5
cGU6OkFycmF5OiB7Ci0gICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktl
eURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8
SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAgICBlbmNvZGVyLmVuY29kZU9iamVjdHMoImFy
cmF5IiwgYXJyYXkuYmVnaW4oKSwgYXJyYXkuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2Rl
ciwgY29uc3QgSURCS2V5RGF0YSYga2V5KSB7CiAgICAgICAgICAgICBrZXkuZW5jb2RlKGVuY29k
ZXIpOwogICAgICAgICB9KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEtleVR5
cGU6OkJpbmFyeTogewotICAgICAgICBhdXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURh
dGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKKyAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0
PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CiAgICAgICAgIGVuY29kZXIu
ZW5jb2RlQm9vbCgiaGFzQmluYXJ5IiwgISFkYXRhKTsKICAgICAgICAgaWYgKGRhdGEpCiAgICAg
ICAgICAgICBlbmNvZGVyLmVuY29kZUJ5dGVzKCJiaW5hcnkiLCBkYXRhLT5kYXRhKCksIGRhdGEt
PnNpemUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJp
bmc6Ci0gICAgICAgIGVuY29kZXIuZW5jb2RlU3RyaW5nKCJzdHJpbmciLCBXVEY6OmdldDxTdHJp
bmc+KG1fdmFsdWUpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0
ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlU
eXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBlbmNvZGVyLmVu
Y29kZURvdWJsZSgibnVtYmVyIiwgV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CisgICAgICAg
IGVuY29kZXIuZW5jb2RlRG91YmxlKCJudW1iZXIiLCBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5
VHlwZTo6TWluOgpAQCAtMjIwLDEyICsyMjAsMTIgQEAgYm9vbCBJREJLZXlEYXRhOjpkZWNvZGUo
S2V5ZWREZWNvZGVyJiBkZQogCiAgICAgaWYgKHJlc3VsdC5tX3R5cGUgPT0gS2V5VHlwZTo6U3Ry
aW5nKSB7CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biBkZWNvZGVyLmRlY29kZVN0cmluZygic3RyaW5nIiwgV1RGOjpnZXQ8U3RyaW5nPihyZXN1bHQu
bV92YWx1ZSkpOworICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVTdHJpbmcoInN0cmluZyIs
IHN0ZDo6Z2V0PFN0cmluZz4ocmVzdWx0Lm1fdmFsdWUpKTsKICAgICB9CiAKICAgICBpZiAocmVz
dWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpOdW1iZXIgfHwgcmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBl
OjpEYXRlKSB7CiAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gMC4wOwotICAgICAgICByZXR1cm4g
ZGVjb2Rlci5kZWNvZGVEb3VibGUoIm51bWJlciIsIFdURjo6Z2V0PGRvdWJsZT4ocmVzdWx0Lm1f
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlRG91YmxlKCJudW1iZXIiLCBz
dGQ6OmdldDxkb3VibGU+KHJlc3VsdC5tX3ZhbHVlKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc3Vs
dC5tX3R5cGUgPT0gS2V5VHlwZTo6QmluYXJ5KSB7CkBAIC0yNTMsNyArMjUzLDcgQEAgYm9vbCBJ
REJLZXlEYXRhOjpkZWNvZGUoS2V5ZWREZWNvZGVyJiBkZQogICAgIH07CiAgICAgCiAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICByZXR1cm4gZGVjb2Rlci5k
ZWNvZGVPYmplY3RzKCJhcnJheSIsIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0
Lm1fdmFsdWUpLCBhcnJheUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVPYmpl
Y3RzKCJhcnJheSIsIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ocmVzdWx0Lm1fdmFsdWUp
LCBhcnJheUZ1bmN0aW9uKTsKIH0KIAogaW50IElEQktleURhdGE6OmNvbXBhcmUoY29uc3QgSURC
S2V5RGF0YSYgb3RoZXIpIGNvbnN0CkBAIC0yNzcsOCArMjc3LDggQEAgaW50IElEQktleURhdGE6
OmNvbXBhcmUoY29uc3QgSURCS2V5RGF0YQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTogewotICAgICAgICBh
dXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7Ci0gICAg
ICAgIGF1dG8mIG90aGVyQXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG90aGVy
Lm1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlE
YXRhPj4obV92YWx1ZSk7CisgICAgICAgIGF1dG8mIG90aGVyQXJyYXkgPSBzdGQ6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG90aGVyLm1fdmFsdWUpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGFycmF5LnNpemUoKSAmJiBpIDwgb3RoZXJBcnJheS5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgaWYgKGludCByZXN1bHQgPSBhcnJheVtpXS5jb21wYXJlKG90aGVyQXJyYXlbaV0p
KQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yOTAsMTMgKzI5MCwxMyBAQCBp
bnQgSURCS2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRhCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgcmV0dXJuIGNvbXBh
cmVCaW5hcnlLZXlEYXRhKFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSwg
V1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIGNvbXBhcmVCaW5hcnlLZXlEYXRhKHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVy
PihtX3ZhbHVlKSwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUp
KTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIGNvZGVQb2ludENv
bXBhcmUoV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSwgV1RGOjpnZXQ8U3RyaW5nPihvdGhlci5t
X3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKHN0ZDo6Z2V0PFN0cmlu
Zz4obV92YWx1ZSksIHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92YWx1ZSkpOwogICAgIGNhc2Ug
S2V5VHlwZTo6RGF0ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjogewotICAgICAgICBhdXRv
IG51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7Ci0gICAgICAgIGF1dG8gb3RoZXJO
dW1iZXIgPSBXVEY6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAgICAgICBhdXRvIG51
bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIGF1dG8gb3RoZXJOdW1i
ZXIgPSBzdGQ6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogCiAgICAgICAgIGlmIChudW1i
ZXIgPT0gb3RoZXJOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTMyNSw3ICszMjUs
NyBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9nZ2luZ1N0cmluZygpIGNvbnN0CiAgICAgY2FzZSBL
ZXlUeXBlOjpBcnJheTogewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPGFycmF5PiAtIHsgIik7Ci0gICAgICAgIGF1dG8mIGFy
cmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0
byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChhcnJheVtpXS5sb2dnaW5nU3RyaW5nKCkpOwogICAgICAgICAgICAg
aWYgKGkgPCBhcnJheS5zaXplKCkgLSAxKQpAQCAtMzM5LDcgKzMzOSw3IEBAIFN0cmluZyBJREJL
ZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAgICAgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiPGJpbmFyeT4gLSAiKTsKIAotICAgICAgICBh
dXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEo
KTsKKyAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPiht
X3ZhbHVlKS5kYXRhKCk7CiAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIihudWxsKSIpOwogICAgICAgICAgICAgcmVzdWx0ID0gYnVpbGRlci50b1N0cmlu
ZygpOwpAQCAtMzU3LDEyICszNTcsMTIgQEAgU3RyaW5nIElEQktleURhdGE6OmxvZ2dpbmdTdHJp
bmcoKSBjb25zdAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJp
bmc6Ci0gICAgICAgIHJlc3VsdCA9ICI8c3RyaW5nPiAtICIgKyBXVEY6OmdldDxTdHJpbmc+KG1f
dmFsdWUpOworICAgICAgICByZXN1bHQgPSAiPHN0cmluZz4gLSAiICsgc3RkOjpnZXQ8U3RyaW5n
PihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxkYXRlPiAtICVmIiwgV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPGRhdGU+IC0gJWYi
LCBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoK
LSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8bnVtYmVyPiAtICVmIiwgV1RGOjpnZXQ8
ZG91YmxlPihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPG51bWJl
cj4gLSAlZiIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6
TWF4OgogICAgICAgICByZXR1cm4gIjxtYXhpbXVtPiI7CiAgICAgY2FzZSBLZXlUeXBlOjpNaW46
CkBAIC00NDIsMTMgKzQ0MiwxMyBAQCBib29sIElEQktleURhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
SURCS2V5CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgog
ICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSkgPT0gV1RGOjpnZXQ8ZG91YmxlPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8ZG91YmxlPihvdGhlci5t
X3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIFdURjo6
Z2V0PFN0cmluZz4obV92YWx1ZSkgPT0gV1RGOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8U3Ry
aW5nPihvdGhlci5tX3ZhbHVlKTsKICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSA9PSBXVEY6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJldHVybiBz
dGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkgPT0gc3RkOjpnZXQ8VGhyZWFk
U2FmZURhdGFCdWZmZXI+KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6
Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpID09
IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpID09IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCS2V5RGF0YS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwx
MyArMTMxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtl
eVR5cGU6Ok51bWJlcjoKICAgICAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAgICAgICAg
aGFzaENvZGVzLmFwcGVuZChTdHJpbmdIYXNoZXI6Omhhc2hNZW1vcnk8c2l6ZW9mKGRvdWJsZSk+
KCZXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKSk7CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBw
ZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoZG91YmxlKT4oJnN0ZDo6Z2V0PGRv
dWJsZT4obV92YWx1ZSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZzoKLSAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFz
aChXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7CisgICAgICAgICAgICBoYXNoQ29kZXMuYXBw
ZW5kKFN0cmluZ0hhc2g6Omhhc2goc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgICAg
ICBhdXRvKiBkYXRhID0gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRh
dGEoKTsKKyAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1
ZmZlcj4obV92YWx1ZSkuZGF0YSgpOwogICAgICAgICAgICAgaWYgKCFkYXRhKQogICAgICAgICAg
ICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoMCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xNDUsNyAr
MTQ1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBLZXlUeXBlOjpBcnJheToKLSAgICAgICAgICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKKyAgICAgICAgICAgIGZvciAoYXV0byYg
a2V5IDogc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkKICAgICAgICAgICAg
ICAgICBoYXNoQ29kZXMuYXBwZW5kKGtleS5oYXNoKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTE1OSwzOCArMTU5LDM4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgc3RyaW5n
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6U3RyaW5n
KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGRvdWJsZSBkYXRl
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6RGF0ZSk7
Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1
cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgbnVtYmVy
KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6TnVtYmVy
KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFRocmVh
ZFNhZmVEYXRhQnVmZmVyJiBiaW5hcnkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1f
dHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhyZWFk
U2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VGhyZWFk
U2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGNvbnN0IFZlY3RvcjxJREJL
ZXlEYXRhPiYgYXJyYXkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBL
ZXlUeXBlOjpBcnJheSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0
YT4+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihtX3ZhbHVlKTsKICAgICB9CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgaXNvbGF0ZWRD
b3B5KGNvbnN0IElEQktleURhdGEmIHNvdXJjZSwgSURCS2V5RGF0YSYgZGVzdGluYXRpb24pOwog
CiAgICAgS2V5VHlwZSBtX3R5cGU7Ci0gICAgVmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0
cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKKyAgICBzdGQ6OnZh
cmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFkU2FmZURhdGFC
dWZmZXI+IG1fdmFsdWU7CiAKICAgICBib29sIG1faXNOdWxsIHsgZmFsc2UgfTsKICAgICBib29s
IG1faXNEZWxldGVkVmFsdWUgeyBmYWxzZSB9OwpAQCAtMjQyLDE3ICsyNDIsMTcgQEAgdm9pZCBJ
REJLZXlEYXRhOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcgogICAgIGNhc2UgS2V5VHlwZTo6TWlu
OgogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICBlbmNv
ZGVyIDw8IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RG
OjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8
IHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8
U3RyaW5nPihtX3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxTdHJpbmc+KG1f
dmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2Fz
ZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8ZG91YmxlPiht
X3ZhbHVlKTsKKyAgICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0yNzYsMjMgKzI3NiwyMyBAQCBib29sIElEQktl
eURhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
S2V5VHlwZTo6QXJyYXk6CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlE
YXRhPigpOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKFdURjo6Z2V0PFZlY3RvcjxJREJL
ZXlEYXRhPj4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpCaW5h
cnk6CiAgICAgICAgIGtleURhdGEubV92YWx1ZSA9IFRocmVhZFNhZmVEYXRhQnVmZmVyKCk7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+
KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6Z2V0
PFRocmVhZFNhZmVEYXRhQnVmZmVyPihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6CiAg
ICAgICAgIGtleURhdGEubV92YWx1ZSA9IFN0cmluZygpOwotICAgICAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKFdURjo6Z2V0PFN0cmluZz4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8U3RyaW5nPihrZXlEYXRhLm1fdmFsdWUpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpE
YXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAgICAgICBrZXlEYXRhLm1fdmFsdWUg
PSAwLjA7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8ZG91YmxlPihrZXlE
YXRhLm1fdmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxkb3Vi
bGU+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlQYXRoLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw3
ICsyMDUsNyBAQCBib29sIGlzSURCS2V5UGF0aFZhbGlkKGNvbnN0IElEQktleVBhdGgmCiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlz
aXQodmlzaXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwga2V5
UGF0aCk7CiB9CiAKIElEQktleVBhdGggaXNvbGF0ZWRDb3B5KGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgpCkBAIC0yMjAsNyArMjIwLDcgQEAgSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3Qg
SURCS2V5UGF0aAogICAgICAgICByZXR1cm4gdmVjdG9yQ29weTsKICAgICB9KTsKIAotICAgIHJl
dHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGtleVBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0
KHZpc2l0b3IsIGtleVBhdGgpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMjQ0LDcgKzI0NCw3
IEBAIFN0cmluZyBsb2dnaW5nU3RyaW5nKGNvbnN0IElEQktleVBhdGgmIHAKICAgICAgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9KTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0
KHZpc2l0b3IsIHBhdGgpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHBhdGgpOwog
fQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktl
eVBhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJLZXlQYXRoLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleVBhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIElEQktleVBhdGggPSBXVEY6OlZhcmlhbnQ8
U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47Cit1c2luZyBJREJLZXlQYXRoID0gc3RkOjp2YXJpYW50
PFN0cmluZywgVmVjdG9yPFN0cmluZz4+OwogYm9vbCBpc0lEQktleVBhdGhWYWxpZChjb25zdCBJ
REJLZXlQYXRoJik7CiAKIGVudW0gY2xhc3MgSURCS2V5UGF0aFBhcnNlRXJyb3IgewpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNyArNDQ1LDcgQEAg
RXhjZXB0aW9uT3I8UmVmPElEQkluZGV4Pj4gSURCT2JqZWN0U3RvcgogICAgIGlmIChuYW1lLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yIH07CiAKLSAgICBp
ZiAocGFyYW1ldGVycy5tdWx0aUVudHJ5ICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9y
PFN0cmluZz4+KGtleVBhdGgpKQorICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50cnkgJiYgc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCiAgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRmFpbGVk
IHRvIGV4ZWN1dGUgJ2NyZWF0ZUluZGV4JyBvbiAnSURCT2JqZWN0U3RvcmUnOiBUaGUga2V5UGF0
aCBhcmd1bWVudCB3YXMgYW4gYXJyYXkgYW5kIHRoZSBtdWx0aUVudHJ5IG9wdGlvbiBpcyB0cnVl
LiIpIH07CiAKICAgICAvLyBJbnN0YWxsIHRoZSBuZXcgSW5kZXggaW50byB0aGUgT2JqZWN0U3Rv
cmUncyBpbmZvLgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCUmVxdWVzdC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsOCArMTc4
LDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRTb3VyY2UoSURCQ3Vyc29yJiBjdQogCiAgICAgbV9z
b3VyY2UgPSBTb3VyY2UgeyAmY3Vyc29yIH07CiAgICAgbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPFNjb3BlR3VhcmQ+KFt0aGlzXSgpIHsKLSAgICAgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVl
KCkpKTsKLSAgICAgICAgV1RGOjpnZXQ8UmVmUHRyPElEQkN1cnNvcj4+KG1fc291cmNlLnZhbHVl
KCkpLT5kZWNyZW1lbnRPdXRzdGFuZGluZ1JlcXVlc3RDb3VudCgpOworICAgICAgICBBU1NFUlQo
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUo
KSkpOworICAgICAgICBzdGQ6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3VyY2UudmFsdWUo
KSktPmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CiAgICAgfSk7CiB9CiAKQEAg
LTIwNyw5ICsyMDcsOSBAQCB1aW50NjRfdCBJREJSZXF1ZXN0Ojpzb3VyY2VPYmplY3RTdG9yZUlk
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2Uu
dmFsdWUoKSwKLSAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9iamVj
dFN0b3JlKSB7IHJldHVybiBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKTsgfSwKLSAg
ICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSB7IHJldHVybiBpbmRleC0+
aW5mbygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9LAotICAgICAgICBbXSAoY29uc3QgUmVm
UHRyPElEQkN1cnNvcj4mKSB7IHJldHVybiAwOyB9CisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8
SURCT2JqZWN0U3RvcmU+JiBvYmplY3RTdG9yZSkgLT4gdWludDY0X3QgeyByZXR1cm4gb2JqZWN0
U3RvcmUtPmluZm8oKS5pZGVudGlmaWVyKCk7IH0sCisgICAgICAgIFtdIChjb25zdCBSZWZQdHI8
SURCSW5kZXg+JiBpbmRleCkgLT4gdWludDY0X3QgeyByZXR1cm4gaW5kZXgtPmluZm8oKS5vYmpl
Y3RTdG9yZUlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0IFJlZlB0cjxJREJDdXJz
b3I+JikgLT4gdWludDY0X3QgeyByZXR1cm4gMDsgfQogICAgICk7CiB9CiAKQEAgLTIzOCw3ICsy
MzgsNyBAQCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZSBJREJSZXF1ZXN0OjpyCiB7CiAgICAg
QVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQo
bV9zb3VyY2UpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJ
bmRleD4+KG1fc291cmNlLnZhbHVlKCkpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8SURCSW5kZXg+PihtX3NvdXJjZS52YWx1ZSgpKSk7CiAKICAgICByZXR1cm4g
bV9yZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY3LDEwICs2NywxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5JREJSZXF1ZXN0KCk7
CiAKLSAgICB1c2luZyBSZXN1bHQgPSBWYXJpYW50PFJlZlB0cjxJREJDdXJzb3I+LCBSZWZQdHI8
SURCRGF0YWJhc2U+LCBKU0M6OlN0cm9uZzxKU0M6OlVua25vd24+PjsKKyAgICB1c2luZyBSZXN1
bHQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4sIFJlZlB0cjxJREJEYXRhYmFzZT4s
IEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+OwogICAgIEV4Y2VwdGlvbk9yPHN0ZDo6b3B0aW9u
YWw8UmVzdWx0Pj4gcmVzdWx0KCkgY29uc3Q7CiAKLSAgICB1c2luZyBTb3VyY2UgPSBWYXJpYW50
PFJlZlB0cjxJREJPYmplY3RTdG9yZT4sIFJlZlB0cjxJREJJbmRleD4sIFJlZlB0cjxJREJDdXJz
b3I+PjsKKyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0
b3JlPiwgUmVmUHRyPElEQkluZGV4PiwgUmVmUHRyPElEQkN1cnNvcj4+OwogICAgIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8U291cmNlPiYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0K
IAogICAgIEV4Y2VwdGlvbk9yPERPTUVycm9yKj4gZXJyb3IoKSBjb25zdDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTQsNyArNTQsNyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlQ
YXRoCiAgICAgICAgICAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIHN0cmlu
Zyk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7Ci0gICAgICAgIFdURjo6dmlzaXQodmlz
aXRvciwga2V5UGF0aC52YWx1ZSgpKTsKKyAgICAgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCBrZXlQ
YXRoLnZhbHVlKCkpOwogICAgIH0gZWxzZQogICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKCJ0
eXBlIiwgS2V5UGF0aFR5cGU6Ok51bGwpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9N
ZWRpYUNvbnRyb2xzSG9zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBT
dHJpbmcgTWVkaWFDb250cm9sc0hvc3Q6OmRpc3BsYXlOYW1lRm9yCiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIHJldHVybiBXVEY6OnZpc2l0KFsm
cGFnZV0oYXV0byYgdHJhY2spIHsKKyAgICByZXR1cm4gc3RkOjp2aXNpdChbJnBhZ2VdKGF1dG8m
IHRyYWNrKSB7CiAgICAgICAgIHJldHVybiBwYWdlLT5ncm91cCgpLmNhcHRpb25QcmVmZXJlbmNl
cygpLmRpc3BsYXlOYW1lRm9yVHJhY2sodHJhY2suZ2V0KCkpOwogICAgIH0sIHRyYWNrLnZhbHVl
KCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlh
Q29udHJvbHNIb3N0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFRl
eHRUcmFjaz4+IHNvcnRlZFRyYWNrTGlzdEZvck1lbnUoVGV4dFRyYWNrTGlzdCYpOwogICAgIFZl
Y3RvcjxSZWZQdHI8QXVkaW9UcmFjaz4+IHNvcnRlZFRyYWNrTGlzdEZvck1lbnUoQXVkaW9UcmFj
a0xpc3QmKTsKIAotICAgIHVzaW5nIFRleHRPckF1ZGlvVHJhY2sgPSBXVEY6OlZhcmlhbnQ8UmVm
UHRyPFRleHRUcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPj47CisgICAgdXNpbmcgVGV4dE9yQXVk
aW9UcmFjayA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VGV4dFRyYWNrPiwgUmVmUHRyPEF1ZGlvVHJh
Y2s+PjsKICAgICBTdHJpbmcgZGlzcGxheU5hbWVGb3JUcmFjayhjb25zdCBzdGQ6Om9wdGlvbmFs
PFRleHRPckF1ZGlvVHJhY2s+Jik7CiAKICAgICBUZXh0VHJhY2sqIGNhcHRpb25NZW51T2ZmSXRl
bSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw3IEBAIERvY3VtZW50KiBNZWRpYURldmljZXM6OmRvY3VtZW50KCkgY29uc3QKICAgICBy
ZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiB9CiAK
LXN0YXRpYyBNZWRpYUNvbnN0cmFpbnRzIGNyZWF0ZU1lZGlhQ29uc3RyYWludHMoY29uc3QgVmFy
aWFudDxib29sLCBNZWRpYVRyYWNrQ29uc3RyYWludHM+JiBjb25zdHJhaW50cykKK3N0YXRpYyBN
ZWRpYUNvbnN0cmFpbnRzIGNyZWF0ZU1lZGlhQ29uc3RyYWludHMoY29uc3Qgc3RkOjp2YXJpYW50
PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4mIGNvbnN0cmFpbnRzKQogewogICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGNvbnN0cmFpbnRzLAogICAgICAgICBbJl0gKGJvb2wgaXNWYWxpZCkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RGV2aWNlcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBA
IHB1YmxpYzoKICAgICB1c2luZyBFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSA9IERPTVByb21pc2VE
ZWZlcnJlZDxJRExTZXF1ZW5jZTxJRExJbnRlcmZhY2U8TWVkaWFEZXZpY2VJbmZvPj4+OwogCiAg
ICAgc3RydWN0IFN0cmVhbUNvbnN0cmFpbnRzIHsKLSAgICAgICAgVmFyaWFudDxib29sLCBNZWRp
YVRyYWNrQ29uc3RyYWludHM+IHZpZGVvOwotICAgICAgICBWYXJpYW50PGJvb2wsIE1lZGlhVHJh
Y2tDb25zdHJhaW50cz4gYXVkaW87CisgICAgICAgIHN0ZDo6dmFyaWFudDxib29sLCBNZWRpYVRy
YWNrQ29uc3RyYWludHM+IHZpZGVvOworICAgICAgICBzdGQ6OnZhcmlhbnQ8Ym9vbCwgTWVkaWFU
cmFja0NvbnN0cmFpbnRzPiBhdWRpbzsKICAgICB9OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGdl
dFVzZXJNZWRpYShjb25zdCBTdHJlYW1Db25zdHJhaW50cyYsIFByb21pc2UmJikgY29uc3Q7CiAg
ICAgdm9pZCBlbnVtZXJhdGVEZXZpY2VzKEVudW1lcmF0ZURldmljZXNQcm9taXNlJiYpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29u
c3RyYWludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhVHJhY2tDb25zdHJhaW50cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHN0cnVjdCBDb25zdHJhaW5Cb29sZWFuUGFyYW1l
dGVycyB7CiB9OwogCiBzdHJ1Y3QgQ29uc3RyYWluRE9NU3RyaW5nUGFyYW1ldGVycyB7Ci0gICAg
c3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBleGFjdDsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGlkZWFsOwor
ICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiBl
eGFjdDsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+Pj4gaWRlYWw7CiB9OwogCiBzdHJ1Y3QgQ29uc3RyYWluRG91YmxlUmFuZ2UgOiBEb3VibGVS
YW5nZSB7CkBAIC01NiwxMCArNTYsMTAgQEAgc3RydWN0IENvbnN0cmFpbkxvbmdSYW5nZSA6IExv
bmdSYW5nZSB7CiAgICAgc3RkOjpvcHRpb25hbDxpbnQ+IGlkZWFsOwogfTsKIAotdXNpbmcgQ29u
c3RyYWluQm9vbGVhbiA9IFZhcmlhbnQ8Ym9vbCwgQ29uc3RyYWluQm9vbGVhblBhcmFtZXRlcnM+
OwotdXNpbmcgQ29uc3RyYWluRE9NU3RyaW5nID0gVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+LCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzPjsKLXVzaW5nIENvbnN0cmFpbkRvdWJs
ZSA9IFZhcmlhbnQ8ZG91YmxlLCBDb25zdHJhaW5Eb3VibGVSYW5nZT47Ci11c2luZyBDb25zdHJh
aW5Mb25nID0gVmFyaWFudDxpbnQsIENvbnN0cmFpbkxvbmdSYW5nZT47Cit1c2luZyBDb25zdHJh
aW5Cb29sZWFuID0gc3RkOjp2YXJpYW50PGJvb2wsIENvbnN0cmFpbkJvb2xlYW5QYXJhbWV0ZXJz
PjsKK3VzaW5nIENvbnN0cmFpbkRPTVN0cmluZyA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3Rv
cjxTdHJpbmc+LCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJzPjsKK3VzaW5nIENvbnN0cmFp
bkRvdWJsZSA9IHN0ZDo6dmFyaWFudDxkb3VibGUsIENvbnN0cmFpbkRvdWJsZVJhbmdlPjsKK3Vz
aW5nIENvbnN0cmFpbkxvbmcgPSBzdGQ6OnZhcmlhbnQ8aW50LCBDb25zdHJhaW5Mb25nUmFuZ2U+
OwogCiBzdHJ1Y3QgTWVkaWFUcmFja0NvbnN0cmFpbnRTZXQgewogICAgIHN0ZDo6b3B0aW9uYWw8
Q29uc3RyYWluTG9uZz4gd2lkdGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1JUQ0ljZVNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFJUQ0lj
ZVNlcnZlciB7Ci0gICAgVmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PiB1cmxzOworICAg
IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PiB1cmxzOwogICAgIFN0cmluZyBj
cmVkZW50aWFsOwogICAgIFN0cmluZyB1c2VybmFtZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCw4ICsxODQsOCBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBSVENQZWVyQ29ubmVjdGlvbjo6cmVtCiAKIEV4Y2VwdGlvbk9y
PFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IFJUQ1BlZXJDb25uZWN0aW9uOjphZGRUcmFuc2NlaXZl
cihBZGRUcmFuc2NlaXZlclRyYWNrT3JLaW5kJiYgd2l0aFRyYWNrLCBjb25zdCBSVENSdHBUcmFu
c2NlaXZlckluaXQmIGluaXQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3Ry
aW5nPih3aXRoVHJhY2spKSB7Ci0gICAgICAgIGNvbnN0IFN0cmluZyYga2luZCA9IFdURjo6Z2V0
PFN0cmluZz4od2l0aFRyYWNrKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KHdpdGhUcmFjaykpIHsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBraW5kID0gc3RkOjpnZXQ8
U3RyaW5nPih3aXRoVHJhY2spOwogICAgICAgICBpZiAoa2luZCAhPSAiYXVkaW8iICYmIGtpbmQg
IT0gInZpZGVvIikKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsK
IApAQCAtMTkzLDcgKzE5Myw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+
IFJUQ1AKICAgICAgICAgcmV0dXJuIGNvbXBsZXRlQWRkVHJhbnNjZWl2ZXIoV1RGTW92ZShzZW5k
ZXIpLCBpbml0LCBjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCksIGtpbmQpOwogICAgIH0KIAot
ICAgIFJlZjxNZWRpYVN0cmVhbVRyYWNrPiB0cmFjayA9IFdURjo6Z2V0PFJlZlB0cjxNZWRpYVN0
cmVhbVRyYWNrPj4od2l0aFRyYWNrKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiB0cmFjayA9IHN0ZDo6Z2V0PFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNrPj4od2l0
aFRyYWNrKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgIGNvbnN0IFN0cmluZyYgdHJhY2tJZCA9IHRy
YWNrLT5pZCgpOwogICAgIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kID0gdHJhY2stPmtpbmQoKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDcsNyArMTA3LDcgQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5k
ZXI+PiBhZGRUcmFjayhSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3QgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8TWVkaWFTdHJlYW0+PiYpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpOwogCi0gICAgdXNpbmcgQWRkVHJhbnNjZWl2ZXJU
cmFja09yS2luZCA9IFZhcmlhbnQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+LCBTdHJpbmc+Owor
ICAgIHVzaW5nIEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2s+LCBTdHJpbmc+OwogICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBU
cmFuc2NlaXZlcj4+IGFkZFRyYW5zY2VpdmVyKEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQmJiwg
Y29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CiAKICAgICAvLyA2LjEgUGVlci10by1wZWVy
IGRhdGEgQVBJCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1NEUFBy
b2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vU0RQUHJvY2Vzc29yLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vU0RQUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEw
ICs2MCwxMCBAQCBwdWJsaWM6CiAgICAgUmVzdWx0IGdlbmVyYXRlQ2FuZGlkYXRlTGluZShjb25z
dCBJY2VDYW5kaWRhdGUmLCBTdHJpbmcmIG91dENhbmRpZGF0ZUxpbmUpIGNvbnN0OwogCiAgICAg
c3RydWN0IFBhcnNpbmdSZXN1bHQgewotICAgICAgICBWYXJpYW50PEljZUNhbmRpZGF0ZSwgUmVz
dWx0PiByZXN1bHQ7CisgICAgICAgIHN0ZDo6dmFyaWFudDxJY2VDYW5kaWRhdGUsIFJlc3VsdD4g
cmVzdWx0OwogCi0gICAgICAgIFJlc3VsdCBwYXJzaW5nU3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJY2VDYW5kaWRhdGU+KHJlc3VsdCkgPyBSZXN1bHQ6OlN1
Y2Nlc3MgOiBXVEY6OmdldDxTRFBQcm9jZXNzb3I6OlJlc3VsdD4ocmVzdWx0KTsgfQotICAgICAg
ICBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSgpIHsgcmV0dXJuIFdURjo6Z2V0PEljZUNhbmRpZGF0
ZT4ocmVzdWx0KTsgfQorICAgICAgICBSZXN1bHQgcGFyc2luZ1N0YXR1cygpIGNvbnN0IHsgcmV0
dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8SWNlQ2FuZGlkYXRlPihyZXN1bHQpID8gUmVzdWx0
OjpTdWNjZXNzIDogc3RkOjpnZXQ8U0RQUHJvY2Vzc29yOjpSZXN1bHQ+KHJlc3VsdCk7IH0KKyAg
ICAgICAgSWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUoKSB7IHJldHVybiBzdGQ6OmdldDxJY2VDYW5k
aWRhdGU+KHJlc3VsdCk7IH0KICAgICB9OwogICAgIFBhcnNpbmdSZXN1bHQgcGFyc2VDYW5kaWRh
dGVMaW5lKGNvbnN0IFN0cmluZyYgY2FuZGlkYXRlTGluZSkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL0lETFR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvSURMVHlwZXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvSURMVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjI4LDExICsyMjgsMTEg
QEAgc3RydWN0IElETEVycm9yIDogSURMVW5zdXBwb3J0ZWRUeXBlIHsgfQogc3RydWN0IElETERP
TUV4Y2VwdGlvbiA6IElETFVuc3VwcG9ydGVkVHlwZSB7IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIFRzPgotc3RydWN0IElETFVuaW9uIDogSURMVHlwZTxWYXJpYW50PHR5cGVuYW1lIFRzOjpJ
bXBsZW1lbnRhdGlvblR5cGUuLi4+PiB7CitzdHJ1Y3QgSURMVW5pb24gOiBJRExUeXBlPHN0ZDo6
dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPj4gewogICAgIHVzaW5n
IFR5cGVMaXN0ID0gYnJpZ2FuZDo6bGlzdDxUcy4uLj47CiAKLSAgICB1c2luZyBQYXJhbWV0ZXJU
eXBlID0gY29uc3QgVmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50YXRpb25UeXBlLi4uPiY7
Ci0gICAgdXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gY29uc3Qgc3RkOjpvcHRpb25hbDxW
YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiY7CisgICAgdXNpbmcg
UGFyYW1ldGVyVHlwZSA9IGNvbnN0IHN0ZDo6dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50
YXRpb25UeXBlLi4uPiY7CisgICAgdXNpbmcgTnVsbGFibGVQYXJhbWV0ZXJUeXBlID0gY29uc3Qg
c3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlw
ZS4uLj4+JjsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBJRExCdWZmZXJTb3Vy
Y2UgOiBJRExXcmFwcGVyPFQ+IHsgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0J1ZmZlclNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0J1ZmZlclNvdXJjZS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9CdWZmZXJTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEJ1ZmZlclNvdXJjZSB7CiBwdWJsaWM6Ci0gICAg
dXNpbmcgVmFyaWFudFR5cGUgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+PjsKKyAgICB1c2luZyBWYXJpYW50VHlwZSA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlcj4+OwogCiAgICAgQnVmZmVyU291cmNlKCkgeyB9CiAgICAgQnVmZmVyU291cmNl
KFZhcmlhbnRUeXBlJiYgdmFyaWFudCkKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6
OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhfdCogeworICAgICAgICByZXR1
cm4gc3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+IGNvbnN0IHVpbnQ4X3QqIHsKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkp
OwogICAgICAgICB9LCBtX3ZhcmlhbnQpOwogICAgIH0KIAogICAgIHNpemVfdCBsZW5ndGgoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAt
PiBzaXplX3QgeworICAgICAgICByZXR1cm4gc3RkOjp2aXNpdChbXShhdXRvJiBidWZmZXIpIC0+
IHNpemVfdCB7CiAgICAgICAgICAgICByZXR1cm4gYnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAg
ICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQ2FsbFRyYWNlclR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvQ2FsbFRyYWNlclR5cGVzLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0NhbGxUcmFjZXJUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3
ICs0Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWYXJpYW50PAordHlw
ZWRlZiBzdGQ6OnZhcmlhbnQ8CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpJbWFnZVNt
b290aGluZ1F1YWxpdHksCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpXaW5kaW5nUnVs
ZSwKICAgICBET01NYXRyaXhJbml0LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzAsMTEgKzI3MCwxMSBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZShFeGVjU3RhCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgImluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZSIpOwogCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihr
ZXlQYXRoKSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQ
YXRoKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5
UGF0aFBhcnNlRXJyb3IgZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmlu
Zz4oa2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIElEQlBhcnNlS2V5UGF0
aChzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKICAg
ICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAgICAgaWYg
KGtleVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCkBAIC0yOTcsOCArMjk3LDggQEAgYm9vbCBpbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoRXhlY1N0YQogCiBSZWZQdHI8SURCS2V5PiBtYXliZUNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlJiBleGVjLCBjb25z
dCBKU1ZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpIHsKLSAgICAg
ICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CisgICAg
aWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpKSB7Cisg
ICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOwog
ICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IHJlc3VsdDsKICAgICAgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoYXJyYXkuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiBz
dHJpbmcgOiBhcnJheSkgewpAQCAtMzEwLDE3ICszMTAsMTcgQEAgUmVmUHRyPElEQktleT4gbWF5
YmVDcmVhdGVJREJLZXlGcm9tU2NyaQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJh
eShXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIFdURjo6Z2V0PFN0cmlu
Zz4oa2V5UGF0aCkpOworICAgIHJldHVybiBpbnRlcm5hbENyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCkpOwog
fQogCiBib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhdGUmIGV4ZWMs
IGNvbnN0IEpTVmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQog
ewogICAgIExPRyhTdG9yYWdlQVBJLCAiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7
CiAKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsK
KyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGtleVBhdGgpKTsKICAg
ICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CiAgICAgSURCS2V5UGF0aFBhcnNlRXJy
b3IgZXJyb3I7Ci0gICAgSURCUGFyc2VLZXlQYXRoKFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCks
IGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIElEQlBhcnNlS2V5UGF0aChzdGQ6OmdldDxT
dHJpbmc+KGtleVBhdGgpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKICAgICBBU1NFUlQoZXJy
b3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3I6Ok5vbmUpOwogCiAgICAgaWYgKCFrZXlQYXRoRWxl
bWVudHMuc2l6ZSgpKQpAQCAtNDAwLDcgKzQwMCw3IEBAIHN0YXRpYyBWZWN0b3I8SURCS2V5RGF0
YT4gY3JlYXRlS2V5UGF0aEEKICAgICAgICAgcmV0dXJuIGtleXM7CiAgICAgfSk7CiAKLSAgICBy
ZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CisgICAgcmV0dXJuIHN0
ZDo6dmlzaXQodmlzaXRvciwgaW5mby5rZXlQYXRoKCkpOwogfQogCiB2b2lkIGdlbmVyYXRlSW5k
ZXhLZXlGb3JWYWx1ZShFeGVjU3RhdGUmIGV4ZWMsIGNvbnN0IElEQkluZGV4SW5mbyYgaW5mbywg
SlNWYWx1ZSB2YWx1ZSwgSW5kZXhLZXkmIG91dEtleSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQ29udmVydFVuaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMzg1LDcgKzM4NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+IHN0cnVjdCBK
U0NvbnZlcnQKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNTdGF0ZSA9IHRydWU7CiAg
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIG5lZWRzR2xvYmFsT2JqZWN0ID0gdHJ1ZTsKIAotICAg
IHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5kOjpwdHJkaWZm
X3Q8MD4sIFdURjo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZhbHVlPjsKKyAg
ICB1c2luZyBTZXF1ZW5jZSA9IGJyaWdhbmQ6Om1ha2Vfc2VxdWVuY2U8YnJpZ2FuZDo6cHRyZGlm
Zl90PDA+LCBzdGQ6OnZhcmlhbnRfc2l6ZTxJbXBsZW1lbnRhdGlvblR5cGU+Ojp2YWx1ZT47CiAK
ICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNvbnZlcnQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBJbXBsZW1lbnRhdGlvblR5cGUm
IHZhcmlhbnQpCiAgICAgewpAQCAtMzk2LDcgKzM5Niw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+IHN0cnVjdCBKU0NvbnZlcnQKICAgICAgICAgICAgIHVzaW5nIEkgPSB0eXBlbmFtZSBXVEY6
OlJlbW92ZUNWQW5kUmVmZXJlbmNlPGRlY2x0eXBlKHR5cGUpPjo6dHlwZTo6dHlwZTsKICAgICAg
ICAgICAgIGlmIChJOjp2YWx1ZSA9PSBpbmRleCkgewogICAgICAgICAgICAgICAgIEFTU0VSVCgh
cmV0dXJuVmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9KUzxicmlnYW5k
OjphdDxUeXBlTGlzdCwgST4+KHN0YXRlLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0PEk6OnZhbHVl
Pih2YXJpYW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pTPGJyaWdhbmQ6
OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgc3RkOjpnZXQ8STo6dmFsdWU+
KHZhcmlhbnQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNjYgKzY2LDY2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIEpTVmFsdWUgY29udmVydFRvSlNWYWx1ZShFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEFueSYgYW55KQogewogICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGFueSwKLSAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSB7CisgICAg
ICAgIFtdIChzdGQ6Om51bGxwdHJfdCkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChib29sIHZhbHVlKSB7CisgICAgICAg
IFtdIChib29sIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc0Jvb2xl
YW4odmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAoaW50IHZhbHVlKSB7CisgICAgICAg
IFtdIChpbnQgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSB7CisgICAg
ICAgIFtdICh1bnNpZ25lZCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAobG9uZyBsb25nIHZhbHVl
KSB7CisgICAgICAgIFtdIChsb25nIGxvbmcgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgW10gKGZsb2F0
IHZhbHVlKSB7CisgICAgICAgIFtdIChmbG9hdCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAg
ICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNv
bnN0IFN0cmluZyYgdmFsdWUpIHsKKyAgICAgICAgWyZdIChjb25zdCBTdHJpbmcmIHZhbHVlKSAt
PiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZSgmc3RhdGUs
IHZhbHVlKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8Ym9vbD4mIHZh
bHVlcykgeworICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxib29sPiYgdmFsdWVzKSAtPiBKU1Zh
bHVlIHsKICAgICAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CiAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQogICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5k
KGpzQm9vbGVhbih2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KCZz
dGF0ZSwgMCwgJmdsb2JhbE9iamVjdCwgbGlzdCk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAo
Y29uc3QgUmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3Qg
UmVmUHRyPEZsb2F0MzJBcnJheT4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJl
dHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkpOwogICAgICAgICB9
LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAg
ICAgWyZdIChjb25zdCBSZWZQdHI8SW50MzJBcnJheT4mIGFycmF5KSAtPiBKU1ZhbHVlIHsKICAg
ICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0KCkp
OwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50OEFycmF5PiYgYXJy
YXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWludDhBcnJheT4mIGFycmF5KSAtPiBK
U1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
YXJyYXkuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50
MzJBcnJheT4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQzMkFycmF5
PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29u
c3QgUmVmUHRyPFdlYkdMQnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPFdlYkdMQnVmZmVyPiYgYnVmZmVyKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYnVmZmVyLmdldCgpKTsKICAgICAgICAgfSwK
LSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4mIGJ1ZmZlcikgewor
ICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiYgYnVmZmVyKSAtPiBK
U1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
YnVmZmVyLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2Vi
R0xQcm9ncmFtPiYgcHJvZ3JhbSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFBy
b2dyYW0+JiBwcm9ncmFtKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgcHJvZ3JhbS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAg
IFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiYgYnVmZmVyKSB7CisgICAgICAg
IFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiYgYnVmZmVyKSAtPiBKU1ZhbHVl
IHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgYnVmZmVy
LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xUZXh0
dXJlPiYgdGV4dHVyZSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFRleHR1cmU+
JiB0ZXh0dXJlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAgIHJldHVybiB0b0pTKCZzdGF0ZSwg
Jmdsb2JhbE9iamVjdCwgdGV4dHVyZS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAo
Y29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+JiBhcnJheSkgeworICAgICAg
ICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiYgYXJyYXkpIC0+
IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAs
Ci0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3Q+JiBhcnJh
eSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0PiYg
YXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0KICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC03MjUxLDcgKzcyNTEsNyBAQCBzdWIgR2Vu
ZXJhdGVDYWxsVHJhY2VyUGFyYW1ldGVyKCkKICAgICBteSAoJG5hbWUsICR0eXBlLCAkaW5kZW50
KSA9IEBfOwogCiAgICAgaWYgKCR0eXBlLT5pc1VuaW9uKSB7Ci0gICAgICAgIHJldHVybiAkaW5k
ZW50IC4gIiAgICBXVEY6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFt
ZXRlcnMuYXBwZW5kKHZhbHVlKTsgfSwgIiAuICRuYW1lIC4gIik7IjsKKyAgICAgICAgcmV0dXJu
ICRpbmRlbnQgLiAiICAgIHN0ZDo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJhY2Vy
UGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCAiIC4gJG5hbWUgLiAiKTsiOwogICAgIH0KIAog
ICAgIHJldHVybiAkaW5kZW50IC4gIiAgICBjYWxsVHJhY2VyUGFyYW1ldGVycy5hcHBlbmQoIiAu
ICRuYW1lIC4gIik7IjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbFRyYWNlci5jcHAJKHJldmlzaW9uIDIy
MDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RD
YWxsVHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDcgKzI5Niw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBzZXRKU1Rlc3RDYWxsVHJhY2VyVGUKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGZhbHNlKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0Fj
dGl2ZSgpKSkgewogICAgICAgICBWZWN0b3I8VGVzdENhbGxUcmFjZXJJbnRlcmZhY2VWYXJpYW50
PiBjYWxsVHJhY2VyUGFyYW1ldGVyczsKLSAgICAgICAgV1RGOjp2aXNpdChbJl0gKGF1dG8mIHZh
bHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1ZSk7IH0sIG5hdGl2ZVZhbHVl
KTsKKyAgICAgICAgc3RkOjp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJh
bWV0ZXJzLmFwcGVuZCh2YWx1ZSk7IH0sIG5hdGl2ZVZhbHVlKTsKICAgICAgICAgQ2FsbFRyYWNl
cjo6dGVzdENhbGxUcmFjZXJJbnRlcmZhY2UoaW1wbCwgQVNDSUlMaXRlcmFsKCJ0ZXN0QXR0cmli
dXRlV2l0aFZhcmlhbnQiKSwgV1RGTW92ZShjYWxsVHJhY2VyUGFyYW1ldGVycykpOwogICAgIH0K
ICAgICBpbXBsLnNldFRlc3RBdHRyaWJ1dGVXaXRoVmFyaWFudChXVEZNb3ZlKG5hdGl2ZVZhbHVl
KSk7CkBAIC00MDMsNyArNDAzLDcgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdAogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFs
dWUoKSk7CiAgICAgaWYgKFVOTElLRUxZKGltcGwuY2FsbFRyYWNpbmdBY3RpdmUoKSkpIHsKICAg
ICAgICAgVmVjdG9yPFRlc3RDYWxsVHJhY2VySW50ZXJmYWNlVmFyaWFudD4gY2FsbFRyYWNlclBh
cmFtZXRlcnM7Ci0gICAgICAgIFdURjo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJh
Y2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCB2YXJpYW50QXJnKTsKKyAgICAgICAgc3Rk
Ojp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2
YWx1ZSk7IH0sIHZhcmlhbnRBcmcpOwogICAgICAgICBDYWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNl
ckludGVyZmFjZShpbXBsLCBBU0NJSUxpdGVyYWwoInRlc3RPcGVyYXRpb25XaXRoVmFyaWFudEFy
Z3VtZW50IiksIFdURk1vdmUoY2FsbFRyYWNlclBhcmFtZXRlcnMpKTsKICAgICB9CiAgICAgaW1w
bC50ZXN0T3BlcmF0aW9uV2l0aFZhcmlhbnRBcmd1bWVudChXVEZNb3ZlKHZhcmlhbnRBcmcpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtLmgJKHJldmlzaW9uIDIy
MDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBjbGFzcyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJz
OwogY2xhc3MgQ3J5cHRvS2V5OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotdXNp
bmcgS2V5RGF0YSA9IFZhcmlhbnQ8VmVjdG9yPHVpbnQ4X3Q+LCBKc29uV2ViS2V5PjsKLXVzaW5n
IEtleU9yS2V5UGFpciA9IFZhcmlhbnQ8UmVmUHRyPENyeXB0b0tleT4sIENyeXB0b0tleVBhaXI+
OwordXNpbmcgS2V5RGF0YSA9IHN0ZDo6dmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEpzb25XZWJL
ZXk+OwordXNpbmcgS2V5T3JLZXlQYWlyID0gc3RkOjp2YXJpYW50PFJlZlB0cjxDcnlwdG9LZXk+
LCBDcnlwdG9LZXlQYWlyPjsKIAogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtIDogcHVibGljIFJlZkNv
dW50ZWQ8Q3J5cHRvQWxnb3JpdGhtPiB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvS2V5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0tleS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvS2V5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgZW51bSBjbGFzcyBDcnlw
dG9LZXlDbGFzcyB7CiBjbGFzcyBDcnlwdG9LZXkgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8Q3J5cHRvS2V5PiB7CiBwdWJsaWM6CiAgICAgdXNpbmcgVHlwZSA9IENyeXB0b0tleVR5cGU7
Ci0gICAgdXNpbmcgS2V5QWxnb3JpdGhtID0gVmFyaWFudDxDcnlwdG9LZXlBbGdvcml0aG0sIENy
eXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0aG0sIENyeXB0b0htYWNLZXlB
bGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwgQ3J5cHRvUnNhS2V5QWxnb3Jp
dGhtPjsKKyAgICB1c2luZyBLZXlBbGdvcml0aG0gPSBzdGQ6OnZhcmlhbnQ8Q3J5cHRvS2V5QWxn
b3JpdGhtLCBDcnlwdG9BZXNLZXlBbGdvcml0aG0sIENyeXB0b0VjS2V5QWxnb3JpdGhtLCBDcnlw
dG9IbWFjS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0sIENyeXB0b1Jz
YUtleUFsZ29yaXRobT47CiAKICAgICBDcnlwdG9LZXkoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciwgVHlwZSwgYm9vbCBleHRyYWN0YWJsZSwgQ3J5cHRvS2V5VXNhZ2VCaXRtYXApOwogICAgIHZp
cnR1YWwgfkNyeXB0b0tleSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNy
eXB0by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0
by5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9TdWJ0bGVD
cnlwdG8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxNCArOTYsMTQgQEAgc3RhdGljIEV4Y2Vw
dGlvbk9yPHN0ZDo6dW5pcXVlX3B0cjxDcnlwdAogICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkgeworICAgIGlm
IChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpIHsK
ICAgICAgICAgYXV0byBuZXdQYXJhbXMgPSBTdHJvbmc8SlNPYmplY3Q+KHZtLCBjb25zdHJ1Y3RF
bXB0eU9iamVjdCgmc3RhdGUpKTsKLSAgICAgICAgbmV3UGFyYW1zLT5wdXREaXJlY3Qodm0sIElk
ZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmluZygmc3RhdGUsIFdURjo6
Z2V0PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKKyAgICAgICAgbmV3UGFyYW1zLT5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAibmFtZSIpLCBqc1N0cmlu
Zygmc3RhdGUsIHN0ZDo6Z2V0PFN0cmluZz4oYWxnb3JpdGhtSWRlbnRpZmllcikpKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBub3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzKHN0
YXRlLCBuZXdQYXJhbXMsIG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgYXV0byYgdmFsdWUgPSBX
VEY6OmdldDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4oYWxnb3JpdGhtSWRlbnRpZmllcik7
CisgICAgYXV0byYgdmFsdWUgPSBzdGQ6OmdldDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0Pj4o
YWxnb3JpdGhtSWRlbnRpZmllcik7CiAKICAgICBhdXRvIHBhcmFtcyA9IGNvbnZlcnREaWN0aW9u
YXJ5PENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KHN0YXRlLCB2YWx1ZS5nZXQoKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgRXhjZXB0aW9uIHsgRXhpc3RpbmdFeGNlcHRpb25F
cnJvciB9KTsKQEAgLTg2NywxMiArODY3LDEyIEBAIHZvaWQgU3VidGxlQ3J5cHRvOjpleHBvcnRL
ZXkoS2V5Rm9ybWF0IGYKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6U3Br
aToKICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UGtjczg6CiAgICAgICAg
IGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlJhdzogewotICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiByYXdLZXkgPSBXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGtleSk7CisgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4mIHJhd0tleSA9IHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oa2V5KTsKICAgICAgICAgICAgIGZ1bGZpbGxQcm9taXNlV2l0aEFycmF5QnVmZmVyKFdURk1v
dmUoY2FwdHVyZWRQcm9taXNlKSwgcmF3S2V5LmRhdGEoKSwgcmF3S2V5LnNpemUoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86Oktl
eUZvcm1hdDo6SndrOgotICAgICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNvbHZlPElETERp
Y3Rpb25hcnk8SnNvbldlYktleT4+KFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkp
OworICAgICAgICAgICAgY2FwdHVyZWRQcm9taXNlLT5yZXNvbHZlPElETERpY3Rpb25hcnk8SnNv
bldlYktleT4+KFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
OTM2LDExICs5MzYsMTEgQEAgdm9pZCBTdWJ0bGVDcnlwdG86OndyYXBLZXkoSlNDOjpFeGVjU3Rh
dAogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpTcGtpOgogICAgICAgICBj
YXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoKICAgICAgICAgY2FzZSBTdWJ0bGVD
cnlwdG86OktleUZvcm1hdDo6UmF3OgotICAgICAgICAgICAgYnl0ZXMgPSBXVEY6OmdldDxWZWN0
b3I8dWludDhfdD4+KGtleSk7CisgICAgICAgICAgICBieXRlcyA9IHN0ZDo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oa2V5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0aW5n
IHRvIEpTIGp1c3QgdG8gSlNPTi1TdHJpbmdpZnkgc2VlbXMgaW5lZmZpY2llbnQuIFdlIHNob3Vs
ZCBmaW5kIGEgd2F5IHRvIGdvIGRpcmVjdGx5IGZyb20gdGhlIHN0cnVjdCB0byBKU09OLgotICAg
ICAgICAgICAgYXV0byBqd2sgPSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJv
bWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2Jq
ZWN0KCkpLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKKyAgICAgICAgICAg
IGF1dG8gandrID0gdG9KUzxJRExEaWN0aW9uYXJ5PEpzb25XZWJLZXk+PigqKHByb21pc2UtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCkpLCAqKHByb21pc2UtPmdsb2JhbE9iamVjdCgpKSwg
V1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAgICAgICAgICAgICBTdHJpbmcg
andrU3RyaW5nID0gSlNPTlN0cmluZ2lmeShwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RXhlYygpLCBqd2ssIDApOwogICAgICAgICAgICAgQ1N0cmluZyBqd2tVdGY4U3RyaW5nID0gandr
U3RyaW5nLnV0ZjgoU3RyaWN0Q29udmVyc2lvbik7CiAgICAgICAgICAgICBieXRlcy5hcHBlbmQo
andrVXRmOFN0cmluZy5kYXRhKCksIGp3a1V0ZjhTdHJpbmcubGVuZ3RoKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9TdWJ0bGVDcnlwdG8uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1
OCw4IEBAIHB1YmxpYzoKIAogICAgIHVzaW5nIEtleUZvcm1hdCA9IENyeXB0b0tleUZvcm1hdDsK
IAotICAgIHVzaW5nIEFsZ29yaXRobUlkZW50aWZpZXIgPSBWYXJpYW50PEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+LCBTdHJpbmc+OwotICAgIHVzaW5nIEtleURhdGFWYXJpYW50ID0gVmFyaWFu
dDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4s
IEpzb25XZWJLZXk+OworICAgIHVzaW5nIEFsZ29yaXRobUlkZW50aWZpZXIgPSBzdGQ6OnZhcmlh
bnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz47CisgICAgdXNpbmcgS2V5RGF0
YVZhcmlhbnQgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBKc29uV2ViS2V5PjsKIAogICAgIHZvaWQgZW5jcnlwdChK
U0M6OkV4ZWNTdGF0ZSYsIEFsZ29yaXRobUlkZW50aWZpZXImJiwgQ3J5cHRvS2V5JiwgQnVmZmVy
U291cmNlJiYgZGF0YSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAgICAgdm9pZCBkZWNyeXB0
KEpTQzo6RXhlY1N0YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkmLCBCdWZm
ZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19DQkMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0JDLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KEMK
ICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsK
ICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NCQzo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0Fs
Z29yaXRobUFFU19DRkIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9p
ZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBvcnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9L
ZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5
Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlB
RVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZl
Y3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNr
QWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9v
bCB7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0ZCOjppbXBv
cnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1
bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ1RSLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ1RSLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291
cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFF
U19DVFI6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAg
IHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0
b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNp
emVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29sIHsKQEAgLTEyOCw3ICsxMjgs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DVFI6OmltcG9ydEtleShDCiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZN
b3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUFFU19HQ00uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfR0NNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTU0LDcgKzE1NCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6aW1wb3J0S2V5KEMK
ICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsK
ICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNrID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3Qg
U3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0dDTTo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjpp
bXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2Vi
S2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFj
aykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJz
LT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29y
aXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0tXLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1BRVNfS1cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMCArODAsMTAgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfS1c6OmltcG9ydEtleShDcgogICAgIFJlZlB0cjxDcnlwdG9LZXlB
RVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9y
bWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFt
ZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRh
KSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6
OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azogewotICAgICAgICByZXN1bHQgPSBDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6
Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgW10oc2l6ZV90IGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgeworICAgICAgICByZXN1bHQgPSBDcnlw
dG9LZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6
Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgW10oc2l6ZV90IGxl
bmd0aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewogICAgICAgICAgICAgc3dpdGNoIChs
ZW5ndGgpIHsKICAgICAgICAgICAgIGNhc2UgQ3J5cHRvS2V5QUVTOjpzX2xlbmd0aDEyODoKICAg
ICAgICAgICAgICAgICByZXR1cm4gYWxnLmlzTnVsbCgpIHx8IGFsZyA9PSBBTEcxMjg7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1FQ0RILmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNESC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw3ICsxMjMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVDREg6OmltcG9ydEtleShDcnlw
CiAgICAgUmVmUHRyPENyeXB0b0tleUVDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsK
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5
ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJL
ZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAg
Ym9vbCBpc1VzYWdlc0FsbG93ZWQgPSBmYWxzZTsKICAgICAgICAgaWYgKCFrZXkuZC5pc051bGwo
KSkgewpAQCAtMTUwLDIxICsxNTAsMjEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1FQ0RIOjppbXBv
cnRLZXkoQ3J5cAogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1l
ZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJhdyhl
Y1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUo
c3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6U3BraToKICAgICAgICAg
aWYgKHVzYWdlcykgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3Ip
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0
b0tleUVDOjppbXBvcnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMu
bmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0
cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRT
cGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RG
TW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdl
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODoKICAg
ICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZXJpdmVLZXkpICYm
ICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpICYmICh1c2FnZXMgXiAoQ3J5cHRv
S2V5VXNhZ2VEZXJpdmVLZXkgfCBDcnlwdG9LZXlVc2FnZURlcml2ZUJpdHMpKSkgewogICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChl
Y1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUo
V1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJhbWV0ZXJzLmlk
ZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
YWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtRUNEU0EuY3BwCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9B
bGdvcml0aG1FQ0RTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgIFJlZlB0cjxDcnlwdG9LZXlF
Qz4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNv
bldlYktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpn
ZXQ8SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQu
aXNOdWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051
bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAg
IGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTEyNCwyMSArMTI0LDIxIEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtRUNEU0E6OmltcG9ydEtleShDcnkKICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UmF3KGVjUGFyYW1ldGVycy5p
ZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0
b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFy
YW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6OlNwa2k6CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKHVzYWdlcyBeIENyeXB0
b0tleVVzYWdlVmVyaWZ5KSkgewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4
RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUVDOjppbXBvcnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFt
ZXRlcnMubmFtZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjpp
bXBvcnRTcGtpKGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2
ZSwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUs
IHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2Nz
ODoKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkg
ewogICAgICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBv
cnRQa2NzOChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUs
IFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1
c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1wb3J0UGtjczgoZWNQYXJh
bWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGlmICghcmVzdWx0KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNw
cAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtSEtERi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAg
dm9pZCBDcnlwdG9BbGdvcml0aG1IS0RGOjppbXBvcnRLZXkoQ3J5cAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+
aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNh
Z2VzKSk7CisgICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgdXNhZ2Vz
KSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtSEtERjo6Z2V0S2V5
TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1B
Qy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobUhNQUMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAx
LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkoQ3J5cAogICAgIFJlZlB0
cjxDcnlwdG9LZXlITUFDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNl
IENyeXB0b0tleUZvcm1hdDo6UmF3OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlITUFDOjpp
bXBvcnRSYXcoaG1hY1BhcmFtZXRlcnMubGVuZ3RoLnZhbHVlX29yKDApLCBobWFjUGFyYW1ldGVy
cy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6
OmltcG9ydFJhdyhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0
ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6Okp3azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2gsIGNvbnN0IFN0cmluZyYgYWxnKSAtPiBib29s
IHsKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtl
eShDcnlwCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH07Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhNQUM6OmltcG9ydEp3ayhobWFjUGFyYW1l
dGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBX
VEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywg
V1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUhN
QUM6OmltcG9ydEp3ayhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQYXJh
bWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0FsZ0NhbGxiYWNrKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5
cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUEJLREYyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3Bw
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9D
cnlwdG9BbGdvcml0aG1QQktERjIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtUEJLREYyOjppbXBvcnRLZXkoQ3IKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6Y3JlYXRlKHBhcmFtZXRlcnMt
PmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIHVz
YWdlcykpOworICAgIGNhbGxiYWNrKENyeXB0b0tleVJhdzo6Y3JlYXRlKHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIHVzYWdl
cykpOwogfQogCiBFeGNlcHRpb25PcjxzaXplX3Q+IENyeXB0b0FsZ29yaXRobVBCS0RGMjo6Z2V0
S2V5TGVuZ3RoKGNvbnN0IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMmKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFf
NS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5
cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1Mx
X3YxXzUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNBPiByZXN1
bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6Sndr
OiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5
PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6OmdldDxKc29u
V2ViS2V5PihkYXRhKSk7CiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxsKCkg
JiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVjcnlwdCkpIHx8IChrZXkuZC5pc051bGwoKSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VFbmNyeXB0KSkpKSB7CiAgICAgICAgICAgICBleGNl
cHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTMs
NyArMTEzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjppbQogICAg
ICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3Br
aShwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1vdmUoV1RGOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocGFyYW1ldGVycy0+aWRlbnRpZmllciwg
c3RkOjpudWxsb3B0LCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBl
eHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ3J5
cHRvS2V5Rm9ybWF0OjpQa2NzODogewpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtUlNBRVNfUEtDUzFfdjFfNTo6aW0KICAgICAgICAgICAgIGV4Y2VwdGlvbkNhbGxiYWNr
KFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIs
IHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwg
ZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1w
b3J0UGtjczgocGFyYW1ldGVycy0+aWRlbnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKHN0
ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3Jp
dGhtUlNBU1NBX1BLQ1MxX3YxXzUuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1S
U0FTU0FfUEtDUzFfdjFfNTo6aQogICAgIFJlZlB0cjxDcnlwdG9LZXlSU0E+IHJlc3VsdDsKICAg
ICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAg
ICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEp
KTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+
KGRhdGEpKTsKIAogICAgICAgICBpZiAodXNhZ2VzICYmICgoIWtleS5kLmlzTnVsbCgpICYmICh1
c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVNpZ24pKSB8fCAoa2V5LmQuaXNOdWxsKCkgJiYgKHVzYWdl
cyBeIENyeXB0b0tleVVzYWdlVmVyaWZ5KSkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxs
YmFjayhTeW50YXhFcnJvcik7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0
aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFy
YW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+
KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMu
aGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBD
cnlwdG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBDcnlwdG9B
bGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNTo6aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzE2NTQzNj4KLSAgICAgICAgcmVz
dWx0ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBy
c2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50
OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCByc2FQYXJhbWV0
ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRl
ZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1SU0FfT0FFUC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVAuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FF
UC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIENyeXB0b0FsZ29y
aXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVzdWx0
OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3azog
ewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4o
ZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpOwogCiAgICAgICAgIGJvb2wgaXNVc2FnZXNBbGxvd2VkID0gZmFsc2U7CiAg
ICAgICAgIGlmICgha2V5LmQuaXNOdWxsKCkpIHsKQEAgLTE1Nyw3ICsxNTcsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlm
aWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0
ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNh
UGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE2Niw3ICsxNjYsNyBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRLZXkoCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2Pgot
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIs
IHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1MuY3BwCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1SU0FfUFNTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4g
cmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6
Okp3azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldl
YktleT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8
SnNvbldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNO
dWxsKCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwo
KSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4
Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENy
eXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlm
aWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0
ID0gQ3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNh
UGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIENyeXB0b0FsZ29yaXRobVJTQV9QU1M6OmltcG9ydEtleShDCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2Pgot
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlk
ZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIs
IHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVp
bnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJz
L0NyeXB0b0FsZ29yaXRobUVjZHNhUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxn
b3JpdGhtRWNkc2FQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcyBmaW5hbCA6
IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50
PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJp
YW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIENsYXNzIHBhcmFtZXRl
cnNDbGFzcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENsYXNzOjpFY2RzYVBhcmFtczsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBh
cmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0Ny
eXB0b0FsZ29yaXRobUhrZGZQYXJhbXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENy
eXB0b0FsZ29yaXRobUhrZGZQYXJhbXMgZmluYWwgOiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBh
bmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0
PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElk
ZW50aWZpZXI7CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgQnVmZmVyU291cmNlIGluZm87
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1I
bWFjS2V5UGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFt
ZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGhtSG1hY0tleVBhcmFtcyBmaW5hbCA6IHB1YmxpYyBD
cnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29uc2lk
ZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6U3Ry
b25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpTQzo6
U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKICAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gbGVu
Z3RoOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1QYmtkZjJQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1QYmtkZjJQYXJhbXMuaAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUGJr
ZGYyUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAg
IEJ1ZmZlclNvdXJjZSBzYWx0OwogICAgIHVuc2lnbmVkIGxvbmcgaXRlcmF0aW9uczsKICAgICAv
LyBGSVhNRTogQ29uc2lkZXIgbWVyZ2luZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBW
YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3Rk
Ojp2YXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAg
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciBoYXNoSWRlbnRpZmllcjsKIAogICAgIGNvbnN0IFZl
Y3Rvcjx1aW50OF90PiYgc2FsdFZlY3RvcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
cGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1S
c2FIYXNoZWRJbXBvcnRQYXJhbXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkSW1wb3J0UGFyYW1zIGZpbmFsIDogcHVibGlj
IENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25z
aWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlND
OjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6OlJzYUhhc2hlZEltcG9ydFBhcmFtczsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNh
SGFzaGVkS2V5R2VuUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRv
L3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVJzYUhhc2hlZEtleUdlblBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRobVJzYUhhc2hl
ZEtleUdlblBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdvcml0aG1Sc2FLZXlHZW5QYXJh
bXMgewogcHVibGljOgogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhh
c2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0
cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4s
IFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlm
aWVyOwogCiAgICAgQ2xhc3MgcGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Q2xhc3M6OlJzYUhhc2hlZEtleUdlblBhcmFtczsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAs
NyArMjUwLDcgQEAgc3RhdGljIENTU1Byb3BlcnR5SW5mbyBwYXJzZUphdmFTY3JpcHRDUwogCiB9
CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IENTU1N0eWxlRGVjbGFy
YXRpb246Om5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKK3N0ZDo6
b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGF1
dG8gcHJvcGVydHlJbmZvID0gcGFyc2VKYXZhU2NyaXB0Q1NTUHJvcGVydHlOYW1lKHByb3BlcnR5
TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUluZm8ucHJvcGVydHlJRCkKQEAgLTI1OSwxNyArMjU5
LDE3IEBAIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IEMKICAgICBhdXRv
IHZhbHVlID0gZ2V0UHJvcGVydHlDU1NWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0
eUlEKTsKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBh
IHNob3J0aGFuZCBwcm9wZXJ0eSAoc3VjaCBhcyAicGFkZGluZyIpLCBpdCBjYW4gb25seSBiZSBh
Y2Nlc3NlZCB1c2luZyBnZXRQcm9wZXJ0eVZhbHVlLgotICAgICAgICByZXR1cm4gVmFyaWFudDxT
dHJpbmcsIGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZvLnBy
b3BlcnR5SUQpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+
IHsgZ2V0UHJvcGVydHlWYWx1ZUludGVybmFsKHByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKSB9Owog
ICAgIH0KICAgICAKICAgICBpZiAocHJvcGVydHlJbmZvLmhhZFBpeGVsT3JQb3NQcmVmaXggJiYg
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpIHsKICAgICAgICAgLy8gQ2FsbCB0aGlzIHZl
cnNpb24gb2YgdGhlIGdldHRlciBzbyB0aGF0LCBlLmcuLCBwaXhlbFRvcCByZXR1cm5zIHRvcCBh
cyBhIG51bWJlcgogICAgICAgICAvLyBpbiBwaXhlbCB1bml0cyBhbmQgcG9zVG9wIHNob3VsZCBk
b2VzIHRoZSBzYW1lIF9pZl8gdGhpcyBpcyBhIHBvc2l0aW9uZWQgZWxlbWVudC4KICAgICAgICAg
Ly8gRklYTUU6IElmIG5vdCBhIHBvc2l0aW9uZWQgZWxlbWVudCwgTVNJRSBkb2N1bWVudGF0aW9u
IHNheXMgcG9zVG9wIHNob3VsZCByZXR1cm4gMDsgdGhpcyBydWxlIGlzIG5vdCBpbXBsZW1lbnRl
ZC4KLSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+IHsgZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1BYKSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFN0cmluZywgZG91YmxlPiB7IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcsIGRv
dWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJp
bmcsIGRvdWJsZT4geyB2YWx1ZS0+Y3NzVGV4dCgpIH07CiB9CiAKIEV4Y2VwdGlvbk9yPHZvaWQ+
IENTU1N0eWxlRGVjbGFyYXRpb246OnNldE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAgICAgLy8g
QmluZGluZ3Mgc3VwcG9ydC4KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBkb3Vi
bGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgc3RkOjpvcHRpb25hbDxz
dGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5n
Jik7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgU3RyaW5nIHZhbHVlLCBib29sJiBwcm9wZXJ0eVN1cHBvcnRlZCk7CiAgICAgVmVj
dG9yPEF0b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0RPTU1hdHJpeC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvRE9NTWF0cml4LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBET01NYXRyaXggOiBwdWJsaWMgRE9NTWF0cml4UmVhZE9u
bHkgewogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3Jl
YXRlKHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rvcjxkb3VibGU+Pj4mJiBpbml0
KQorICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4Pj4gY3JlYXRlKHN0ZDo6b3B0
aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+PiYmIGluaXQpCiAgICAg
ewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcgRE9NTWF0cml4KTsKICAgICAg
ICAgaWYgKCFpbml0KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJpeFJlYWRPbmx5LmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXhSZWFkT25s
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHN0cnVjdCBET01Qb2ludEluaXQ7
CiBjbGFzcyBET01NYXRyaXhSZWFkT25seSA6IHB1YmxpYyBTY3JpcHRXcmFwcGFibGUsIHB1Ymxp
YyBSZWZDb3VudGVkPERPTU1hdHJpeFJlYWRPbmx5PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXhSZWFk
T25seT4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91Ymxl
Pj4+JiYgaW5pdCkKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1hdHJpeFJlYWRPbmx5
Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJs
ZT4+PiYmIGluaXQpCiAgICAgewogICAgICAgICBhdXRvIG1hdHJpeCA9IGFkb3B0UmVmKCpuZXcg
RE9NTWF0cml4UmVhZE9ubHkpOwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvRm9udEZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRm9u
dEZhY2UuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0ZvbnRGYWNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBTdHJp
bmcgZmVhdHVyZVNldHRpbmdzOwogICAgIH07CiAgICAgCi0gICAgdXNpbmcgU291cmNlID0gVmFy
aWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXJWaWV3Pj47CisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PFN0cmluZywgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+PjsKICAg
ICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPEZvbnRGYWNlPj4gY3JlYXRlKERvY3VtZW50JiwgY29u
c3QgU3RyaW5nJiBmYW1pbHksIFNvdXJjZSYmLCBjb25zdCBEZXNjcmlwdG9ycyYpOwogICAgIHN0
YXRpYyBSZWY8Rm9udEZhY2U+IGNyZWF0ZShDU1NGb250RmFjZSYpOwogICAgIHZpcnR1YWwgfkZv
bnRGYWNlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsy
ODIsNyBAQCBlbnVtIGNsYXNzIEN1c3RvbUVsZW1lbnROYW1lVmFsaWRhdGlvblN0CiAgICAgQ29u
ZmxpY3RzV2l0aFN0YW5kYXJkRWxlbWVudE5hbWUKIH07CiAKLXVzaW5nIFJlbmRlcmluZ0NvbnRl
eHQgPSBWYXJpYW50PAordXNpbmcgUmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dmFyaWFudDwKICNp
ZiBFTkFCTEUoV0VCR0wpCiAgICAgUmVmUHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4sCiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksNyArOTksNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IERyYWdnZWRDb250ZW50RGF0YSB7
CiAgICAgICAgIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlOwogICAgIH07Ci0gICAgdXNpbmcgRGF0
YSA9IFZhcmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9u
RGF0YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhPjsKKyAg
ICB1c2luZyBEYXRhID0gc3RkOjp2YXJpYW50PElzQWN0aXZlTWF0Y2hEYXRhLCBEZXNjcmlwdGlv
bkRhdGEsIERpY3RhdGlvbkRhdGEsIERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEsIERyYWdnZWRD
b250ZW50RGF0YT47CiAKICAgICBEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGlzQWN0aXZlTWF0Y2gpOwogICAgIERvY3VtZW50TWFy
a2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBTdHJpbmcoKSk7CkBAIC0xOTgsMTIgKzE5OCwx
MiBAQCBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2hpZnRPZmZzZXRzCiAKIGlubGluZSBj
b25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8gV1RGOjpnZXQ8
U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBzdGQ6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBl
bXB0eVN0cmluZygpOwogfQogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlcjo6aXNBY3RpdmVN
YXRjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4o
bV9kYXRhKSAmJiBXVEY6OmdldDxib29sPihtX2RhdGEpOworICAgIHJldHVybiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgc3RkOjpnZXQ8Ym9vbD4obV9kYXRhKTsKIH0K
IAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJvb2wgaXNBY3Rp
dmVNYXRjaCkKQEAgLTIyNywyMiArMjI3LDIyIEBAIGlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9j
dW1lbnRNYXJrZXIoTWEKIAogaW5saW5lIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1h
cmtlcjo6YWx0ZXJuYXRpdmVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0
aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXM7CisgICAgcmV0dXJuIHN0
ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOwog
fQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWx0ZXJuYXRpdmUoY29uc3QgU3Ry
aW5nJiBhbHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQogewotICAgIFdURjo6Z2V0PERpY3RhdGlv
bkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0
aXZlOworICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0
ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwogfQogCiBpbmxpbmUgaWQgRG9jdW1lbnRN
YXJrZXI6Om1ldGFkYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9u
QWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKKyAgICByZXR1cm4gc3Rk
OjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsK
IH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKGlkIG1ldGFkYXRh
KQogewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0
YWRhdGEgPSBtZXRhZGF0YTsKKyAgICBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRh
PihtX2RhdGEpLm1ldGFkYXRhID0gbWV0YWRhdGE7CiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxk
SW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogICAg
IGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkg
ewotICAgICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKKyAgICAg
ICAgaWYgKGF1dG8gdGFyZ2V0Tm9kZSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEcmFnZ2Vk
Q29udGVudERhdGE+KG5ld01hcmtlci5kYXRhKCkpLnRhcmdldE5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm4gdGFyZ2V0Tm9kZS0+cmVuZGVyZXIoKSAmJiB0YXJnZXROb2RlLT5yZW5kZXJlcigpLT5p
c1JlbmRlclJlcGxhY2VkKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBFdmVudFRhcmdldDo6
YWRkRXZlbnRMaXN0ZW5lckZvckJpbgogICAgICAgICBhZGRFdmVudExpc3RlbmVyKGV2ZW50VHlw
ZSwgbGlzdGVuZXIucmVsZWFzZU5vbk51bGwoKSwgY2FwdHVyZSk7CiAgICAgfSk7CiAKLSAgICBX
VEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFy
aWFudCk7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5k
aW5ncyhjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+
JiYgbGlzdGVuZXIsIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiYmIHZhcmlhbnQpCkBAIC0xMDQs
NyArMTA0LDcgQEAgdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckZvcgogICAg
ICAgICByZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgKmxpc3RlbmVyLCBjYXB0dXJlKTsK
ICAgICB9KTsKIAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKIH0KIAogYm9vbCBFdmVudFRhcmdldDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYg
bGlzdGVuZXIsIGNvbnN0IExpc3RlbmVyT3B0aW9ucyYgb3B0aW9ucykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsOSArOTEsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgb25jZTsKICAgICB9OwogCi0gICAgdXNpbmcgQWRkRXZlbnRMaXN0ZW5lck9w
dGlvbnNPckJvb2xlYW4gPSBWYXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLCBib29sPjsK
KyAgICB1c2luZyBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IHN0ZDo6dmFyaWFu
dDxBZGRFdmVudExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBBZGRFdmVudExpc3RlbmVyT3B0aW9uc09yQm9v
bGVhbiYmKTsKLSAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNPckJvb2xlYW4gPSBWYXJpYW50PExp
c3RlbmVyT3B0aW9ucywgYm9vbD47CisgICAgdXNpbmcgTGlzdGVuZXJPcHRpb25zT3JCb29sZWFu
ID0gc3RkOjp2YXJpYW50PExpc3RlbmVyT3B0aW9ucywgYm9vbD47CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZW1vdmVFdmVudExpc3RlbmVyRm9yQmluZGluZ3MoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIFJlZlB0cjxFdmVudExpc3RlbmVyPiYmLCBMaXN0ZW5lck9wdGlvbnNPckJv
b2xlYW4mJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8Ym9vbD4gZGlzcGF0Y2hF
dmVudEZvckJpbmRpbmdzKEV2ZW50Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEJsb2I7CiAKLXVzaW5nIE1lc3NhZ2VFdmVudFNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRy
PERPTVdpbmRvdz4sIFJlZlB0cjxNZXNzYWdlUG9ydD4+OwordXNpbmcgTWVzc2FnZUV2ZW50U291
cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8TWVzc2FnZVBvcnQ+
PjsKIAogY2xhc3MgTWVzc2FnZUV2ZW50IGZpbmFsIDogcHVibGljIEV2ZW50IHsKIHB1YmxpYzoK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBjbGFzcyBTVkdRdWFsaWZp
ZWROYW1lOwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFRvdWNoRXZlbnQ7CiAKLXVzaW5nIE5v
ZGVPclN0cmluZyA9IFZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwordXNpbmcgTm9kZU9y
U3RyaW5nID0gc3RkOjp2YXJpYW50PFJlZlB0cjxOb2RlPiwgU3RyaW5nPjsKIAogY2xhc3MgTm9k
ZVJhcmVEYXRhQmFzZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnRpbWVyRmlyCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9u
OiB7CiAgICAgICAgIGlmICghbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnRTdHJpbmcgPSBXVEY6OmdldDxBdXRvY29y
cmVjdGlvblJlcGxhY2VtZW50PihtX2RldGFpbHMpOworICAgICAgICBTdHJpbmcgcmVwbGFjZW1l
bnRTdHJpbmcgPSBzdGQ6OmdldDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50PihtX2RldGFpbHMp
OwogICAgICAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwpAQCAtMzI2LDcgKzMyNiw3IEBAIHZv
aWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICNpZiBVU0UoRElDVEFUSU9O
X0FMVEVSTkFUSVZFUykKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB1aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gV1RG
OjpnZXQ8QWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PihtX2RldGFpbHMpOworICAgICAgICB1
aW50NjRfdCBkaWN0YXRpb25Db250ZXh0ID0gc3RkOjpnZXQ8QWx0ZXJuYXRpdmVEaWN0YXRpb25D
b250ZXh0PihtX2RldGFpbHMpOwogICAgICAgICBpZiAoIWRpY3RhdGlvbkNvbnRleHQpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3
UmVjdEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOwpAQCAtNTkyLDkgKzU5
Miw5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFQKICAgICAgICAg
c3RhcnRBbHRlcm5hdGl2ZVRleHRVSVRpbWVyKEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb24p
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZXM6IHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKSkKKyAgICAgICAgaWYgKCFzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIu
ZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgbWFya2Vy
RGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0
YSgpKTsKKyAgICAgICAgYXV0byYgbWFya2VyRGF0YSA9IHN0ZDo6Z2V0PERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKTsKICAgICAgICAgaWYgKGN1cnJlbnRXb3Jk
ICE9IG1hcmtlckRhdGEub3JpZ2luYWxUZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBtX3JhbmdlV2l0aEFsdGVybmF0aXZlID0gd29yZFJhbmdlOwpAQCAtNjQyLDkgKzY0
Miw5IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aW5zZXJ0RGkKIHZvaWQgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9B
TFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKTsKKyAgICBBU1NFUlQoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRh
dGEoKSkpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkK
LSAgICAgICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOworICAg
ICAgICBjbGllbnQtPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhzdGQ6OmdldDxEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4dCk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShtYXJrZXIpOwogI2VuZGlmCkBAIC02NTUsNyArNjU1LDcgQEAgVmVj
dG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcgogI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQogICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5h
dGl2ZVRleHRDbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJu
YXRpdmVzKFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0
YSgpKS5jb250ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRp
dmVzKHN0ZDo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgp
KS5jb250ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKG1hcmtlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExMSw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWN0aXZlOwog
ICAgICAgICBBbHRlcm5hdGl2ZVRleHRUeXBlIHR5cGU7CiAgICAgICAgIFN0cmluZyBvcmlnaW5h
bFRleHQ7Ci0gICAgICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJu
YXRpdmVEaWN0YXRpb25Db250ZXh0PiBkZXRhaWxzOworICAgICAgICBzdGQ6OnZhcmlhbnQ8QXV0
b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBkZXRh
aWxzOwogICAgIH07CiAKICAgICBTdHJpbmcgZGlzbWlzc1Nvb24oUmVhc29uRm9yRGlzbWlzc2lu
Z0FsdGVybmF0aXZlVGV4dCk7CkBAIC0xMzYsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1faXNEaXNtaXNzZWRCeUVkaXRpbmc7CiAgICAgQWx0ZXJuYXRpdmVUZXh0VHlwZSBtX3R5cGU7
CiAgICAgU3RyaW5nIG1fb3JpZ2luYWxUZXh0OwotICAgIFZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25S
ZXBsYWNlbWVudCwgQWx0ZXJuYXRpdmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFpbHM7CisgICAg
c3RkOjp2YXJpYW50PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQsIEFsdGVybmF0aXZlRGljdGF0
aW9uQ29udGV4dD4gbV9kZXRhaWxzOwogCiAgICAgU3RyaW5nIG1fb3JpZ2luYWxTdHJpbmdGb3JM
YXN0RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwogICAgIFBvc2l0aW9uIG1fcG9zaXRpb25Gb3JMYXN0
RGVsZXRlZEF1dG9jb3JyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9i
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEJsb2I7CiBjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi11c2luZyBCbG9iUGFydFZhcmlhbnQgPSBWYXJp
YW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
PiwgUmVmUHRyPEJsb2I+LCBTdHJpbmc+OwordXNpbmcgQmxvYlBhcnRWYXJpYW50ID0gc3RkOjp2
YXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyPiwgUmVmUHRyPEJsb2I+LCBTdHJpbmc+OwogCiBjbGFzcyBCbG9iIDogcHVibGljIFNjcmlw
dFdyYXBwYWJsZSwgcHVibGljIFVSTFJlZ2lzdHJhYmxlLCBwdWJsaWMgUmVmQ291bnRlZDxCbG9i
PiB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmZpcmVF
dmVudChjb25zdCBBdG9taWNTCiAgICAgZGlzcGF0Y2hFdmVudChQcm9ncmVzc0V2ZW50OjpjcmVh
dGUodHlwZSwgdHJ1ZSwgbV9sb2FkZXIgPyBtX2xvYWRlci0+Ynl0ZXNMb2FkZWQoKSA6IDAsIG1f
bG9hZGVyID8gbV9sb2FkZXItPnRvdGFsQnl0ZXMoKSA6IDApKTsKIH0KIAotc3RkOjpvcHRpb25h
bDxWYXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6
cmVzdWx0KCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXI+Pj4gRmlsZVJlYWRlcjo6cmVzdWx0KCkgY29uc3QKIHsKICAgICBp
ZiAoIW1fbG9hZGVyIHx8IG1fZXJyb3IpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkocmV2aXNpb24gMjIwOTU0KQorKysg
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5
LDcgKzY5LDcgQEAgcHVibGljOgogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGU7IH0KICAgICBSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJu
IG1fZXJyb3I7IH0KICAgICBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFkVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3Ry
aW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiByZXN1bHQoKSBjb25zdDsKKyAgICBzdGQ6
Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+
IHJlc3VsdCgpIGNvbnN0OwogCiAgICAgdXNpbmcgUmVmQ291bnRlZDo6cmVmOwogICAgIHVzaW5n
IFJlZkNvdW50ZWQ6OmRlcmVmOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29s
bGVjdGlvbi5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEFsbENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywyOCArNDMsMjggQEAgaW5s
aW5lIEhUTUxBbGxDb2xsZWN0aW9uOjpIVE1MQWxsQ29sbGVjdAogfQogCiAvLyBodHRwczovL2h0
bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI2RvbS1odG1s
YWxsY29sbGVjdGlvbi1pdGVtCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRl
eGVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3QKK3N0
ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxF
bGVtZW50Pj4+IEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKG5hbWVPcklu
ZGV4LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKGF1
dG8gaW5kZXggPSBKU0M6OnBhcnNlSW5kZXgoKm5hbWVPckluZGV4LmltcGwoKSkpCi0gICAgICAg
IHJldHVybiBWYXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4g
eyBSZWZQdHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+
IHsgUmVmUHRyPEVsZW1lbnQ+IHsgaXRlbShpbmRleC52YWx1ZSgpKSB9IH07CiAKICAgICByZXR1
cm4gbmFtZWRJdGVtT3JJdGVtcyhuYW1lT3JJbmRleCk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5z
cGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjY29uY2VwdC1nZXQt
YWxsLW5hbWVkCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwg
UmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rp
b246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewog
ICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRlbXMobmFtZSk7CiAKICAgICBpZiAo
bmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAg
aWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0
cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBX
VEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+
IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiB7IGRvd25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVyZWRCeU5hbWUo
bmFtZSkgfSB9OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBkb3duY2FzdDxE
b2N1bWVudD4ob3duZXJOb2RlKCkpLmFsbEZpbHRlcmVkQnlOYW1lKG5hbWUpIH0gfTsKIH0KIAog
SFRNTEFsbE5hbWVkU3ViQ29sbGVjdGlvbjo6fkhUTUxBbGxOYW1lZFN1YkNvbGxlY3Rpb24oKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFsbENvbGxlY3Rpb24uaAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIGNsYXNzIEhUTUxBbGxDb2xsZWN0aW9uIGZpbmFsIDog
cHVibGljIEEKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEhUTUxBbGxDb2xsZWN0aW9uPiBjcmVh
dGUoRG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlh
bnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRPckluZGV4
ZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBjb25zdDsKLSAg
ICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVs
ZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQ
dHI8RWxlbWVudD4+PiBuYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZU9ySW5kZXgpIGNvbnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMo
Y29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgSFRNTEFsbENvbGxl
Y3Rpb24oRG9jdW1lbnQmLCBDb2xsZWN0aW9uVHlwZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNyBAQCBSZWY8
RG9jdW1lbnRQYXJzZXI+IEhUTUxEb2N1bWVudDo6Y3JlYXRlCiB9CiAKIC8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2RvbS5odG1sI2RvbS1kb2N1bWVudC1uYW1lZGl0
ZW0KLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1l
bnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRy
PERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4+IEhU
TUxEb2N1bWVudDo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBp
ZiAobmFtZS5pc051bGwoKSB8fCAhaGFzRG9jdW1lbnROYW1lZEl0ZW0oKm5hbWUuaW1wbCgpKSkK
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKQEAgLTEyMCwxNiArMTIwLDE2IEBAIHN0ZDo6
b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwKICAgICBpZiAoVU5MSUtFTFkoZG9j
dW1lbnROYW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVudHMoKm5hbWUuaW1wbCgpKSkpIHsK
ICAgICAgICAgYXV0byBjb2xsZWN0aW9uID0gZG9jdW1lbnROYW1lZEl0ZW1zKG5hbWUpOwogICAg
ICAgICBBU1NFUlQoY29sbGVjdGlvbi0+bGVuZ3RoKCkgPiAxKTsKLSAgICAgICAgcmV0dXJuIFZh
cmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xs
ZWN0aW9uPj4geyBSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHsgV1RGTW92ZShjb2xsZWN0aW9uKSB9
IH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0
cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+IHsgV1RGTW92ZShjb2xsZWN0aW9uKSB9IH07CiAgICAgfQogCiAgICAgYXV0byYgZWxlbWVu
dCA9ICpkb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5pbXBsKCkpOwogICAgIGlmIChVTkxJS0VMWShp
czxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkpKSB7CiAgICAgICAgIGlmIChhdXRvKiBkb21X
aW5kb3cgPSBkb3duY2FzdDxIVE1MSUZyYW1lRWxlbWVudD4oZWxlbWVudCkuY29udGVudFdpbmRv
dygpKQotICAgICAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0
cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RE9NV2luZG93PiB7
IGRvbVdpbmRvdyB9IH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxE
T01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+IHsgUmVm
UHRyPERPTVdpbmRvdz4geyBkb21XaW5kb3cgfSB9OwogICAgIH0KIAotICAgIHJldHVybiBWYXJp
YW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVj
dGlvbj4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgJmVsZW1lbnQgfSB9OworICAgIHJldHVybiBzdGQ6
OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVudCB9IH07CiB9CiAKIFZlY3Rv
cjxBdG9taWNTdHJpbmc+IEhUTUxEb2N1bWVudDo6c3VwcG9ydGVkUHJvcGVydHlOYW1lcygpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGludCB3aWR0aCgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIGludCBoZWlnaHQoKTsKICAgICAKLSAgICBzdGQ6Om9wdGlvbmFs
PFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBS
ZWZQdHI8SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOwog
ICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMoKSBjb25zdDsK
IAogICAgIEVsZW1lbnQqIGRvY3VtZW50TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
IG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnROYW1lZEl0ZW0uZ2V0RWxlbWVudEJ5RG9j
dW1lbnROYW1lZEl0ZW0obmFtZSwgKnRoaXMpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDE2ICs1MiwxNiBAQCBIVE1MRm9ybUNvbnRyb2xzQ29sbGVj
dGlvbjo6fkhUTUxGb3JtQ29uCiB7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uOjpuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3N0ZDo6b3B0
aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+
Pj4gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAogewogICAgIGF1dG8gbmFtZWRJdGVtcyA9IHRoaXMtPm5hbWVkSXRl
bXMobmFtZSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6ZSgpID09IDEpCi0gICAgICAg
IHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+PiB7
IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICBy
ZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+
PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OwogCi0gICAg
cmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+IHsg
UmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgb3duZXJOb2RlKCkucmFkaW9Ob2RlTGlzdChuYW1lKSB9
IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0
cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUoKS5yYWRpb05v
ZGVMaXN0KG5hbWUpIH0gfTsKIH0KIAogY29uc3QgVmVjdG9yPEZvcm1Bc3NvY2lhdGVkRWxlbWVu
dCo+JiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Zm9ybUNvbnRyb2xFbGVtZW50cygpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29s
bGVjdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKCk7CiAKICAg
ICBIVE1MRWxlbWVudCogaXRlbSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwotICAg
IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgc3RkOjpv
cHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxlbWVu
dD4+PiBuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgLy8gRm9y
IENhY2hlZEhUTUxDb2xsZWN0aW9uLgogICAgIEhUTUxFbGVtZW50KiBjdXN0b21FbGVtZW50QWZ0
ZXIoRWxlbWVudCopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsMTYgKzE2MywxNiBAQCBIVE1MRWxl
bWVudCogSFRNTEZvcm1FbGVtZW50OjppdGVtKHVuc2lnCiAgICAgcmV0dXJuIGVsZW1lbnRzKCkt
Pml0ZW0oaW5kZXgpOwogfQogCi1zdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9k
ZUxpc3Q+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MRm9ybUVsZW1lbnQ6Om5hbWVkSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtRWxlbWVudDo6bmFtZWRJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKICAgICBhdXRvIG5hbWVkSXRlbXMgPSBu
YW1lZEVsZW1lbnRzKG5hbWUpOwogCiAgICAgaWYgKG5hbWVkSXRlbXMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAx
KQotICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxF
bGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0
cjxFbGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0g
fTsKIAotICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVs
ZW1lbnQ+PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IHJhZGlvTm9kZUxpc3QobmFtZSkgfSB9
OworICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8
RWxlbWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlzdChuYW1lKSB9
IH07CiB9CiAKIFZlY3RvcjxBdG9taWNTdHJpbmc+IEhUTUxGb3JtRWxlbWVudDo6c3VwcG9ydGVk
UHJvcGVydHlOYW1lcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgSFRNTEVsZW1lbnQq
IGl0ZW0odW5zaWduZWQgaW5kZXgpOwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2Rl
TGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsK
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7
CiAKICAgICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5lbmNv
ZGluZ1R5cGUoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDcgKzEzNjUsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyCiAKICAgICAgICAgICAgIC8vIDIuIEVuZCB0
aGUgc3luY2hyb25vdXMgc2VjdGlvbiwgY29udGludWluZyB0aGUgcmVtYWluaW5nIHN0ZXBzIGlu
IHBhcmFsbGVsLgogICAgICAgICAgICAgLy8gMy4gUnVuIHRoZSByZXNvdXJjZSBmZXRjaCBhbGdv
cml0aG0gd2l0aCB0aGUgYXNzaWduZWQgbWVkaWEgcHJvdmlkZXIgb2JqZWN0LgotICAgICAgICAg
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKAorICAgICAgICAgICAgc3RkOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgICAgICAgICAg
ICAgW3RoaXNdKFJlZlB0cjxNZWRpYVN0cmVhbT4gc3RyZWFtKSB7IG1fbWVkaWFTdHJlYW1TcmNP
YmplY3QgPSBzdHJlYW07IH0sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHVzaW5n
IEN1ZUludGVydmFsID0gQ3VlSW50ZXJ2YWxUcmVlOjpJbnQKIHVzaW5nIEN1ZUxpc3QgPSBWZWN0
b3I8Q3VlSW50ZXJ2YWw+OwogI2VuZGlmCiAKLXVzaW5nIE1lZGlhUHJvdmlkZXIgPSBzdGQ6Om9w
dGlvbmFsPFZhcmlhbnQ8Cit1c2luZyBNZWRpYVByb3ZpZGVyID0gc3RkOjpvcHRpb25hbDxzdGQ6
OnZhcmlhbnQ8CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBSZWZQdHI8TWVkaWFTdHJl
YW0+LAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVj
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9w
dGlvbnNDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDggQEAgcHVibGlj
OgogICAgIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEl0ZW0odW5zaWduZWQgaW5kZXgsIEhU
TUxPcHRpb25FbGVtZW50Kik7CiAgICAgCi0gICAgdXNpbmcgT3B0aW9uT3JPcHRHcm91cEVsZW1l
bnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxIVE1MT3B0R3Jv
dXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZhcmlhbnQ8UmVmUHRy
PEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCA9
IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8SFRNTE9wdEdy
b3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25P
cjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBjb25zdCBzdGQ6Om9w
dGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlKGludCBpbmRleCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6
CiAKICAgICBib29sIHVzZXNNZW51TGlzdCgpIGNvbnN0OwogCi0gICAgdXNpbmcgT3B0aW9uT3JP
cHRHcm91cEVsZW1lbnQgPSBWYXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0
cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47Ci0gICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IFZh
cmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKKyAgICB1c2luZyBPcHRpb25Pck9wdEdy
b3VwRWxlbWVudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTE9wdEdyb3VwRWxlbWVudD4+OworICAgIHVzaW5nIEhUTUxFbGVtZW50T3JJbnQgPSBz
dGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxFbGVtZW50PiwgaW50PjsKICAgICBXRUJDT1JFX0VYUE9S
VCBFeGNlcHRpb25Pcjx2b2lkPiBhZGQoY29uc3QgT3B0aW9uT3JPcHRHcm91cEVsZW1lbnQmLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPEhUTUxFbGVtZW50T3JJbnQ+JiBiZWZvcmUpOwogCiAgICAgdXNp
bmcgTm9kZTo6cmVtb3ZlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQYXJh
bXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1z
LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFyY2hQ
YXJhbXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwyMiArNDEsMjUgQEAgVVJMU2VhcmNoUGFy
YW1zOjpVUkxTZWFyY2hQYXJhbXMoY29uc3QgVgogewogfQogCi1FeGNlcHRpb25PcjxSZWY8VVJM
U2VhcmNoUGFyYW1zPj4gVVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUoVmFyaWFudDxWZWN0b3I8VmVj
dG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+Piwg
U3RyaW5nPiYmIHZhcmlhbnQpCitFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gVVJM
U2VhcmNoUGFyYW1zOjpjcmVhdGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4s
IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYgdmFy
aWFudCkKIHsKLSAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBW
ZWN0b3I8VmVjdG9yPFN0cmluZz4+JiB2ZWN0b3IpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFy
Y2hQYXJhbXM+PiB7Ci0gICAgICAgIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+IHBhaXJzOwotICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3IpIHsK
LSAgICAgICAgICAgIGlmIChwYWlyLnNpemUoKSAhPSAyKQotICAgICAgICAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFp
clswXSwgcGFpclsxXX0pOworICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKHZhcmlhbnQsCisgICAg
ICAgIFtdKGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4gRXhjZXB0aW9u
T3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+IHBhaXJzOworICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBwYWlyIDogdmVjdG9yKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhaXIuc2l6ZSgpICE9
IDIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsK
KyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoe3BhaXJbMF0sIHBhaXJbMV19KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFt
cyhXVEZNb3ZlKHBhaXJzKSkpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBWZWN0b3I8
V1RGOjpLZXlWYWx1ZVBhaXI8U3RyaW5nLCBTdHJpbmc+PiYgcGFpcnMpIC0+IEV4Y2VwdGlvbk9y
PFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKKyAgICAgICAgfSwKKyAgICAgICAgW10oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIC0+IEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiB7Cisg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBu
dWxscHRyKSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2Vh
cmNoUGFyYW1zKFdURk1vdmUocGFpcnMpKSk7Ci0gICAgfSwgWyZdKGNvbnN0IFZlY3RvcjxXVEY6
OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+JiBwYWlycykgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMocGFpcnMpKTsKLSAgICB9LCBbJl0oY29uc3Qg
U3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2VhcmNo
UGFyYW1zKHN0cmluZywgbnVsbHB0cikpOwotICAgIH0pOwotICAgIHJldHVybiBXVEY6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgICk7CiB9CiAKIFN0cmluZyBVUkxTZWFyY2hQYXJhbXM6
OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L1VSTFNlYXJjaFBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvVVJM
U2VhcmNoUGFyYW1zLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
VVJMU2VhcmNoUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBVUkxTZWFyY2hQYXJhbXMgOiBwdWJsaWMgUmVmQ291bnRl
ZDxVUkxTZWFyY2hQYXJhbXM+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVm
PFVSTFNlYXJjaFBhcmFtcz4+IGNyZWF0ZShWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4s
IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYpOwor
ICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3JlYXRlKHN0ZDo6
dmFyaWFudDxWZWN0b3I8VmVjdG9yPFN0cmluZz4+LCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8
U3RyaW5nLCBTdHJpbmc+PiwgU3RyaW5nPiYmKTsKICAgICBzdGF0aWMgUmVmPFVSTFNlYXJjaFBh
cmFtcz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBET01VUkwqIGFzc29jaWF0ZWRVUkwp
CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVUkxTZWFyY2hQYXJhbXMoc3Ry
aW5nLCBhc3NvY2lhdGVkVVJMKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4LDkgQEAgY2xhc3MgVGV4dE1ldHJpY3M7CiBzdHJ1
Y3QgRE9NTWF0cml4SW5pdDsKIAogI2lmIEVOQUJMRShWSURFTykKLXVzaW5nIENhbnZhc0ltYWdl
U291cmNlID0gVmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlk
ZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFn
ZVNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxI
VE1MVmlkZW9FbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAjZWxzZQotdXNp
bmcgQ2FudmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Piwg
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cit1c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IHN0
ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxl
bWVudD4+OwogI2VuZGlmCiAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBmaW5hbCA6
IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0LCBwdWJsaWMgQ2FudmFzUGF0aCB7CkBAIC0x
NzIsNyArMTcyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24o
Y29uc3QgU3RyaW5nJik7CiAKLSAgICB1c2luZyBTdHlsZSA9IFZhcmlhbnQ8U3RyaW5nLCBSZWZQ
dHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OworICAgIHVzaW5nIFN0
eWxlID0gc3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRy
PENhbnZhc1BhdHRlcm4+PjsKICAgICBTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0U3Ryb2tlU3R5bGUoU3R5bGUmJik7CiAgICAgU3R5bGUgZmlsbFN0eWxlKCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxMiArMTM1LDEyIEBAIENhbnZhc1N0eWxlIENhbnZh
c1N0eWxlOjpjcmVhdGVGcm9tU3RyaW4KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50
Q29sb3IoY29uc3QgQ2FudmFzU3R5bGUmIG90aGVyKSBjb25zdAogewotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PENvbG9yPihvdGhlci5tX3N0eWxlKSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PENvbG9yPiht
X3N0eWxlKSA9PSBXVEY6OmdldDxDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q29sb3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gc3RkOjpnZXQ8Q29sb3I+
KG1fc3R5bGUpID09IHN0ZDo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKIAotICAgIGlmIChX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpIHsKLSAgICAgICAgYXV0byYg
YSA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwotICAgICAgICBhdXRvJiBiID0gV1RG
OjpnZXQ8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxD
TVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKSkgeworICAgICAgICBhdXRvJiBhID0gc3RkOjpnZXQ8
Q01ZS0FDb2xvcj4obV9zdHlsZSk7CisgICAgICAgIGF1dG8mIGIgPSBzdGQ6OmdldDxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKTsKICAgICAgICAgcmV0dXJuIGEuYyA9PSBiLmMgJiYgYS5tID09
IGIubSAmJiBhLnkgPT0gYi55ICYmIGEuayA9PSBiLmsgJiYgYS5hID09IGIuYTsKICAgICB9CiAK
QEAgLTE0OSwxNSArMTQ5LDE1IEBAIGJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9y
KGNvbnMKIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50UkdCQShmbG9hdCByLCBmbG9h
dCBnLCBmbG9hdCBiLCBmbG9hdCBhKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgPT0g
Q29sb3IgeyByLCBnLCBiLCBhIH07CisgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8
Q29sb3I+KG1fc3R5bGUpICYmIHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBDb2xvciB7IHIs
IGcsIGIsIGEgfTsKIH0KIAogYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkgY29uc3QKIHsKLSAgICBp
ZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCisgICAgaWYg
KCFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENNWUtBQ29sb3I+
KG1fc3R5bGUpOworICAgIGF1dG8mIGNoYW5uZWxzID0gc3RkOjpnZXQ8Q01ZS0FDb2xvcj4obV9z
dHlsZSk7CiAgICAgcmV0dXJuIGMgPT0gY2hhbm5lbHMuYyAmJiBtID09IGNoYW5uZWxzLm0gJiYg
eSA9PSBjaGFubmVscy55ICYmIGsgPT0gY2hhbm5lbHMuayAmJiBhID09IGNoYW5uZWxzLmE7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgQ2Fu
dmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGNvbG9yKTsKICAgICBzdGF0
aWMgQ2FudmFzU3R5bGUgY3JlYXRlRnJvbVN0cmluZ1dpdGhPdmVycmlkZUFscGhhKGNvbnN0IFN0
cmluZyYgY29sb3IsIGZsb2F0IGFscGhhKTsKIAotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuICFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9Ci0gICAg
Ym9vbCBpc0N1cnJlbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8Q3VycmVudENvbG9yPihtX3N0eWxlKTsgfQotICAgIGJvb2wgaGFzT3ZlcnJpZGVBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIGlzQ3VycmVudENvbG9yKCkgJiYgV1RGOjpnZXQ8Q3VycmVudENvbG9y
PihtX3N0eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAgZmxvYXQgb3ZlcnJpZGVBbHBoYSgpIGNv
bnN0IHsgcmV0dXJuIFdURjo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHlsZSkub3ZlcnJpZGVBbHBo
YS52YWx1ZSgpOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIXN0ZDo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KKyAgICBib29sIGlzQ3VycmVudENv
bG9yKCkgY29uc3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+
KG1fc3R5bGUpOyB9CisgICAgYm9vbCBoYXNPdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4g
aXNDdXJyZW50Q29sb3IoKSAmJiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJy
aWRlQWxwaGE7IH0KKyAgICBmbG9hdCBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1cm4gc3Rk
OjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhLnZhbHVlKCk7IH0KIAog
ICAgIFN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIENhbnZhc0dyYWRpZW50KiBjYW52YXNHcmFk
aWVudCgpIGNvbnN0OwpAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogCiAgICAgQ2FudmFzU3R5
bGUoQ3VycmVudENvbG9yKTsKIAotICAgIFZhcmlhbnQ8SW52YWxpZCwgQ29sb3IsIENNWUtBQ29s
b3IsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiwgQ3VycmVu
dENvbG9yPiBtX3N0eWxlOworICAgIHN0ZDo6dmFyaWFudDxJbnZhbGlkLCBDb2xvciwgQ01ZS0FD
b2xvciwgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+LCBDdXJy
ZW50Q29sb3I+IG1fc3R5bGU7CiB9OwogCiBDb2xvciBjdXJyZW50Q29sb3IoSFRNTENhbnZhc0Vs
ZW1lbnQqKTsKQEAgLTEwNCwyMSArMTA0LDIxIEBAIGlubGluZSBDYW52YXNTdHlsZTo6Q2FudmFz
U3R5bGUoKQogCiBpbmxpbmUgQ2FudmFzR3JhZGllbnQqIENhbnZhc1N0eWxlOjpjYW52YXNHcmFk
aWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxD
YW52YXNHcmFkaWVudD4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUp
LmdldCgpOworICAgIHJldHVybiBzdGQ6OmdldDxSZWZQdHI8Q2FudmFzR3JhZGllbnQ+PihtX3N0
eWxlKS5nZXQoKTsKIH0KIAogaW5saW5lIENhbnZhc1BhdHRlcm4qIENhbnZhc1N0eWxlOjpjYW52
YXNQYXR0ZXJuKCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJu
YXRpdmU8UmVmUHRyPENhbnZhc1BhdHRlcm4+PihtX3N0eWxlKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIFdURjo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9zdHls
ZSkuZ2V0KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4obV9z
dHlsZSkuZ2V0KCk7CiB9CiAKIGlubGluZSBTdHJpbmcgQ2FudmFzU3R5bGU6OmNvbG9yKCkgY29u
c3QKIHsKLSAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1f
c3R5bGUpID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpnZXQ8Q01ZS0FDb2xvcj4o
bV9zdHlsZSkuY29sb3I7CisgICAgYXV0byYgY29sb3IgPSBzdGQ6OmhvbGRzX2FsdGVybmF0aXZl
PENvbG9yPihtX3N0eWxlKSA/IHN0ZDo6Z2V0PENvbG9yPihtX3N0eWxlKSA6IHN0ZDo6Z2V0PENN
WUtBQ29sb3I+KG1fc3R5bGUpLmNvbG9yOwogICAgIHJldHVybiBjb2xvci5zZXJpYWxpemVkKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjgs
NyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxz
KTsKIAogICAgIHZvaWQgdGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRHNpemVpIGRlcHRoLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYgcGl4ZWxz
KTsKLSAgICB1c2luZyBUZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VE
YXRhPiwgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+
LCBSZWZQdHI8SFRNTFZpZGVvRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdlU291cmNlID0g
c3RkOjp2YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4s
IFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CiAg
ICAgdm9pZCB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9mZnNldCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBUZXhJbWFnZVNvdXJjZSYmKTsKIAogICAgIHZvaWQgY29w
eVRleFN1YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQW55LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjggKzI3
LDIxIEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5o
IgorI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmgiCiAjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQz
MkFycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9VaW50OEFycmF5Lmg+CiAKLW5hbWVzcGFjZSBK
U0MgewotY2xhc3MgRXhlY1N0YXRlOwotY2xhc3MgSlNWYWx1ZTsKLX0KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLWNsYXNzIFdlYkdMQnVmZmVyOwot
Y2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdM
UmVuZGVyYnVmZmVyOwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdDsKLWNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7Ci0KLXVzaW5nIFdlYkdM
QW55ID0gVmFyaWFudDwKK3VzaW5nIFdlYkdMQW55ID0gc3RkOjp2YXJpYW50PAogICAgIHN0ZDo6
bnVsbHB0cl90LAogICAgIGJvb2wsCiAgICAgaW50LApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg5LDcgKzExODksNyBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhCiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKKyAg
ICBzdGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVyLT5hc3Nv
Y2lhdGVCdWZmZXJEYXRhKGRhdGEuZ2V0KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMTgsNyArMTIx
OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3UKICAgICBpZiAo
IWRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdURjo6dmlzaXQoWyZdKGF1dG8mIGRhdGEp
IHsKKyAgICBzdGQ6OnZpc2l0KFsmXShhdXRvJiBkYXRhKSB7CiAgICAgICAgIGlmICghYnVmZmVy
LT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCks
IGRhdGEuZ2V0KCkpKSB7CiAgICAgICAgICAgICB0aGlzLT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91
dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzY3Niw3ICszNjc2LDcgQEAg
RXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsK
IAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CiB9CiAKIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVBcnJheUJ1ZmZlclR5cGUoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9wdGlvbmFsPEpTQzo6VHlwZWRB
cnJheVR5cGU+IGFycmF5VHlwZSkKQEAgLTQyMTIsNyArNDIxMiw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICNlbmRpZgogICAgICk7CiAKLSAgICByZXR1cm4g
V1RGOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CisgICAgcmV0dXJuIHN0ZDo6dmlz
aXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkpOwogfQogCiBSZWZQdHI8SW1hZ2U+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UmIGltYWdlLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDcgKzEzMyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBk
ZmFjdG9yKTsKICAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwogCi0g
ICAgdXNpbmcgQnVmZmVyRGF0YVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8QXJyYXlCdWZm
ZXI+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3Pj47CisgICAgdXNpbmcgQnVmZmVyRGF0YVNvdXJj
ZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8QXJyYXlCdWZmZXJW
aWV3Pj47CiAgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNp
emUsIEdDM0RlbnVtIHVzYWdlKTsKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBzdGQ6Om9wdGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+JiYsIEdDM0RlbnVtIHVzYWdlKTsKICAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBz
dGQ6Om9wdGlvbmFsPEJ1ZmZlckRhdGFTb3VyY2U+JiYpOwpAQCAtMjQ3LDkgKzI0Nyw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBSZWZQ
dHI8QXJyYXlCdWZmZXJWaWV3PiYmKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICB1c2luZyBU
ZXhJbWFnZVNvdXJjZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SW1hZ2VEYXRhPiwgUmVmUHRyPEhU
TUxJbWFnZUVsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+LCBSZWZQdHI8SFRNTFZp
ZGVvRWxlbWVudD4+OworICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJl
ZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2Fu
dmFzRWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CiAjZWxzZQotICAgIHVzaW5n
IFRleEltYWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8
SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OworICAgIHVzaW5n
IFRleEltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBSZWZQdHI8
SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4+OwogI2VuZGlmCiAK
ICAgICBFeGNlcHRpb25Pcjx2b2lkPiB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgc3RkOjpvcHRpb25hbDxUZXhJbWFnZVNvdXJjZT4pOwpAQCAtMjYzLDcgKzI2Myw3
IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVHlwZWRBcnJheSwgY2xhc3MgRGF0YVR5
cGU+CiAgICAgY2xhc3MgVHlwZWRMaXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHVzaW5nIFZh
cmlhbnRUeXBlID0gVmFyaWFudDxSZWZQdHI8VHlwZWRBcnJheT4sIFZlY3RvcjxEYXRhVHlwZT4+
OworICAgICAgICB1c2luZyBWYXJpYW50VHlwZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VHlwZWRB
cnJheT4sIFZlY3RvcjxEYXRhVHlwZT4+OwogCiAgICAgICAgIFR5cGVkTGlzdChWYXJpYW50VHlw
ZSYmIHZhcmlhbnQpCiAgICAgICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKHZhcmlhbnQpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHJldmlzaW9uIDIyMDk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVHJhY2tFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgVHJhY2tFdmVudCh0eXBlLCBjYW5CdWJibGUsIGNhbmNlbGFibGUsIFdURk1vdmUodHJhY2sp
KSk7CiAgICAgfQogCi0gICAgdXNpbmcgVHJhY2tFdmVudFRyYWNrID0gVmFyaWFudDxSZWZQdHI8
VmlkZW9UcmFjaz4sIFJlZlB0cjxBdWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OworICAg
IHVzaW5nIFRyYWNrRXZlbnRUcmFjayA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8VmlkZW9UcmFjaz4s
IFJlZlB0cjxBdWRpb1RyYWNrPiwgUmVmUHRyPFRleHRUcmFjaz4+OwogCiAgICAgc3RydWN0IElu
aXQgOiBwdWJsaWMgRXZlbnRJbml0IHsKICAgICAgICAgc3RkOjpvcHRpb25hbDxUcmFja0V2ZW50
VHJhY2s+IHRyYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNh
bnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
YW52YXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKEhUTUxDYW52YXNFbGVtZW50JiwgY29uc3Qg
U3RyaW5nJiBjc3NDYW52YXNOYW1lKTsKIAotICAgIHR5cGVkZWYgVmFyaWFudDwKKyAgICB0eXBl
ZGVmIHN0ZDo6dmFyaWFudDwKICAgICAgICAgQ2FudmFzR3JhZGllbnQqLAogICAgICAgICBDYW52
YXNQYXR0ZXJuKiwKICAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqLApJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpKSB7
CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKICAgICAgICAgICAgIG1f
ZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+cmVxdWVzdENhbGxiYWNrKCkuc2VuZEZhaWx1cmUoIlVu
ZXhwZWN0ZWQgcmVzdWx0IHR5cGUuIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBhdXRvIGRhdGFiYXNlUmVzdWx0ID0gV1RGOjpnZXQ8UmVmUHRyPElEQkRhdGFi
YXNlPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CisgICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQg
PSBzdGQ6OmdldDxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKICAg
ICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5leGVjdXRlKCpkYXRhYmFzZVJlc3VsdCk7
CiAgICAgICAgIGRhdGFiYXNlUmVzdWx0LT5jbG9zZSgpOwogICAgIH0KQEAgLTE4Miw3ICsxODIs
NyBAQCBzdGF0aWMgUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5CiAgICAgICAgIGtl
eVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7
CiAgICAgfSk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgaWRiS2V5UGF0aC52YWx1
ZSgpKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQYXRoLnZhbHVlKCkp
OwogfQogCiBzdGF0aWMgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbkZvckRhdGFi
YXNlKElEQkRhdGFiYXNlKiBpZGJEYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIElEQlRyYW5zYWN0aW9uTW9kZSBtb2RlID0gSURCVHJhbnNhY3Rpb25Nb2RlOjpSZWFkb25s
eSkKQEAgLTM3MywxMiArMzczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAg
ICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRW
YWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0
VmFsdWUudmFsdWUoKSkpIHsKICAgICAgICAgICAgIGVuZChmYWxzZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGN1cnNvciA9IFdURjo6Z2V0PFJlZlB0
cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBjdXJzb3Ig
PSBzdGQ6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4ocmVzdWx0VmFsdWUudmFsdWUoKSk7CiAKICAg
ICAgICAgaWYgKG1fc2tpcENvdW50KSB7CiAgICAgICAgICAgICBpZiAoY3Vyc29yLT5hZHZhbmNl
KG1fc2tpcENvdW50KS5oYXNFeGNlcHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
SW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsMTAgKzQwLDEwIEBAIEludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNlY3Rpb25PYnNlcnYK
ICAgICAsIG1fcm9vdE1hcmdpbihXVEZNb3ZlKGluaXQucm9vdE1hcmdpbikpCiAgICAgLCBtX2Nh
bGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKQotICAgICAgICBtX3RocmVzaG9sZHMuYXBwZW5k
KFdURjo6Z2V0PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxkb3VibGU+KGluaXQudGhyZXNob2xkKSkKKyAgICAgICAgbV90aHJlc2hvbGRz
LmFwcGVuZChzdGQ6OmdldDxkb3VibGU+KGluaXQudGhyZXNob2xkKSk7CiAgICAgZWxzZQotICAg
ICAgICBtX3RocmVzaG9sZHMgPSBXVEY6OmdldDxWZWN0b3I8ZG91YmxlPj4oV1RGTW92ZShpbml0
LnRocmVzaG9sZCkpOworICAgICAgICBtX3RocmVzaG9sZHMgPSBzdGQ6OmdldDxWZWN0b3I8ZG91
YmxlPj4oV1RGTW92ZShpbml0LnRocmVzaG9sZCkpOwogfQogCiB2b2lkIEludGVyc2VjdGlvbk9i
c2VydmVyOjpvYnNlcnZlKEVsZW1lbnQmKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9JbnRl
cnNlY3Rpb25PYnNlcnZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50
ZXJzZWN0aW9uT2JzZXJ2ZXIuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgSW5pdCB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBy
b290OwogICAgICAgICBTdHJpbmcgcm9vdE1hcmdpbjsKLSAgICAgICAgVmFyaWFudDxkb3VibGUs
IFZlY3Rvcjxkb3VibGU+PiB0aHJlc2hvbGQ7CisgICAgICAgIHN0ZDo6dmFyaWFudDxkb3VibGUs
IFZlY3Rvcjxkb3VibGU+PiB0aHJlc2hvbGQ7CiAgICAgfTsKIAogICAgIHN0YXRpYyBSZWY8SW50
ZXJzZWN0aW9uT2JzZXJ2ZXI+IGNyZWF0ZShSZWY8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJDYWxsYmFj
az4mJiBjYWxsYmFjaywgSW5pdCYmIGluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDIyMDk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gU2hv
dWxkIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZ2l2ZW4gZnJhbWUgdmlldyBoYXMgYmVlbiBsYWlk
IG91dC4KICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVWaWV3TGF5b3V0VXBkYXRlZChGcmFtZVZpZXcm
KSB7IH0KIAotICAgIHVzaW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlkZVJlY3QgPSBX
VEY6OlZhcmlhbnQ8c3RkOjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRpb25hbDxGbG9h
dFJlY3Q+PjsKKyAgICB1c2luZyBMYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3ZlcnJpZGVSZWN0ID0g
c3RkOjp2YXJpYW50PHN0ZDo6b3B0aW9uYWw8RmxvYXRQb2ludD4sIHN0ZDo6b3B0aW9uYWw8Rmxv
YXRSZWN0Pj47CiAgICAgdmlydHVhbCB2b2lkIHJlY29uY2lsZVNjcm9sbGluZ1N0YXRlKEZyYW1l
VmlldyYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBMYXlvdXRWaWV3cG9ydE9yaWdpbk9yT3Zl
cnJpZGVSZWN0JiwgYm9vbCAvKiBwcm9ncmFtbWF0aWNTY3JvbGwgKi8sIFZpZXdwb3J0UmVjdFN0
YWJpbGl0eSwgU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbkFjdGlvbikgeyB9CiAKICAgICAvLyBTaG91
bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBzbG93IHJlcGFpbnQgb2JqZWN0cyBjb3VudGVyIGNo
YW5nZXMgYmV0d2VlbiB6ZXJvIGFuZCBvbmUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TaGFyZWRCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NoYXJlZEJ1ZmZlci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw3ICsyMDgsNyBA
QCBjb25zdCBjaGFyKiBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50OjpkCiAjZW5kaWYKICAgICAg
ICAgW10oY29uc3QgTWFwcGVkRmlsZURhdGEmIGRhdGEpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGRhdGEuZGF0YSgpKTsgfQogICAgICk7Ci0gICAgcmV0dXJuIFdURjo6
dmlzaXQodmlzaXRvciwgbV9pbW11dGFibGVEYXRhKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2
aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOwogfQogCiAjaWYgIVVTRShDRikKQEAgLTIxOSwxNyAr
MjE5LDI0IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50TWVtb3J5Tm90TmVlZGVkU28KIAogc2l6
ZV90IFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OnNpemUoKSBjb25zdAogewotICAgIGF1dG8g
dmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCi0gICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFy
PiYgZGF0YSkgeyByZXR1cm4gZGF0YS5zaXplKCk7IH0sCisgICAgcmV0dXJuIFdURjo6c3dpdGNo
T24obV9pbW11dGFibGVEYXRhLAorICAgICAgICBbXShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEp
IC0+IHNpemVfdCB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5zaXplKCk7CisgICAgICAgIH0s
CiAjaWYgVVNFKENGKQotICAgICAgICBbXShjb25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0
YSkgeyByZXR1cm4gQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEuZ2V0KCkpOyB9LAorICAgICAgICBbXShj
b25zdCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAg
IHJldHVybiBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7CisgICAgICAgIH0sCiAjZW5kaWYK
ICNpZiBVU0UoU09VUCkKLSAgICAgICAgW10oY29uc3QgR1VuaXF1ZVB0cjxTb3VwQnVmZmVyPiYg
ZGF0YSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5ndGgpOyB9LAorICAg
ICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiBkYXRhKSAtPiBzaXplX3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oZGF0YS0+bGVuZ3RoKTsKKyAg
ICAgICAgfSwKICNlbmRpZgotICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkg
eyByZXR1cm4gZGF0YS5zaXplKCk7IH0KKyAgICAgICAgW10oY29uc3QgTWFwcGVkRmlsZURhdGEm
IGRhdGEpIC0+IHNpemVfdCB7CisgICAgICAgICAgICByZXR1cm4gZGF0YS5zaXplKCk7CisgICAg
ICAgIH0KICAgICApOwotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxl
RGF0YSk7CiB9CiAKIFNoYXJlZEJ1ZmZlckRhdGFWaWV3OjpTaGFyZWRCdWZmZXJEYXRhVmlldyhS
ZWY8U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudD4mJiBzZWdtZW50LCBzaXplX3QgcG9zaXRpb25X
aXRoaW5TZWdtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTkgKzExNiwyOCBAQCBwdWJsaWM6CiAKICAgICBw
cml2YXRlOgogICAgICAgICBEYXRhU2VnbWVudChWZWN0b3I8Y2hhcj4mJiBkYXRhKQotICAgICAg
ICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6
IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KICNp
ZiBVU0UoQ0YpCiAgICAgICAgIERhdGFTZWdtZW50KFJldGFpblB0cjxDRkRhdGFSZWY+JiYgZGF0
YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQorICAg
ICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkKKyAgICAgICAgeworICAg
ICAgICB9CiAjZW5kaWYKICNpZiBVU0UoU09VUCkKICAgICAgICAgRGF0YVNlZ21lbnQoR1VuaXF1
ZVB0cjxTb3VwQnVmZmVyPiYmIGRhdGEpCi0gICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShX
VEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUo
ZGF0YSkpCisgICAgICAgIHsKKyAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIERhdGFTZWdtZW50
KE1hcHBlZEZpbGVEYXRhJiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdU
Rk1vdmUoZGF0YSkpIHsgfQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShk
YXRhKSkKKyAgICAgICAgeworICAgICAgICB9CiAKLSAgICAgICAgVmFyaWFudDxWZWN0b3I8Y2hh
cj4sCisgICAgICAgIHN0ZDo6dmFyaWFudDwKKyAgICAgICAgICAgIFZlY3RvcjxjaGFyPiwKICNp
ZiBVU0UoQ0YpCiAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiwKICNlbmRpZgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBAIHN0cnVjdCBQbGF0Zm9ybURlc2NyaXB0aW9uIHsKICAgICAgICAgTm9uZSwKICAg
ICAgICAgQ0FBdWRpb1N0cmVhbUJhc2ljVHlwZSwKICAgICB9IHR5cGU7Ci0gICAgVmFyaWFudDxz
dGQ6Om51bGxwdHJfdCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4gZGVzY3Jp
cHRpb247CisgICAgc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24qPiBkZXNjcmlwdGlvbjsKIH07CiAKIGNsYXNzIEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24gewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBsYXRmb3JtRGVz
Y3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgcmV0dXJuIG9wZXJhdG9yPT0oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbio+KG90aGVyLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlw
dGlvbikpOworICAgICAgICByZXR1cm4gb3BlcmF0b3I9PSgqc3RkOjpnZXQ8Y29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2Ny
aXB0aW9uKSk7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KIApAQCAt
MTAyLDcgKzEwMiw3IEBAIGJvb2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpkZWNvZGUoRGUK
IGlubGluZSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCiB7CiAgICAgQVNT
RVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09IFBsYXRmb3JtRGVz
Y3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIHJldHVybiBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24oKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbikpOworICAg
IHJldHVybiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKnN0ZDo6Z2V0PGNvbnN0IEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5k
ZXNjcmlwdGlvbikpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jZi9T
aGFyZWRCdWZmZXJDRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2YvU2hhcmVkQnVmZmVyQ0YuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgU2hhcmVkQnVmZmVyOjpTaGFyZWRCdWZmZXIoQ0ZEYXRhUmVmIGRhdAogUmV0YWlu
UHRyPENGRGF0YVJlZj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVDRkRhdGEoKSBjb25zdAogewogICAg
IGlmIChtX3NlZ21lbnRzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAgIGlmIChhdXRvIGRhdGEgPSBX
VEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4obV9zZWdtZW50c1swXS5zZWdtZW50LT5t
X2ltbXV0YWJsZURhdGEpKQorICAgICAgICBpZiAoYXV0byBkYXRhID0gc3RkOjpnZXRfaWY8UmV0
YWluUHRyPENGRGF0YVJlZj4+KCZtX3NlZ21lbnRzWzBdLnNlZ21lbnQtPm1faW1tdXRhYmxlRGF0
YSkpCiAgICAgICAgICAgICByZXR1cm4gKmRhdGE7CiAgICAgfQogICAgIHJldHVybiBhZG9wdENG
KENGRGF0YUNyZWF0ZShudWxscHRyLCByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oZGF0
YSgpKSwgc2l6ZSgpKSk7CkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgU2hhcmVkQnVmZmVyOjpoaW50
TWVtb3J5Tm90TmVlZGVkU28KIHsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9zZWdt
ZW50cykgewogICAgICAgICBpZiAoZW50cnkuc2VnbWVudC0+aGFzT25lUmVmKCkpIHsKLSAgICAg
ICAgICAgIGlmIChhdXRvIGRhdGEgPSBXVEY6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4o
ZW50cnkuc2VnbWVudC0+bV9pbW11dGFibGVEYXRhKSkKKyAgICAgICAgICAgIGlmIChhdXRvIGRh
dGEgPSBzdGQ6OmdldF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oJmVudHJ5LnNlZ21lbnQtPm1f
aW1tdXRhYmxlRGF0YSkpCiAgICAgICAgICAgICAgICAgT1NBbGxvY2F0b3I6OmhpbnRNZW1vcnlO
b3ROZWVkZWRTb29uKGNvbnN0X2Nhc3Q8VUludDgqPihDRkRhdGFHZXRCeXRlUHRyKGRhdGEtPmdl
dCgpKSksIENGRGF0YUdldExlbmd0aChkYXRhLT5nZXQoKSkpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxNyArNTYsMTcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc05vbmUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGlu
Z01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIGhhc0Rl
Y29kaW5nTW9kZSgpICYmIHN0ZDo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNp
emUpID09IERlY29kaW5nTW9kZTo6Tm9uZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc1N5bmNo
cm9ub3VzKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAm
JiBXVEY6OmdldDxEZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGlu
Z01vZGU6OlN5bmNocm9ub3VzOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYg
c3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdN
b2RlOjpTeW5jaHJvbm91czsKICAgICB9CiAKICAgICBib29sIGlzQXN5bmNocm9ub3VzKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01vZGUoKSAmJiBXVEY6OmdldDxE
ZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBEZWNvZGluZ01vZGU6OkFzeW5j
aHJvbm91czsKKyAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIHN0ZDo6Z2V0PERl
Y29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9kZTo6QXN5bmNo
cm9ub3VzOwogICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25vdXNDb21wYXRpYmxlV2l0aChj
b25zdCBEZWNvZGluZ09wdGlvbnMmIGRlY29kaW5nT3B0aW9ucykgY29uc3QKQEAgLTExMCw3ICsx
MTAsNyBAQCBwdWJsaWM6CiAgICAgc3RkOjpvcHRpb25hbDxJbnRTaXplPiBzaXplRm9yRHJhd2lu
ZygpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaGFzU2l6ZSgpKTsKLSAgICAgICAgcmV0
dXJuIFdURjo6Z2V0PHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+KG1fZGVjb2RpbmdNb2RlT3JTaXpl
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+KG1fZGVj
b2RpbmdNb2RlT3JTaXplKTsKICAgICB9CiAKICAgICBzdGF0aWMgaW50IG1heERpbWVuc2lvbihj
b25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KICAgICBib29sIGhhcygpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxUPihtX2RlY29kaW5nTW9kZU9yU2l6ZSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JT
aXplKTsKICAgICB9CiAKICAgICBib29sIGhhc0RlY29kaW5nTW9kZSgpIGNvbnN0CkBAIC0xNDAs
NyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICAvLyAtIEFzeW5jaHJvbm91cyArIGFueVNpemU6IERl
Y29kaW5nTW9kZTo6QXN5bmNocm9ub3VzCiAgICAgLy8gLSBBc3luY2hyb25vdXMgKyBpbnRyaW5z
aWNTaXplOiBhbiBlbXB0eSBzdGQ6Om9wdGlvbmFsPEludFNpemU+PgogICAgIC8vIC0gQXN5bmNo
cm9ub3VzICsgc2l6ZUZvckRyYXdpbmc6IGEgbm9uZSBlbXB0eSBzdGQ6Om9wdGlvbmFsPEludFNp
emU+PgotICAgIHVzaW5nIERlY29kaW5nTW9kZU9yU2l6ZSA9IFZhcmlhbnQ8RGVjb2RpbmdNb2Rl
LCBzdGQ6Om9wdGlvbmFsPEludFNpemU+PjsKKyAgICB1c2luZyBEZWNvZGluZ01vZGVPclNpemUg
PSBzdGQ6OnZhcmlhbnQ8RGVjb2RpbmdNb2RlLCBzdGQ6Om9wdGlvbmFsPEludFNpemU+PjsKICAg
ICBEZWNvZGluZ01vZGVPclNpemUgbV9kZWNvZGluZ01vZGVPclNpemU7CiB9OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZv
bnRzLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcs
NyBAQCBzdGF0aWMgRm9udFJhbmdlcyByZWFsaXplTmV4dEZhbGxiYWNrKGNvCiAgICAgICAgICAg
ICByZXR1cm4gZm9udEZhbWlseVNwZWNpZmljYXRpb24uZm9udFJhbmdlcyhkZXNjcmlwdGlvbik7
CiAgICAgICAgIH0pOwogICAgICAgICBjb25zdCBhdXRvJiBjdXJyZW50RmFtaWx5ID0gZGVzY3Jp
cHRpb24uZWZmZWN0aXZlRmFtaWx5QXQoaW5kZXgrKyk7Ci0gICAgICAgIGF1dG8gcmFuZ2VzID0g
V1RGOjp2aXNpdCh2aXNpdG9yLCBjdXJyZW50RmFtaWx5KTsKKyAgICAgICAgYXV0byByYW5nZXMg
PSBzdGQ6OnZpc2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOwogICAgICAgICBpZiAoIXJhbmdl
cy5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiByYW5nZXM7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREZXNjcmlwdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHR5cGVkZWYg
Rm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsIEZvbnQKIAogI2RlZmluZSBVU0VfUExBVEZPUk1f
U1lTVEVNX0ZBTExCQUNLX0xJU1QgKChQTEFURk9STShJT1MpICYmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID49IDExMDAwMCkgfHwgKFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEzMDApKQogCi10eXBlZGVmIFZhcmlhbnQ8QXRv
bWljU3RyaW5nLCBGb250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbjsKK3R5cGVkZWYgc3RkOjp2YXJpYW50PEF0b21pY1N0cmluZywgRm9udEZhbWls
eVBsYXRmb3JtU3BlY2lmaWNhdGlvbj4gRm9udEZhbWlseVNwZWNpZmljYXRpb247CiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJLaXRGb250RmFtaWx5TmFtZXM7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
V2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakMubW0JKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyQVZGT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgV2Vi
QXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OnVucHIKIHZvaWQgV2ViQXVkaW9Tb3VyY2VQcm92
aWRlckFWRk9iakM6OmF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZSYsIGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBkYXRhLCBjb25z
dCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IGZyYW1lQ291bnQp
CiB7CiAgICAgQVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09
IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOwotICAgIGF1dG8m
IGJhc2ljRGVzY3JpcHRpb24gPSAqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uKTsK
KyAgICBhdXRvJiBiYXNpY0Rlc2NyaXB0aW9uID0gKnN0ZDo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNj
cmlwdGlvbik7CiAgICAgaWYgKCFtX2lucHV0RGVzY3JpcHRpb24gfHwgbV9pbnB1dERlc2NyaXB0
aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigpICE9IGJhc2ljRGVzY3JpcHRpb24pCiAgICAgICAgIHBy
ZXBhcmUoYmFzaWNEZXNjcmlwdGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9TUUxWYWx1ZS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIFNRTFZhbHVlID0gVmFyaWFudDxzdGQ6Om51bGxwdHJf
dCwgU3RyaW5nLCBkb3VibGU+OwordXNpbmcgU1FMVmFsdWUgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpu
dWxscHRyX3QsIFN0cmluZywgZG91YmxlPjsKIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyLDcgKzE0Miw3IEBAIGlubGluZSBzdGF0aWMgYm9vbCBkcmFnZ2VkQ29udGVudENvbnRhaW4K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJz
KSB7Ci0gICAgICAgIGF1dG8mIGRyYWdnZWRDb250ZW50RGF0YSA9IFdURjo6Z2V0PERvY3VtZW50
TWFya2VyOjpEcmFnZ2VkQ29udGVudERhdGE+KG1hcmtlci0+ZGF0YSgpKTsKKyAgICAgICAgYXV0
byYgZHJhZ2dlZENvbnRlbnREYXRhID0gc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOwogICAgICAgICBpZiAoZHJhZ2dlZENvbnRlbnRE
YXRhLnRhcmdldE5vZGUgPT0gJmVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL1R5cGVDb252ZXJzaW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7CiAgICAgICAgIFN0cmluZyB0cmVhdE51bGxBc0VtcHR5U3RyaW5nVmFsdWU7
CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlcXVlbmNlVmFsdWU7Ci0gICAgICAgIFZhcmlhbnQ8
UmVmUHRyPE5vZGU+LCBWZWN0b3I8U3RyaW5nPiwgT3RoZXJEaWN0aW9uYXJ5PiB1bmlvblZhbHVl
OworICAgICAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBWZWN0b3I8U3RyaW5nPiwgT3Ro
ZXJEaWN0aW9uYXJ5PiB1bmlvblZhbHVlOwogICAgICAgICBpbnQgY2xhbXBMb25nVmFsdWU7CiAg
ICAgICAgIGludCBlbmZvcmNlUmFuZ2VMb25nVmFsdWU7CiAgICAgfTsKQEAgLTEyMiw3ICsxMjIs
NyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywg
VmVjdG9yPFN0cmluZz4+PiYgdGVzdFNlcXVlbmNlUmVjb3JkKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXF1ZW5jZVJlY29yZDsgfQogICAgIHZvaWQgc2V0VGVzdFNlcXVlbmNlUmVjb3JkKGNvbnN0IFZl
Y3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4mIHZhbHVlKSB7
IG1fc2VxdWVuY2VSZWNvcmQgPSB2YWx1ZTsgfQogCi0gICAgdXNpbmcgVGVzdFVuaW9uID0gVmFy
aWFudDxTdHJpbmcsIGludCwgYm9vbCwgUmVmUHRyPE5vZGU+LCBWZWN0b3I8aW50Pj47CisgICAg
dXNpbmcgVGVzdFVuaW9uID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBib29sLCBSZWZQdHI8
Tm9kZT4sIFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0VW5pb24mIHRlc3RVbmlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdW5pb247IH0KICAgICB2b2lkIHNldFRlc3RVbmlvbihUZXN0VW5pb24m
JiB2YWx1ZSkgeyBtX3VuaW9uID0gdmFsdWU7IH0KIApAQCAtMTMwLDE1ICsxMzAsMTUgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGVzdERpY3Rpb25hcnkoRGljdGlvbmFyeSYmIGRpY3Rpb25hcnkp
IHsgbV90ZXN0RGljdGlvbmFyeSA9IGRpY3Rpb25hcnk7IH0KICAgICAKIAotICAgIHVzaW5nIFRl
c3RDbGFtcFVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OworICAgIHVz
aW5nIFRlc3RDbGFtcFVuaW9uID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50
Pj47CiAgICAgY29uc3QgVGVzdENsYW1wVW5pb24mIHRlc3RDbGFtcFVuaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbGFtcFVuaW9uOyB9CiAgICAgdm9pZCBzZXRUZXN0Q2xhbXBVbmlvbihjb25zdCBU
ZXN0Q2xhbXBVbmlvbiYgdmFsdWUpIHsgbV9jbGFtcFVuaW9uID0gdmFsdWU7IH0KIAotICAgIHVz
aW5nIFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiA9IFZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3Rvcjxp
bnQ+PjsKKyAgICB1c2luZyBUZXN0RW5mb3JjZVJhbmdlVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBpbnQsIFZlY3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0RW5mb3JjZVJhbmdlVW5pb24m
IHRlc3RFbmZvcmNlUmFuZ2VVbmlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5mb3JjZVJhbmdlVW5p
b247IH0KICAgICB2b2lkIHNldFRlc3RFbmZvcmNlUmFuZ2VVbmlvbihjb25zdCBUZXN0RW5mb3Jj
ZVJhbmdlVW5pb24mIHZhbHVlKSB7IG1fZW5mb3JjZVJhbmdlVW5pb24gPSB2YWx1ZTsgfQogCi0g
ICAgdXNpbmcgVGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiA9IFZhcmlhbnQ8U3RyaW5n
LCBpbnQsIFZlY3RvcjxTdHJpbmc+PjsKKyAgICB1c2luZyBUZXN0VHJlYXROdWxsQXNFbXB0eVN0
cmluZ1VuaW9uID0gc3RkOjp2YXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8U3RyaW5nPj47CiAg
ICAgY29uc3QgVGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiYgdGVzdFRyZWF0TnVsbEFz
RW1wdHlTdHJpbmdVbmlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJlYXROdWxsQXNFbXB0eVN0cmlu
Z1VuaW9uOyB9CiAgICAgdm9pZCBzZXRUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uKGNv
bnN0IFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24mIHZhbHVlKSB7IG1fdHJlYXROdWxs
QXNFbXB0eVN0cmluZ1VuaW9uID0gdmFsdWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAg
ICBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9CiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOyB9CiAKLSAgICB1c2luZyBTZW5kVHlwZXMgPSBWYXJpYW50PFJlZlB0cjxEb2N1bWVudD4s
IFJlZlB0cjxCbG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+LCBTdHJpbmc+OworICAgIHVzaW5nIFNl
bmRUeXBlcyA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8RG9jdW1lbnQ+LCBSZWZQdHI8QmxvYj4sIFJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPiwgUmVm
UHRyPERPTUZvcm1EYXRhPiwgU3RyaW5nPjsKIAogICAgIGNvbnN0IFVSTCYgdXJsKCkgY29uc3Qg
eyByZXR1cm4gbV91cmw7IH0KICAgICBTdHJpbmcgc3RhdHVzVGV4dCgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTctMDgtMTkgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtDYXB0dXJlOjpldmVudFRvU3RyaW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrQ2FwdHVyZTo6UmVzb3VyY2U6OnVybCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FwdHVyZTo6TmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKElQQzo6
QXJndW1lbnRDb2RlcjxJREJLZXlQYXRoPjo6ZW5jb2RlKToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAod2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVtZW50X2FkZCk6CisKIDIwMTctMDgtMTggIENo
cmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbQmVhY29uXSBJbXByb3Zl
IGVycm9yIHJlcG9ydGluZwpJbmRleDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtD
YXB0dXJlRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzksNyArNDc5LDcgQEAgc3RkOjpz
dHJpbmcgZXZlbnRUb1N0cmluZyhjb25zdCBDYXB0dXJlRQogewogICAgIGpzb24gcmVzdWx0Owog
Ci0gICAgV1RGOjp2aXNpdChbJnJlc3VsdF0oY29uc3QgYXV0byYgZXZlbnQpIHsKKyAgICBzdGQ6
OnZpc2l0KFsmcmVzdWx0XShjb25zdCBhdXRvJiBldmVudCkgewogICAgICAgICB1c2luZyBFdmVu
dFR5cGUgPSBzdGQ6OmRlY2F5X3Q8ZGVjbHR5cGUoZXZlbnQpPjsKICAgICAgICAgcmVzdWx0ID0g
SlNPTkNvZGVyPEV2ZW50VHlwZT46OmVuY29kZShldmVudCk7CiAgICAgfSwgZXZlbnQpOwpJbmRl
eDogU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZl
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVFdmVudC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBAIHN0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKIHN0cnVjdCBE
YXRhUmVjZWl2ZWRFdmVudDsKIHN0cnVjdCBGaW5pc2hlZEV2ZW50OwogCi11c2luZyBDYXB0dXJl
RXZlbnQgPSBXVEY6OlZhcmlhbnQ8UmVxdWVzdFNlbnRFdmVudCwgUmVzcG9uc2VSZWNlaXZlZEV2
ZW50LCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0U2VudEV2ZW50LCBEYXRhUmVjZWl2
ZWRFdmVudCwgRmluaXNoZWRFdmVudD47Cit1c2luZyBDYXB0dXJlRXZlbnQgPSBzdGQ6OnZhcmlh
bnQ8UmVxdWVzdFNlbnRFdmVudCwgUmVzcG9uc2VSZWNlaXZlZEV2ZW50LCBSZWRpcmVjdFJlY2Vp
dmVkRXZlbnQsIFJlZGlyZWN0U2VudEV2ZW50LCBEYXRhUmVjZWl2ZWRFdmVudCwgRmluaXNoZWRF
dmVudD47CiB1c2luZyBPcHRpb25hbENhcHR1cmVFdmVudCA9IHN0ZDo6b3B0aW9uYWw8Q2FwdHVy
ZUV2ZW50PjsKIHVzaW5nIENhcHR1cmVFdmVudHMgPSBWZWN0b3I8Q2FwdHVyZUV2ZW50PjsKIHVz
aW5nIENhcHR1cmVDbG9ja1R5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlUmVzb3VyY2UuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEwICs0OCwxMCBAQCBjb25zdCBXZWJDb3JlOjpVUkwmIFJlc291cmNl
Ojp1cmwoKQogICAgICAgICBhdXRvIGV2ZW50ID0gZXZlbnRzLm5leHRFdmVudCgpOwogICAgICAg
ICBpZiAoIWV2ZW50KQogICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFdmVudCBzdHJlYW0g
ZG9lcyBub3QgY29udGFpbiBldmVudHM6IGZpbGUgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVH
X1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKLSAgICAgICAgZWxzZSBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKKyAgICAgICAgZWxzZSBpZiAoIXN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KSkKICAgICAgICAg
ICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90IGhhdmUgYSByZXF1ZXN0
U2VudCBldmVudDogZmlsZSA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZXZlbnRG
aWxlUGF0aCkpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gcmVxdWVzdFNlbnRF
dmVudCA9IFdURjo6Z2V0PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCk7CisgICAgICAgICAgICBh
dXRvIHJlcXVlc3RTZW50RXZlbnQgPSBzdGQ6OmdldDxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQp
OwogICAgICAgICAgICAgV2ViQ29yZTo6VVJMUGFyc2VyIHBhcnNlcihyZXF1ZXN0U2VudEV2ZW50
LnJlcXVlc3QudXJsKTsKICAgICAgICAgICAgIG1fdXJsID0gcGFyc2VyLnJlc3VsdCgpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0RhdGFUYXNrUmVwbGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFz
a1JlcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFza1JlcGxheTo6ZW5xdWV1ZUV2ZW50CiAgICAgICAgICAgICAgICAgcmVwbGF5Rmlu
aXNoZWQoZXZlbnQpOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgV1RGOjp2aXNpdCh2aXNp
dG9yLCAqZXZlbnQpOworICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsICpldmVudCk7CiAgICAg
fSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU4MywxMiArMjU4Mywx
MiBAQCBib29sIEFyZ3VtZW50Q29kZXI8Q2FwdHVyZURldmljZT46OmRlY29kCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCiB2b2lkIEFyZ3VtZW50Q29kZXI8SURCS2V5UGF0aD46OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIGJv
b2wgaXNTdHJpbmcgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0aCk7Cisg
ICAgYm9vbCBpc1N0cmluZyA9IHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQYXRo
KTsKICAgICBlbmNvZGVyIDw8IGlzU3RyaW5nOwogICAgIGlmIChpc1N0cmluZykKLSAgICAgICAg
ZW5jb2RlciA8PCBXVEY6OmdldDxTdHJpbmc+KGtleVBhdGgpOworICAgICAgICBlbmNvZGVyIDw8
IHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCk7CiAgICAgZWxzZQotICAgICAgICBlbmNvZGVyIDw8
IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKKyAgICAgICAgZW5jb2RlciA8PCBz
dGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCk7CiB9CiAKIGJvb2wgQXJndW1lbnRDb2Rl
cjxJREJLZXlQYXRoPjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIElEQktleVBhdGgmIGtleVBh
dGgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NSw3ICsxNzUsNyBAQCBzdHJ1Y3QgTWVk
aWFDb25zdHJhaW50czsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogbmFtZXNwYWNl
IFdlYkNvcmUgewotdXNpbmcgSURCS2V5UGF0aCA9IFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj47Cit1c2luZyBJREJLZXlQYXRoID0gc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0
cmluZz4+OwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Vc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhdWRpb1NhbXBsZXNBdmFpbGFibGUoY29uc3QgTWVkaWFUaW1l
JiB0aW1lLCBjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYgYXVkaW9EYXRhLCBjb25zdCBBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgc2l6ZV90IG51bWJlck9mRnJhbWVzKSBmaW5h
bCB7CiAgICAgICAgIGlmIChtX2Rlc2NyaXB0aW9uICE9IGRlc2NyaXB0aW9uKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxh
dGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgICAgICAgICBt
X2Rlc2NyaXB0aW9uID0gKldURjo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
bio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICBtX2Rlc2NyaXB0aW9uID0gKnN0ZDo6Z2V0PGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbio+KGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS5kZXNjcmlwdGlv
bik7CiAKICAgICAgICAgICAgIC8vIEFsbG9jYXRlIGEgcmluZyBidWZmZXIgbGFyZ2UgZW5vdWdo
IHRvIGNvbnRhaW4gMiBzZWNvbmRzIG9mIGF1ZGlvLgogICAgICAgICAgICAgbV9udW1iZXJPZkZy
YW1lcyA9IG1fZGVzY3JpcHRpb24uc2FtcGxlUmF0ZSgpICogMjsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2Vs
ZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9ndGsvRE9NL1dlYktpdERPTUhUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgd2Via2l0X2RvbV9odG1sX3NlbGVjdF9lbGVt
ZW50X2FkZCgKICAgICBXZWJDb3JlOjpIVE1MU2VsZWN0RWxlbWVudCogaXRlbSA9IFdlYktpdDo6
Y29yZShzZWxmKTsKICAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogY29udmVydGVkRWxlbWVudCA9
IFdlYktpdDo6Y29yZShlbGVtZW50KTsKICAgICBXZWJDb3JlOjpIVE1MRWxlbWVudCogY29udmVy
dGVkQmVmb3JlID0gV2ViS2l0Ojpjb3JlKGJlZm9yZSk7Ci0gICAgVmFyaWFudDxSZWZQdHI8V2Vi
Q29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxl
bWVudD4+IHZhcmlhbnRFbGVtZW50OworICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8V2ViQ29yZTo6
SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudD4+
IHZhcmlhbnRFbGVtZW50OwogICAgIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4o
Y29udmVydGVkRWxlbWVudCkpCiAgICAgICAgIHZhcmlhbnRFbGVtZW50ID0gJmRvd25jYXN0PFdl
YkNvcmU6OkhUTUxPcHRpb25FbGVtZW50PigqY29udmVydGVkRWxlbWVudCk7CiAgICAgZWxzZSBp
ZiAoaXM8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudD4oY29udmVydGVkRWxlbWVudCkpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxNy0wOC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tOgorICAg
ICAgICAoLVtET01IVE1MU2VsZWN0RWxlbWVudCBhZGQ6YmVmb3JlOl0pOgorCiAyMDE3LTA4LTE3
ICBEb24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgW1BBTF0g
UmVsb2NhdGUgU2Vzc2lvbklEIHRvIHJvb3QKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQubW0JKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw3IEBAIC0gKHZvaWQpYWRkOihET01IVE1MRWxl
bWVudCAqKWVsZW1lbnQgYmUKICAgICAgICAgcmFpc2VUeXBlRXJyb3JFeGNlcHRpb24oKTsKIAog
ICAgIGF1dG8mIGNvcmVFbGVtZW50ID0gKmNvcmUoZWxlbWVudCk7Ci0gICAgVmFyaWFudDxSZWZQ
dHI8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8V2ViQ29yZTo6SFRNTE9wdEdy
b3VwRWxlbWVudD4+IHZhcmlhbnRFbGVtZW50OworICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8V2Vi
Q29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+LCBSZWZQdHI8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxl
bWVudD4+IHZhcmlhbnRFbGVtZW50OwogICAgIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0aW9uRWxl
bWVudD4oY29yZUVsZW1lbnQpKQogICAgICAgICB2YXJpYW50RWxlbWVudCA9ICZkb3duY2FzdDxX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4oY29yZUVsZW1lbnQpOwogICAgIGVsc2UgaWYgKGlz
PFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ+KGNvcmVFbGVtZW50KSkKSW5kZXg6IFRvb2xz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1
NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisy
MDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wb3J0
IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE3LTA4LTE5ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1MgV0syXSBBZGQgYSB2ZXJz
aW9uIG9mIERhdGFJbnRlcmFjdGlvblRlc3RzLkV4dGVybmFsU291cmNlQXR0cmlidXRlZFN0cmlu
Z1RvQ29udGVudEVkaXRhYmxlIHRoYXQgZG9lc24ndCBoaXQgYSBkZWJ1ZyBhc3NlcnRpb24KSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQuY3BwCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMzcgKzM3LDM3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogVEVTVChXVEZfVmFyaWFudCwgSW5pdGlhbCkKIHsKLSAgICBWYXJpYW50PGludCwgZG91Ymxl
PiB2MTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBkb3VibGU+IHYxOwogICAgIEVYUEVDVF9UUlVF
KHYxLmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50Pih2MSkgPT0g
MCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2MSkgPT0gMCk7CiAKICAgICBzdHJ1
Y3QgVCB7CiAgICAgICAgIFQoKSA6IHZhbHVlKDE1KSB7IH0KICAgICAgICAgaW50IHZhbHVlOwog
ICAgIH07CiAKLSAgICBWYXJpYW50PFQsIGludD4gdjI7CisgICAgc3RkOjp2YXJpYW50PFQsIGlu
dD4gdjI7CiAgICAgRVhQRUNUX1RSVUUodjIuaW5kZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJV
RShXVEY6OmdldDxUPih2MikudmFsdWUgPT0gMTUpOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0
PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CiB9CiAKIFRFU1QoV1RGX1ZhcmlhbnQsIEJhc2ljKQogewot
ICAgIFZhcmlhbnQ8aW50LCBkb3VibGU+IHZhcmlhbnQgPSAxOworICAgIHN0ZDo6dmFyaWFudDxp
bnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgp
ID09IDApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7Ci0g
ICAgRVhQRUNUX1RSVUUoKldURjo6Z2V0X2lmPGludD4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQ
RUNUX1RSVUUoV1RGOjpnZXRfaWY8ZG91YmxlPih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBF
WFBFQ1RfVFJVRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwotICAgIEVY
UEVDVF9GQUxTRShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAg
IEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PGludD4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RS
VUUoKnN0ZDo6Z2V0X2lmPGludD4oJnZhcmlhbnQpID09IDEpOworICAgIEVYUEVDVF9UUlVFKHN0
ZDo6Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IG51bGxwdHIpOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQRUNUX0ZBTFNF
KHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7CiAKICAgICB2YXJpYW50
ID0gMS4wOwogICAgIEVYUEVDVF9UUlVFKHZhcmlhbnQuaW5kZXgoKSA9PSAxKTsKLSAgICBFWFBF
Q1RfVFJVRShXVEY6OmdldDxkb3VibGU+KHZhcmlhbnQpID09IDEpOwotICAgIEVYUEVDVF9UUlVF
KCpXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IDEuMCk7Ci0gICAgRVhQRUNUX1RSVUUo
V1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSBudWxscHRyKTsKLSAgICBFWFBFQ1RfVFJVRShX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOwotICAgIEVYUEVDVF9GQUxT
RShXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOworICAgIEVYUEVDVF9UUlVF
KHN0ZDo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNUX1RSVUUoKnN0ZDo6
Z2V0X2lmPGRvdWJsZT4oJnZhcmlhbnQpID09IDEuMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpn
ZXRfaWY8aW50PigmdmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKKyAgICBFWFBFQ1RfRkFMU0Uoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKIH0KIAogVEVTVChXVEZfVmFyaWFu
dCwgQmFzaWNWaXNpdG9yKQpAQCAtOTQsMTggKzk0LDE4IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIEJh
c2ljVmlzaXRvcikKIAogICAgIFR5cGUgdHlwZSA9IFR5cGU6Ok5vbmU7CiAKLSAgICBWYXJpYW50
PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9y
KHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2
YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAg
IEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7
Ci0gICAgV1RGOjp2aXNpdChWaXNpdG9yKHR5cGUpLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0
KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09
IHR5cGUpOwogCiAKICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0KFZpc2l0
b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xMjcs
MTIgKzEyNywxMiBAQCBURVNUKFdURl9WYXJpYW50LCBSZXRhaW5QdHIpCiAgICAgCiAgICAgUmVm
UHRyPFJlZkxvZ2dlcj4gcmVmUHRyOwogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJldGFpblB0
cjsKLSAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4g
dmFyaWFudChXVEZNb3ZlKHJlZlB0cikpOwotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFu
dCk7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPj4gdmFyaWFudChXVEZNb3ZlKHJlZlB0cikpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwg
dmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6UmVmUHRyID09IHR5cGUpOwogICAgIAog
ICAgIHZhcmlhbnQgPSBXVEZNb3ZlKHJldGFpblB0cik7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVD
VF9UUlVFKFR5cGU6OlJldGFpblB0ciA9PSB0eXBlKTsKIH0KICNlbmRpZgpAQCAtMTU0LDE4ICsx
NTQsMTggQEAgVEVTVChXVEZfVmFyaWFudCwgVmlzaXRvclVzaW5nTWFrZVZpc2l0bwogICAgICAg
ICBbJl0oU3RyaW5nKSB7IHR5cGUgPSBUeXBlOjpTdHJpbmc7IH0KICAgICApOwogCi0gICAgVmFy
aWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwotICAgIFdURjo6dmlzaXQodmlz
aXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2YXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFy
aWFudCA9IDg7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1Rf
VFJVRShUeXBlOjpJbnQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAxLjBmOwotICAgIFdU
Rjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNpdG9yLCB2YXJp
YW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpGbG9hdCA9PSB0eXBlKTsKIAogCiAgICAgdmFy
aWFudCA9ICJoZWxsbyI7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBz
dGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OlN0cmlu
ZyA9PSB0eXBlKTsKIH0KIApAQCAtMTgwLDcgKzE4MCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFZp
c2l0b3JVc2luZ1N3aXRjaE9uKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAg
IFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZhcmlh
bnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKICAgICB0eXBlID0gV1RGOjpzd2l0
Y2hPbih2YXJpYW50LAogICAgICAgICBbXShpbnQpIHsgcmV0dXJuIFR5cGU6OkludDsgfSwKICAg
ICAgICAgW10oZmxvYXQpIHsgcmV0dXJuIFR5cGU6OkZsb2F0OyB9LApAQCAtMjEzLDcgKzIxMyw3
IEBAIFRFU1QoV1RGX1ZhcmlhbnQsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvcikKIAogICAgIHsKICAg
ICAgICAgYXV0byB1bmlxdWVQdHIgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnN0cnVjdG9yRGVzdHJ1
Y3RvckNvdW50ZXI+KCk7Ci0gICAgICAgIFZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRyPENvbnN0cnVj
dG9yRGVzdHJ1Y3RvckNvdW50ZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHVuaXF1ZVB0cik7CisgICAg
ICAgIHN0ZDo6dmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291
bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRyKTsKIAogICAgICAgICBFWFBFQ1RfRVEo
MXUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6OmNvbnN0cnVjdGlvbkNvdW50KTsKICAg
ICAgICAgRVhQRUNUX0VRKDB1LCBDb25zdHJ1Y3RvckRlc3RydWN0b3JDb3VudGVyOjpkZXN0cnVj
dGlvbkNvdW50KTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQdHIp
CiAgICAgewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9n
Z2VyPiByZWYoJmEpOwotICAgICAgICBWYXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYg
PSByZWY7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0g
cmVmOwogICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIHJlZihhKSBkZXJlZihhKSBk
ZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7CkBAIC0yMzYsNyArMjM2LDcgQEAgVEVT
VChXVEZfVmFyaWFudCwgUmVmUHRyKQogICAgIHsKICAgICAgICAgUmVmTG9nZ2VyIGEoImEiKTsK
ICAgICAgICAgUmVmUHRyPFJlZkxvZ2dlcj4gcmVmKCZhKTsKLSAgICAgICAgVmFyaWFudDxSZWZQ
dHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOworICAgICAgICBzdGQ6OnZhcmlh
bnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVmKTsKICAgICB9CiAKICAg
ICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9nU3RyKCkuY19zdHIoKSk7
CkBAIC0yNDcsNyArMjQ3LDcgQEAgVEVTVChXVEZfVmFyaWFudCwgUmVmKQogICAgIHsKICAgICAg
ICAgUmVmTG9nZ2VyIGEoImEiKTsKICAgICAgICAgUmVmPFJlZkxvZ2dlcj4gcmVmKGEpOwotICAg
ICAgICBWYXJpYW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAg
ICAgIHN0ZDo6dmFyaWFudDxSZWY8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwog
ICAgIH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIo
KS5jX3N0cigpKTsKQEAgLTI2NSwxMSArMjY1LDExIEBAIHB1YmxpYzoKIAogVEVTVChXVEZfVmFy
aWFudCwgT3BlcmF0b3JBbXBlcnNhbmQpCiB7Ci0gICAgVmFyaWFudDxIb2xkZXI8aW50PiwgaW50
PiB2ID0gSG9sZGVyPGludD4oMTApOwotICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PEhvbGRlcjxp
bnQ+Pih2KS5kYXRhID09IDEwKTsKKyAgICBzdGQ6OnZhcmlhbnQ8SG9sZGVyPGludD4sIGludD4g
diA9IEhvbGRlcjxpbnQ+KDEwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxIb2xkZXI8aW50
Pj4odikuZGF0YSA9PSAxMCk7CiAKICAgICB2ID0gMjA7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpn
ZXQ8aW50Pih2KSA9PSAyMCk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2KSA9PSAy
MCk7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>318597</attachid>
            <date>2017-08-19 22:22:12 -0700</date>
            <delta_ts>2017-08-19 22:22:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175583-20170819222211.patch</filename>
            <type>text/plain</type>
            <size>371888</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBA
CisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1w
b3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ2FsbERPTSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRlQ2VsbE9w
ZXJhbmQ6OlNwZWN1bGF0ZUNlbGxPcGVyYW5kKToKKyAgICAgICAgKiBqaXQvU25pcHBldFJlZy5o
OgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpncHIgY29uc3QpOgorICAgICAgICAoSlNDOjpT
bmlwcGV0UmVnOjpmcHIgY29uc3QpOgorICAgICAgICAoSlNDOjpTbmlwcGV0UmVnOjpqc1ZhbHVl
UmVncyBjb25zdCk6CisKIDIwMTctMDgtMTggIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBw
bGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCAzMi1iaXQgTWFjcm9Bc3NlbWJsZXI6OnByb2Jl
IHN1cHBvcnQgZm9yIFdpbmRvd3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTgwNzcsNyArODA3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDYWxsRE9NKE5v
ZGUKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHdheSB0byBjYWxsIGZ1bmN0aW9u
cyB3aXRoIHRoZSB2ZWN0b3Igb2YgcmVnaXN0ZXJzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMwOTkKLSAgICBWZWN0b3I8VmFyaWFudDxTcGVjdWxh
dGVDZWxsT3BlcmFuZCwgU3BlY3VsYXRlSW50MzJPcGVyYW5kLCBTcGVjdWxhdGVCb29sZWFuT3Bl
cmFuZD4sIEpTQ19ET01KSVRfU0lHTkFUVVJFX01BWF9BUkdVTUVOVFNfSU5DTFVESU5HX1RISVM+
IG9wZXJhbmRzOworICAgIFZlY3RvcjxzdGQ6OnZhcmlhbnQ8U3BlY3VsYXRlQ2VsbE9wZXJhbmQs
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ+LCBKU0NfRE9N
SklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xVRElOR19USElTPiBvcGVyYW5kczsKICAg
ICBWZWN0b3I8R1BSUmVnLCBKU0NfRE9NSklUX1NJR05BVFVSRV9NQVhfQVJHVU1FTlRTX0lOQ0xV
RElOR19USElTPiByZWdzOwogCiAgICAgYXV0byBhcHBlbmRDZWxsID0gWyZdKEVkZ2UmIGVkZ2Up
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4OCw3ICszODg4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgZ3ByKCk7CiAgICAgfQogCi0gICAgZXhwbGljaXQgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQoU3BlY3VsYXRlQ2VsbE9wZXJhbmQmJiBvdGhlcikKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZChTcGVjdWxhdGVDZWxsT3BlcmFuZCYmIG90aGVyKQogICAgIHsKICAgICAgICAgbV9q
aXQgPSBvdGhlci5tX2ppdDsKICAgICAgICAgbV9lZGdlID0gb3RoZXIubV9lZGdlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TbmlwcGV0UmVnLmgJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU25pcHBldFJlZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03MiwyMSArNzIsMjEgQEAgcHVibGljOgogICAgIEdQUlJlZyBncHIoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzR1BSKCkpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8R1BSUmVn
PihtX3ZhcmlhbnQpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8R1BSUmVnPihtX3ZhcmlhbnQp
OwogICAgIH0KICAgICBGUFJSZWcgZnByKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0ZQUigpKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEZQUlJlZz4obV92YXJpYW50KTsKICAgICB9CiAgICAgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSlNW
YWx1ZVJlZ3MoKSk7Ci0gICAgICAgIHJldHVybiBXVEY6OmdldDxKU1ZhbHVlUmVncz4obV92YXJp
YW50KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PEpTVmFsdWVSZWdzPihtX3ZhcmlhbnQpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBWYXJpYW50PEdQUlJlZywgRlBSUmVnLCBKU1ZhbHVlUmVn
cz4gbV92YXJpYW50OworICAgIHN0ZDo6dmFyaWFudDxHUFJSZWcsIEZQUlJlZywgSlNWYWx1ZVJl
Z3M+IG1fdmFyaWFudDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMSBAQAorMjAxNy0w
OC0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJl
dHRlciBzdGQ6OnZhcmlhbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NTU4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0ZvcndhcmQuaDoKKyAgICAgICAgKiB3dGYvSW5QbGFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3
dGYvT3B0aW9uYWwuaDoKKyAgICAgICAgKiB3dGYvVmFyaWFudC5oOgorICAgICAgICAobXBhcms6
OmxpYjo6Y3BwMTQ6OmFycmF5OjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKG1wYXJrOjps
aWI6OmNwcDE3OjpkZXRhaWw6Omludm9rZV9yZXN1bHQ8dm9pZF90PGRlY2x0eXBlKToKKyAgICAg
ICAgKG1wYXJrOjpsaWI6OmNwcDE3OjphZGRyZXNzb2YpOgorICAgICAgICAobXBhcms6OmxpYjo6
Y3BwMTc6OmRldGFpbDo6aGFzX2FkZHJlc3NvZl9pbXBsOjppbXBsKToKKyAgICAgICAgKG1wYXJr
OjpsaWI6OmNwcDE3OjpkZXRhaWw6OmFkZHJlc3NvZik6CisgICAgICAgIChtcGFyazo6bGliOjp0
eXBlX3BhY2tfZWxlbWVudF9pbXBsOjpkZWNsdHlwZSk6CisgICAgICAgIChzdGQ6OnRocm93X2Jh
ZF92YXJpYW50X2FjY2Vzcyk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWxsKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjpmaW5kX2luZGV4KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpmaW5kX2lu
ZGV4X2ltcGwpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OnRyYWl0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpjb21tb25fdHJhaXQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbW1vbl90cmFp
dF9pbXBsKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6
Z2V0X2FsdCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6YWNjZXNzOjpyZWN1cnNpdmVfdW5pb246
OmdldF9hbHRfaW1wbDo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAgKHN0ZDo6ZGV0YWls
OjphY2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjo6QVVUT19SRUZSRUZfUkVUVVJOKToKKyAgICAgICAg
KHN0ZDo6ZGV0YWlsOjphY2Nlc3M6OmJhc2U6OkFVVE9fUkVGUkVGX1JFVFVSTik6CisgICAgICAg
IChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6YXQpOgorICAgICAgICAoc3RkOjpkZXRh
aWw6OnZpc2l0YXRpb246OmJhc2U6OnZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2spOgor
ICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjpiYXNlOjptYWtlX2ZkaWFnb25hbCk6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2ltcGwp
OgorICAgICAgICAoc3RkOjpkZXRhaWw6OnZpc2l0YXRpb246OmJhc2U6Om1ha2VfZm1hdHJpeCk6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6YmFzZTo6bWFrZV9mbWF0cml4X2lt
cGw6OmltcGw8bXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXM6OkFVVE9fUkVUVVJOKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50Ojp2YWx1ZV92aXNpdG9yOjpE
RUNMVFlQRV9BVVRPX1JFVFVSTik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6dmlzaXRhdGlvbjo6
dmFyaWFudDo6QVVUT19SRVRVUk4pOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmFsdDo6YWx0KToK
KyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTik6Cisg
ICAgICAgIChzdGQ6OmRldGFpbDo6YmFzZTo6YmFzZSk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6
YmFzZTo6aW5kZXhfKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjphc19iYXNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpiYXNlOjpkYXRhKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpi
YXNlOjpzaXplKToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX0RFU1RSVUNU
T1IpOgorICAgICAgICAoc3RkOjpkZXRhaWw6OmNvbnN0cnVjdG9yOjpjdG9yOjpvcGVyYXRvcigp
IGNvbnN0KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpjb25zdHJ1Y3Rvcjo6Y29uc3RydWN0X2Fs
dCk6CisgICAgICAgIChzdGQ6OmRldGFpbDo6Y29uc3RydWN0b3I6OmdlbmVyaWNfY29uc3RydWN0
KToKKyAgICAgICAgKHN0ZDo6ZGV0YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1Ip
OgorICAgICAgICAoc3RkOjpkZXRhaWw6Ok1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUik6
CisgICAgICAgIChzdGQ6OmRldGFpbDo6YXNzaWdubWVudDo6ZW1wbGFjZSk6CisgICAgICAgIChz
dGQ6OmRldGFpbDo6YXNzaWdubWVudDo6YXNzaWduZXI6Om9wZXJhdG9yKCkgY29uc3QpOgorICAg
ICAgICAoc3RkOjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmFzc2lnbl9hbHQpOgorICAgICAgICAoc3Rk
OjpkZXRhaWw6OmFzc2lnbm1lbnQ6OmdlbmVyaWNfYXNzaWduKToKKyAgICAgICAgKHN0ZDo6ZGV0
YWlsOjpNUEFSS19WQVJJQU5UX01PVkVfQVNTSUdOTUVOVCk6CisgICAgICAgIChzdGQ6OmRldGFp
bDo6TVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
OmltcGw6OmFzc2lnbik6CisgICAgICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6c3dhcHBlcjo6b3BlcmF0b3IoKSBjb25zdCk6CisgICAg
ICAgIChzdGQ6OmRldGFpbDo6aW1wbDo6bW92ZV9ub3Rocm93IGNvbnN0KToKKyAgICAgICAgKHN0
ZDo6ZGV0YWlsOjpvdmVybG9hZDw+OjpvcGVyYXRvcigpIGNvbnN0KToKKyAgICAgICAgKHN0ZDo6
dmFyaWFudDo6bm9leGNlcHQpOgorICAgICAgICAoc3RkOjp2YXJpYW50OjplbXBsYWNlKToKKyAg
ICAgICAgKHN0ZDo6ZGV0YWlsOjpnZW5lcmljX2dldF9pbXBsOjpnZW5lcmljX2dldF9pbXBsKToK
KyAgICAgICAgKHN0ZDo6Z2V0KToKKyAgICAgICAgKHN0ZDo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChzdGQ6Om9wZXJhdG9yIT0pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjwpOgorICAgICAgICAo
c3RkOjpvcGVyYXRvcj4pOgorICAgICAgICAoc3RkOjpvcGVyYXRvcjw9KToKKyAgICAgICAgKHN0
ZDo6b3BlcmF0b3I+PSk6CisgICAgICAgIChzdGQ6Om5vZXhjZXB0KToKKyAgICAgICAgKHN0ZDo6
ZGV0YWlsOjpoYXNoOjptZWV0c19yZXF1aXJlbWVudHMpOgorICAgICAgICAoc3RkOjpkZXRhaWw6
Omhhc2g6OmlzX2VuYWJsZWQpOgorICAgICAgICAoV1RGOjpzd2l0Y2hPbik6CisgICAgICAgIChX
VEY6OmluX3BsYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X190aHJvd19iYWRfdmFyaWFu
dF9hY2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjo9KTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
X192YXJpYW50X3N0b3JhZ2U6Ol9fZ2V0X3JyZWYpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpf
X3ZhcmlhbnRfc3RvcmFnZTo6X19kZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fY29uc3RydWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fc3RvcmFnZV93cmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6X19zdG9yYWdlX3dyYXBwZXI6Ol9fZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZ2V0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19z
dG9yYWdlX3dyYXBwZXI6Ol9fZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fc3Rv
cmFnZV93cmFwcGVyPF9UeXBlOjpfX3N0b3JhZ2Vfd3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6Ol9fc3RvcmFnZV93cmFwcGVyPF9UeXBlOjpfX2dldCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6Ol9fdmFyaWFudF9iYXNlOjp+X192YXJpYW50X2Jhc2UpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpfX2JhY2t1cF9zdG9yYWdlX29wczo6X19tb3ZlX2NvbnN0cnVjdF9mdW5j
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZV9vcHM6Ol9fZGVzdHJv
eV9mdW5jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19iYWNrdXBfc3RvcmFnZTo6X19iYWNr
dXBfc3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6Ol9f
ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYmFja3VwX3N0b3JhZ2U6On5fX2Jh
Y2t1cF9zdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VmFyaWFudDw+Ojpzd2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X19OT0VYQ0VQVF8pOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpfX3ZhcmlhbnRfYWNjZXNzb3I6OmdldCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Omdl
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmdldF9pZik6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6Ol9fdmlzaXRvcl90YWJsZTo6X190cmFtcG9saW5lX2Z1bmMpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjp2aXNpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ol9fYXJnX3NlbGVjdG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6X192aXNpdF9oZWxwZXIyOjpfX3Zpc2l0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Om9w
ZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRvcjwpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpvcGVyYXRvcj4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpvcGVyYXRv
cj49KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6b3BlcmF0b3I8PSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ol9faGFzaF92aXNpdG9yOjpvcGVyYXRvcigpKTogRGVsZXRlZC4KKyAgICAgICAg
KiB3dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHA6CisgICAgICAgIChXVEY6Om1hcE1vZGVU
b0JhY2tpbmdJdGVyYXRvcik6CisgICAgICAgICogd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiB3dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1h
Yy5tbToKKyAgICAgICAgKFdURjo6bWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKToKKwogMjAxNy0w
OC0xOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMjIwOTM4LgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsNiArMzM3LDcg
QEAKIAkJN0FGRUM2QUUxRUIyMkFDNjAwREFERTM2IC8qIFVVSUQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVVVJRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVVUlELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzRjcyMzkxRDc4ODExOTAwNjc0RTI2IC8qIEJyaWdhbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQnJpZ2FuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblBs
YWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDQkJBMDczMTlCQjdGREMwMEJC
RjAyNSAvKiBPU09iamVjdFB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBP
U09iamVjdFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0QwRDVBNzFENTUz
MjJBMDAwQ0M5RTEgLyogVmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRDRDMjZGMUUyQzgy
QjkwMDkyOTQ3MCAvKiBTdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04MjUsNiArODI2LDcgQEAKIAkJCQlBOEE0NzJCQTE1MUE4MjVB
MDA0MTIzRkYgLyogSGFzaFRyYWl0cy5oICovLAogCQkJCUE4QTQ3MkJCMTUxQTgyNUEwMDQxMjNG
RiAvKiBIZXhOdW1iZXIuaCAqLywKIAkJCQlGRTg5MjVBRjFEMDBEQUVDMDA0NjkwN0UgLyogSW5k
ZW50ZXIuaCAqLywKKwkJCQk3Qzg2OTYxQjFGNDU0NEY3MDA4MENGNjQgLyogSW5QbGFjZS5oICov
LAogCQkJCTlDNjdDNTQyNTg5MzQ4RTI4NUI0OTY5OSAvKiBJbmRleGVkQ29udGFpbmVySXRlcmF0
b3IuaCAqLywKIAkJCQkwRjJBQzU2MjFFOEEwMTQ5MDAwMUVFM0YgLyogSW5kZXhLZXlUeXBlLmgg
Ki8sCiAJCQkJNUI0MzM4M0E1RDBCNDYzQzk0MzNEOTMzIC8qIEluZGV4TWFwLmggKi8sCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Rm9yd2FyZC5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKIAogbmFtZXNwYWNlIHN0ZCB7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBvcHRpb25hbDsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+
IGNsYXNzIHZhcmlhbnQ7CiB9CiAKIG5hbWVzcGFjZSBXVEYgewpAQCAtMzYsNyArMzcsNiBAQCB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWY7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBSZWZQdHI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTdHJpbmdCdWZmZXI7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lLi4uIFQ+IGNsYXNzIFZhcmlhbnQ7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciwgc2l6ZV90
IG1pbkNhcGFjaXR5PiBjbGFzcyBWZWN0b3I7CiAKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTcz
LDUgKzczLDQgQEAgdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwogdXNpbmcgV1RGOjpTdHJpbmdJ
bXBsOwogdXNpbmcgV1RGOjpTdHJpbmdWaWV3OwogdXNpbmcgV1RGOjpUZXh0UG9zaXRpb247Ci11
c2luZyBXVEY6OlZhcmlhbnQ7CiB1c2luZyBXVEY6OlZlY3RvcjsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0luUGxhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JblBsYWNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dURi93dGYvSW5QbGFjZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPGNz
dGRkZWY+CisKK25hbWVzcGFjZSBzdGQgeworCisgIHN0cnVjdCBpbl9wbGFjZV90IHsgZXhwbGlj
aXQgaW5fcGxhY2VfdCgpID0gZGVmYXVsdDsgfTsKKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3Qg
ST4KKyAgc3RydWN0IGluX3BsYWNlX2luZGV4X3QgeyBleHBsaWNpdCBpbl9wbGFjZV9pbmRleF90
KCkgPSBkZWZhdWx0OyB9OworCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgaW5f
cGxhY2VfdHlwZV90IHsgZXhwbGljaXQgaW5fcGxhY2VfdHlwZV90KCkgPSBkZWZhdWx0OyB9Owor
CisgIGNvbnN0ZXhwciBpbl9wbGFjZV90IGluX3BsYWNle307CisKKyAgdGVtcGxhdGUgPHN0ZDo6
c2l6ZV90IEk+IGNvbnN0ZXhwciBpbl9wbGFjZV9pbmRleF90PEk+IGluX3BsYWNlX2luZGV4e307
CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBpbl9wbGFjZV90eXBlX3Q8VD4g
aW5fcGxhY2VfdHlwZXt9OworCit9ICAvLyBuYW1lc3BhY2Ugc3RkCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9PcHRpb25hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL09wdGlvbmFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDE0ICszNywxNSBAQAogCiAjcHJhZ21hIG9uY2UKIAotIyBpbmNsdWRlIDx1
dGlsaXR5PgotIyBpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSMgaW5jbHVkZSA8aW5pdGlhbGl6ZXJf
bGlzdD4KICMgaW5jbHVkZSA8Y2Fzc2VydD4KLSMgaW5jbHVkZSA8c3RyaW5nPgorIyBpbmNsdWRl
IDxpbml0aWFsaXplcl9saXN0PgogIyBpbmNsdWRlIDxzdGRleGNlcHQ+CisjIGluY2x1ZGUgPHN0
cmluZz4KKyMgaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjIGluY2x1ZGUgPHV0aWxpdHk+CiAjIGlu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjIGluY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorIyBp
bmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogIyBpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAK
ICMgZGVmaW5lIFRSMl9PUFRJT05BTF9SRVFVSVJFUyguLi4pIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPF9fVkFfQVJHU19fOjp2YWx1ZSwgYm9vbD46OnR5cGUgPSBmYWxzZQpAQCAtMjgzLDggKzI4
NCw4IEBAIGNvbnN0ZXhwciBzdHJ1Y3QgdHJpdmlhbF9pbml0X3R7fSB0cml2aWEKIAogCiAvLyAy
MC41LjYsIEluLXBsYWNlIGNvbnN0cnVjdGlvbgotY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90
e30gaW5fcGxhY2V7fTsKLQorLy8gY29uc3RleHByIHN0cnVjdCBpbl9wbGFjZV90e30gaW5fcGxh
Y2V7fTsKKy8vIGluX3BsYWNlX3QgZGVmaW5pdGlvbiBtb3ZlZCB0byB3dGYvSW5QbGFjZS5oIHNv
IGl0IGNhbiBiZSBzaGFyZWQgd2l0aCB3dGYvVmFyaWFudC5oCiAKIC8vIDIwLjUuNywgRGlzZW5n
YWdlZCBzdGF0ZSBpbmRpY2F0b3IKIHN0cnVjdCBudWxsb3B0X3QKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9WYXJpYW50LmgJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwyMDc5ICsxLDIzOTIgQEAKLS8vIENvcHlyaWdodCAoYykgMjAxNSwgSnVzdCBTb2Z0
d2FyZSBTb2x1dGlvbnMgTHRkCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTVBhcmsuVmFy
aWFudAogLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3IKLS8vIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlCi0vLyBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorLy8gQ29w
eXJpZ2h0IE1pY2hhZWwgUGFyaywgMjAxNS0yMDE3CiAvLwotLy8gMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLS8vIGRpc2NsYWlt
ZXIuCisvLyBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0
aCwgMjAwMwogLy8KLS8vIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0vLyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLS8vIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKy8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorLy8gb2J0YWluaW5nIGEgY29weSBvZiB0aGUg
c29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKKy8vIHRo
aXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBk
aXN0cmlidXRlLAorLy8gZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRv
IHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKKy8vIFNvZnR3YXJlLCBhbmQgdG8gcGVy
bWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCisv
LyBkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKIC8vCi0vLyAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YKLS8vIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
Ci0vLyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4KLS8vIHBlcm1pc3Npb24uCisvLyBUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNv
ZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZworLy8gdGhlIGFib3Zl
IGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciwKKy8vIG11c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorLy8gYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhl
IFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQorLy8gd29ya3MgYXJl
IHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2Vu
ZXJhdGVkIGJ5CisvLyBhIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCiAvLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0vLyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAot
Ly8gSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YKLS8vIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0vLyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUgotLy8gQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLS8vIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotLy8gTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS8vIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotLy8gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0vLyBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LAotLy8gRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
Ky8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELCBFWFBSRVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J
VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8g
RVZFTlQKKy8vIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVU
SU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKKy8vIEZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorLy8gQVJJ
U0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU
SEUgVVNFIE9SIE9USEVSCisvLyBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAKLS8vIENvcGll
ZCBmcm9tIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9hbnRob255dy92YXJpYW50L3NyYyAoNWJjZTQ3
ZmE3ODg2NDhmNzllNWVhMWQ3N2IwZWVmMmU4ZjBiMjk5OSkKKy8vIENvcGllZCBmcm9tIGh0dHBz
Oi8vZ2l0aHViLmNvbS9tcGFyay92YXJpYW50L2Jsb2Ivc2luZ2xlLWhlYWRlci92MS4yLjAvdmFy
aWFudC5ocHAgKGMyNmI4NjVhMTI5NTAyOTE2MGNiYjVkYjNjYzZhY2MxYzViMDk5ZjMpCiAKLS8v
IE1vZGlmaWVkIHRvIG1ha2UgaXQgY29tcGlsZSB3aXRoIGV4Y2VwdGlvbnMgZGlzYWJsZWQuCisv
LyBNb2RpZmllZCB0byB1c2UgdGhlICdzdGQnIG5hbWVzcGFjZSwgdXNlIHd0Zi9JblBsYWNlLmgs
IGFuZCBpbmNsdWRlIFdURjo6c3dpdGNoT24gaGVscGVyLgogCiAjcHJhZ21hIG9uY2UKIAorLyoK
KyAgIHZhcmlhbnQgc3lub3BzaXMKKworbmFtZXNwYWNlIHN0ZCB7CisKKyAgLy8gMjAuNy4yLCBj
bGFzcyB0ZW1wbGF0ZSB2YXJpYW50CisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY2xh
c3MgdmFyaWFudCB7CisgIHB1YmxpYzoKKworICAgIC8vIDIwLjcuMi4xLCBjb25zdHJ1Y3RvcnMK
KyAgICBjb25zdGV4cHIgdmFyaWFudCgpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisgICAgdmFyaWFu
dChjb25zdCB2YXJpYW50Jik7CisgICAgdmFyaWFudCh2YXJpYW50JiYpIG5vZXhjZXB0KHNlZSBi
ZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3RleHByIHZhcmlhbnQoVCYmKSBu
b2V4Y2VwdChzZWUgYmVsb3cpOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoaW5fcGxhY2VfdHlwZV90PFQ+LCBB
cmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFUsIGNsYXNzLi4uIEFy
Z3M+CisgICAgY29uc3RleHByIGV4cGxpY2l0IHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNlX3R5
cGVfdDxUPiwgaW5pdGlhbGl6ZXJfbGlzdDxVPiwgQXJncyYmLi4uKTsKKworICAgIHRlbXBsYXRl
IDxzaXplX3QgSSwgY2xhc3MuLi4gQXJncz4KKyAgICBjb25zdGV4cHIgZXhwbGljaXQgdmFyaWFu
dChpbl9wbGFjZV9pbmRleF90PEk+LCBBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUgPHNpemVf
dCBJLCBjbGFzcyBVLCBjbGFzcy4uLiBBcmdzPgorICAgIGNvbnN0ZXhwciBleHBsaWNpdCB2YXJp
YW50KAorICAgICAgICBpbl9wbGFjZV9pbmRleF90PEk+LCBpbml0aWFsaXplcl9saXN0PFU+LCBB
cmdzJiYuLi4pOworCisgICAgLy8gMjAuNy4yLjIsIGRlc3RydWN0b3IKKyAgICB+dmFyaWFudCgp
OworCisgICAgLy8gMjAuNy4yLjMsIGFzc2lnbm1lbnQKKyAgICB2YXJpYW50JiBvcGVyYXRvcj0o
Y29uc3QgdmFyaWFudCYpOworICAgIHZhcmlhbnQmIG9wZXJhdG9yPSh2YXJpYW50JiYpIG5vZXhj
ZXB0KHNlZSBiZWxvdyk7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdmFyaWFudCYgb3BlcmF0
b3I9KFQmJikgbm9leGNlcHQoc2VlIGJlbG93KTsKKworICAgIC8vIDIwLjcuMi40LCBtb2RpZmll
cnMKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4KKyAgICBUJiBlbXBsYWNl
KEFyZ3MmJi4uLik7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVSwgY2xhc3MuLi4g
QXJncz4KKyAgICBUJiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7CisK
KyAgICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIEFyZ3M+CisgICAgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCB2YXJpYW50PiYgZW1wbGFjZShBcmdzJiYuLi4pOworCisgICAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBVLCBjbGFzcy4uLiAgQXJncz4KKyAgICB2YXJpYW50X2FsdGVybmF0
aXZlPEksIHZhcmlhbnQ+JiBlbXBsYWNlKGluaXRpYWxpemVyX2xpc3Q8VT4sIEFyZ3MmJi4uLik7
CisKKyAgICAvLyAyMC43LjIuNSwgdmFsdWUgc3RhdHVzCisgICAgY29uc3RleHByIGJvb2wgdmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0OworICAgIGNvbnN0ZXhwciBzaXpl
X3QgaW5kZXgoKSBjb25zdCBub2V4Y2VwdDsKKworICAgIC8vIDIwLjcuMi42LCBzd2FwCisgICAg
dm9pZCBzd2FwKHZhcmlhbnQmKSBub2V4Y2VwdChzZWUgYmVsb3cpOworICB9OworCisgIC8vIDIw
LjcuMywgdmFyaWFudCBoZWxwZXIgY2xhc3NlcworICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IHZhcmlhbnRfc2l6ZTsgLy8gdW5kZWZpbmVkCisKKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGNv
bnN0ZXhwciBzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOwor
CisgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IFQ+OworICB0
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBUPjsKKyAgdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCB2YXJpYW50X3NpemU8Y29uc3Qgdm9sYXRpbGUgVD47CisK
KyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZhcmlh
bnQ8VHlwZXMuLi4+PjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzIFQ+IHN0cnVjdCB2
YXJpYW50X2FsdGVybmF0aXZlOyAvLyB1bmRlZmluZWQKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEks
IGNsYXNzIFQ+CisgIHVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlh
bnRfYWx0ZXJuYXRpdmU8SSwgVD46OnR5cGU7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFz
cyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCBjb25zdCBUPjsKKyAgdGVtcGxhdGUg
PHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2b2xhdGls
ZSBUPjsKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcyBUPiBzdHJ1Y3QgdmFyaWFudF9hbHRl
cm5hdGl2ZTxJLCBjb25zdCB2b2xhdGlsZSBUPjsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNs
YXNzLi4uIFR5cGVzPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxJLCB2YXJpYW50PFR5
cGVzLi4uPj47CisKKyAgY29uc3RleHByIHNpemVfdCB2YXJpYW50X25wb3MgPSAtMTsKKworICAv
LyAyMC43LjQsIHZhbHVlIGFjY2VzcworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlw
ZXM+CisgIGNvbnN0ZXhwciBib29sIGhvbGRzX2FsdGVybmF0aXZlKGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPHNpemVfdCBJLCBjbGFzcy4uLiBUeXBl
cz4KKyAgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4u
Pj4mCisgIGdldCh2YXJpYW50PFR5cGVzLi4uPiYpOworCisgIHRlbXBsYXRlIDxzaXplX3QgSSwg
Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFy
aWFudDxUeXBlcy4uLj4+JiYKKyAgZ2V0KHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisgIHRlbXBs
YXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVy
bmF0aXZlX3Q8SSwgdmFyaWFudDxUeXBlcy4uLj4+IGNvbnN0JgorICBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8c2l6ZV90IEksIGNsYXNzLi4uIFR5cGVzPgor
ICBjb25zdGV4cHIgdmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHlwZXMuLi4+PiBj
b25zdCYmCisgIGdldChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8
Y2xhc3MgVCwgY2xhc3MuLi4gIFR5cGVzPgorICBjb25zdGV4cHIgVCYgZ2V0KHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4uIFR5cGVzPgorICBjb25z
dGV4cHIgVCYmIGdldCh2YXJpYW50PFR5cGVzLi4uPiYmKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBjb25zdCBUJiBnZXQoY29uc3QgdmFyaWFu
dDxUeXBlcy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MuLi4gVHlwZXM+Cisg
IGNvbnN0ZXhwciBjb25zdCBUJiYgZ2V0KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiYpOworCisg
IHRlbXBsYXRlIDxzaXplX3QgSSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9p
bnRlcl90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdl
dF9pZih2YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxzaXplX3Qg
SSwgY2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBhZGRfcG9pbnRlcl90PGNvbnN0IHZhcmlh
bnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFR5cGVzLi4uPj4+CisgIGdldF9pZihjb25zdCB2
YXJpYW50PFR5cGVzLi4uPiopIG5vZXhjZXB0OworCisgIHRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlh
bnQ8VHlwZXMuLi4+Kikgbm9leGNlcHQ7CisKKyAgdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzLi4u
IFR5cGVzPgorICBjb25zdGV4cHIgYWRkX3BvaW50ZXJfdDxjb25zdCBUPgorICBnZXRfaWYoY29u
c3QgdmFyaWFudDxUeXBlcy4uLj4qKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjUsIHJlbGF0aW9u
YWwgb3BlcmF0b3JzCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I9PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlw
ZXMuLi4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBl
cy4uLj4mKTsKKworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+CisgIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPChjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMu
Li4+Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBv
cGVyYXRvcj4oY29uc3QgdmFyaWFudDxUeXBlcy4uLj4mLCBjb25zdCB2YXJpYW50PFR5cGVzLi4u
PiYpOworCisgIHRlbXBsYXRlIDxjbGFzcy4uLiBUeXBlcz4KKyAgY29uc3RleHByIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCB2YXJpYW50PFR5cGVzLi4uPiYsIGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+
Jik7CisKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICBjb25zdGV4cHIgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IHZhcmlhbnQ8VHlwZXMuLi4+JiwgY29uc3QgdmFyaWFudDxUeXBlcy4uLj4m
KTsKKworICAvLyAyMC43LjYsIHZpc2l0YXRpb24KKyAgdGVtcGxhdGUgPGNsYXNzIFZpc2l0b3Is
IGNsYXNzLi4uIFZhcmlhbnRzPgorICBjb25zdGV4cHIgc2VlIGJlbG93IHZpc2l0KFZpc2l0b3Im
JiwgVmFyaWFudHMmJi4uLik7CisKKyAgLy8gMjAuNy43LCBjbGFzcyBtb25vc3RhdGUKKyAgc3Ry
dWN0IG1vbm9zdGF0ZTsKKworICAvLyAyMC43LjgsIG1vbm9zdGF0ZSByZWxhdGlvbmFsIG9wZXJh
dG9ycworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwobW9ub3N0YXRlLCBtb25vc3RhdGUpIG5v
ZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4obW9ub3N0YXRlLCBtb25vc3RhdGUp
IG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjw9KG1vbm9zdGF0ZSwgbW9ub3N0
YXRlKSBub2V4Y2VwdDsKKyAgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+PShtb25vc3RhdGUsIG1v
bm9zdGF0ZSkgbm9leGNlcHQ7CisgIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0obW9ub3N0YXRl
LCBtb25vc3RhdGUpIG5vZXhjZXB0OworICBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KG1vbm9z
dGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdDsKKworICAvLyAyMC43LjksIHNwZWNpYWxpemVkIGFs
Z29yaXRobXMKKyAgdGVtcGxhdGUgPGNsYXNzLi4uIFR5cGVzPgorICB2b2lkIHN3YXAodmFyaWFu
dDxUeXBlcy4uLj4mLCB2YXJpYW50PFR5cGVzLi4uPiYpIG5vZXhjZXB0KHNlZSBiZWxvdyk7CisK
KyAgLy8gMjAuNy4xMCwgY2xhc3MgYmFkX3ZhcmlhbnRfYWNjZXNzCisgIGNsYXNzIGJhZF92YXJp
YW50X2FjY2VzczsKKworICAvLyAyMC43LjExLCBoYXNoIHN1cHBvcnQKKyAgdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBoYXNoOworICB0ZW1wbGF0ZSA8Y2xhc3MuLi4gVHlwZXM+IHN0cnVjdCBo
YXNoPHZhcmlhbnQ8VHlwZXMuLi4+PjsKKyAgdGVtcGxhdGUgPD4gc3RydWN0IGhhc2g8bW9ub3N0
YXRlPjsKKworfSAvLyBuYW1lc3BhY2Ugc3RkCisKKyovCisKKyNpbmNsdWRlIDxjc3RkZGVmPgor
I2luY2x1ZGUgPGV4Y2VwdGlvbj4KICNpbmNsdWRlIDxmdW5jdGlvbmFsPgotI2luY2x1ZGUgPGxp
bWl0cy5oPgorI2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8bWVtb3J5Pgog
I2luY2x1ZGUgPG5ldz4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+
Ci0jaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHV0
aWxpdHk+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGls
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvSW5QbGFjZS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAotI2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOjQyNDUpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NTIxKQot
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDUyMikKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4
MTQpCisKKy8vIE1TVkMgMjAxNSBVcGRhdGUgMy4KKyNpZiBfX2NwbHVzcGx1cyA8IDIwMTEwM0wg
JiYgKCFkZWZpbmVkKF9NU0NfVkVSKSB8fCBfTVNDX0ZVTExfVkVSIDwgMTkwMDI0MjE1KQorI2Vy
cm9yICJNUGFyay5WYXJpYW50IHJlcXVpcmVzIEMrKzExIHN1cHBvcnQuIgogI2VuZGlmCiAKLSNp
ZiAhQ09NUElMRVIoQ0xBTkcpIHx8IFdURl9DUFBfU1REX1ZFUiA+PSAxNAorI2lmbmRlZiBfX2hh
c19idWlsdGluCisjZGVmaW5lIF9faGFzX2J1aWx0aW4oeCkgMAorI2VuZGlmCiAKLW5hbWVzcGFj
ZSBXVEYgeworI2lmbmRlZiBfX2hhc19mZWF0dXJlCisjZGVmaW5lIF9faGFzX2ZlYXR1cmUoeCkg
MAorI2VuZGlmCiAKLSNpZiBDT01QSUxFUl9TVVBQT1JUUyhFWENFUFRJT05TKQotI2RlZmluZSBf
X1RIUk9XX0VYQ0VQVElPTihfX2V4Y2VwdGlvbikgdGhyb3cgX19leGNlcHRpb247Ci0jZGVmaW5l
IF9fTk9FWENFUFQgbm9leGNlcHQKLSNkZWZpbmUgX19OT0VYQ0VQVF8oX19leGNlcHRpb24pIG5v
ZXhjZXB0KF9fZXhjZXB0aW9uKQotI2Vsc2UKLSNkZWZpbmUgX19USFJPV19FWENFUFRJT04oX19l
eGNlcHRpb24pIGRvIHsgKHZvaWQpX19leGNlcHRpb247IENSQVNIKCk7IH0gd2hpbGUgKDApOwot
I2RlZmluZSBfX05PRVhDRVBUCi0jZGVmaW5lIF9fTk9FWENFUFRfKC4uLikKKyNpZiBfX2hhc19i
dWlsdGluKF9fYnVpbHRpbl9hZGRyZXNzb2YpIHx8IFwKKyAgICAoZGVmaW5lZChfX0dOVUNfXykg
JiYgX19HTlVDX18gPj0gNykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktfQlVJ
TFRJTl9BRERSRVNTT0YKICNlbmRpZgogCi1zdHJ1Y3QgX19pbl9wbGFjZV9wcml2YXRlewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lPgotICAgIHN0cnVjdCBfX3R5cGVfaG9sZGVyOworI2lmIF9faGFz
X2J1aWx0aW4oX190eXBlX3BhY2tfZWxlbWVudCkKKyNkZWZpbmUgTVBBUktfVFlQRV9QQUNLX0VM
RU1FTlQKKyNlbmRpZgogCi0gICAgdGVtcGxhdGU8c2l6ZV90PgotICAgIHN0cnVjdCBfX3ZhbHVl
X2hvbGRlcjsKLX07CisjaWYgZGVmaW5lZChfX2NwcF9jb25zdGV4cHIpICYmIF9fY3BwX2NvbnN0
ZXhwciA+PSAyMDEzMDQKKyNkZWZpbmUgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisjZW5kaWYKIAor
I2lmIF9faGFzX2ZlYXR1cmUoY3h4X2V4Y2VwdGlvbnMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0
aW9ucykKKyNkZWZpbmUgTVBBUktfRVhDRVBUSU9OUworI2VuZGlmCiAKLXN0cnVjdCBpbl9wbGFj
ZV90YWcgewotICAgIGluX3BsYWNlX3RhZygpID0gZGVsZXRlOwotfTsKKyNpZiBkZWZpbmVkKF9f
Y3BwX2dlbmVyaWNfbGFtYmRhcykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgTVBBUktf
R0VORVJJQ19MQU1CREFTCisjZW5kaWYKIAotdXNpbmcgaW5fcGxhY2VfdCA9IGluX3BsYWNlX3Rh
ZygmKShfX2luX3BsYWNlX3ByaXZhdGUmKTsKKyNpZiBkZWZpbmVkKF9fY3BwX2xpYl9pbnRlZ2Vy
X3NlcXVlbmNlKQorI2RlZmluZSBNUEFSS19JTlRFR0VSX1NFUVVFTkNFCisjZW5kaWYKIAotdGVt
cGxhdGUgPGNsYXNzIF9UeXBlPgotdXNpbmcgaW5fcGxhY2VfdHlwZV90ID0gaW5fcGxhY2VfdGFn
KCYpKF9faW5fcGxhY2VfcHJpdmF0ZTo6X190eXBlX2hvbGRlcjxfVHlwZT4mKTsKKyNpZiBkZWZp
bmVkKF9fY3BwX3JldHVybl90eXBlX2RlZHVjdGlvbikgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisjZW5kaWYKIAotdGVtcGxhdGUgPHNp
emVfdCBfSW5kZXg+Ci11c2luZyBpbl9wbGFjZV9pbmRleF90ID0gaW5fcGxhY2VfdGFnKCYpKF9f
aW5fcGxhY2VfcHJpdmF0ZTo6X192YWx1ZV9ob2xkZXI8X0luZGV4PiYpOworI2lmIGRlZmluZWQo
X19jcHBfbGliX3RyYW5zcGFyZW50X29wZXJhdG9ycykgfHwgZGVmaW5lZChfTVNDX1ZFUikKKyNk
ZWZpbmUgTVBBUktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisjZW5kaWYKIAotaW5fcGxhY2VfdGFn
IGluX3BsYWNlKF9faW5fcGxhY2VfcHJpdmF0ZSYpOworI2lmIGRlZmluZWQoX19jcHBfdmFyaWFi
bGVfdGVtcGxhdGVzKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBNUEFSS19WQVJJQUJM
RV9URU1QTEFURVMKKyNlbmRpZgogCi10ZW1wbGF0ZSA8Y2xhc3MgX1R5cGU+Ci1pbl9wbGFjZV90
YWcgaW5fcGxhY2UoX19pbl9wbGFjZV9wcml2YXRlOjpfX3R5cGVfaG9sZGVyPF9UeXBlPiAmKSB7
Ci0gICAgX19USFJPV19FWENFUFRJT04oX19pbl9wbGFjZV9wcml2YXRlKCkpOwotfQorI2lmICFk
ZWZpbmVkKF9fR0xJQkNYWF9fKSB8fCBfX2hhc19pbmNsdWRlKDxjb2RlY3Z0PikgIC8vID49IGxp
YnN0ZGMrKy01CisjZGVmaW5lIE1QQVJLX1RSSVZJQUxJVFlfVFlQRV9UUkFJVFMKKyNlbmRpZgog
Ci10ZW1wbGF0ZSA8c2l6ZV90IF9JbmRleD4KLWluX3BsYWNlX3RhZyBpbl9wbGFjZShfX2luX3Bs
YWNlX3ByaXZhdGU6Ol9fdmFsdWVfaG9sZGVyPF9JbmRleD4gJikgewotICAgIF9fVEhST1dfRVhD
RVBUSU9OKF9faW5fcGxhY2VfcHJpdmF0ZSgpKTsKLX0KIAotY2xhc3MgYmFkX3ZhcmlhbnRfYWNj
ZXNzOiBwdWJsaWMgc3RkOjpsb2dpY19lcnJvcnsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBiYWRf
dmFyaWFudF9hY2Nlc3MoY29uc3Qgc3RkOjpzdHJpbmcmIHdoYXRfYXJnKToKLSAgICAgICAgc3Rk
Ojpsb2dpY19lcnJvcih3aGF0X2FyZykKLSAgICB7fQotICAgIGV4cGxpY2l0IGJhZF92YXJpYW50
X2FjY2Vzcyhjb25zdCBjaGFyKiB3aGF0X2FyZyk6Ci0gICAgICAgIHN0ZDo6bG9naWNfZXJyb3Io
d2hhdF9hcmcpCi0gICAge30KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1OT19SRVRVUk5f
RFVFX1RPX0NSQVNIIGlubGluZSBUIF9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKGNvbnN0IGNo
YXIqIHdoYXRfYXJnKXsKLSAgICBfX1RIUk9XX0VYQ0VQVElPTihiYWRfdmFyaWFudF9hY2Nlc3Mo
d2hhdF9hcmcpKQotfQorLy8gTk9URTogc3RkOjppbl9wbGFjZV90IGltcGxlbWVudGF0aW9uIG1v
dmVkIHRvIFdURi9JblBsYWNlLmgKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5h
bWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVy
OworI2RlZmluZSBSRVRVUk4oLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgbm9leGNlcHQobm9leGNlcHQoX19WQV9BUkdTX18pKSAtPiBkZWNsdHlwZShf
X1ZBX0FSR1NfXykgeyBcCisgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICB9CisKK25hbWVzcGFjZSBtcGFyayB7CisgIG5hbWVz
cGFjZSBsaWIgeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpZGVudGl0
eSB7IHVzaW5nIHR5cGUgPSBUOyB9OworCisgICAgaW5saW5lIG5hbWVzcGFjZSBjcHAxNCB7Cisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4KKyAgICAgIHN0cnVjdCBh
cnJheSB7CisgICAgICAgIGNvbnN0ZXhwciBjb25zdCBUICZvcGVyYXRvcltdKHN0ZDo6c2l6ZV90
IGluZGV4KSBjb25zdCB7CisgICAgICAgICAgcmV0dXJuIGRhdGFbaW5kZXhdOworICAgICAgICB9
CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5cGVfaW5kZXhfaGVscGVyPF9PZmZz
ZXQsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRyZGlmZl90
IF9fdmFsdWU9Ci0gICAgICAgIF9fdHlwZV9pbmRleF9oZWxwZXI8X09mZnNldCsxLF9UeXBlLF9S
ZXN0Li4uPjo6X192YWx1ZTsKLX07CisgICAgICAgIFQgZGF0YVtOID09IDAgPyAxIDogTl07Cisg
ICAgICB9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX190eXBlX2luZGV4X2hlbHBlcjxfT2Zmc2V0LF9UeXBl
LF9UeXBlLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIHB0cmRpZmZfdCBfX3ZhbHVl
PV9PZmZzZXQ7Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICB1c2luZyBh
ZGRfcG9pbnRlcl90ID0gdHlwZW5hbWUgc3RkOjphZGRfcG9pbnRlcjxUPjo6dHlwZTsKIAotdGVt
cGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3R5cGVf
aW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBwdHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAg
X190eXBlX2luZGV4X2hlbHBlcjwwLF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OworICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICAgICAgdXNpbmcgY29tbW9uX3R5cGVfdCA9
IHR5cGVuYW1lIHN0ZDo6Y29tbW9uX3R5cGU8VHMuLi4+Ojp0eXBlOwogCi10ZW1wbGF0ZTxwdHJk
aWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU7
CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIHVzaW5nIGRlY2F5X3QgPSB0eXBl
bmFtZSBzdGQ6OmRlY2F5PFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8MCxfSGVhZCxfUmVzdC4uLj57
Ci0gICAgdHlwZWRlZiBfSGVhZCBfX3R5cGU7Ci19OworICAgICAgdGVtcGxhdGUgPGJvb2wgQiwg
dHlwZW5hbWUgVCA9IHZvaWQ+CisgICAgICB1c2luZyBlbmFibGVfaWZfdCA9IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPEIsIFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBl
bmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19pbmRleGVkX3R5cGU8LTEsX0hlYWQsX1Jlc3QuLi4+
ewotICAgIHR5cGVkZWYgdm9pZCBfX3R5cGU7Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CisgICAgICB1c2luZyByZW1vdmVfY29uc3RfdCA9IHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2Nv
bnN0PFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIF9IZWFk
LHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX0hlYWQs
X1Jlc3QuLi4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LTEs
X1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBU
PgorICAgICAgdXNpbmcgcmVtb3ZlX3JlZmVyZW5jZV90ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVf
cmVmZXJlbmNlPFQ+Ojp0eXBlOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1l
IC4uLl9UeXBlcz4KLXN0cnVjdCBfX25leHRfaW5kZXh7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBw
dHJkaWZmX3QgX192YWx1ZT0KLSAgICAgICAgKF9JbmRleD49cHRyZGlmZl90KHNpemVvZi4uLihf
VHlwZXMpLTEpKT8tMTpfSW5kZXgrMTsKLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZvcndhcmQocmVtb3ZlX3JlZmVyZW5jZV90PFQ+
ICZ0KSBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICYmPih0KTsKKyAg
ICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ7Cisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgVCAmJmZv
cndhcmQocmVtb3ZlX3JlZmVyZW5jZV90PFQ+ICYmdCkgbm9leGNlcHQgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KCFzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICJjYW4gbm90IGZvcndhcmQgYW4gcnZhbHVlIGFzIGFuIGx2YWx1ZSIpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAmJj4odCk7CisgICAgICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lPgotc3RydWN0IHZhcmlhbnRfc2l6ZTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciByZW1vdmVfcmVmZXJlbmNlX3Q8VD4gJiZtb3Zl
KFQgJiZ0KSBub2V4Y2VwdCB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxyZW1vdmVfcmVm
ZXJlbmNlX3Q8VD4gJiY+KHQpOworICAgICAgfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX1R5cGU+
Ci1zdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IF9UeXBlPiA6IHZhcmlhbnRfc2l6ZTxfVHlwZT4g
e307CisjaWZkZWYgTVBBUktfSU5URUdFUl9TRVFVRU5DRQorICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIFQuLi4gSXM+CisgICAgICB1c2luZyBpbnRlZ2VyX3NlcXVlbmNlID0gc3RkOjppbnRl
Z2VyX3NlcXVlbmNlPFQsIElzLi4uPjsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIF9UeXBlPgotc3Ry
dWN0IHZhcmlhbnRfc2l6ZTx2b2xhdGlsZSBfVHlwZT4gOiB2YXJpYW50X3NpemU8X1R5cGU+IHt9
OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgdXNpbmcgaW5kZXhf
c2VxdWVuY2UgPSBzdGQ6OmluZGV4X3NlcXVlbmNlPElzLi4uPjsKIAotdGVtcGxhdGUgPHR5cGVu
YW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfc2l6ZTxjb25zdCB2b2xhdGlsZSBfVHlwZT4gOiB2
YXJpYW50X3NpemU8X1R5cGU+IHt9OworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Cisg
ICAgICB1c2luZyBtYWtlX2luZGV4X3NlcXVlbmNlID0gc3RkOjptYWtlX2luZGV4X3NlcXVlbmNl
PE4+OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotc3RydWN0IHZhcmlhbnRfc2l6
ZTxWYXJpYW50PF9UeXBlcy4uLj4+Ci0gICAgOiBzdGQ6OmludGVncmFsX2NvbnN0YW50PHNpemVf
dCwgc2l6ZW9mLi4uKF9UeXBlcyk+IHt9OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRz
PgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2VfZm9yID0gc3RkOjppbmRleF9zZXF1ZW5jZV9m
b3I8VHMuLi4+OworI2Vsc2UKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBULi4uIElzPgor
ICAgICAgc3RydWN0IGludGVnZXJfc2VxdWVuY2UgeworICAgICAgICB1c2luZyB2YWx1ZV90eXBl
ID0gVDsKKyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBzaXplKCkgbm9leGNl
cHQgeyByZXR1cm4gc2l6ZW9mLi4uKElzKTsgfQorICAgICAgfTsKKworICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgdXNpbmcgaW5kZXhfc2VxdWVuY2UgPSBpbnRlZ2Vy
X3NlcXVlbmNlPHN0ZDo6c2l6ZV90LCBJcy4uLj47CisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2Nv
bmNhdDsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90Li4uIExocywgc3RkOjpzaXplX3Qu
Li4gUmhzPgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfY29uY2F0PGluZGV4X3Nl
cXVlbmNlPExocy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhfc2VxdWVuY2U8UmhzLi4uPj4KKyAgICAgICAgICA6IGlkZW50aXR5PGluZGV4X3NlcXVl
bmNlPExocy4uLiwgKHNpemVvZi4uLihMaHMpICsgUmhzKS4uLj4+IHt9OworCisgICAgICB0ZW1w
bGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVlbmNlX2lt
cGw7CisKKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgorICAgICAgdXNpbmcgbWFrZV9p
bmRleF9zZXF1ZW5jZSA9IHR5cGVuYW1lIG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbDxOPjo6dHlw
ZTsKKworICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CisgICAgICBzdHJ1Y3QgbWFrZV9p
bmRleF9zZXF1ZW5jZV9pbXBsCisgICAgICAgICAgOiBtYWtlX2luZGV4X3NlcXVlbmNlX2NvbmNh
dDxtYWtlX2luZGV4X3NlcXVlbmNlPE4gLyAyPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ha2VfaW5kZXhfc2VxdWVuY2U8TiAtIChOIC8gMik+PiB7fTsKIAotdGVt
cGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVy
bmF0aXZlOworICAgICAgdGVtcGxhdGUgPD4KKyAgICAgIHN0cnVjdCBtYWtlX2luZGV4X3NlcXVl
bmNlX2ltcGw8MD4gOiBpZGVudGl0eTxpbmRleF9zZXF1ZW5jZTw+PiB7fTsKIAotdGVtcGxhdGU8
c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfVHlwZT4KLXVzaW5nIHZhcmlhbnRfYWx0ZXJuYXRpdmVf
dD10eXBlbmFtZSB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCxfVHlwZT46OnR5cGU7CisgICAg
ICB0ZW1wbGF0ZSA8PgorICAgICAgc3RydWN0IG1ha2VfaW5kZXhfc2VxdWVuY2VfaW1wbDwxPiA6
IGlkZW50aXR5PGluZGV4X3NlcXVlbmNlPDA+PiB7fTsKIAotdGVtcGxhdGUgPHNpemVfdCBfSW5k
ZXgsIHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRpdmU8X0luZGV4LCBj
b25zdCBfVHlwZT57Ci0gICAgdXNpbmcgdHlwZT1zdGQ6OmFkZF9jb25zdF90PHZhcmlhbnRfYWx0
ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+PjsKLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUu
Li4gVHM+CisgICAgICB1c2luZyBpbmRleF9zZXF1ZW5jZV9mb3IgPSBtYWtlX2luZGV4X3NlcXVl
bmNlPHNpemVvZi4uLihUcyk+OworI2VuZGlmCiAKLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0
eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRp
bGUgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfdm9sYXRpbGVfdDx2YXJpYW50X2Fs
dGVybmF0aXZlX3Q8X0luZGV4LF9UeXBlPj47Ci19OworICAgICAgLy8gPGZ1bmN0aW9uYWw+Cisj
aWZkZWYgTVBBUktfVFJBTlNQQVJFTlRfT1BFUkFUT1JTCisgICAgICB1c2luZyBlcXVhbF90byA9
IHN0ZDo6ZXF1YWxfdG88PjsKKyNlbHNlCisgICAgICBzdHJ1Y3QgZXF1YWxfdG8geworICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGhzLCB0eXBlbmFtZSBSaHM+CisgICAgICAgIGlubGluZSBj
b25zdGV4cHIgYXV0byBvcGVyYXRvcigpKExocyAmJmxocywgUmhzICYmcmhzKSBjb25zdAorICAg
ICAgICAgIFJFVFVSTihsaWI6OmZvcndhcmQ8TGhzPihsaHMpID09IGxpYjo6Zm9yd2FyZDxSaHM+
KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlIDxzaXplX3QgX0luZGV4LCB0eXBl
bmFtZSBfVHlwZT4KLXN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPF9JbmRleCwgdm9sYXRpbGUg
Y29uc3QgX1R5cGU+ewotICAgIHVzaW5nIHR5cGU9c3RkOjphZGRfdm9sYXRpbGVfdDxzdGQ6OmFk
ZF9jb25zdF90PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxfSW5kZXgsX1R5cGU+Pj47Ci19OworI2lm
ZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgbm90X2VxdWFsX3Rv
ID0gc3RkOjpub3RfZXF1YWxfdG88PjsKKyNlbHNlCisgICAgICBzdHJ1Y3Qgbm90X2VxdWFsX3Rv
IHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgorICAgICAg
ICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAmJnJocykg
Y29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSAhPSBsaWI6OmZv
cndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0ZTxzaXplX3QgX0lu
ZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgdmFyaWFudF9hbHRlcm5hdGl2ZTxfSW5k
ZXgsVmFyaWFudDxfVHlwZXMuLi4+PnsKLSAgICB1c2luZyB0eXBlPXR5cGVuYW1lIF9faW5kZXhl
ZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU7Ci19OworI2lmZGVmIE1QQVJLX1RSQU5T
UEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgbGVzcyA9IHN0ZDo6bGVzczw+OworI2Vsc2UK
KyAgICAgIHN0cnVjdCBsZXNzIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlw
ZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMg
JiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExo
cz4obGhzKSA8IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAKLWNv
bnN0ZXhwciBzaXplX3QgdmFyaWFudF9ucG9zPS0xOworI2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5U
X09QRVJBVE9SUworICAgICAgdXNpbmcgZ3JlYXRlciA9IHN0ZDo6Z3JlYXRlcjw+OworI2Vsc2UK
KyAgICAgIHN0cnVjdCBncmVhdGVyIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywg
dHlwZW5hbWUgUmhzPgorICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShM
aHMgJiZsaHMsIFJocyAmJnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJk
PExocz4obGhzKSA+IGxpYjo6Zm9yd2FyZDxSaHM+KHJocykpCisgICAgICB9OworI2VuZGlmCiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
X1R5cGUmIGdldChWYXJpYW50PF9UeXBlcy4uLj4mKTsKKyNpZmRlZiBNUEFSS19UUkFOU1BBUkVO
VF9PUEVSQVRPUlMKKyAgICAgIHVzaW5nIGxlc3NfZXF1YWwgPSBzdGQ6Omxlc3NfZXF1YWw8PjsK
KyNlbHNlCisgICAgICBzdHJ1Y3QgbGVzc19lcXVhbCB7CisgICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBMaHMsIHR5cGVuYW1lIFJocz4KKyAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIG9w
ZXJhdG9yKCkoTGhzICYmbGhzLCBSaHMgJiZyaHMpIGNvbnN0CisgICAgICAgICAgUkVUVVJOKGxp
Yjo6Zm9yd2FyZDxMaHM+KGxocykgPD0gbGliOjpmb3J3YXJkPFJocz4ocmhzKSkKKyAgICAgIH07
CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYpOwor
I2lmZGVmIE1QQVJLX1RSQU5TUEFSRU5UX09QRVJBVE9SUworICAgICAgdXNpbmcgZ3JlYXRlcl9l
cXVhbCA9IHN0ZDo6Z3JlYXRlcl9lcXVhbDw+OworI2Vsc2UKKyAgICAgIHN0cnVjdCBncmVhdGVy
X2VxdWFsIHsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIExocywgdHlwZW5hbWUgUmhzPgor
ICAgICAgICBpbmxpbmUgY29uc3RleHByIGF1dG8gb3BlcmF0b3IoKShMaHMgJiZsaHMsIFJocyAm
JnJocykgY29uc3QKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3YXJkPExocz4obGhzKSA+PSBs
aWI6OmZvcndhcmQ8UmhzPihyaHMpKQorICAgICAgfTsKKyNlbmRpZgorICAgIH0gIC8vIG5hbWVz
cGFjZSBjcHAxNAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYmKTsKKyAgICBpbmxp
bmUgbmFtZXNwYWNlIGNwcDE3IHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmJik7CisgICAgICAvLyA8dHlwZV90cmFpdHM+CisgICAgICB0ZW1wbGF0ZSA8Ym9v
bCBCPgorICAgICAgdXNpbmcgYm9vbF9jb25zdGFudCA9IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8
Ym9vbCwgQj47CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBl
cz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+Jik7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUuLi4+CisgICAgICBzdHJ1Y3Qgdm9pZGVyIDogaWRlbnRpdHk8dm9pZD4ge307CiAKLXRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBl
bmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlh
bnQ8X1R5cGVzLi4uPiYmKTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgICAg
IHVzaW5nIHZvaWRfdCA9IHR5cGVuYW1lIHZvaWRlcjxUcy4uLj46OnR5cGU7CiAKLXRlbXBsYXRl
PHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIGNvbnN0JiBnZXQoCi0g
ICAgVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0Jik7CisgICAgICBuYW1lc3BhY2UgZGV0YWlsIHsK
KyAgICAgICAgbmFtZXNwYWNlIHN3YXBwYWJsZSB7CiAKLXRlbXBsYXRlIDxwdHJkaWZmX3QgX0lu
ZGV4LCB0eXBlbmFtZS4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LCBfVHlwZXMuLi4+OjpfX3R5cGUgJiYKLWdldChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QgJiYpOworICAgICAgICAgIHVzaW5nIHN0ZDo6c3dhcDsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9w
b2ludGVyX3Q8X1R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsKKyAgICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgICBzdHJ1Y3QgaXNfc3dhcHBhYmxlX2ltcGwg
eworICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBV
LAorICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lID0gZGVjbHR5cGUoc3dhcChzdGQ6OmRl
Y2x2YWw8VSAmPigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OmRlY2x2YWw8VSAmPigpKSk+CisgICAgICAgICAgICBpbmxpbmUgc3RhdGljIHN0
ZDo6dHJ1ZV90eXBlIHRlc3QoaW50KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGUgY29uc3Q+
IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKKyAgICAgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBVPgorICAgICAgICAgICAgaW5saW5lIHN0YXRpYyBzdGQ6OmZhbHNlX3R5cGUg
dGVzdCguLi4pOwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1lIF9faW5kZXhlZF90eXBl
PF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mKTsK
KyAgICAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIHR5cGUgPSBkZWNsdHlwZSh0
ZXN0PFQ+KDApKTsKKyAgICAgICAgICB9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgc3RkOjphZGRfcG9pbnRlcl90PHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3Q+IGdldF9pZigK
LSAgICBWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmKTsKKyAgICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICAgICAgICB1c2luZyBpc19zd2FwcGFibGUgPSB0eXBlbmFtZSBpc19zd2Fw
cGFibGVfaW1wbDxUPjo6dHlwZTsKIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFt
ZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmFyaWFudF9hY2Nlc3NvcjsKKyAgICAgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCA9IGlzX3N3YXBwYWJsZTxUPjo6dmFsdWU+CisgICAgICAg
ICAgc3RydWN0IGlzX25vdGhyb3dfc3dhcHBhYmxlIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2YWx1ZSA9CisgICAgICAgICAgICAgICAgbm9leGNlcHQoc3dhcChzdGQ6OmRl
Y2x2YWw8VCAmPigpLCBzdGQ6OmRlY2x2YWw8VCAmPigpKSk7CisgICAgICAgICAgfTsKIAotdGVt
cGxhdGU8c2l6ZV90IF9fY291bnQsCi0gICAgICAgICBib29sIF9fbGFyZ2VyX3RoYW5fY2hhcj0o
X19jb3VudD5TQ0hBUl9NQVgpLAotICAgIGJvb2wgX19sYXJnZXJfdGhhbl9zaG9ydD0oX19jb3Vu
dD5TSFJUX01BWCksCi0gICAgYm9vbCBfX2xhcmdlcl90aGFuX2ludD0oX19jb3VudD5JTlRfTUFY
KT4KLXN0cnVjdCBfX2Rpc2NyaW1pbmF0b3JfdHlwZXsKLSAgICB0eXBlZGVmIHNpZ25lZCBjaGFy
IF9fdHlwZTsKLX07CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAg
c3RydWN0IGlzX25vdGhyb3dfc3dhcHBhYmxlPFQsIGZhbHNlPiA6IHN0ZDo6ZmFsc2VfdHlwZSB7
fTsKIAotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNjcmltaW5hdG9yX3R5
cGU8X19jb3VudCx0cnVlLGZhbHNlLGZhbHNlPnsKLSAgICB0eXBlZGVmIHNpZ25lZCBzaG9ydCBf
X3R5cGU7Ci19OworICAgICAgICB9ICAvLyBuYW1lc3BhY2Ugc3dhcHBhYmxlCisgICAgICB9ICAv
LyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHNpemVfdCBfX2NvdW50Pgotc3RydWN0IF9f
ZGlzY3JpbWluYXRvcl90eXBlPF9fY291bnQsdHJ1ZSx0cnVlLGZhbHNlPnsKLSAgICB0eXBlZGVm
IGludCBfX3R5cGU7Ci19OwotdGVtcGxhdGU8c2l6ZV90IF9fY291bnQ+Ci1zdHJ1Y3QgX19kaXNj
cmltaW5hdG9yX3R5cGU8X19jb3VudCx0cnVlLHRydWUsdHJ1ZT57Ci0gICAgdHlwZWRlZiBzaWdu
ZWQgbG9uZyBfX3R5cGU7Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICB1
c2luZyBpc19zd2FwcGFibGUgPSBkZXRhaWw6OnN3YXBwYWJsZTo6aXNfc3dhcHBhYmxlPFQ+Owog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JlZF90eXBlewotICAgIHR5
cGVkZWYgX1R5cGUgX190eXBlOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
ICAgdXNpbmcgaXNfbm90aHJvd19zd2FwcGFibGUgPSBkZXRhaWw6OnN3YXBwYWJsZTo6aXNfbm90
aHJvd19zd2FwcGFibGU8VD47CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9f
c3RvcmVkX3R5cGU8X1R5cGUmPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7Ci19OworICAg
ICAgLy8gPGZ1bmN0aW9uYWw+CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwdXNo
KQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAwKQorI2VuZGlmCisgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXM+CisgICAgICBpbmxpbmUgY29uc3RleHByIGF1
dG8gaW52b2tlKEYgJiZmLCBBcyAmJi4uLiBhcykKKyAgICAgICAgICBSRVRVUk4obGliOjpmb3J3
YXJkPEY+KGYpKGxpYjo6Zm9yd2FyZDxBcz4oYXMpLi4uKSkKKyNpZmRlZiBfTVNDX1ZFUgorI3By
YWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
Pgotc3RydWN0IF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU7CisgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KKyAgICAgIGlubGluZSBjb25zdGV4
cHIgYXV0byBpbnZva2UoVCBCOjoqcG12LCBEICYmZCkKKyAgICAgICAgICBSRVRVUk4obGliOjpm
b3J3YXJkPEQ+KGQpLipwbXYpCiAKLXRlbXBsYXRlPD4KLXN0cnVjdCBfX2FsbF90cml2aWFsbHlf
ZGVzdHJ1Y3RpYmxlPD4gewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPXRydWU7
Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBtdiwgdHlwZW5hbWUgUHRyPgorICAgICAg
aW5saW5lIGNvbnN0ZXhwciBhdXRvIGludm9rZShQbXYgcG12LCBQdHIgJiZwdHIpCisgICAgICAg
ICAgUkVUVVJOKCgqbGliOjpmb3J3YXJkPFB0cj4ocHRyKSkuKnBtdikKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19hbGxfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxfVHlwZT4g
ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBzdGQ6OmlzX3Ry
aXZpYWxseV9kZXN0cnVjdGlibGU8dHlwZW5hbWUgX19zdG9yZWRfdHlwZTxfVHlwZT46Ol9fdHlw
ZT46OnZhbHVlOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBCLCB0eXBlbmFtZSBULCB0
eXBlbmFtZSBELCB0eXBlbmFtZS4uLiBBcz4KKyAgICAgIGlubGluZSBjb25zdGV4cHIgYXV0byBp
bnZva2UoVCBCOjoqcG1mLCBEICYmZCwgQXMgJiYuLi4gYXMpCisgICAgICAgICAgUkVUVVJOKChs
aWI6OmZvcndhcmQ8RD4oZCkuKnBtZikobGliOjpmb3J3YXJkPEFzPihhcykuLi4pKQogCi10ZW1w
bGF0ZTx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfdHJp
dmlhbGx5X2Rlc3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4gewotICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9I
ZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9S
ZXN0Li4uPjo6X192YWx1ZTsKLX07CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUG1mLCB0eXBl
bmFtZSBQdHIsIHR5cGVuYW1lLi4uIEFzPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciBhdXRvIGlu
dm9rZShQbWYgcG1mLCBQdHIgJiZwdHIsIEFzICYmLi4uIGFzKQorICAgICAgICAgIFJFVFVSTigo
KCpsaWI6OmZvcndhcmQ8UHRyPihwdHIpKS4qcG1mKShsaWI6OmZvcndhcmQ8QXM+KGFzKS4uLikp
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UYXJnZXQsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0
IF9fc3RvcmFnZV9ub3Rocm93X2NvbnN0cnVjdGlibGV7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
X192YWx1ZT0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X2NvbnN0cnVjdGlibGU8X1RhcmdldCwg
X0FyZ3MuLi4+Ojp2YWx1ZTsKLX07CisgICAgICBuYW1lc3BhY2UgZGV0YWlsIHsKIAotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBWb2lkLCB0eXBlbmFtZSwg
dHlwZW5hbWUuLi4+CisgICAgICAgIHN0cnVjdCBpbnZva2VfcmVzdWx0IHt9OwogCi10ZW1wbGF0
ZTw+Ci1zdHJ1Y3QgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPD4gewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX3ZhbHVlPXRydWU7Ci19OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgc3RydWN0IGludm9rZV9y
ZXN1bHQ8dm9pZF90PGRlY2x0eXBlKGxpYjo6aW52b2tlKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpkZWNsdmFsPEY+KCksIHN0ZDo6ZGVjbHZhbDxBcmdzPigpLi4uKSk+
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcmdzLi4uPgorICAgICAgICAgICAgOiBpZGVudGl0eTxkZWNsdHlwZSgKKyAgICAg
ICAgICAgICAgICAgIGxpYjo6aW52b2tlKHN0ZDo6ZGVjbHZhbDxGPigpLCBzdGQ6OmRlY2x2YWw8
QXJncz4oKS4uLikpPiB7fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci1zdHJ1Y3QgX19z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlPiB7Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciBib29sIF9fdmFsdWU9Ci0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8Ci0gICAgICAgIHR5cGVuYW1lIF9fc3RvcmVkX3R5cGU8X1R5cGU+OjpfX3R5cGU+
Ojp2YWx1ZTsKLX07CisgICAgICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3N0b3JhZ2Vfbm90aHJv
d19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQsX1Jlc3QuLi4+IHsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgX192YWx1ZT0KLSAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1
Y3RpYmxlPF9IZWFkPjo6X192YWx1ZSAmJgotICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3Zl
X2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+OjpfX3ZhbHVlOwotfTsKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdCA9
IGRldGFpbDo6aW52b2tlX3Jlc3VsdDx2b2lkLCBGLCBBcmdzLi4uPjsKIAotdGVtcGxhdGU8cHRy
ZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fb3RoZXJfc3RvcmFn
ZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTsKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
LCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaW52b2tlX3Jlc3VsdF90ID0gdHlwZW5h
bWUgaW52b2tlX3Jlc3VsdDxGLCBBcmdzLi4uPjo6dHlwZTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
X0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fb3RoZXJfc3RvcmFnZV9ub3Rocm93
X21vdmVfY29uc3RydWN0aWJsZTwwLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBfX3ZhbHVlPV9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfUmVzdC4u
Lj46Ol9fdmFsdWU7Ci19OworICAgICAgbmFtZXNwYWNlIGRldGFpbCB7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVyX3N0b3JhZ2Vf
bm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8LTEsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRp
YyBjb25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fc3RvcmFnZV9ub3Rocm93X21vdmVfY29u
c3RydWN0aWJsZTxfSGVhZCxfUmVzdC4uLj46Ol9fdmFsdWU7Ci19OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLi4uPgorICAgICAgICBzdHJ1Y3Qg
aXNfaW52b2NhYmxlIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3Qg
X0luZGV4LHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX290aGVy
X3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0luZGV4LF9IZWFkLF9SZXN0Li4u
PnsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBfX3ZhbHVlPQotICAgICAgICBfX3N0b3JhZ2Vfbm90
aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+OjpfX3ZhbHVlICYmCi0gICAgICAgIF9fb3Ro
ZXJfc3RvcmFnZV9ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxfSW5kZXgtMSxfUmVzdC4uLj46
Ol9fdmFsdWU7Ci19OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlwZW5hbWUuLi4g
QXJncz4KKyAgICAgICAgc3RydWN0IGlzX2ludm9jYWJsZTx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90
PEYsIEFyZ3MuLi4+PiwgRiwgQXJncy4uLj4KKyAgICAgICAgICAgIDogc3RkOjp0cnVlX3R5cGUg
e307CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0
cnVjdCBfX2JhY2t1cF9zdG9yYWdlX3JlcXVpcmVkewotICAgIHN0YXRpYyBjb25zdCBib29sIF9f
dmFsdWU9Ci0gICAgICAgICFfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8Ci0g
ICAgICAgIHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGU+
OjpfX3ZhbHVlICYmCi0gICAgICAgICFfX290aGVyX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2NvbnN0
cnVjdGlibGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OworICAgICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVm9pZCwgdHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZS4uLj4KKyAgICAg
ICAgc3RydWN0IGlzX2ludm9jYWJsZV9yIDogc3RkOjpmYWxzZV90eXBlIHt9OwogCi10ZW1wbGF0
ZTxwdHJkaWZmX3QgX0luZGV4LHB0cmRpZmZfdCBfQ291bnQsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZF9pbXBsewotICAgIHN0YXRpYyBj
b25zdCBib29sIF9fdmFsdWU9Ci0gICAgICAgIF9fYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWQ8X0lu
ZGV4LF9UeXBlcy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2Vf
cmVxdWlyZWRfaW1wbDxfSW5kZXgrMSxfQ291bnQtMSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfTsK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIHN0cnVjdCBpc19pbnZvY2FibGVfcjx2b2lkX3Q8aW52b2tlX3Jlc3VsdF90
PEYsIEFyZ3MuLi4+PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJncy4uLj4KKyAgICAgICAgICAgIDogc3RkOjppc19jb252ZXJ0aWJsZTxpbnZva2VfcmVzdWx0
X3Q8RiwgQXJncy4uLj4sIFI+IHt9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1w
bDxfSW5kZXgsMCxfVHlwZXMuLi4+ewotICAgIHN0YXRpYyBjb25zdCBib29sIF9fdmFsdWU9ZmFs
c2U7Ci19OworICAgICAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmFyaWFudD4KLXN0cnVjdCBfX2FueV9iYWNrdXBfc3RvcmFnZV9yZXF1aXJlZDsKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgdXNpbmcgaXNf
aW52b2NhYmxlID0gZGV0YWlsOjppc19pbnZvY2FibGU8dm9pZCwgRiwgQXJncy4uLj47CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbnlfYmFja3VwX3N0b3JhZ2Vf
cmVxdWlyZWQ8VmFyaWFudDxfVHlwZXMuLi4+ID57Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgX192
YWx1ZT0KLSAgICAgICAgX19hbnlfYmFja3VwX3N0b3JhZ2VfcmVxdWlyZWRfaW1wbDwwLHNpemVv
Zi4uLihfVHlwZXMpLF9UeXBlcy4uLj46Ol9fdmFsdWU7Ci19OworICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFIsIHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICB1c2luZyBpc19p
bnZvY2FibGVfciA9IGRldGFpbDo6aXNfaW52b2NhYmxlX3I8dm9pZCwgUiwgRiwgQXJncy4uLj47
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0YTsK
KyAgICAgIC8vIDxtZW1vcnk+CisjaWZkZWYgTVBBUktfQlVJTFRJTl9BRERSRVNTT0YKKyAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgaW5saW5lIGNvbnN0ZXhwciBUICphZGRyZXNz
b2YoVCAmYXJnKSB7CisgICAgICAgIHJldHVybiBfX2J1aWx0aW5fYWRkcmVzc29mKGFyZyk7Cisg
ICAgICB9CisjZWxzZQorICAgICAgbmFtZXNwYWNlIGRldGFpbCB7CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlLGJvb2w9c3RkOjppc19saXRlcmFsX3R5cGU8X1R5cGU+Ojp2YWx1ZT4KLXN0cnVj
dCBfX3ZhcmlhbnRfc3RvcmFnZXsKLSAgICB0eXBlZGVmIF9UeXBlIF9fdHlwZTsKKyAgICAgICAg
bmFtZXNwYWNlIGhhc19hZGRyZXNzb2ZfaW1wbCB7CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9U
eXBlJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIF9fdmFsOwotICAgIH0K
LSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUmIF9fdmFsKXsK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25z
dGV4cHIgY29uc3QgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICBy
ZXR1cm4gX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBf
X2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RkOjptb3Zl
KF9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYpe30KLX07
CisgICAgICAgICAgc3RydWN0IGZhaWw7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3Ry
dWN0IF9fc3RvcmFnZV93cmFwcGVyewotICAgIHR5cGVuYW1lIHN0ZDo6YWxpZ25lZF9zdG9yYWdl
PHNpemVvZihfVHlwZSksYWxpZ25vZihfVHlwZSk+Ojp0eXBlIF9fc3RvcmFnZTsKKyAgICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgICBpbmxpbmUgZmFpbCBvcGVyYXRvciYo
VCAmJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIGNv
bnN0ZXhwciB2b2lkIF9fY29uc3RydWN0KHZvaWQqIF9fcCxfQXJncyYmIC4uLiBfX2FyZ3Mpewot
ICAgICAgICBuZXcgKF9fcCkgX1R5cGUoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICB9CisgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgICAgaW5saW5l
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpbXBsKCkgeworICAgICAgICAgICAgcmV0dXJuIChzdGQ6
OmlzX2NsYXNzPFQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKCZzdGQ6OmRlY2x2YWw8VCAmPigp
KSwgZmFpbD46OnZhbHVlOworICAgICAgICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBf
RHVtbXkgPSBfVHlwZT4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcigKLSAgICAgICAgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6dmFs
dWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51bGxw
dHIpIHsKLSAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2UpOwotICAgIH0KKyAgICAgICAgfSAg
Ly8gbmFtZXNwYWNlIGhhc19hZGRyZXNzb2ZfaW1wbAogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9EdW1teSA9IF9UeXBlPgotICAgIF9fc3RvcmFnZV93cmFwcGVyKAotICAgICAgICB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8X0R1bW15Pjo6
dmFsdWUsCi0gICAgICAgIHZvaWQgKF9fc3RvcmFnZV93cmFwcGVyOjoqKSgpPjo6dHlwZSA9IG51
bGxwdHIpIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZpcnN0LHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICBfX3N0b3JhZ2Vfd3JhcHBlcihfRmlyc3QmJiBfX2ZpcnN0LF9B
cmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fY29uc3RydWN0KCZfX3N0b3JhZ2Usc3RkOjpm
b3J3YXJkPF9GaXJzdD4oX19maXJzdCksc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsK
LSAgICB9CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICB1c2luZyBoYXNf
YWRkcmVzc29mID0gYm9vbF9jb25zdGFudDxoYXNfYWRkcmVzc29mX2ltcGw6OmltcGw8VD4oKT47
CiAKLSAgICBfVHlwZSYgX19nZXQoKXsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxfVHlw
ZSo+KHN0YXRpY19jYXN0PHZvaWQqPigmX19zdG9yYWdlKSk7Ci0gICAgfQotICAgIGNvbnN0ZXhw
ciBfVHlwZSBjb25zdCYgX19nZXQoKSBjb25zdHsKLSAgICAgICAgcmV0dXJuICpzdGF0aWNfY2Fz
dDxfVHlwZSBjb25zdCo+KHN0YXRpY19jYXN0PHZvaWQgY29uc3QqPigmX19zdG9yYWdlKSk7Ci0g
ICAgfQotICAgIHZvaWQgX19kZXN0cm95KCl7Ci0gICAgICAgIF9fZ2V0KCkufl9UeXBlKCk7Ci0g
ICAgfQotfTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgICAgIGlubGluZSBj
b25zdGV4cHIgVCAqYWRkcmVzc29mKFQgJmFyZywgc3RkOjp0cnVlX3R5cGUpIHsKKyAgICAgICAg
ICByZXR1cm4gc3RkOjphZGRyZXNzb2YoYXJnKTsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBfVHlwZT4KLXN0cnVjdCBfX3N0b3JhZ2Vfd3JhcHBlcjxfVHlwZSY+ewotICAgIF9UeXBl
KiBfX3N0b3JhZ2U7CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBpbmxp
bmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcsIHN0ZDo6ZmFsc2VfdHlwZSkgeworICAg
ICAgICAgIHJldHVybiAmYXJnOworICAgICAgICB9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
QXJnPgotICAgIGNvbnN0ZXhwciBfX3N0b3JhZ2Vfd3JhcHBlcihfQXJnJiBfX2FyZyk6Ci0gICAg
ICAgIF9fc3RvcmFnZSgmX19hcmcpe30KKyAgICAgIH0gIC8vIG5hbWVzcGFjZSBkZXRhaWwKIAot
ICAgIF9UeXBlJiBfX2dldCgpewotICAgICAgICByZXR1cm4gKl9fc3RvcmFnZTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIF9UeXBlIGNvbnN0JiBfX2dldCgpIGNvbnN0ewotICAgICAgICByZXR1cm4g
Kl9fc3RvcmFnZTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgY29uc3RleHByIFQgKmFkZHJlc3NvZihUICZhcmcpIHsKKyAgICAgICAgcmV0dXJu
IGRldGFpbDo6YWRkcmVzc29mKGFyZywgZGV0YWlsOjpoYXNfYWRkcmVzc29mPFQ+e30pOworICAg
ICAgfQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdmFyaWFu
dF9zdG9yYWdlPF9UeXBlLGZhbHNlPnsKLSAgICB0eXBlZGVmIF9fc3RvcmFnZV93cmFwcGVyPF9U
eXBlPiBfX3R5cGU7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgIGlubGluZSBj
b25zdGV4cHIgVCAqYWRkcmVzc29mKGNvbnN0IFQgJiYpID0gZGVsZXRlOwogCi0gICAgc3RhdGlj
IGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBf
X3ZhbC5fX2dldCgpOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3RleHByIF9UeXBlJiYgX19nZXRf
cnJlZihfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5fX2dl
dCgpKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBfVHlwZSYgX19nZXQoX190
eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBfX3ZhbC5fX2dldCgpOwotICAgIH0K
LSAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9UeXBlJiYgX19nZXRfcnJlZihfX3R5cGUgY29u
c3QmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bW92ZShfX3ZhbC5fX2dldCgpKTsKLSAg
ICB9Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95KF9fdHlwZSYgX192YWwpewotICAgICAgICBf
X3ZhbC5fX2Rlc3Ryb3koKTsKLSAgICB9Ci19OworICAgIH0gIC8vIG5hbWVzcGFjZSBjcHAxNwog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSxib29sIF9fYj4KLXN0cnVjdCBfX3ZhcmlhbnRfc3Rv
cmFnZTxfVHlwZSYsX19iPnsKLSAgICB0eXBlZGVmIF9UeXBlKiBfX3R5cGU7CisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IHJlbW92ZV9hbGxfZXh0ZW50cyA6IGlkZW50aXR5
PFQ+IHt9OwogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYgX19nZXQoX190eXBlJiBfX3Zh
bCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIg
X1R5cGUmIF9fZ2V0X3JyZWYoX190eXBlJiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiAqX192YWw7
Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KF9fdHlwZSBjb25zdCYg
X192YWwpewotICAgICAgICByZXR1cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgY29uc3Rl
eHByIF9UeXBlJiBfX2dldF9ycmVmKF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1
cm4gKl9fdmFsOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBlJil7fQot
fTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4KKyAgICBzdHJ1Y3Qg
cmVtb3ZlX2FsbF9leHRlbnRzPGFycmF5PFQsIE4+PiA6IHJlbW92ZV9hbGxfZXh0ZW50czxUPiB7
fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsYm9vbCBfX2I+Ci1zdHJ1Y3QgX192YXJpYW50
X3N0b3JhZ2U8X1R5cGUmJixfX2I+ewotICAgIHR5cGVkZWYgX1R5cGUqIF9fdHlwZTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICB1c2luZyByZW1vdmVfYWxsX2V4dGVudHNfdCA9IHR5
cGVuYW1lIHJlbW92ZV9hbGxfZXh0ZW50czxUPjo6dHlwZTsKIAotICAgIHN0YXRpYyBjb25zdGV4
cHIgX1R5cGUmJiBfX2dldChfX3R5cGUmIF9fdmFsKXsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PF9UeXBlJiY+KCpfX3ZhbCk7Ci0gICAgfQotICAgIHN0YXRpYyBjb25zdGV4cHIgX1R5cGUm
JiBfX2dldF9ycmVmKF9fdHlwZSYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
X1R5cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9f
Z2V0KF9fdHlwZSBjb25zdCYgX192YWwpewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8X1R5
cGUmJj4oKl9fdmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0
X3JyZWYoX190eXBlIGNvbnN0JiBfX3ZhbCl7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxf
VHlwZSYmPigqX192YWwpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3koX190eXBl
Jil7fQotfTsKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICB1c2luZyBzaXplX2Nv
bnN0YW50ID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgTj47CiAKLXRlbXBs
YXRlPD4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPD57Ci0gICAgY29uc3RleHByIF9fdmFyaWFudF9k
YXRhKCl7fQotfTsKKyAgICB0ZW1wbGF0ZSA8Ym9vbC4uLiBCcz4KKyAgICB1c2luZyBib29sX3Nl
cXVlbmNlID0gaW50ZWdlcl9zZXF1ZW5jZTxib29sLCBCcy4uLj47CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9UeXBlPgotdW5pb24gX192YXJpYW50X2RhdGE8X1R5cGU+ewotICAgIHR5cGVuYW1lIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X190eXBlIF9fdmFsOwotICAgIHN0cnVjdCBfX2R1bW15
X3R5cGV7fSBfX2R1bW15OworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBU
PgorICAgIHN0cnVjdCBpbmRleGVkX3R5cGUgOiBzaXplX2NvbnN0YW50PEk+LCBpZGVudGl0eTxU
PiB7fTsKIAotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisgICAg
dGVtcGxhdGUgPGJvb2wuLi4gQnM+CisgICAgdXNpbmcgYWxsID0KKyAgICAgICAgc3RkOjppc19z
YW1lPGJvb2xfc2VxdWVuY2U8dHJ1ZSwgQnMuLi4+LCBib29sX3NlcXVlbmNlPEJzLi4uLCB0cnVl
Pj47CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3RleHByIF9f
dmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdzKToKLSAg
ICAgICAgX192YWwoc3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKXt9CisjaWZkZWYgTVBB
UktfVFlQRV9QQUNLX0VMRU1FTlQKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5h
bWUuLi4gVHM+CisgICAgdXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IF9fdHlwZV9wYWNrX2Vs
ZW1lbnQ8SSwgVHMuLi4+OworI2Vsc2UKKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlw
ZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IHR5cGVfcGFja19lbGVtZW50X2ltcGwgeworICAgICAg
cHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBzZXQ7CisK
KyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgIHN0cnVjdCBzZXQ8aW5k
ZXhfc2VxdWVuY2U8SXMuLi4+PiA6IGluZGV4ZWRfdHlwZTxJcywgVHM+Li4uIHt9OwogCi0gICAg
X1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX192YXJp
YW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldChfX3ZhbCk7Ci0gICAgfQotICAgIC8qY29uc3RleHBy
Ki8gX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1
cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0g
ICAgY29uc3RleHByIGNvbnN0IF9UeXBlJiBfX2dldChpbl9wbGFjZV9pbmRleF90PDA+KSBjb25z
dHsKLSAgICAgICAgcmV0dXJuIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19nZXQoX192YWwp
OwotICAgIH0KLSAgICBjb25zdGV4cHIgY29uc3QgX1R5cGUmJiBfX2dldF9ycmVmKGluX3BsYWNl
X2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5
cGU+OjpfX2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koaW5fcGxh
Y2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlPjo6X19kZXN0
cm95KF9fdmFsKTsKLSAgICB9Ci19OworICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
ICBpbmxpbmUgc3RhdGljIHN0ZDo6ZW5hYmxlX2lmPHRydWUsIFQ+IGltcGwoaW5kZXhlZF90eXBl
PEksIFQ+KTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci11bmlvbiBfX3ZhcmlhbnRfZGF0
YTxfVHlwZSY+ewotICAgIHR5cGVuYW1lIF9fdmFyaWFudF9zdG9yYWdlPF9UeXBlJj46Ol9fdHlw
ZSBfX3ZhbDsKLSAgICBzdHJ1Y3QgX19kdW1teV90eXBle30gX19kdW1teTsKKyAgICAgIGlubGlu
ZSBzdGF0aWMgc3RkOjplbmFibGVfaWY8ZmFsc2U+IGltcGwoLi4uKTsKIAotICAgIGNvbnN0ZXhw
ciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9CisgICAgICBwdWJsaWM6CisgICAgICB1c2lu
ZyB0eXBlID0gZGVjbHR5cGUoaW1wbChzZXQ8aW5kZXhfc2VxdWVuY2VfZm9yPFRzLi4uPj57fSkp
OworICAgIH07CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29uc3Rl
eHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19hcmdz
KToKLSAgICAgICAgX192YWwoJnN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdzKS4uLil7fQorICAg
IHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2luZyB0eXBl
X3BhY2tfZWxlbWVudCA9IHR5cGVuYW1lIHR5cGVfcGFja19lbGVtZW50X2ltcGw8SSwgVHMuLi4+
Ojp0eXBlOwogCi0gICAgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwotICAgIH0K
LSAgICBjb25zdGV4cHIgX1R5cGUmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewot
ICAgICAgICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmPjo6X19nZXQoX192YWwpOwot
ICAgIH0KKyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gVHM+CisgICAg
dXNpbmcgdHlwZV9wYWNrX2VsZW1lbnRfdCA9IHR5cGVuYW1lIHR5cGVfcGFja19lbGVtZW50PEks
IFRzLi4uPjo6dHlwZTsKKyNlbmRpZgogCi0gICAgX1R5cGUmIF9fZ2V0X3JyZWYoaW5fcGxhY2Vf
aW5kZXhfdDwwPil7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSY+Ojpf
X2dldF9ycmVmKF9fdmFsKTsKLSAgICB9Ci0gICAgY29uc3RleHByIF9UeXBlJiBfX2dldF9ycmVm
KGluX3BsYWNlX2luZGV4X3Q8MD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX192YXJpYW50X3N0
b3JhZ2U8X1R5cGUmPjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
X19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFn
ZTxfVHlwZSY+OjpfX2Rlc3Ryb3koX192YWwpOwotICAgIH0KLX07CisjaWZkZWYgTVBBUktfVFJJ
VklBTElUWV9UWVBFX1RSQUlUUworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHVzaW5n
IGlzX3RyaXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUgPQorICAgICAgICBzdGQ6OmlzX3RyaXZp
YWxseV9jb3B5X2NvbnN0cnVjdGlibGU8VD47CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICB1c2luZyBpc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlID0KKyAgICAgICAgc3Rk
Ojppc190cml2aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+OwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZT4KLXVuaW9uIF9fdmFyaWFudF9kYXRhPF9UeXBlJiY+ewotICAgIHR5cGVuYW1lIF9f
dmFyaWFudF9zdG9yYWdlPF9UeXBlJiY+OjpfX3R5cGUgX192YWw7Ci0gICAgc3RydWN0IF9fZHVt
bXlfdHlwZXt9IF9fZHVtbXk7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcg
aXNfdHJpdmlhbGx5X2NvcHlfYXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5X2NvcHlfYXNz
aWduYWJsZTxUPjsKIAotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOl9fZHVtbXkoKXt9
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgaXNfdHJpdmlhbGx5X21vdmVf
YXNzaWduYWJsZSA9IHN0ZDo6aXNfdHJpdmlhbGx5X21vdmVfYXNzaWduYWJsZTxUPjsKKyNlbHNl
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxseV9jb3B5
X2NvbnN0cnVjdGlibGUKKyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAgICBz
dGQ6OmlzX2NvcHlfY29uc3RydWN0aWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9jb3B5
KFQpPiB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2
aWFsbHlfbW92ZV9jb25zdHJ1Y3RpYmxlIDogYm9vbF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+
IHt9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3RyaXZpYWxs
eV9jb3B5X2Fzc2lnbmFibGUKKyAgICAgICAgOiBib29sX2NvbnN0YW50PAorICAgICAgICAgICAg
ICBzdGQ6OmlzX2NvcHlfYXNzaWduYWJsZTxUPjo6dmFsdWUgJiYgX19oYXNfdHJpdmlhbF9hc3Np
Z24oVCk+IHt9OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX0FyZz4KLSAgICBfX3ZhcmlhbnRf
ZGF0YShpbl9wbGFjZV9pbmRleF90PDA+LF9BcmcmJiBfX2FyZyk6Ci0gICAgICAgIF9fdmFsKCZf
X2FyZyl7fQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc190cml2aWFs
bHlfbW92ZV9hc3NpZ25hYmxlIDogYm9vbF9jb25zdGFudDxfX2lzX3RyaXZpYWwoVCk+IHt9Owor
I2VuZGlmCiAKLSAgICBfVHlwZSYmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAg
ICByZXR1cm4gX192YXJpYW50X3N0b3JhZ2U8X1R5cGUmJj46Ol9fZ2V0KF9fdmFsKTsKLSAgICB9
Ci0gICAgY29uc3RleHByIF9UeXBlJiYgX19nZXQoaW5fcGxhY2VfaW5kZXhfdDwwPikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXQoX192YWwp
OwotICAgIH0KLSAgICBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0g
ICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19nZXRfcnJlZihfX3Zh
bCk7Ci0gICAgfQotICAgIGNvbnN0ZXhwciBfVHlwZSYmIF9fZ2V0X3JyZWYoaW5fcGxhY2VfaW5k
ZXhfdDwwPikgY29uc3R7Ci0gICAgICAgIHJldHVybiBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYm
Pjo6X19nZXRfcnJlZihfX3ZhbCk7Ci0gICAgfQotICAgIHZvaWQgX19kZXN0cm95KGluX3BsYWNl
X2luZGV4X3Q8MD4pewotICAgICAgICBfX3ZhcmlhbnRfc3RvcmFnZTxfVHlwZSYmPjo6X19kZXN0
cm95KF9fdmFsKTsKLSAgICB9Ci19OworICB9ICAvLyBuYW1lc3BhY2UgbGliCit9ICAvLyBuYW1l
c3BhY2UgbXBhcmsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0
PgotdW5pb24gX192YXJpYW50X2RhdGE8X0hlYWQsX1Jlc3QuLi4+ewotICAgIF9fdmFyaWFudF9k
YXRhPF9IZWFkPiBfX2hlYWQ7Ci0gICAgX192YXJpYW50X2RhdGE8X1Jlc3QuLi4+IF9fcmVzdDsK
KyN1bmRlZiBSRVRVUk4KIAotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YSgpOgotICAgICAg
ICBfX2hlYWQoKXt9CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgY29u
c3RleHByIF9fdmFyaWFudF9kYXRhKGluX3BsYWNlX2luZGV4X3Q8MD4sX0FyZ3MmJiAuLi4gX19h
cmdzKToKLSAgICAgICAgX19oZWFkKGluX3BsYWNlPDA+LHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19h
cmdzKS4uLil7fQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9Bcmdz
PgotICAgIGNvbnN0ZXhwciBfX3ZhcmlhbnRfZGF0YShpbl9wbGFjZV9pbmRleF90PF9JbmRleD4s
X0FyZ3MmJiAuLi4gX19hcmdzKToKLSAgICAgICAgX19yZXN0KGluX3BsYWNlPF9JbmRleC0xPixz
dGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pe30KK25hbWVzcGFjZSBzdGQgewogCi0gICAg
X0hlYWQmIF9fZ2V0KGluX3BsYWNlX2luZGV4X3Q8MD4pewotICAgICAgICByZXR1cm4gX19oZWFk
Ll9fZ2V0KGluX3BsYWNlPDA+KTsKLSAgICB9CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZUEVfREVE
VUNUSU9OCiAKLSAgICAvKmNvbnN0ZXhwciovIF9IZWFkJiYgX19nZXRfcnJlZihpbl9wbGFjZV9p
bmRleF90PDA+KXsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+
KTsKLSAgICB9Ci0gICAgCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiBfX2dldChpbl9wbGFj
ZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9faGVhZC5fX2dldChpbl9wbGFj
ZTwwPik7Ci0gICAgfQorI2RlZmluZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4u
KSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi0gICAgY29uc3RleHByIGNvbnN0IF9IZWFkJiYg
X19nZXRfcnJlZihpbl9wbGFjZV9pbmRleF90PDA+KSBjb25zdHsKLSAgICAgICAgcmV0dXJuIF9f
aGVhZC5fX2dldF9ycmVmKGluX3BsYWNlPDA+KTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8
c2l6ZV90IF9JbmRleD4KLSAgICB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVz
dC4uLj46Ol9fdHlwZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9
CisjZGVmaW5lIEFVVE9fUkVGUkVGIGF1dG8gJiYKKyNkZWZpbmUgQVVUT19SRUZSRUZfUkVUVVJO
KC4uLikgeyByZXR1cm4gX19WQV9BUkdTX187IH0KIAotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5k
ZXg+Ci0gICAgLypjb25zdGV4cHIqLyB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxf
UmVzdC4uLj46Ol9fdHlwZSYmIF9fZ2V0X3JyZWYoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8
X0luZGV4Pil7Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5k
ZXgtMT4pOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIGNv
bnN0ZXhwciBjb25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgtMSxfUmVzdC4uLj46
Ol9fdHlwZSYgX19nZXQoCi0gICAgICAgIGluX3BsYWNlX2luZGV4X3Q8X0luZGV4PikgY29uc3R7
Ci0gICAgICAgIHJldHVybiBfX3Jlc3QuX19nZXQoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9
CisjZGVmaW5lIERFQ0xUWVBFX0FVVE8gZGVjbHR5cGUoYXV0bykKKyNkZWZpbmUgREVDTFRZUEVf
QVVUT19SRVRVUk4oLi4uKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi0gICAgdGVtcGxhdGU8
c2l6ZV90IF9JbmRleD4KLSAgICBjb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5
cGU8X0luZGV4LTEsX1Jlc3QuLi4+OjpfX3R5cGUmJiBfX2dldF9ycmVmKAotICAgICAgICBpbl9w
bGFjZV9pbmRleF90PF9JbmRleD4pIGNvbnN0ewotICAgICAgICByZXR1cm4gX19yZXN0Ll9fZ2V0
X3JyZWYoaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgdm9pZCBf
X2Rlc3Ryb3koaW5fcGxhY2VfaW5kZXhfdDwwPil7Ci0gICAgICAgIF9faGVhZC5fX2Rlc3Ryb3ko
aW5fcGxhY2U8MD4pOwotICAgIH0KLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4PgotICAgIHZv
aWQgX19kZXN0cm95KGluX3BsYWNlX2luZGV4X3Q8X0luZGV4Pil7Ci0gICAgICAgIF9fcmVzdC5f
X2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4LTE+KTsKLSAgICB9Ci19OworI2Vsc2UKIAorI2RlZmlu
ZSBBVVRPIGF1dG8KKyNkZWZpbmUgQVVUT19SRVRVUk4oLi4uKSBcCisgIC0+IGxpYjo6ZGVjYXlf
dDxkZWNsdHlwZShfX1ZBX0FSR1NfXyk+IHsgcmV0dXJuIF9fVkFfQVJHU19fOyB9CisKKyNkZWZp
bmUgQVVUT19SRUZSRUYgYXV0bworI2RlZmluZSBBVVRPX1JFRlJFRl9SRVRVUk4oLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC0+IGRlY2x0eXBlKChf
X1ZBX0FSR1NfXykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfcmVmZXJlbmNlPGRlY2x0eXBlKChfX1ZBX0FS
R1NfXykpPjo6dmFsdWUsICIiKTsgXAorICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0KKworI2RlZmlu
ZSBERUNMVFlQRV9BVVRPIGF1dG8KKyNkZWZpbmUgREVDTFRZUEVfQVVUT19SRVRVUk4oLi4uKSBc
CisgIC0+IGRlY2x0eXBlKF9fVkFfQVJHU19fKSB7IHJldHVybiBfX1ZBX0FSR1NfXzsgfQogCi10
ZW1wbGF0ZTxwdHJkaWZmX3QuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19pbmRleF9zZXF1ZW5jZXsK
LSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4sc2l6ZW9mLi4uKF9JbmRp
Y2VzKT4gX19uZXh0OwotICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fbGVuZ3RoPXNpemVv
Zi4uLihfSW5kaWNlcyk7Ci19OworI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlw
ZXM+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM7CisgIGNsYXNzIGJhZF92YXJpYW50X2FjY2VzcyA6
IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgcHVibGljOgorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciAqd2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuICJiYWRfdmFyaWFudF9hY2Nlc3Mi
OyB9CisgIH07CisKKyAgW1tub3JldHVybl1dIGlubGluZSB2b2lkIHRocm93X2JhZF92YXJpYW50
X2FjY2VzcygpIHsKKyNpZmRlZiBNUEFSS19FWENFUFRJT05TCisgICAgdGhyb3cgYmFkX3Zhcmlh
bnRfYWNjZXNze307CisjZWxzZQorICAgIHN0ZDo6dGVybWluYXRlKCk7CisjZW5kaWYKKyAgfQog
Ci10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX190eXBlX2luZGljZXM8PnsKLSAgICB0eXBlZGVmIF9faW5k
ZXhfc2VxdWVuY2U8PiBfX3R5cGU7Ci19OworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+Cisg
IGNsYXNzIHZhcmlhbnQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotc3RydWN0IF9fdHlw
ZV9pbmRpY2VzPF9UeXBlPnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8MD4gX190eXBl
OwotfTsKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X3NpemU7CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX3R5
cGVfaW5kaWNlczxfVHlwZSxfUmVzdC4uLj57Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf
aW5kaWNlczxfUmVzdC4uLj46Ol9fdHlwZTo6X19uZXh0IF9fdHlwZTsKLX07CisjaWZkZWYgTVBB
UktfVkFSSUFCTEVfVEVNUExBVEVTCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBjb25zdGV4
cHIgc3RkOjpzaXplX3QgdmFyaWFudF9zaXplX3YgPSB2YXJpYW50X3NpemU8VD46OnZhbHVlOwor
I2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9p
bmRpY2VzOworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgc3RydWN0IHZhcmlhbnRfc2l6ZTxj
b25zdCBUPiA6IHZhcmlhbnRfc2l6ZTxUPiB7fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9U
eXBlcz4KLXN0cnVjdCBfX3ZhcmlhbnRfaW5kaWNlczxWYXJpYW50PF9UeXBlcy4uLj4+ewotICAg
IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX2luZGljZXM8X1R5cGVzLi4uPjo6X190eXBlIF9fdHlw
ZTsKLX07CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPHZv
bGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCwKLSAgICAgICAgIHR5cGVuYW1lIF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRp
Y2VzPF9WYXJpYW50Pjo6X190eXBlPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3BfdGFibGU7
CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBzdHJ1Y3QgdmFyaWFudF9zaXplPGNvbnN0IHZv
bGF0aWxlIFQ+IDogdmFyaWFudF9zaXplPFQ+IHt9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbW92ZV9jb25zdHJ1Y3Rfb3Bf
dGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVk
ZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAK
LSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9j
b25zdHJ1Y3RfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMp
ewotICAgICAgICBfX2xocy0+dGVtcGxhdGUgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAot
ICAgICAgICAgICAgc3RkOjptb3ZlKGdldDxfSW5kZXg+KF9fcmhzKSkpOworICB0ZW1wbGF0ZSA8
dHlwZW5hbWUuLi4gVHM+CisgIHN0cnVjdCB2YXJpYW50X3NpemU8dmFyaWFudDxUcy4uLj4+IDog
bXBhcms6OmxpYjo6c2l6ZV9jb25zdGFudDxzaXplb2YuLi4oVHMpPiB7fTsKKworICB0ZW1wbGF0
ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUgVD4KKyAgc3RydWN0IHZhcmlhbnRfYWx0ZXJuYXRp
dmU7CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHVzaW5nIHZh
cmlhbnRfYWx0ZXJuYXRpdmVfdCA9IHR5cGVuYW1lIHZhcmlhbnRfYWx0ZXJuYXRpdmU8SSwgVD46
OnR5cGU7CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVj
dCB2YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IFQ+CisgICAgICA6IHN0ZDo6YWRkX2NvbnN0
PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCBUPj4ge307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEksIHZvbGF0
aWxlIFQ+CisgICAgICA6IHN0ZDo6YWRkX3ZvbGF0aWxlPHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJ
LCBUPj4ge307CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQ+CisgIHN0
cnVjdCB2YXJpYW50X2FsdGVybmF0aXZlPEksIGNvbnN0IHZvbGF0aWxlIFQ+CisgICAgICA6IHN0
ZDo6YWRkX2N2PHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCBUPj4ge307CisKKyAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgdmFyaWFudF9hbHRlcm5h
dGl2ZTxJLCB2YXJpYW50PFRzLi4uPj4geworICAgIHN0YXRpY19hc3NlcnQoSSA8IHNpemVvZi4u
LihUcyksCisgICAgICAgICAgICAgICAgICAiSW5kZXggb3V0IG9mIGJvdW5kcyBpbiBzdGQ6OnZh
cmlhbnRfYWx0ZXJuYXRpdmU8PiIpOworICAgIHVzaW5nIHR5cGUgPSBtcGFyazo6bGliOjp0eXBl
X3BhY2tfZWxlbWVudF90PEksIFRzLi4uPjsKKyAgfTsKKworICBjb25zdGV4cHIgc3RkOjpzaXpl
X3QgdmFyaWFudF9ucG9zID0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KC0xKTsKKworICBuYW1l
c3BhY2UgZGV0YWlsIHsKKworICAgIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBub3RfZm91bmQgPSBz
dGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTEpOworICAgIGNvbnN0ZXhwciBzdGQ6OnNpemVfdCBh
bWJpZ3VvdXMgPSBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oLTIpOworCisjaWZkZWYgTVBBUktf
Q1BQMTRfQ09OU1RFWFBSCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRz
PgorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleCgpIHsKKyAgICAg
IGNvbnN0ZXhwciBtcGFyazo6bGliOjphcnJheTxib29sLCBzaXplb2YuLi4oVHMpPiBtYXRjaGVz
ID0geworICAgICAgICAgIHtzdGQ6OmlzX3NhbWU8VCwgVHM+Ojp2YWx1ZS4uLn0KKyAgICAgIH07
CisgICAgICBzdGQ6OnNpemVfdCByZXN1bHQgPSBub3RfZm91bmQ7CisgICAgICBmb3IgKHN0ZDo6
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mLi4uKFRzKTsgKytpKSB7CisgICAgICAgIGlmIChtYXRj
aGVzW2ldKSB7CisgICAgICAgICAgaWYgKHJlc3VsdCAhPSBub3RfZm91bmQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBhbWJpZ3VvdXM7CisgICAgICAgICAgfQorICAgICAgICAgIHJlc3VsdCA9IGk7
CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorI2Vsc2UK
KyAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGZpbmRfaW5kZXhfaW1wbChzdGQ6OnNp
emVfdCByZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzaXplX3QpIHsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIEJzPgorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXpl
X3QgZmluZF9pbmRleF9pbXBsKHN0ZDo6c2l6ZV90IHJlc3VsdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdCBpZHgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzLi4uIGJzKSB7Cisg
ICAgICByZXR1cm4gYiA/IChyZXN1bHQgIT0gbm90X2ZvdW5kID8gYW1iaWd1b3VzCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmluZF9pbmRleF9pbXBsKGlkeCwgaWR4
ICsgMSwgYnMuLi4pKQorICAgICAgICAgICAgICAgOiBmaW5kX2luZGV4X2ltcGwocmVzdWx0LCBp
ZHggKyAxLCBicy4uLik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVu
YW1lLi4uIFRzPgorICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgZmluZF9pbmRleCgp
IHsKKyAgICAgIHJldHVybiBmaW5kX2luZGV4X2ltcGwobm90X2ZvdW5kLCAwLCBzdGQ6OmlzX3Nh
bWU8VCwgVHM+Ojp2YWx1ZS4uLik7CisgICAgfQorI2VuZGlmCiAKLSAgICBzdGF0aWMgY29uc3Qg
X19mdW5jX3R5cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFt
ZSBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+Pjo6Ci1fX2Z1bmNfdHlwZQotX19tb3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxfVmFy
aWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9m
Li4uKF9JbmRpY2VzKV09ewotICAgICAgICAmX19tb3ZlX2NvbnN0cnVjdF9mdW5jPF9JbmRpY2Vz
Pi4uLgorICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJPgorICAgIHVzaW5nIGZpbmRfaW5kZXhf
c2ZpbmFlX2ltcGwgPQorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxJICE9IG5vdF9m
b3VuZCAmJiBJICE9IGFtYmlndW91cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6
bGliOjpzaXplX2NvbnN0YW50PEk+PjsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBl
bmFtZS4uLiBUcz4KKyAgICB1c2luZyBmaW5kX2luZGV4X3NmaW5hZSA9IGZpbmRfaW5kZXhfc2Zp
bmFlX2ltcGw8ZmluZF9pbmRleDxULCBUcy4uLj4oKT47CisKKyAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QgST4KKyAgICBzdHJ1Y3QgZmluZF9pbmRleF9jaGVja2VkX2ltcGwgOiBtcGFyazo6bGli
OjpzaXplX2NvbnN0YW50PEk+IHsKKyAgICAgIHN0YXRpY19hc3NlcnQoSSAhPSBub3RfZm91bmQs
ICJ0aGUgc3BlY2lmaWVkIHR5cGUgaXMgbm90IGZvdW5kLiIpOworICAgICAgc3RhdGljX2Fzc2Vy
dChJICE9IGFtYmlndW91cywgInRoZSBzcGVjaWZpZWQgdHlwZSBpcyBhbWJpZ3VvdXMuIik7CiAg
ICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBf
SW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0
cnVjdCBfX21vdmVfYXNzaWduX29wX3RhYmxlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFu
dCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9p
ZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCosX1ZhcmlhbnQmKTsKLSAgICAKLSAgICB0
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4PgotICAgIHN0YXRpYyB2b2lkIF9fbW92ZV9hc3NpZ25f
ZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBfX2xocyxfVmFyaWFudCYgX19yaHMpewotICAgICAg
ICBnZXQ8X0luZGV4PigqX19saHMpPXN0ZDo6bW92ZShnZXQ8X0luZGV4PihfX3JocykpOwotICAg
IH0KLQotICAgIHN0YXRpYyBjb25zdCBfX2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5k
aWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1fX21vdmVfYXNz
aWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19h
cHBseVsKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX21vdmVfYXNzaWdu
X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUuLi4gVHM+CisgICAgdXNpbmcgZmluZF9pbmRleF9jaGVja2VkID0gZmluZF9pbmRleF9j
aGVja2VkX2ltcGw8ZmluZF9pbmRleDxULCBUcy4uLj4oKT47CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50
X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19jb3B5X2NvbnN0cnVjdF9vcF90
YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNl
cz4KLXN0cnVjdCBfX2NvcHlfY29uc3RydWN0X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2Vx
dWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlw
ZSkoX1ZhcmlhbnQqLF9WYXJpYW50IGNvbnN0Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleD4KLSAgICBzdGF0aWMgdm9pZCBfX2NvcHlfY29uc3RydWN0X2Z1bmMoCi0gICAg
ICAgIF9WYXJpYW50ICogX19saHMsX1ZhcmlhbnQgY29uc3QmIF9fcmhzKXsKLSAgICAgICAgX19s
aHMtPnRlbXBsYXRlIF9fZW1wbGFjZV9jb25zdHJ1Y3Q8X0luZGV4PigKLSAgICAgICAgICAgIGdl
dDxfSW5kZXg+KF9fcmhzKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBl
IF9fYXBwbHlbc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19jb3B5X2Nv
bnN0cnVjdF9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPj46
OgotX19mdW5jX3R5cGUKLV9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNl
cyldPXsKLSAgICAgICAgJl9fY29weV9jb25zdHJ1Y3RfZnVuYzxfSW5kaWNlcz4uLi4KLSAgICB9
OworICAgIHN0cnVjdCB2YWx1ZWxlc3NfdCB7fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zhcmlh
bnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFtZSBfX3ZhcmlhbnRfaW5kaWNl
czxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX2NvcHlfYXNzaWduX29wX3RhYmxlOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0
IF9fY29weV9hc3NpZ25fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNl
cy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fZnVuY190eXBlKShfVmFyaWFudCos
X1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4Pgot
ICAgIHN0YXRpYyB2b2lkIF9fY29weV9hc3NpZ25fZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgKiBf
X2xocyxfVmFyaWFudCBjb25zdCYgX19yaHMpewotICAgICAgICBnZXQ8X0luZGV4PigqX19saHMp
PWdldDxfSW5kZXg+KF9fcmhzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5
cGUgX19hcHBseVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX2NvcHlf
YXNzaWduX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6
Ci1fX2Z1bmNfdHlwZQotX19jb3B5X2Fzc2lnbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3Nl
cXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09
ewotICAgICAgICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07CisgICAg
ZW51bSBjbGFzcyBUcmFpdCB7IFRyaXZpYWxseUF2YWlsYWJsZSwgQXZhaWxhYmxlLCBVbmF2YWls
YWJsZSB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCwKLSAgICAgICAgIHR5cGVuYW1l
IF9JbmRpY2VzPXR5cGVuYW1lIF9fdmFyaWFudF9pbmRpY2VzPF9WYXJpYW50Pjo6X190eXBlPgot
c3RydWN0IF9fZGVzdHJveV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQs
cHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2Rlc3Ryb3lfb3BfdGFibGU8X1Zhcmlh
bnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNv
bnN0IF9fZnVuY190eXBlKShfVmFyaWFudCopOwotICAgIAotICAgIHRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoCi0gICAgICAgIF9WYXJp
YW50ICogX19zZWxmKXsKLSAgICAgICAgaWYoX19zZWxmLT5fX2luZGV4Pj0wKXsKLSAgICAgICAg
ICAgIF9fc2VsZi0+X19zdG9yYWdlLl9fZGVzdHJveShpbl9wbGFjZTxfSW5kZXg+KTsKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwKKyAgICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lPiBj
bGFzcyBJc1RyaXZpYWxseUF2YWlsYWJsZSwKKyAgICAgICAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lPiBjbGFzcyBJc0F2YWlsYWJsZT4KKyAgICBpbmxpbmUgY29uc3RleHByIFRyYWl0IHRyYWl0
KCkgeworICAgICAgcmV0dXJuIElzVHJpdmlhbGx5QXZhaWxhYmxlPFQ+Ojp2YWx1ZQorICAgICAg
ICAgICAgICAgICA/IFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUKKyAgICAgICAgICAgICAgICAg
OiBJc0F2YWlsYWJsZTxUPjo6dmFsdWUgPyBUcmFpdDo6QXZhaWxhYmxlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVHJhaXQ6OlVuYXZhaWxhYmxlOworICAgIH0K
KworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcmFpdHM+CisgICAgaW5saW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXQoVHJhaXRz
Li4uIHRyYWl0cykgeworICAgICAgVHJhaXQgcmVzdWx0ID0gVHJhaXQ6OlRyaXZpYWxseUF2YWls
YWJsZTsKKyAgICAgIGZvciAoVHJhaXQgdCA6IHt0cmFpdHMuLi59KSB7CisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxpbnQ+KHQpID4gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQpKSB7CisgICAgICAg
ICAgcmVzdWx0ID0gdDsKICAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CisjZWxzZQorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29tbW9uX3RyYWl0X2lt
cGwoVHJhaXQgcmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0KIAotICAgIHN0YXRpYyBjb25zdCBf
X2Z1bmNfdHlwZSBfX2FwcGx5W3NpemVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1l
IF9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj46OgotX19mdW5jX3R5cGUKLV9fZGVzdHJveV9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3Nl
cXVlbmNlPF9JbmRpY2VzLi4uPj46Ol9fYXBwbHlbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09
ewotICAgICAgICAmX19kZXN0cm95X2Z1bmM8X0luZGljZXM+Li4uCi0gICAgfTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICB0eXBlbmFtZSBfSW5kaWNlcz10eXBlbmFt
ZSBfX3ZhcmlhbnRfaW5kaWNlczxfVmFyaWFudD46Ol9fdHlwZT4KLXN0cnVjdCBfX3N3YXBfb3Bf
dGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1zdHJ1Y3QgX19zd2FwX29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0lu
ZGljZXMuLi4+PnsKLSAgICB0eXBlZGVmIHZvaWQoKiBjb25zdCBfX2Z1bmNfdHlwZSkoX1Zhcmlh
bnQmLF9WYXJpYW50Jik7Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleD4KLSAg
ICBzdGF0aWMgdm9pZCBfX3N3YXBfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgJiBfX2xocyxfVmFy
aWFudCAmIF9fcmhzKXsKLSAgICAgICAgc3dhcChnZXQ8X0luZGV4PihfX2xocyksZ2V0PF9JbmRl
eD4oX19yaHMpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgX19mdW5jX3R5cGUgX19hcHBs
eVtzaXplb2YuLi4oX0luZGljZXMpXTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50
LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1jb25zdCB0eXBlbmFtZSBfX3N3YXBfb3BfdGFibGU8
X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fZnVuY190eXBlCi1f
X3N3YXBfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+Ojpf
X2FwcGx5WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fc3dhcF9mdW5j
PF9JbmRpY2VzPi4uLgotICAgIH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LAotICAg
ICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1Zhcmlh
bnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19lcXVhbGl0eV9vcF90YWJsZTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2VxdWFsaXR5
X29wX3RhYmxlPF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLSAgICB0
eXBlZGVmIGJvb2woKiBjb25zdCBfX2NvbXBhcmVfZnVuY190eXBlKShfVmFyaWFudCBjb25zdCYs
X1ZhcmlhbnQgY29uc3QmKTsKLSAgICAKLSAgICB0ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4Pgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBfX2VxdWFsaXR5X2NvbXBhcmVfZnVuYygKLSAgICAg
ICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAg
IHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk9PWdldDxfSW5kZXg+KF9fcmhzKTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gVHJhaXRzPgorICAgIGlubGluZSBjb25zdGV4cHIgVHJhaXQgY29t
bW9uX3RyYWl0X2ltcGwoVHJhaXQgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHJhaXQgdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRyYWl0cy4uLiB0cykgeworICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4odCkgPiBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgPyBj
b21tb25fdHJhaXRfaW1wbCh0LCB0cy4uLikKKyAgICAgICAgICAgICAgICAgOiBjb21tb25fdHJh
aXRfaW1wbChyZXN1bHQsIHRzLi4uKTsKICAgICB9CiAKLSAgICBzdGF0aWMgY29uc3RleHByIF9f
Y29tcGFyZV9mdW5jX3R5cGUgX19lcXVhbGl0eV9jb21wYXJlW3NpemVvZi4uLihfSW5kaWNlcyld
PXsKLSAgICAgICAgJl9fZXF1YWxpdHlfY29tcGFyZV9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2Vz
PgotY29uc3RleHByIHR5cGVuYW1lIF9fZXF1YWxpdHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRl
eF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjoKLV9fY29tcGFyZV9mdW5jX3R5cGUKLV9fZXF1YWxp
dHlfb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2Vx
dWFsaXR5X2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIF9WYXJpYW50LAotICAgICAgICAgdHlwZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192
YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5cGU+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3Bf
dGFibGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGlj
ZXM+Ci1zdHJ1Y3QgX19sZXNzX3RoYW5fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgYm9vbCgqIGNvbnN0IF9fY29tcGFyZV9mdW5j
X3R5cGUpKF9WYXJpYW50IGNvbnN0JixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIF9fbGVzc190
aGFuX2NvbXBhcmVfZnVuYygKLSAgICAgICAgX1ZhcmlhbnQgY29uc3QmIF9fbGhzLF9WYXJpYW50
IGNvbnN0JiBfX3Jocyl7Ci0gICAgICAgIHJldHVybiBnZXQ8X0luZGV4PihfX2xocyk8Z2V0PF9J
bmRleD4oX19yaHMpOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcmFpdHM+CisgICAgaW5s
aW5lIGNvbnN0ZXhwciBUcmFpdCBjb21tb25fdHJhaXQoVHJhaXRzLi4uIHRzKSB7CisgICAgICBy
ZXR1cm4gY29tbW9uX3RyYWl0X2ltcGwoVHJhaXQ6OlRyaXZpYWxseUF2YWlsYWJsZSwgdHMuLi4p
OwogICAgIH0KKyNlbmRpZgogCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX2NvbXBhcmVfZnVuY190
eXBlIF9fbGVzc190aGFuX2NvbXBhcmVbc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAgICAgICAm
X19sZXNzX3RoYW5fY29tcGFyZV9mdW5jPF9JbmRpY2VzPi4uLgorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZS4uLiBUcz4KKyAgICBzdHJ1Y3QgdHJhaXRzIHsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIg
VHJhaXQgY29weV9jb25zdHJ1Y3RpYmxlX3RyYWl0ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQo
dHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3Ry
aXZpYWxseV9jb3B5X2NvbnN0cnVjdGlibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6aXNfY29weV9jb25zdHJ1Y3RpYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0
ZXhwciBUcmFpdCBtb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90
cmFpdCh0cmFpdDxUcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
aXNfdHJpdmlhbGx5X21vdmVfY29uc3RydWN0aWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU+KCkuLi4pOworCisgICAgICBzdGF0aWMg
Y29uc3RleHByIFRyYWl0IGNvcHlfYXNzaWduYWJsZV90cmFpdCA9CisgICAgICAgICAgY29tbW9u
X3RyYWl0KGNvcHlfY29uc3RydWN0aWJsZV90cmFpdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
dHJhaXQ8VHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3Ry
aXZpYWxseV9jb3B5X2Fzc2lnbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6aXNfY29weV9hc3NpZ25hYmxlPigpLi4uKTsKKworICAgICAgc3RhdGljIGNvbnN0ZXhwciBU
cmFpdCBtb3ZlX2Fzc2lnbmFibGVfdHJhaXQgPQorICAgICAgICAgIGNvbW1vbl90cmFpdChtb3Zl
X2NvbnN0cnVjdGlibGVfdHJhaXQsCisgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0PFRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjppc190cml2aWFsbHlfbW92
ZV9hc3NpZ25hYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX21vdmVf
YXNzaWduYWJsZT4oKS4uLik7CisKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgVHJhaXQgZGVzdHJ1
Y3RpYmxlX3RyYWl0ID0KKyAgICAgICAgICBjb21tb25fdHJhaXQodHJhaXQ8VHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19kZXN0cnVjdGlibGU+KCkuLi4pOwog
ICAgIH07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCxwdHJkaWZmX3QgLi4uIF9J
bmRpY2VzPgotY29uc3RleHByIHR5cGVuYW1lIF9fbGVzc190aGFuX29wX3RhYmxlPF9WYXJpYW50
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6Ci1fX2NvbXBhcmVfZnVuY190eXBlCi1f
X2xlc3NfdGhhbl9vcF90YWJsZTxfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4u
Pj46Ol9fbGVzc190aGFuX2NvbXBhcmVbCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV07CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF9zdG9yYWdlX3R5cGU7
CisgICAgbmFtZXNwYWNlIGFjY2VzcyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9EZXJpdmVkLGJv
b2wgX190cml2aWFsX2Rlc3RydWN0b3I+Ci1zdHJ1Y3QgX192YXJpYW50X2Jhc2UKLXsKLSAgICB+
X192YXJpYW50X2Jhc2UoKXsKLSAgICAgICAgc3RhdGljX2Nhc3Q8X0Rlcml2ZWQqPih0aGlzKS0+
X19kZXN0cm95X3NlbGYoKTsKLSAgICB9Ci19OworICAgICAgc3RydWN0IHJlY3Vyc2l2ZV91bmlv
biB7CisjaWZkZWYgTVBBUktfUkVUVVJOX1RZUEVfREVEVUNUSU9OCisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBWPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvICYmZ2V0
X2FsdChWICYmdiwgaW5fcGxhY2VfaW5kZXhfdDwwPikgeworICAgICAgICAgIHJldHVybiBtcGFy
azo6bGliOjpmb3J3YXJkPFY+KHYpLmhlYWRfOworICAgICAgICB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIF9EZXJpdmVkPgotc3RydWN0IF9fdmFyaWFudF9iYXNlPF9EZXJpdmVkLHRydWU+ewotfTsK
LQotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNl
LAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X2FsbF9pbmRpY2VzX2hlbHBlcjsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9PZmZzZXQscHRyZGlm
Zl90IC4uLiBfSW5kaWNlcywKLSAgICAgICAgIHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
UmVzdD4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICBfT2Zmc2V0LF9faW5kZXhf
c2VxdWVuY2U8X0luZGljZXMuLi4+LAotICAgIF9UeXBlLF9UeXBlLF9SZXN0Li4uPnsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fYWxsX2luZGljZXNfaGVscGVyPAotICAgICAgICBfT2Zmc2V0KzEs
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLixfT2Zmc2V0PixfVHlwZSxfUmVzdC4uLj46Ol9f
dHlwZQotICAgICAgICBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0
eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX2luZGljZXNfaGVscGVy
PF9PZmZzZXQsX0N1cnJlbnRTZXF1ZW5jZSxfVHlwZSxfSGVhZCxfUmVzdC4uLj57Ci0gICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwKLSAgICAgICAgX09mZnNldCsxLF9D
dXJyZW50U2VxdWVuY2UsX1R5cGUsX1Jlc3QuLi4+OjpfX3R5cGUgX190eXBlOwotfTsKLQotdGVt
cGxhdGU8cHRyZGlmZl90IF9PZmZzZXQsdHlwZW5hbWUgX0N1cnJlbnRTZXF1ZW5jZSx0eXBlbmFt
ZSBfVHlwZT4KLXN0cnVjdCBfX2FsbF9pbmRpY2VzX2hlbHBlcjxfT2Zmc2V0LF9DdXJyZW50U2Vx
dWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX0N1cnJlbnRTZXF1ZW5jZSBfX3R5cGU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9f
YWxsX2luZGljZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzX2hlbHBlcjwK
LSAgICAgICAgMCxfX2luZGV4X3NlcXVlbmNlPD4sX1R5cGUsX1R5cGVzLi4uPjo6X190eXBlIF9f
dHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfU2VxdWVuY2VzPgotc3RydWN0IF9f
Y29tYmluZV9zZXF1ZW5jZXM7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCAuLi4gX0luZGljZXMxLHB0
cmRpZmZfdCAuLi4gX0luZGljZXMyPgotc3RydWN0IF9fY29tYmluZV9zZXF1ZW5jZXM8Ci0gICAg
X19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlczEuLi4+LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMy
Li4uPj57Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2VzMS4uLixfSW5kaWNl
czIuLi4+IF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBlbmFt
ZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19jb21iaW5lX3NlcXVlbmNlczxfU2VxdWVuY2UsX1Jlc3Qu
Li4+ewotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwKLSAgICAgICAg
X1NlcXVlbmNlLAotICAgICAgICB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPF9SZXN0Li4u
Pjo6X190eXBlPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9JbmRp
Y2VzPgotc3RydWN0IF9fZmlyc3RfaW5kZXg7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfRmlyc3RJ
bmRleCxwdHJkaWZmX3QgLi4uIF9SZXN0Pgotc3RydWN0IF9fZmlyc3RfaW5kZXg8X19pbmRleF9z
ZXF1ZW5jZTxfRmlyc3RJbmRleCxfUmVzdC4uLj4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRy
ZGlmZl90IF9fdmFsdWU9X0ZpcnN0SW5kZXg7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09m
ZnNldCx0eXBlbmFtZSBfQ3VycmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxw
ZXI7Ci0KLXRlbXBsYXRlPHB0cmRpZmZfdCBfT2Zmc2V0LHR5cGVuYW1lIF9TZXF1ZW5jZSx0eXBl
bmFtZSBfVHlwZT4KLXN0cnVjdCBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0gICAg
X09mZnNldCxfU2VxdWVuY2UsX1R5cGU+ewotICAgIHR5cGVkZWYgX1NlcXVlbmNlIF9fdHlwZTsK
LX07Ci0KLXRlbXBsYXRlPGJvb2wgX0FjY2VwdCxwdHJkaWZmX3QgX0VudHJ5Pgotc3RydWN0IF9f
c2VxdWVuY2Vfb3JfZW1wdHl7Ci0gICAgdHlwZWRlZiBfX2luZGV4X3NlcXVlbmNlPD4gX190eXBl
OwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9FbnRyeT4KLXN0cnVjdCBfX3NlcXVlbmNlX29y
X2VtcHR5PHRydWUsX0VudHJ5PnsKLSAgICB0eXBlZGVmIF9faW5kZXhfc2VxdWVuY2U8X0VudHJ5
PiBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX09mZnNldCx0eXBlbmFtZSBfQ3Vy
cmVudFNlcXVlbmNlLAotICAgICAgICAgdHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgX0hlYWQsdHlw
ZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fY29uc3RydWN0aWJsZV9tYXRjaGVzX2hlbHBlcjwK
LSAgICBfT2Zmc2V0LF9DdXJyZW50U2VxdWVuY2UsX1R5cGUsX0hlYWQsX1Jlc3QuLi4+ewotICAg
IHR5cGVkZWYKLSAgICB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVfbWF0Y2hlc19oZWxwZXI8Ci0g
ICAgICAgIF9PZmZzZXQrMSwKLSAgICAgICAgdHlwZW5hbWUgX19jb21iaW5lX3NlcXVlbmNlczwK
LSAgICAgICAgICAgIF9DdXJyZW50U2VxdWVuY2UsCi0gICAgICAgICAgICB0eXBlbmFtZSBfX3Nl
cXVlbmNlX29yX2VtcHR5PAotICAgICAgICAgICAgICAgIHN0ZDo6aXNfY29uc3RydWN0aWJsZTxf
SGVhZCxfVHlwZT46OnZhbHVlLAotICAgICAgICAgICAgICAgIF9PZmZzZXQ+OjpfX3R5cGU+Ojpf
X3R5cGUsCi0gICAgICAgIF9UeXBlLF9SZXN0Li4uPjo6X190eXBlIF9fdHlwZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19jb25z
dHJ1Y3RpYmxlX21hdGNoZXN7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2NvbnN0cnVjdGlibGVf
bWF0Y2hlc19oZWxwZXI8Ci0gICAgICAgIDAsX19pbmRleF9zZXF1ZW5jZTw+LF9UeXBlLF9UeXBl
cy4uLj46Ol9fdHlwZSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBl
bmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3R7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2FsbF9pbmRpY2VzPF9UeXBlLF9UeXBlcy4uLj46Ol9fdHlwZSBf
X2RpcmVjdF9tYXRjaGVzOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hbGxfaW5kaWNlczwKLSAg
ICAgICAgdHlwZW5hbWUgc3RkOjpyZW1vdmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBz
dGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5cGU+Ojp0eXBlCi0gICAgICAgICAgICA+Ojp0eXBlLF9U
eXBlcy4uLj46Ol9fdHlwZSBfX3ZhbHVlX21hdGNoZXM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2FsbF9pbmRpY2VzPAotICAgICAgICBfVHlwZSwKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpyZW1v
dmVfY29uc3Q8Ci0gICAgICAgICAgICB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8X1R5
cGVzPjo6dHlwZQotICAgICAgICAgICAgPjo6dHlwZS4uLj46Ol9fdHlwZSBfX3JyZWZfbWF0Y2hl
czsKLQotICAgIHR5cGVkZWYgdHlwZW5hbWUgX19jb25zdHJ1Y3RpYmxlX21hdGNoZXM8X1R5cGUs
X1R5cGVzLi4uPjo6X190eXBlCi0gICAgX19jb25zdHJ1Y3RpYmxlczsKLQotICAgIHN0YXRpY19h
c3NlcnQoCi0gICAgICAgIChfX2RpcmVjdF9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAg
ICAoX192YWx1ZV9tYXRjaGVzOjpfX2xlbmd0aD4wKSB8fAotICAgICAgICAoX19ycmVmX21hdGNo
ZXM6Ol9fbGVuZ3RoPjApIHx8Ci0gICAgICAgIChfX2NvbnN0cnVjdGlibGVzOjpfX2xlbmd0aD09
MSksCi0gICAgICAgICJGb3IgY29udmVyc2lvbiBjb25zdHJ1Y3Rpb24gb2YgdmFyaWFudHMsIGV4
YWN0bHkgb25lIHR5cGUgbXVzdCBiZSBjb25zdHJ1Y3RpYmxlIik7Ci0gICAgCi0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2NvbWJpbmVfc2VxdWVuY2VzPAotICAgICAgICBfX2RpcmVjdF9tYXRjaGVz
LF9fdmFsdWVfbWF0Y2hlcyxfX3JyZWZfbWF0Y2hlcywKLSAgICAgICAgX19jb25zdHJ1Y3RpYmxl
cz46Ol9fdHlwZSBfX2FsbF9tYXRjaGVzOwotICAgIAotICAgIHN0YXRpYyBjb25zdGV4cHIgcHRy
ZGlmZl90IF9fdmFsdWU9X19maXJzdF9pbmRleDxfX2FsbF9tYXRjaGVzPjo6X192YWx1ZTsKLX07
Ci0KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcnsKLSAgICB0ZW1wbGF0ZTwKLSAg
ICAgICAgcHRyZGlmZl90IF9JbmRleCwKLSAgICAgICAgYm9vbCBfX2NvbnN0cnVjdF9kaXJlY3Rs
eSwKLSAgICAgICAgYm9vbCBfX2luZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgICAg
ICBib29sIF9fb3RoZXJfdHlwZXNfaGF2ZV9ub3Rocm93X21vdmU+Ci0gICAgc3RydWN0IF9faGVs
cGVyOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQsCi0gICAgICAgICAgICAgdHlw
ZW5hbWUgX0luZGljZXM9dHlwZW5hbWUgX192YXJpYW50X2luZGljZXM8X1ZhcmlhbnQ+OjpfX3R5
cGU+Ci0gICAgc3RydWN0IF9fb3BfdGFibGU7Ci19OwotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZm
X3QgX0luZGV4LAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT4KLXN0
cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxwZXI8Ci0gICAgX0luZGV4LGZh
bHNlLHRydWUsX19vdGhlcl90eXBlc19oYXZlX25vdGhyb3dfbW92ZT57Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQg
X190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAg
X192LnRlbXBsYXRlIF9fdHdvX3N0YWdlX3JlcGxhY2U8X0luZGV4PihfX2FyZ3MuLi4pOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXgsCi0gICAgYm9vbCBfX2lu
ZGV4ZWRfdHlwZV9oYXNfbm90aHJvd19tb3ZlLAotICAgIGJvb2wgX19vdGhlcl90eXBlc19oYXZl
X25vdGhyb3dfbW92ZT4KLXN0cnVjdCBfX3JlcGxhY2VfY29uc3RydWN0X2hlbHBlcjo6X19oZWxw
ZXI8Ci0gICAgX0luZGV4LHRydWUsX19pbmRleGVkX3R5cGVfaGFzX25vdGhyb3dfbW92ZSwKLSAg
ICBfX290aGVyX3R5cGVzX2hhdmVfbm90aHJvd19tb3ZlPnsKLQotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIF9WYXJpYW50LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICBzdGF0aWMgdm9pZCBfX3RyYW1w
b2xpbmUoX1ZhcmlhbnQmIF9fdixfQXJncyYmIC4uLiBfX2FyZ3MpewotICAgICAgICBfX3YudGVt
cGxhdGUgX19kaXJlY3RfcmVwbGFjZTxfSW5kZXg+KHN0ZDo6Zm9yd2FyZDxfQXJncz4oX19hcmdz
KS4uLik7Ci0gICAgfQotfTsKLQotCi10ZW1wbGF0ZTwKLSAgICBwdHJkaWZmX3QgX0luZGV4Pgot
c3RydWN0IF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX2hlbHBlcjwKLSAgICBfSW5kZXgs
ZmFsc2UsZmFsc2UsdHJ1ZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBl
bmFtZSAuLi4gX0FyZ3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBf
X3YsX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fbG9jYWxfYmFj
a3VwX3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPAotICAgIHB0cmRpZmZfdCBfSW5kZXg+Ci1zdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAgIF9JbmRleCxmYWxzZSxmYWxzZSxm
YWxzZT57Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFyaWFudCx0eXBlbmFtZSAuLi4gX0Fy
Z3M+Ci0gICAgc3RhdGljIHZvaWQgX190cmFtcG9saW5lKF9WYXJpYW50JiBfX3YsX0FyZ3MmJiAu
Li4gX19hcmdzKXsKLSAgICAgICAgX192LnRlbXBsYXRlIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4
PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIF9WYXJpYW50LHB0cmRpZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8X1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4+ewotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fbW92ZV9mdW5jX3R5
cGUpKF9WYXJpYW50KixfVmFyaWFudCYpOwotICAgIHR5cGVkZWYgdm9pZCgqIGNvbnN0IF9fY29w
eV9mdW5jX3R5cGUpKF9WYXJpYW50KixfVmFyaWFudCBjb25zdCYpOwotICAgIAotICAgIHRlbXBs
YXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2Fzc2lnbl9mdW5j
KAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50JiBfX3Jocyl7Ci0gICAgICAgIF9f
bGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjptb3ZlKGdldDxf
SW5kZXg+KF9fcmhzKSkpOwotICAgICAgICBfX3Jocy5fX2Rlc3Ryb3lfc2VsZigpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXg+Ci0gICAgc3RhdGljIHZvaWQgX19jb3B5
X2Fzc2lnbl9mdW5jKAotICAgICAgICBfVmFyaWFudCAqIF9fbGhzLF9WYXJpYW50IGNvbnN0JiBf
X3Jocyl7Ci0gICAgICAgIF9fbGhzLT50ZW1wbGF0ZSBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRl
eD4oZ2V0PF9JbmRleD4oX19yaHMpKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGNvbnN0IF9f
bW92ZV9mdW5jX3R5cGUgX19tb3ZlX2Fzc2lnbltzaXplb2YuLi4oX0luZGljZXMpXTsKLSAgICBz
dGF0aWMgY29uc3QgX19jb3B5X2Z1bmNfdHlwZSBfX2NvcHlfYXNzaWduW3NpemVvZi4uLihfSW5k
aWNlcyldOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX1ZhcmlhbnQscHRyZGlmZl90IC4uLiBf
SW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29w
X3RhYmxlPAotICAgIF9WYXJpYW50LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+Pjo6X19t
b3ZlX2Z1bmNfdHlwZQotX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0g
ICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX21vdmVfYXNzaWdu
WwotICAgIHNpemVvZi4uLihfSW5kaWNlcyldPXsKLSAgICAgICAgJl9fbW92ZV9hc3NpZ25fZnVu
YzxfSW5kaWNlcz4uLi4KLSAgICB9OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgViwgc3Rk
OjpzaXplX3QgST4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byAmJmdldF9h
bHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pIHsKKyAgICAgICAgICByZXR1cm4gZ2V0X2Fs
dChtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpLnRhaWxfLCBpbl9wbGFjZV9pbmRleF90PEkgLSAx
Pnt9KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IGJvb2wgRHVtbXkgPSB0cnVlPgorICAgICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsIHsKKyAgICAg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVj4KKyAgICAgICAgICBpbmxpbmUgY29uc3RleHByIEFV
VE9fUkVGUkVGIG9wZXJhdG9yKCkoViAmJnYpIGNvbnN0CisgICAgICAgICAgICBBVVRPX1JFRlJF
Rl9SRVRVUk4oZ2V0X2FsdF9pbXBsPEkgLSAxPnt9KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4odiku
dGFpbF8pKQorICAgICAgICB9OworCisgICAgICAgIHRlbXBsYXRlIDxib29sIER1bW15PgorICAg
ICAgICBzdHJ1Y3QgZ2V0X2FsdF9pbXBsPDAsIER1bW15PiB7CisgICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFY+CisgICAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBvcGVy
YXRvcigpKFYgJiZ2KSBjb25zdAorICAgICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKG1wYXJr
OjpsaWI6OmZvcndhcmQ8Vj4odikuaGVhZF8pCisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFYsIHN0ZDo6c2l6ZV90IEk+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29u
c3RleHByIEFVVE9fUkVGUkVGIGdldF9hbHQoViAmJnYsIGluX3BsYWNlX2luZGV4X3Q8ST4pCisg
ICAgICAgICAgQVVUT19SRUZSRUZfUkVUVVJOKGdldF9hbHRfaW1wbDxJPnt9KG1wYXJrOjpsaWI6
OmZvcndhcmQ8Vj4odikpKQorI2VuZGlmCisgICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
VmFyaWFudCxwdHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotY29uc3QgdHlwZW5hbWUgX19yZXBsYWNl
X2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8Ci0gICAgX1ZhcmlhbnQsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4+OjpfX2NvcHlfZnVuY190eXBlCi1fX3JlcGxhY2VfY29uc3RydWN0
X2hlbHBlcjo6X19vcF90YWJsZTwKLSAgICBfVmFyaWFudCxfX2luZGV4X3NlcXVlbmNlPF9JbmRp
Y2VzLi4uPj46Ol9fY29weV9hc3NpZ25bCi0gICAgc2l6ZW9mLi4uKF9JbmRpY2VzKV09ewotICAg
ICAgICAmX19jb3B5X2Fzc2lnbl9mdW5jPF9JbmRpY2VzPi4uLgotICAgIH07CisgICAgICBzdHJ1
Y3QgYmFzZSB7CisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgor
ICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZXRfYWx0KFYgJiZ2
KQorICAgICAgICAgIEFVVE9fUkVGUkVGX1JFVFVSTihyZWN1cnNpdmVfdW5pb246OmdldF9hbHQo
CisgICAgICAgICAgICAgIGRhdGEobXBhcms6OmxpYjo6Zm9yd2FyZDxWPih2KSksIGluX3BsYWNl
X2luZGV4X3Q8ST57fSkpCisgICAgICB9OworCisgICAgICBzdHJ1Y3QgdmFyaWFudCB7CisgICAg
ICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgorICAgICAgICBpbmxpbmUg
c3RhdGljIGNvbnN0ZXhwciBBVVRPX1JFRlJFRiBnZXRfYWx0KFYgJiZ2KQorICAgICAgICAgIEFV
VE9fUkVGUkVGX1JFVFVSTihiYXNlOjpnZXRfYWx0PEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8Vj4o
dikuaW1wbF8pKQorICAgICAgfTsKKworICAgIH0gIC8vIG5hbWVzcGFjZSBhY2Nlc3MKKworICAg
IG5hbWVzcGFjZSB2aXNpdGF0aW9uIHsKKworICAgICAgc3RydWN0IGJhc2UgeworICAgICAgICBw
cml2YXRlOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgaW5saW5lIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgVCAmYXQoY29uc3QgVCAmZWxlbSkgeworICAgICAgICAgIHJl
dHVybiBlbGVtOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgscHRyZGlm
Zl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFn
ZV9vcHN7Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5jKAotICAgICAgICBf
U3RvcmFnZSAqIF9fZGVzdCxfU3RvcmFnZSYgX19zb3VyY2UpewotICAgICAgICBuZXcoX19kZXN0
KSBfU3RvcmFnZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sCi0gICAgICAgICAgICBz
dGQ6Om1vdmUoX19zb3VyY2UuX19nZXQoaW5fcGxhY2U8X0luZGV4PikpKTsKLSAgICB9Ci0gICAg
c3RhdGljIHZvaWQgX19kZXN0cm95X2Z1bmMoX1N0b3JhZ2UgKiBfX29iail7Ci0gICAgICAgIF9f
b2JqLT5fX2Rlc3Ryb3koaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfTsKLX07CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOLCB0eXBlbmFtZS4uLiBJcz4KKyAgICAg
ICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgbXBhcms6OmxpYjo6cmVtb3ZlX2FsbF9l
eHRlbnRzX3Q8VD4gJmF0KAorICAgICAgICAgICAgY29uc3QgbXBhcms6OmxpYjo6YXJyYXk8VCwg
Tj4gJmVsZW1zLCBzdGQ6OnNpemVfdCBpLCBJcy4uLiBpcykgeworICAgICAgICAgIHJldHVybiBh
dChlbGVtc1tpXSwgaXMuLi4pOworICAgICAgICB9CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5k
ZXgsdHlwZW5hbWUgX1N0b3JhZ2U+Ci1zdHJ1Y3QgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4
LF9JbmRleCxfU3RvcmFnZT57Ci0gICAgc3RhdGljIHZvaWQgX19tb3ZlX2NvbnN0cnVjdF9mdW5j
KF9TdG9yYWdlICosX1N0b3JhZ2UmKXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpi
YWRfYWxsb2MoKSk7Ci0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBfX2Rlc3Ryb3lfZnVuYyhfU3Rv
cmFnZSAqKXsKLSAgICAgICAgX19USFJPV19FWENFUFRJT04oc3RkOjpiYWRfYWxsb2MoKSk7Ci0g
ICAgfTsKLX07CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBGcz4K
KyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgaW50IHZpc2l0X3Zpc2l0b3JfcmV0dXJu
X3R5cGVfY2hlY2soKSB7CisgICAgICAgICAgc3RhdGljX2Fzc2VydChtcGFyazo6bGliOjphbGw8
c3RkOjppc19zYW1lPEYsIEZzPjo6dmFsdWUuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICJgbXBhcms6OnZpc2l0YCByZXF1aXJlcyB0aGUgdmlzaXRvciB0byBoYXZlIGEgc2lu
Z2xlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gdHlwZS4iKTsKKyAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX01hc2tJbmRleCx0
eXBlbmFtZSBfU3RvcmFnZSx0eXBlbmFtZSBfSW5kaWNlcz4KLXN0cnVjdCBfX2JhY2t1cF9zdG9y
YWdlX29wX3RhYmxlOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gRnM+CisgICAgICAg
IGlubGluZSBzdGF0aWMgY29uc3RleHByIG1wYXJrOjpsaWI6OmFycmF5PAorICAgICAgICAgICAg
bXBhcms6OmxpYjo6Y29tbW9uX3R5cGVfdDxtcGFyazo6bGliOjpkZWNheV90PEZzPi4uLj4sCisg
ICAgICAgICAgICBzaXplb2YuLi4oRnMpPgorICAgICAgICBtYWtlX2ZhcnJheShGcyAmJi4uLiBm
cykgeworICAgICAgICAgIHVzaW5nIHJlc3VsdCA9IG1wYXJrOjpsaWI6OmFycmF5PG1wYXJrOjps
aWI6OmNvbW1vbl90eXBlX3Q8bXBhcms6OmxpYjo6ZGVjYXlfdDxGcz4uLi4+LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mLi4uKEZzKT47CisgICAgICAgICAgcmV0
dXJuIHZpc2l0X3Zpc2l0b3JfcmV0dXJuX3R5cGVfY2hlY2s8bXBhcms6OmxpYjo6ZGVjYXlfdDxG
cz4uLi4+KCksCisgICAgICAgICAgICAgICAgIHJlc3VsdHt7bXBhcms6OmxpYjo6Zm9yd2FyZDxG
cz4oZnMpLi4ufX07CisgICAgICAgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgs
dHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX2JhY2t1
cF9zdG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1
ZW5jZTxfSW5kaWNlcy4uLj4gPgotewotICAgIHR5cGVkZWYgdm9pZCAoKl9fbW92ZV9mdW5jX3R5
cGUpKF9TdG9yYWdlICogX19kZXN0LF9TdG9yYWdlJiBfX3NvdXJjZSk7Ci0gICAgdHlwZWRlZiB2
b2lkICgqX19kZXN0cm95X2Z1bmNfdHlwZSkoX1N0b3JhZ2UgKiBfX29iaik7Ci0gICAgCi0gICAg
dGVtcGxhdGU8c2l6ZV90IF9JbmRleD4KLSAgICBzdHJ1Y3QgX19oZWxwZXJ7Ci0gICAgICAgIHR5
cGVkZWYgX19iYWNrdXBfc3RvcmFnZV9vcHM8X0luZGV4LF9NYXNrSW5kZXgsX1N0b3JhZ2U+IF9f
b3BzOwotICAgIH07CisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAg
ICAgc3RydWN0IGRpc3BhdGNoZXIgeworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0
eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgICBzdHJ1Y3QgaW1wbCB7CisgICAgICAgICAgICBpbmxp
bmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIGRpc3BhdGNoKEYgZiwgVnMuLi4gdnMp
CisgICAgICAgICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKG1wYXJrOjpsaWI6Omludm9rZSgK
KyAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEY+KGYpLAorICAgICAgICAgICAgICAgICAg
YWNjZXNzOjpiYXNlOjpnZXRfYWx0PElzPihzdGF0aWNfY2FzdDxWcz4odnMpKS4uLikpCisgICAg
ICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgdHlw
ZW5hbWUuLi4gVnMsIHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBBVVRPIG1ha2VfZGlzcGF0Y2gobXBhcms6OmxpYjo6aW5kZXhfc2VxdWVuY2U8SXMu
Li4+KQorICAgICAgICAgIEFVVE9fUkVUVVJOKCZkaXNwYXRjaGVyPElzLi4uPjo6dGVtcGxhdGUg
aW1wbDxGLCBWcy4uLj46OmRpc3BhdGNoKQorCisgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVf
dCBJLCB0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBWcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBj
b25zdGV4cHIgQVVUTyBtYWtlX2ZkaWFnb25hbF9pbXBsKCkKKyAgICAgICAgICBBVVRPX1JFVFVS
TihtYWtlX2Rpc3BhdGNoPEYsIFZzLi4uPigKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aW5k
ZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6aW5kZXhlZF90eXBlPEksIFZzPjo6dmFsdWUuLi4+e30p
KQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGLCB0eXBlbmFtZS4uLiBWcywgc3RkOjpz
aXplX3QuLi4gSXM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIEFVVE8gbWFrZV9m
ZGlhZ29uYWxfaW1wbCgKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElz
Li4uPikKKyAgICAgICAgICBBVVRPX1JFVFVSTihtYWtlX2ZhcnJheShtYWtlX2ZkaWFnb25hbF9p
bXBsPElzLCBGLCBWcy4uLj4oKS4uLikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYs
IHR5cGVuYW1lIFYsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0
ZXhwciAvKiBhdXRvICogKi8gYXV0byBtYWtlX2ZkaWFnb25hbCgpCisgICAgICAgICAgICAtPiBk
ZWNsdHlwZShtYWtlX2ZkaWFnb25hbF9pbXBsPEYsIFYsIFZzLi4uPigKKyAgICAgICAgICAgICAg
ICBtcGFyazo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8Vj46
OnNpemUoKT57fSkpIHsKKyAgICAgICAgICBzdGF0aWNfYXNzZXJ0KG1wYXJrOjpsaWI6OmFsbDwo
bXBhcms6OmxpYjo6ZGVjYXlfdDxWPjo6c2l6ZSgpID09CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKSkuLi4+Ojp2YWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICJhbGwgb2YgdGhlIHZhcmlhbnRzIG11c3QgYmUgdGhl
IHNhbWUgc2l6ZS4iKTsKKyAgICAgICAgICByZXR1cm4gbWFrZV9mZGlhZ29uYWxfaW1wbDxGLCBW
LCBWcy4uLj4oCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6Om1ha2VfaW5kZXhfc2VxdWVuY2U8
bXBhcms6OmxpYjo6ZGVjYXlfdDxWPjo6c2l6ZSgpPnt9KTsKKyAgICAgICAgfQogCi0gICAgc3Rh
dGljIGNvbnN0IF9fbW92ZV9mdW5jX3R5cGUgX19tb3ZlX29wc1tzaXplb2YuLi4oX0luZGljZXMp
XTsKLSAgICBzdGF0aWMgY29uc3QgX19kZXN0cm95X2Z1bmNfdHlwZSBfX2Rlc3Ryb3lfb3BzW3Np
emVvZi4uLihfSW5kaWNlcyldOwotfTsKLQotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgs
dHlwZW5hbWUgX1N0b3JhZ2UscHRyZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1l
IF9fYmFja3VwX3N0b3JhZ2Vfb3BfdGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2lu
ZGV4X3NlcXVlbmNlPF9JbmRpY2VzLi4uPiA+OjpfX21vdmVfZnVuY190eXBlCi1fX2JhY2t1cF9z
dG9yYWdlX29wX3RhYmxlPAotICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5j
ZTxfSW5kaWNlcy4uLj4gPjo6X19tb3ZlX29wc1sKLSAgICAgICAgc2l6ZW9mLi4uKF9JbmRpY2Vz
KV09ewotICAgICAgICAmX19oZWxwZXI8X0luZGljZXM+OjpfX29wczo6X19tb3ZlX2NvbnN0cnVj
dF9mdW5jLi4uCi0gICAgfTsKKyNpZmRlZiBNUEFSS19SRVRVUk5fVFlQRV9ERURVQ1RJT04KKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzLCBzdGQ6OnNpemVfdC4u
LiBJcz4KKyAgICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgYXV0byBtYWtlX2ZtYXRyaXhf
aW1wbCgKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uPiBpcykg
eworICAgICAgICAgIHJldHVybiBtYWtlX2Rpc3BhdGNoPEYsIFZzLi4uPihpcyk7CisgICAgICAg
IH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9NYXNrSW5kZXgsdHlwZW5hbWUgX1N0b3JhZ2UscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLWNvbnN0IHR5cGVuYW1lIF9fYmFja3VwX3N0b3JhZ2Vfb3Bf
dGFibGU8Ci0gICAgX01hc2tJbmRleCxfU3RvcmFnZSxfX2luZGV4X3NlcXVlbmNlPF9JbmRpY2Vz
Li4uPiA+OjpfX2Rlc3Ryb3lfZnVuY190eXBlCi1fX2JhY2t1cF9zdG9yYWdlX29wX3RhYmxlPAot
ICAgIF9NYXNrSW5kZXgsX1N0b3JhZ2UsX19pbmRleF9zZXF1ZW5jZTxfSW5kaWNlcy4uLj4gPjo6
X19kZXN0cm95X29wc1sKLSAgICBzaXplb2YuLi4oX0luZGljZXMpXT17Ci0gICAgICAgICZfX2hl
bHBlcjxfSW5kaWNlcz46Ol9fb3BzOjpfX2Rlc3Ryb3lfZnVuYy4uLgotICAgIH07CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGLAorICAgICAgICAgICAgICAgICAgdHlwZW5hbWUuLi4gVnMs
CisgICAgICAgICAgICAgICAgICBzdGQ6OnNpemVfdC4uLiBJcywKKyAgICAgICAgICAgICAgICAg
IHN0ZDo6c2l6ZV90Li4uIEpzLAorICAgICAgICAgICAgICAgICAgdHlwZW5hbWUuLi4gTHM+Cisg
ICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIGF1dG8gbWFrZV9mbWF0cml4X2ltcGwoCisg
ICAgICAgICAgICBtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4sIG1wYXJrOjpsaWI6
OmluZGV4X3NlcXVlbmNlPEpzLi4uPiwgTHMuLi4gbHMpIHsKKyAgICAgICAgICByZXR1cm4gbWFr
ZV9mYXJyYXkobWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAgICAgICBtcGFy
azo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLiwgSnM+e30sIGxzLi4uKS4uLik7CisgICAgICAg
IH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fYmFja3VwX3N0b3JhZ2V7Ci0gICAgdHlwZWRlZiBfX3ZhcmlhbnRfZGF0YTxfVHlwZXMu
Li4+IF9fc3RvcmFnZV90eXBlOwotCi0gICAgdHlwZWRlZiBfX2JhY2t1cF9zdG9yYWdlX29wX3Rh
YmxlPAotICAgICAgICBfSW5kZXgsX19zdG9yYWdlX3R5cGUsdHlwZW5hbWUgX190eXBlX2luZGlj
ZXM8X1R5cGVzLi4uPjo6X190eXBlPgotICAgIF9fb3BfdGFibGVfdHlwZTsKLQotICAgIHB0cmRp
ZmZfdCBfX2JhY2t1cF9pbmRleDsKLSAgICBfX3N0b3JhZ2VfdHlwZSYgX19saXZlX3N0b3JhZ2U7
Ci0gICAgX19zdG9yYWdlX3R5cGUgX19iYWNrdXA7Ci0KLSAgICBfX2JhY2t1cF9zdG9yYWdlKHB0
cmRpZmZfdCBfX2xpdmVfaW5kZXhfLF9fc3RvcmFnZV90eXBlJiBfX2xpdmVfc3RvcmFnZV8pOgot
ICAgICAgICBfX2JhY2t1cF9pbmRleChfX2xpdmVfaW5kZXhfKSxfX2xpdmVfc3RvcmFnZShfX2xp
dmVfc3RvcmFnZV8pewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAgICAg
ICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAg
ICAgICAgICZfX2JhY2t1cCxfX2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgICAgICBfX29wX3RhYmxl
X3R5cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZf
X2xpdmVfc3RvcmFnZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdm9pZCBfX2Rlc3Ryb3koKXsK
LSAgICAgICAgaWYoX19iYWNrdXBfaW5kZXg+PTApCi0gICAgICAgICAgICBfX29wX3RhYmxlX3R5
cGU6Ol9fZGVzdHJveV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAgICAgICAgICAgICZfX2Jh
Y2t1cCk7Ci0gICAgICAgIF9fYmFja3VwX2luZGV4PS0xOwotICAgIH0KLSAgICAKLSAgICB+X19i
YWNrdXBfc3RvcmFnZSgpewotICAgICAgICBpZihfX2JhY2t1cF9pbmRleD49MCl7Ci0gICAgICAg
ICAgICBfX29wX3RhYmxlX3R5cGU6Ol9fbW92ZV9vcHNbX19iYWNrdXBfaW5kZXhdKAotICAgICAg
ICAgICAgICAgICZfX2xpdmVfc3RvcmFnZSxfX2JhY2t1cCk7Ci0gICAgICAgICAgICBfX2Rlc3Ry
b3koKTsKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5cGVuYW1lLi4uIFZzPgorICAg
ICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBhdXRvIG1ha2VfZm1hdHJpeCgpIHsKKyAgICAg
ICAgICByZXR1cm4gbWFrZV9mbWF0cml4X2ltcGw8RiwgVnMuLi4+KAorICAgICAgICAgICAgICBt
cGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTw+e30sCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
Om1ha2VfaW5kZXhfc2VxdWVuY2U8bXBhcms6OmxpYjo6ZGVjYXlfdDxWcz46OnNpemUoKT57fS4u
Lik7CiAgICAgICAgIH0KLSAgICB9Ci19OworI2Vsc2UKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEYsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBzdHJ1Y3QgbWFrZV9mbWF0cml4X2ltcGwg
eworICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4KKyAgICAgICAgICBzdHJ1Y3QgaW1w
bDsKKworICAgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcz4KKyAgICAgICAgICBz
dHJ1Y3QgaW1wbDxtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj4+IHsKKyAgICAgICAg
ICAgIGlubGluZSBjb25zdGV4cHIgQVVUTyBvcGVyYXRvcigpKCkgY29uc3QKKyAgICAgICAgICAg
ICAgQVVUT19SRVRVUk4oCisgICAgICAgICAgICAgICAgICBtYWtlX2Rpc3BhdGNoPEYsIFZzLi4u
PihtcGFyazo6bGliOjppbmRleF9zZXF1ZW5jZTxJcy4uLj57fSkpCisgICAgICAgICAgfTsKKwor
ICAgICAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdC4uLiBJcywgc3RkOjpzaXplX3QuLi4gSnMs
IHR5cGVuYW1lLi4uIExzPgorICAgICAgICAgIHN0cnVjdCBpbXBsPG1wYXJrOjpsaWI6OmluZGV4
X3NlcXVlbmNlPElzLi4uPiwKKyAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjppbmRl
eF9zZXF1ZW5jZTxKcy4uLj4sCisgICAgICAgICAgICAgICAgICAgICAgTHMuLi4+IHsKKyAgICAg
ICAgICAgIGlubGluZSBjb25zdGV4cHIgQVVUTyBvcGVyYXRvcigpKCkgY29uc3QKKyAgICAgICAg
ICAgICAgQVVUT19SRVRVUk4obWFrZV9mYXJyYXkoCisgICAgICAgICAgICAgICAgICBpbXBsPG1w
YXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPElzLi4uLCBKcz4sIExzLi4uPnt9KCkuLi4pKQorICAg
ICAgICAgIH07CisgICAgICAgIH07CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEYsIHR5
cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBBVVRPIG1ha2Vf
Zm1hdHJpeCgpCisgICAgICAgICAgQVVUT19SRVRVUk4oCisgICAgICAgICAgICAgIHR5cGVuYW1l
IG1ha2VfZm1hdHJpeF9pbXBsPEYsIFZzLi4uPjo6dGVtcGxhdGUgaW1wbDwKKyAgICAgICAgICAg
ICAgICAgIG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNlPD4sCisgICAgICAgICAgICAgICAgICBt
cGFyazo6bGliOjptYWtlX2luZGV4X3NlcXVlbmNlPG1wYXJrOjpsaWI6OmRlY2F5X3Q8VnM+Ojpz
aXplKCk+Li4uPnt9KCkpCisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBp
bmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNp
emVfdCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAg
ICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICBhdChtYWtlX2ZkaWFnb25h
bDxWaXNpdG9yICYmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsdHlwZShh
c19iYXNlKG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKSkpLi4uPigpLAorICAgICAgICAgICAg
ICAgICBpbmRleCkobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFzX2Jhc2UobXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpKS4u
LikpCisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZz
PgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2Fs
dChWaXNpdG9yICYmdmlzaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVnMgJiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVU
T19SRVRVUk4oCisgICAgICAgICAgICAgIGF0KG1ha2VfZm1hdHJpeDxWaXNpdG9yICYmLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoYXNfYmFzZShtcGFyazo6bGliOjpm
b3J3YXJkPFZzPih2cykpKS4uLj4oKSwKKyAgICAgICAgICAgICAgICAgdnMuaW5kZXgoKS4uLiko
bXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNfYmFzZShtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykpLi4uKSkK
KyAgICAgIH07CisKKyAgICAgIHN0cnVjdCB2YXJpYW50IHsKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZhbHVlcz4KKyAg
ICAgICAgc3RydWN0IHZpc2l0X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjayB7CisgICAgICAgICAg
c3RhdGljX2Fzc2VydCgKKyAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52b2NhYmxlPFZp
c2l0b3IsIFZhbHVlcy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAiYG1wYXJrOjp2aXNpdGAg
cmVxdWlyZXMgdGhlIHZpc2l0b3IgdG8gYmUgZXhoYXVzdGl2ZS4iKTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfSGVhZCxfUmVzdC4uLj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFs
dWU9c3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJiBfX2FsbF9tb3Zl
X2NvbnN0cnVjdGlibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07CisjaWZkZWYgX01TQ19WRVIKKyNw
cmFnbWEgd2FybmluZyhwdXNoKQorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAwKQorI2Vu
ZGlmCisgICAgICAgICAgaW5saW5lIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIG9wZXJhdG9yKCko
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmFsdWVzICYmLi4uIHZhbHVlcykgY29uc3QKKyAgICAgICAgICAgIERF
Q0xUWVBFX0FVVE9fUkVUVVJOKG1wYXJrOjpsaWI6Omludm9rZShtcGFyazo6bGliOjpmb3J3YXJk
PFZpc2l0b3I+KHZpc2l0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWYWx1ZXM+KHZhbHVlcykuLi4pKQorI2lmZGVm
IF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCisgICAgICAgIH07CiAKLXRl
bXBsYXRlPD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRy
dWVfdHlwZXt9OworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvcj4KKyAgICAgICAg
c3RydWN0IHZhbHVlX3Zpc2l0b3IgeworICAgICAgICAgIFZpc2l0b3IgJiZ2aXNpdG9yXzsKKwor
ICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBbHRzPgorICAgICAgICAgIGlubGluZSBj
b25zdGV4cHIgREVDTFRZUEVfQVVUTyBvcGVyYXRvcigpKEFsdHMgJiYuLi4gYWx0cykgY29uc3QK
KyAgICAgICAgICAgIERFQ0xUWVBFX0FVVE9fUkVUVVJOKAorICAgICAgICAgICAgICAgIHZpc2l0
X2V4aGF1c3RpdmVfdmlzaXRvcl9jaGVjazwKKyAgICAgICAgICAgICAgICAgICAgVmlzaXRvciwK
KyAgICAgICAgICAgICAgICAgICAgZGVjbHR5cGUoKG1wYXJrOjpsaWI6OmZvcndhcmQ8QWx0cz4o
YWx0cykudmFsdWUpKS4uLj57fSgKKyAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9y
d2FyZDxWaXNpdG9yPih2aXNpdG9yXyksCisgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8QWx0cz4oYWx0cykudmFsdWUuLi4pKQorICAgICAgICB9OworCisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhw
ciBBVVRPIG1ha2VfdmFsdWVfdmlzaXRvcihWaXNpdG9yICYmdmlzaXRvcikKKyAgICAgICAgICBB
VVRPX1JFVFVSTih2YWx1ZV92aXNpdG9yPFZpc2l0b3I+e21wYXJrOjpsaWI6OmZvcndhcmQ8Vmlz
aXRvcj4odmlzaXRvcil9KQorCisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAgICAgICBpbmxpbmUgc3RhdGljIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X2FsdF9hdChzdGQ6OnNpemVfdCBpbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FV
VE9fUkVUVVJOKAorICAgICAgICAgICAgICBiYXNlOjp2aXNpdF9hbHRfYXQoaW5kZXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+
KHZpc2l0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6
Zm9yd2FyZDxWcz4odnMpLmltcGxfLi4uKSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHBy
IERFQ0xUWVBFX0FVVE8gdmlzaXRfYWx0KFZpc2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWcyAmJi4uLiB2cykK
KyAgICAgICAgICBERUNMVFlQRV9BVVRPX1JFVFVSTihiYXNlOjp2aXNpdF9hbHQobXBhcms6Omxp
Yjo6Zm9yd2FyZDxWaXNpdG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLmltcGxfLi4u
KSkKKworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+
CisgICAgICAgIGlubGluZSBzdGF0aWMgY29uc3RleHByIERFQ0xUWVBFX0FVVE8gdmlzaXRfdmFs
dWVfYXQoc3RkOjpzaXplX3QgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaXRvciAmJnZpc2l0b3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVnMg
JiYuLi4gdnMpCisgICAgICAgICAgREVDTFRZUEVfQVVUT19SRVRVUk4oCisgICAgICAgICAgICAg
IHZpc2l0X2FsdF9hdChpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfdmFs
dWVfdmlzaXRvcihtcGFyazo6bGliOjpmb3J3YXJkPFZpc2l0b3I+KHZpc2l0b3IpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8VnM+KHZzKS4uLikpCisK
KyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFZpc2l0b3IsIHR5cGVuYW1lLi4uIFZzPgorICAg
ICAgICBpbmxpbmUgc3RhdGljIGNvbnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0X3ZhbHVlKFZp
c2l0b3IgJiZ2aXNpdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZzICYmLi4uIHZzKQorICAgICAgICAgIERFQ0xUWVBFX0FVVE9f
UkVUVVJOKAorICAgICAgICAgICAgICB2aXNpdF9hbHQobWFrZV92YWx1ZV92aXNpdG9yKG1wYXJr
OjpsaWI6OmZvcndhcmQ8VmlzaXRvcj4odmlzaXRvcikpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxWcz4odnMpLi4uKSkKKyAgICAgIH07CisKKyAgICB9ICAv
LyBuYW1lc3BhY2UgdmlzaXRhdGlvbgorCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEluZGV4
LCB0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBhbHQgeworICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9
IFQ7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlOworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIGFsdChpbl9wbGFj
ZV90LCBBcmdzICYmLi4uIGFyZ3MpCisgICAgICAgICAgOiB2YWx1ZShtcGFyazo6bGliOjpmb3J3
YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
cG9wKQorI2VuZGlmCiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVz
dD4KLXN0cnVjdCBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X0hlYWQsX1Jlc3QuLi4+Ci17Ci0gICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPF9IZWFk
Pjo6dmFsdWUgJiYgX19hbGxfbW92ZV9hc3NpZ25hYmxlPF9SZXN0Li4uPjo6dmFsdWU7Ci19Owor
ICAgICAgVCB2YWx1ZTsKKyAgICB9OwogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfbW92ZV9h
c3NpZ25hYmxlPD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKKyAgICB0ZW1wbGF0ZSA8VHJhaXQg
RGVzdHJ1Y3RpYmxlVHJhaXQsIHN0ZDo6c2l6ZV90IEluZGV4LCB0eXBlbmFtZS4uLiBUcz4KKyAg
ICB1bmlvbiByZWN1cnNpdmVfdW5pb247CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+
Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxlOworICAgIHRlbXBsYXRlIDxUcmFpdCBEZXN0
cnVjdGlibGVUcmFpdCwgc3RkOjpzaXplX3QgSW5kZXg+CisgICAgdW5pb24gcmVjdXJzaXZlX3Vu
aW9uPERlc3RydWN0aWJsZVRyYWl0LCBJbmRleD4ge307CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9I
ZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X0hl
YWQsX1Jlc3QuLi4+Ci17Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlPXN0ZDo6aXNf
Y29weV9hc3NpZ25hYmxlPF9IZWFkPjo6dmFsdWUgJiYgX19hbGxfY29weV9hc3NpZ25hYmxlPF9S
ZXN0Li4uPjo6dmFsdWU7Ci19OworI2RlZmluZSBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklP
TihkZXN0cnVjdGlibGVfdHJhaXQsIGRlc3RydWN0b3IpICAgICAgXAorICB0ZW1wbGF0ZSA8c3Rk
OjpzaXplX3QgSW5kZXgsIHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAg
ICAgXAorICB1bmlvbiByZWN1cnNpdmVfdW5pb248ZGVzdHJ1Y3RpYmxlX3RyYWl0LCBJbmRleCwg
VCwgVHMuLi4+IHsgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlubGlu
ZSBleHBsaWNpdCBjb25zdGV4cHIgcmVjdXJzaXZlX3VuaW9uKHZhbHVlbGVzc190KSBub2V4Y2Vw
dCAgICAgICAgXAorICAgICAgICA6IGR1bW15X3t9IHt9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBBcmdzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGlubGluZSBleHBsaWNpdCBjb25zdGV4cHIgcmVjdXJzaXZl
X3VuaW9uKGluX3BsYWNlX2luZGV4X3Q8MD4sICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MgJiYuLi4gYXJncykgICAgICAgICAgICAg
XAorICAgICAgICA6IGhlYWRfKGluX3BsYWNlX3R7fSwgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLikge30gICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0
ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwgdHlwZW5hbWUuLi4gQXJncz4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHJlY3Vyc2l2ZV91
bmlvbihpbl9wbGFjZV9pbmRleF90PEk+LCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmdzICYmLi4uIGFyZ3MpICAgICAgICAgICAgIFwK
KyAgICAgICAgOiB0YWlsXyhpbl9wbGFjZV9pbmRleF90PEkgLSAxPnt9LCBtcGFyazo6bGliOjpm
b3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVj
dXJzaXZlX3VuaW9uKGNvbnN0IHJlY3Vyc2l2ZV91bmlvbiAmKSA9IGRlZmF1bHQ7ICAgICAgICAg
ICAgICAgICAgICBcCisgICAgcmVjdXJzaXZlX3VuaW9uKHJlY3Vyc2l2ZV91bmlvbiAmJikgPSBk
ZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgZGVzdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVjdXJzaXZlX3Vu
aW9uICZvcGVyYXRvcj0oY29uc3QgcmVjdXJzaXZlX3VuaW9uICYpID0gZGVmYXVsdDsgICAgICAg
ICBcCisgICAgcmVjdXJzaXZlX3VuaW9uICZvcGVyYXRvcj0ocmVjdXJzaXZlX3VuaW9uICYmKSA9
IGRlZmF1bHQ7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcHJpdmF0
ZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgY2hhciBkdW1teV87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYWx0PEluZGV4LCBUPiBoZWFkXzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
cmVjdXJzaXZlX3VuaW9uPGRlc3RydWN0aWJsZV90cmFpdCwgSW5kZXggKyAxLCBUcy4uLj4gdGFp
bF87ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZnJpZW5kIHN0cnVjdCBh
Y2Nlc3M6OnJlY3Vyc2l2ZV91bmlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgIH0KKworICAgIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9OKFRyYWl0OjpUcml2aWFs
bHlBdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfnJlY3Vyc2l2
ZV91bmlvbigpID0gZGVmYXVsdDspOworICAgIE1QQVJLX1ZBUklBTlRfUkVDVVJTSVZFX1VOSU9O
KFRyYWl0OjpBdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfnJl
Y3Vyc2l2ZV91bmlvbigpIHt9KTsKKyAgICBNUEFSS19WQVJJQU5UX1JFQ1VSU0lWRV9VTklPTihU
cmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfnJl
Y3Vyc2l2ZV91bmlvbigpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5UX1JFQ1VS
U0lWRV9VTklPTgorCisgICAgdXNpbmcgaW5kZXhfdCA9IHVuc2lnbmVkIGludDsKKworICAgIHRl
bXBsYXRlIDxUcmFpdCBEZXN0cnVjdGlibGVUcmFpdCwgdHlwZW5hbWUuLi4gVHM+CisgICAgY2xh
c3MgYmFzZSB7CisgICAgICBwdWJsaWM6CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHBy
IGJhc2UodmFsdWVsZXNzX3QgdGFnKSBub2V4Y2VwdAorICAgICAgICAgIDogZGF0YV8odGFnKSwg
aW5kZXhfKHN0YXRpY19jYXN0PGluZGV4X3Q+KC0xKSkge30KKworICAgICAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBpbmxpbmUgZXhwbGljaXQgY29u
c3RleHByIGJhc2UoaW5fcGxhY2VfaW5kZXhfdDxJPiwgQXJncyAmJi4uLiBhcmdzKQorICAgICAg
ICAgIDogZGF0YV8oaW5fcGxhY2VfaW5kZXhfdDxJPnt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKSwKKyAgICAgICAgICAgIGluZGV4XyhJKSB7fQorCisgICAgICBpbmxpbmUg
Y29uc3RleHByIGJvb2wgdmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpIGNvbnN0IG5vZXhjZXB0IHsK
KyAgICAgICAgcmV0dXJuIGluZGV4XyA9PSBzdGF0aWNfY2FzdDxpbmRleF90PigtMSk7CisgICAg
ICB9CisKKyAgICAgIGlubGluZSBjb25zdGV4cHIgc3RkOjpzaXplX3QgaW5kZXgoKSBjb25zdCBu
b2V4Y2VwdCB7CisgICAgICAgIHJldHVybiB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgPyB2YXJp
YW50X25wb3MgOiBpbmRleF87CisgICAgICB9CisKKyAgICAgIHByb3RlY3RlZDoKKyAgICAgIHVz
aW5nIGRhdGFfdCA9IHJlY3Vyc2l2ZV91bmlvbjxEZXN0cnVjdGlibGVUcmFpdCwgMCwgVHMuLi4+
OworCisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBiYXNlICZhc19iYXNlKGJhc2UgJmIp
IHsgcmV0dXJuIGI7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGJhc2Ug
JmFzX2Jhc2UoY29uc3QgYmFzZSAmYikgeyByZXR1cm4gYjsgfQorICAgICAgZnJpZW5kIGlubGlu
ZSBjb25zdGV4cHIgYmFzZSAmJmFzX2Jhc2UoYmFzZSAmJmIpIHsgcmV0dXJuIG1wYXJrOjpsaWI6
Om1vdmUoYik7IH0KKyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGNvbnN0IGJhc2UgJiZh
c19iYXNlKGNvbnN0IGJhc2UgJiZiKSB7IHJldHVybiBtcGFyazo6bGliOjptb3ZlKGIpOyB9CisK
KyAgICAgIGZyaWVuZCBpbmxpbmUgY29uc3RleHByIGRhdGFfdCAmZGF0YShiYXNlICZiKSB7IHJl
dHVybiBiLmRhdGFfOyB9CisgICAgICBmcmllbmQgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBkYXRh
X3QgJmRhdGEoY29uc3QgYmFzZSAmYikgeyByZXR1cm4gYi5kYXRhXzsgfQorICAgICAgZnJpZW5k
IGlubGluZSBjb25zdGV4cHIgZGF0YV90ICYmZGF0YShiYXNlICYmYikgeyByZXR1cm4gbXBhcms6
OmxpYjo6bW92ZShiKS5kYXRhXzsgfQorICAgICAgZnJpZW5kIGlubGluZSBjb25zdGV4cHIgY29u
c3QgZGF0YV90ICYmZGF0YShjb25zdCBiYXNlICYmYikgeyByZXR1cm4gbXBhcms6OmxpYjo6bW92
ZShiKS5kYXRhXzsgfQogCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19hbGxfY29weV9hc3NpZ25hYmxl
PD46Ci0gICAgc3RkOjp0cnVlX3R5cGV7fTsKLQotbmFtZXNwYWNlIF9fc3dhcF90ZXN0X2RldGFp
bHsKLXVzaW5nIHN0ZDo6c3dhcDsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX090aGVyPgotc3RydWN0
IF9fc3dhcF9yZXN1bHR7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWU+Ci1zdGF0aWMgY2hhciBfX3Rl
c3QoLi4uKTsKLXRlbXBsYXRlIDx0eXBlbmFtZSBfT3RoZXI+Ci1zdGF0aWMgc3RkOjpwYWlyPGNo
YXIsIHN0ZDo6cGFpcjxjaGFyLCBfX3N3YXBfcmVzdWx0PGRlY2x0eXBlKAotICAgIHN3YXAoc3Rk
OjpkZWNsdmFsPF9PdGhlciAmPigpLHN0ZDo6ZGVjbHZhbDxfT3RoZXIgJj4oKSkpPj4+Ci1fX3Rl
c3QoX090aGVyICopOwotfQorICAgICAgaW5saW5lIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpzaXpl
X3Qgc2l6ZSgpIHsgcmV0dXJuIHNpemVvZi4uLihUcyk7IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IF9UeXBlPiBzdHJ1Y3QgX19pc19zd2FwcGFibGUgewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCB2YWx1ZSA9Ci0gICAgICAgIHNpemVvZihfX3N3YXBfdGVzdF9kZXRhaWw6Ol9fdGVzdDxfVHlw
ZT4oMCkpICE9IDE7Ci19OworICAgICAgZGF0YV90IGRhdGFfOworICAgICAgaW5kZXhfdCBpbmRl
eF87CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19hbGxfc3dhcHBh
YmxlOworICAgICAgZnJpZW5kIHN0cnVjdCBhY2Nlc3M6OmJhc2U7CisgICAgICBmcmllbmQgc3Ry
dWN0IHZpc2l0YXRpb246OmJhc2U7CisgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQs
dHlwZW5hbWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fYWxsX3N3YXBwYWJsZTxfSGVhZCxfUmVzdC4u
Lj4KLXsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9X19pc19zd2FwcGFibGU8X0hl
YWQ+Ojp2YWx1ZSAmJiBfX2FsbF9zd2FwcGFibGU8X1Jlc3QuLi4+Ojp2YWx1ZTsKLX07CisgICAg
c3RydWN0IGR0b3IgeworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNw
cmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDEwMCkKKyNlbmRpZgorICAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEFsdD4KKyAgICAgIGlubGluZSB2b2lkIG9wZXJhdG9yKCkoQWx0ICZhbHQpIGNvbnN0
IG5vZXhjZXB0IHsgYWx0Ln5BbHQoKTsgfQorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5p
bmcocG9wKQorI2VuZGlmCisgICAgfTsKIAotdGVtcGxhdGU8Pgotc3RydWN0IF9fYWxsX3N3YXBw
YWJsZTw+OgotICAgIHN0ZDo6dHJ1ZV90eXBle307Ci0KLXRlbXBsYXRlPGJvb2wgX01vdmVDb25z
dHJ1Y3RpYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X21vdmVfY29uc3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5h
bWUgLi4uIF9SZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9p
bXBsPHRydWUsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1
ZT1ub2V4Y2VwdChfSGVhZChzdGQ6OmRlY2x2YWw8X0hlYWQmJj4oKSkpICYmIF9fbm9leGNlcHRf
dmFyaWFudF9tb3ZlX2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0K
LXRlbXBsYXRlPD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9jb25zdHJ1Y3RfaW1w
bDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X21v
dmVfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X21vdmVfY29uc3RydWN0X2ltcGw8X19h
bGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4uLj4KLXt9Owot
Ci10ZW1wbGF0ZTxib29sIF9Nb3ZlQXNzaWduYWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBse307Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBfSGVhZCwgdHlwZW5hbWUuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X21vdmVfYXNzaWduX2ltcGw8dHJ1ZSwgX0hlYWQsIF9SZXN0Li4uPiB7Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNz
aWduYWJsZTxfSGVhZD46OnZhbHVlICYmCi0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8X0hlYWQ+Ojp2YWx1ZSAmJgotICAgICAgICBfX25vZXhjZXB0X3ZhcmlhbnRf
bW92ZV9hc3NpZ25faW1wbDx0cnVlLCBfUmVzdC4uLj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8
Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPHRydWU+ewotICAg
IHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lLi4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ24KLSAg
ICA6IF9fbm9leGNlcHRfdmFyaWFudF9tb3ZlX2Fzc2lnbl9pbXBsPAotICAgICAgICAgIF9fYWxs
X21vdmVfYXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICBfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsCi0gICAgICAgICAgX1R5cGVz
Li4uPiB7fTsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE5MTAKKyNkZWZp
bmUgSU5IRVJJVElOR19DVE9SKHR5cGUsIGJhc2UpICAgICAgICAgICAgICAgXAorICB0ZW1wbGF0
ZSA8dHlwZW5hbWUuLi4gQXJncz4gICAgICAgICAgICAgICAgICAgICBcCisgIGlubGluZSBleHBs
aWNpdCBjb25zdGV4cHIgdHlwZShBcmdzICYmLi4uIGFyZ3MpIFwKKyAgICAgIDogYmFzZShtcGFy
azo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorI2Vsc2UKKyNkZWZpbmUgSU5IRVJJ
VElOR19DVE9SKHR5cGUsIGJhc2UpIHVzaW5nIGJhc2U6OmJhc2U7CisjZW5kaWYKIAotdGVtcGxh
dGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU7
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6OmRlc3RydWN0
aWJsZV90cmFpdD4KKyAgICBjbGFzcyBkZXN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBf
SGVhZCx0eXBlbmFtZSAuLi4gX1Jlc3Q+Ci1zdHJ1Y3QgX19hbGxfY29weV9jb25zdHJ1Y3RpYmxl
PF9IZWFkLF9SZXN0Li4uPgotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZT1zdGQ6
OmlzX2NvcHlfY29uc3RydWN0aWJsZTxfSGVhZD46OnZhbHVlICYmIF9fYWxsX2NvcHlfY29uc3Ry
dWN0aWJsZTxfUmVzdC4uLj46OnZhbHVlOwotfTsKKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9ERVNU
UlVDVE9SKGRlc3RydWN0aWJsZV90cmFpdCwgZGVmaW5pdGlvbiwgZGVzdHJveSkgXAorICB0ZW1w
bGF0ZSA8dHlwZW5hbWUuLi4gVHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIGNsYXNzIGRlc3RydWN0b3I8dHJhaXRzPFRzLi4uPiwgZGVzdHJ1Y3Rp
YmxlX3RyYWl0PiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGJhc2U8ZGVz
dHJ1Y3RpYmxlX3RyYWl0LCBUcy4uLj4geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHVzaW5nIHN1cGVyID0gYmFzZTxkZXN0cnVjdGlibGVfdHJhaXQsIFRzLi4uPjsgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIElOSEVSSVRJTkdfQ1RPUihkZXN0cnVjdG9yLCBzdXBlcikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGRlc3RydWN0b3IoY29uc3QgZGVzdHJ1Y3RvciAmKSA9IGRlZmF1bHQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvcihkZXN0cnVjdG9yICYmKSA9IGRl
ZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkZWZpbml0aW9u
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIGRlc3RydWN0b3IgJm9wZXJhdG9yPShjb25zdCBkZXN0cnVjdG9yICYpID0gZGVm
YXVsdDsgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJ1Y3RvciAmb3BlcmF0b3I9KGRlc3Ry
dWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZGVzdHJveSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfQorCisg
ICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAgICAgICBUcmFpdDo6VHJpdmlhbGx5QXZh
aWxhYmxlLAorICAgICAgICB+ZGVzdHJ1Y3RvcigpID0gZGVmYXVsdDssCisgICAgICAgIGlubGlu
ZSB2b2lkIGRlc3Ryb3koKSBub2V4Y2VwdCB7CisgICAgICAgICAgdGhpcy0+aW5kZXhfID0gc3Rh
dGljX2Nhc3Q8aW5kZXhfdD4oLTEpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRf
REVTVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OkF2YWlsYWJsZSwKKyAgICAgICAgfmRlc3RydWN0
b3IoKSB7IGRlc3Ryb3koKTsgfSwKKyAgICAgICAgaW5saW5lIHZvaWQgZGVzdHJveSgpIG5vZXhj
ZXB0IHsKKyAgICAgICAgICBpZiAoIXRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewor
ICAgICAgICAgICAgdmlzaXRhdGlvbjo6YmFzZTo6dmlzaXRfYWx0KGR0b3J7fSwgKnRoaXMpOwor
ICAgICAgICAgIH0KKyAgICAgICAgICB0aGlzLT5pbmRleF8gPSBzdGF0aWNfY2FzdDxpbmRleF90
PigtMSk7CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9ERVNUUlVDVE9SKAorICAg
ICAgICBUcmFpdDo6VW5hdmFpbGFibGUsCisgICAgICAgIH5kZXN0cnVjdG9yKCkgPSBkZWxldGU7
LAorICAgICAgICBpbmxpbmUgdm9pZCBkZXN0cm95KCkgbm9leGNlcHQgPSBkZWxldGU7KTsKKwor
I3VuZGVmIE1QQVJLX1ZBUklBTlRfREVTVFJVQ1RPUgorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFRyYWl0cz4KKyAgICBjbGFzcyBjb25zdHJ1Y3RvciA6IHB1YmxpYyBkZXN0cnVjdG9yPFRyYWl0
cz4geworICAgICAgdXNpbmcgc3VwZXIgPSBkZXN0cnVjdG9yPFRyYWl0cz47CisKKyAgICAgIHB1
YmxpYzoKKyAgICAgIElOSEVSSVRJTkdfQ1RPUihjb25zdHJ1Y3Rvciwgc3VwZXIpCisgICAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICBwcm90ZWN0ZWQ6CisjaWZuZGVmIE1QQVJL
X0dFTkVSSUNfTEFNQkRBUworICAgICAgc3RydWN0IGN0b3IgeworICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgTGhzQWx0LCB0eXBlbmFtZSBSaHNBbHQ+CisgICAgICAgIGlubGluZSB2b2lkIG9w
ZXJhdG9yKCkoTGhzQWx0ICZsaHNfYWx0LCBSaHNBbHQgJiZyaHNfYWx0KSBjb25zdCB7CisgICAg
ICAgICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9hbHQobGhzX2FsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFJoc0FsdD4ocmhzX2Fs
dCkudmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPD4KLXN0
cnVjdCBfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8PjoKLSAgICBzdGQ6OnRydWVfdHlwZXt9Owot
Ci10ZW1wbGF0ZTxib29sIF9Db3B5Q29uc3RydWN0aWJsZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgot
c3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBse307Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4KLXN0cnVjdCBfX25v
ZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9IZWFkLF9SZXN0
Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9bm9leGNlcHQoX0hlYWQoc3Rk
OjpkZWNsdmFsPF9IZWFkIGNvbnN0Jj4oKSkpICYmIF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9j
b3B5X2NvbnN0cnVjdF9pbXBsPHRydWUsX1Jlc3QuLi4+Ojp2YWx1ZTsKLX07Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0
cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0
X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92YXJpYW50X2NvbnN0X2NvcHlfY29uc3RydWN0
X2ltcGw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLF9UeXBlcy4u
Lj4KLXt9OwotCi10ZW1wbGF0ZTxib29sIF9Db3B5Tm9uX0NvbnN0cnVjdGlibGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLXN0cnVjdCBfX25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29u
c3RydWN0X2ltcGx7fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3Rf
aW1wbDx0cnVlLF9IZWFkLF9SZXN0Li4uPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFs
dWU9bm9leGNlcHQoX0hlYWQoc3RkOjpkZWNsdmFsPF9IZWFkJj4oKSkpICYmIF9fbm9leGNlcHRf
dmFyaWFudF9ub25fY29uc3RfY29weV9jb25zdHJ1Y3RfaW1wbDx0cnVlLF9SZXN0Li4uPjo6dmFs
dWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X25vbl9jb25z
dF9jb3B5X2NvbnN0cnVjdF9pbXBsPHRydWU+ewotICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
YWx1ZT10cnVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4uIF9UeXBlcz4KLXN0cnVjdCBf
X25vZXhjZXB0X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0OgotX19ub2V4Y2VwdF92
YXJpYW50X25vbl9jb25zdF9jb3B5X2NvbnN0cnVjdF9pbXBsPF9fYWxsX2NvcHlfY29uc3RydWN0
aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8Ym9vbCBf
U3dhcHBhYmxlLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50
X3N3YXBfaW1wbHt9OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgX0hlYWQsIHR5cGVuYW1lLi4uIF9S
ZXN0Pgotc3RydWN0IF9fbm9leGNlcHRfdmFyaWFudF9zd2FwX2ltcGw8dHJ1ZSwgX0hlYWQsIF9S
ZXN0Li4uPiB7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0KLSAgICAgICAgbm9l
eGNlcHQoc3dhcChzdGQ6OmRlY2x2YWw8X0hlYWQmPigpLHN0ZDo6ZGVjbHZhbDxfSGVhZCY+KCkp
KSAmJgotICAgICAgICBfX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPHRydWUsIF9SZXN0Li4u
Pjo6dmFsdWU7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJpYW50X3N3
YXBfaW1wbDx0cnVlPnsKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWU9dHJ1ZTsKLX07
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX19ub2V4Y2VwdF92YXJp
YW50X3N3YXA6Ci1fX25vZXhjZXB0X3ZhcmlhbnRfc3dhcF9pbXBsPF9fYWxsX3N3YXBwYWJsZTxf
VHlwZXMuLi4+Ojp2YWx1ZSxfVHlwZXMuLi4+Ci17fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgLi4u
IF9UeXBlcz4KLWNsYXNzIFZhcmlhbnQ6Ci0gICAgICAgIHByaXZhdGUgX192YXJpYW50X2Jhc2U8
Ci0gICAgVmFyaWFudDxfVHlwZXMuLi4+LF9fYWxsX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8X1R5
cGVzLi4uPjo6X192YWx1ZT4KLXsKLSAgICB0eXBlZGVmIF9fdmFyaWFudF9iYXNlPFZhcmlhbnQ8
X1R5cGVzLi4uPixfX2FsbF90cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPF9UeXBlcy4uLj46Ol9fdmFs
dWU+IF9fYmFzZV90eXBlOwotICAgIGZyaWVuZCBfX2Jhc2VfdHlwZTsKLSAgICBmcmllbmQgc3Ry
dWN0IF9fY29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVj
dCBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+OwotICAgIGZyaWVuZCBzdHJ1Y3QgX19t
b3ZlX2NvbnN0cnVjdF9vcF90YWJsZTxWYXJpYW50PjsKLSAgICBmcmllbmQgc3RydWN0IF9fbW92
ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD47Ci0gICAgZnJpZW5kIHN0cnVjdCBfX2Rlc3Ryb3lf
b3BfdGFibGU8VmFyaWFudD47Ci0gICAgCi0gICAgdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX1R5cGVzMj4KLSAgICBmcmllbmQgc3RydWN0IF9fdmFyaWFudF9hY2Nlc3Nv
cjsKLQotICAgIGZyaWVuZCBzdHJ1Y3QgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI7Ci0KLSAg
ICB0eXBlZGVmIF9fdmFyaWFudF9kYXRhPF9UeXBlcy4uLj4gX19zdG9yYWdlX3R5cGU7Ci0gICAg
X19zdG9yYWdlX3R5cGUgX19zdG9yYWdlOwotICAgIHR5cGVuYW1lIF9fZGlzY3JpbWluYXRvcl90
eXBlPHNpemVvZiAuLi4gKF9UeXBlcyk+OjpfX3R5cGUgX19pbmRleDsKLQotICAgIHRlbXBsYXRl
PHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIHNpemVfdCBfX2VtcGxhY2Vf
Y29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIG5ldygmX19zdG9yYWdlKSBf
X3N0b3JhZ2VfdHlwZSgKLSAgICAgICAgICAgIGluX3BsYWNlPF9JbmRleD4sc3RkOjpmb3J3YXJk
PF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgcmV0dXJuICBfSW5kZXg7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgX19kZXN0cm95X3NlbGYoKXsKLSAgICAgICAgaWYodmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBfX2Rlc3Ryb3lfb3BfdGFi
bGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyk7Ci0gICAgICAgIF9faW5kZXg9LTE7
Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBfX21vdmVfY29uc3RydWN0KFZhcmlhbnQmIF9f
b3RoZXIpewotICAgICAgICBwdHJkaWZmX3QgY29uc3QgX19vdGhlcl9pbmRleD1fX290aGVyLmlu
ZGV4KCk7Ci0gICAgICAgIGlmKF9fb3RoZXJfaW5kZXg9PS0xKQotICAgICAgICAgICAgcmV0dXJu
IC0xOwotICAgICAgICBfX21vdmVfY29uc3RydWN0X29wX3RhYmxlPFZhcmlhbnQ+OjpfX2FwcGx5
W19fb3RoZXJfaW5kZXhdKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIF9fb3RoZXIuX19kZXN0cm95
X3NlbGYoKTsKLSAgICAgICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQotCi0gICAgcHRy
ZGlmZl90IF9fY29weV9jb25zdHJ1Y3QoVmFyaWFudCBjb25zdCYgX19vdGhlcil7Ci0gICAgICAg
IHB0cmRpZmZfdCBjb25zdCBfX290aGVyX2luZGV4PV9fb3RoZXIuaW5kZXgoKTsKLSAgICAgICAg
aWYoX19vdGhlcl9pbmRleD09LTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIF9f
Y29weV9jb25zdHJ1Y3Rfb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbX19vdGhlcl9pbmRleF0o
dGhpcyxfX290aGVyKTsKLSAgICAgICAgcmV0dXJuIF9fb3RoZXJfaW5kZXg7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBf
X3JlcGxhY2VfY29uc3RydWN0KF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBfX3RoaXNf
dHlwZTsKLSAgICAgICAgX19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9faGVscGVyPAotICAg
ICAgICAgICAgX0luZGV4LAotICAgICAgICAgICAgX19zdG9yYWdlX25vdGhyb3dfY29uc3RydWN0
aWJsZTxfX3RoaXNfdHlwZSxfQXJncy4uLj46Ol9fdmFsdWUgfHwKLSAgICAgICAgICAgIChzaXpl
b2YuLi4oX1R5cGVzKT09MSksCi0gICAgICAgICAgICBfX3N0b3JhZ2Vfbm90aHJvd19tb3ZlX2Nv
bnN0cnVjdGlibGU8X190aGlzX3R5cGU+OjpfX3ZhbHVlLAotICAgICAgICAgICAgX19vdGhlcl9z
dG9yYWdlX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPAotICAgICAgICAgICAgICAgIF9JbmRl
eCxfVHlwZXMuLi4+OjpfX3ZhbHVlCi0gICAgICAgICAgICA+OjpfX3RyYW1wb2xpbmUoKnRoaXMs
c3RkOjpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxz
aXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fdHdvX3N0YWdlX3Jl
cGxhY2UoX0FyZ3MmJiAuLi4gX19hcmdzKXsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lu
ZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLSAgICAgICAgX192
YXJpYW50X2RhdGE8X190eXBlPiBfX2xvY2FsKAotICAgICAgICAgICAgaW5fcGxhY2U8MD4sc3Rk
Ojpmb3J3YXJkPF9BcmdzPihfX2FyZ3MpLi4uKTsKLSAgICAgICAgX19kZXN0cm95X3NlbGYoKTsK
LSAgICAgICAgX19lbXBsYWNlX2NvbnN0cnVjdDxfSW5kZXg+KAotICAgICAgICAgICAgc3RkOjpt
b3ZlKF9fbG9jYWwuX19nZXQoaW5fcGxhY2U8MD4pKSk7Ci0gICAgICAgIF9faW5kZXg9X0luZGV4
OwotICAgICAgICBfX2xvY2FsLl9fZGVzdHJveShpbl9wbGFjZTwwPik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBfX2xv
Y2FsX2JhY2t1cF9yZXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fYmFja3Vw
X3N0b3JhZ2U8X0luZGV4LF9UeXBlcy4uLj4gX19iYWNrdXAoX19pbmRleCxfX3N0b3JhZ2UpOwot
ICAgICAgICBfX2VtcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJkPF9BcmdzPihf
X2FyZ3MpLi4uKTsKLSAgICAgICAgX19pbmRleD1fSW5kZXg7Ci0gICAgICAgIF9fYmFja3VwLl9f
ZGVzdHJveSgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVu
YW1lIC4uLiBfQXJncz4KLSAgICB2b2lkIF9fZGlyZWN0X3JlcGxhY2UoX0FyZ3MmJiAuLi4gX19h
cmdzKSB7Ci0gICAgICAgIF9fZGVzdHJveV9zZWxmKCk7Ci0gICAgICAgIF9fZW1wbGFjZV9jb25z
dHJ1Y3Q8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pOwotICAgICAgICBf
X2luZGV4PV9JbmRleDsKLSAgICB9Ci0KLSAgICBzdHJ1Y3QgX19wcml2YXRlX3R5cGV7fTsKLQot
cHVibGljOgotICAgIGNvbnN0ZXhwciBWYXJpYW50KCkKLSAgICAgICAgX19OT0VYQ0VQVF8obm9l
eGNlcHQodHlwZW5hbWUgX19pbmRleGVkX3R5cGU8MCxfVHlwZXMuLi4+OjpfX3R5cGUoKSkpOgot
ICAgICAgICBfX3N0b3JhZ2UoaW5fcGxhY2U8MD4pLAotICAgICAgICBfX2luZGV4KDApCi0gICAg
e30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8X19h
bGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2YXRl
X3R5cGU+Ojp0eXBlJiYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0X3Zhcmlh
bnRfbW92ZV9jb25zdHJ1Y3Q8X1R5cGVzLi4uPjo6dmFsdWUpOgotICAgICAgICBfX2luZGV4KF9f
bW92ZV9jb25zdHJ1Y3QoX19vdGhlcikpCi0gICAge30KLQotICAgIGNvbnN0ZXhwciBWYXJpYW50
KHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8IV9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlw
ZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9fcHJpdmF0ZV90eXBlPjo6dHlwZSYmIF9fb3RoZXIpPWRl
bGV0ZTsKLSAgICAKLSAgICBjb25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPF9fYWxsX2NvcHlfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSxWYXJpYW50LF9f
cHJpdmF0ZV90eXBlPjo6dHlwZSYgX19vdGhlcikKLSAgICBfX05PRVhDRVBUXyhfX25vZXhjZXB0
X3ZhcmlhbnRfbm9uX2NvbnN0X2NvcHlfY29uc3RydWN0PF9UeXBlcy4uLj46OnZhbHVlKToKLSAg
ICAgICAgX19pbmRleChfX2NvcHlfY29uc3RydWN0KF9fb3RoZXIpKQotICAgIHt9Ci0KLSAgICBj
b25zdGV4cHIgVmFyaWFudCh0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPCFfX2FsbF9jb3B5X2Nv
bnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUsVmFyaWFudCxfX3ByaXZhdGVfdHlwZT46OnR5
cGUmIF9fb3RoZXIpPWRlbGV0ZTsKLQotICAgIGNvbnN0ZXhwciBWYXJpYW50KHR5cGVuYW1lIHN0
ZDo6Y29uZGl0aW9uYWw8X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
LFZhcmlhbnQsX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKQotICAgIF9fTk9F
WENFUFRfKF9fbm9leGNlcHRfdmFyaWFudF9jb25zdF9jb3B5X2NvbnN0cnVjdDxfVHlwZXMuLi4+
Ojp2YWx1ZSk6Ci0gICAgICAgIF9faW5kZXgoX19jb3B5X2NvbnN0cnVjdChfX290aGVyKSkKLSAg
ICB7fQotCi0gICAgY29uc3RleHByIFZhcmlhbnQodHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwh
X19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLFZhcmlhbnQsX19wcml2
YXRlX3R5cGU+Ojp0eXBlIGNvbnN0JiBfX290aGVyKT1kZWxldGU7Ci0gICAgCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNvbnN0
ZXhwciBWYXJpYW50KGluX3BsYWNlX3R5cGVfdDxfVHlwZT4sX0FyZ3MmJiAuLi4gX19hcmdzKToK
LSAgICAgICAgX19zdG9yYWdlKAotICAgICAgICAgICAgaW5fcGxhY2U8X190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXg8X1R5cGUsX1R5cGVz
Li4uPjo6X192YWx1ZSkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19jb25z
dHJ1Y3RpYmxlPF9UeXBlLF9BcmdzLi4uPjo6dmFsdWUsIlR5cGUgbXVzdCBiZSBjb25zdHJ1Y3Rp
YmxlIGZyb20gYXJncyIpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHNpemVfdCBfSW5kZXgsdHlw
ZW5hbWUgLi4uIF9BcmdzPgotICAgIGV4cGxpY2l0IGNvbnN0ZXhwciBWYXJpYW50KGluX3BsYWNl
X2luZGV4X3Q8X0luZGV4PixfQXJncyYmIC4uLiBfX2FyZ3MpOgotICAgICAgICBfX3N0b3JhZ2Uo
aW5fcGxhY2U8X0luZGV4PixzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9fYXJncykuLi4pLAotICAgICAg
ICBfX2luZGV4KF9JbmRleCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19j
b25zdHJ1Y3RpYmxlPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUsX0FyZ3MuLi4+Ojp2YWx1ZSwiVHlwZSBtdXN0IGJlIGNvbnN0cnVjdGlibGUgZnJvbSBh
cmdzIik7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlPgotICAgIGNv
bnN0ZXhwciBWYXJpYW50KF9UeXBlJiYgX194KToKLSAgICAgICAgX19zdG9yYWdlKAotICAgICAg
ICAgICAgaW5fcGxhY2U8Ci0gICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+LAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9UeXBl
PihfX3gpKSwKLSAgICAgICAgX19pbmRleChfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9UeXBl
LF9UeXBlcy4uLj46Ol9fdmFsdWUpCi0gICAge30KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9U
eXBlLAotICAgICAgICAgICAgIHR5cGVuYW1lIF9FbmFibGU9Ci0gICAgICAgICAgICAgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICAgICAgICAgICAgIChfX2NvbnN0cnVjdGlibGVfbWF0
Y2hlczxzdGQ6OmluaXRpYWxpemVyX2xpc3Q8X1R5cGU+LF9UeXBlcy4uLj46Ol9fdHlwZTo6X19s
ZW5ndGg+MCkKLSAgICAgICAgICAgICA+Ojp0eXBlPgotICAgIGNvbnN0ZXhwciBWYXJpYW50KHN0
ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4gX194KToKLSAgICAgICAgX19zdG9yYWdlKAotICAg
ICAgICAgICAgaW5fcGxhY2U8Ci0gICAgICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0
PHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxfVHlwZT4sX1R5cGVzLi4uPjo6X192YWx1ZT4sCi0gICAg
ICAgICAgICBfX3gpLAotICAgICAgICBfX2luZGV4KF9fdHlwZV9pbmRleF90b19jb25zdHJ1Y3Q8
c3RkOjppbml0aWFsaXplcl9saXN0PF9UeXBlPixfVHlwZXMuLi4+OjpfX3ZhbHVlKQotICAgIHt9
Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGU+Ci0gICAgVmFyaWFudCYgb3BlcmF0
b3I9KF9UeXBlJiYgX194KXsKLSAgICAgICAgY29uc3RleHByIHNpemVfdCBfSW5kZXg9Ci0gICAg
ICAgICAgICBfX3R5cGVfaW5kZXhfdG9fY29uc3RydWN0PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFs
dWU7Ci0gICAgICAgIGlmKF9JbmRleD09X19pbmRleCl7Ci0gICAgICAgICAgICBnZXQ8X0luZGV4
PigqdGhpcyk9c3RkOjpmb3J3YXJkPF9UeXBlPihfX3gpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2V7Ci0gICAgICAgICAgICBfX3JlcGxhY2VfY29uc3RydWN0PF9JbmRleD4oc3RkOjpmb3J3YXJk
PF9UeXBlPihfX3gpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQot
Ci0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlv
bmFsPAotICAgICAgICAgICAgIShfX2FsbF9jb3B5X2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6
dmFsdWUgJiYKLSAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4u
Lj46OnZhbHVlICYmCi0gICAgICAgICAgICAgIF9fYWxsX2NvcHlfYXNzaWduYWJsZTxfVHlwZXMu
Li4+Ojp2YWx1ZSksCi0gICAgICAgICAgICBWYXJpYW50LCBfX3ByaXZhdGVfdHlwZT46OnR5cGUg
Y29uc3QgJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAgVmFyaWFudCAmb3BlcmF0b3I9KAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfY29weV9j
b25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxf
bW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAg
X19hbGxfY29weV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFy
aWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlIGNvbnN0ICZfX290aGVyKSB7Ci0gICAgICAgIGlm
IChfX290aGVyLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgewotICAgICAgICAgICAgX19kZXN0
cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmKF9fb3RoZXIuaW5kZXgoKT09
aW5kZXgoKSl7Ci0gICAgICAgICAgICBfX2NvcHlfYXNzaWduX29wX3RhYmxlPFZhcmlhbnQ+Ojpf
X2FwcGx5W2luZGV4KCldKHRoaXMsX19vdGhlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZXsK
LSAgICAgICAgICAgIF9fcmVwbGFjZV9jb25zdHJ1Y3RfaGVscGVyOjpfX29wX3RhYmxlPFZhcmlh
bnQ+OjpfX2NvcHlfYXNzaWduWwotICAgICAgICAgICAgICAgIF9fb3RoZXIuaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAg
IFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDwK
LSAgICAgICAgICAgICEoX19hbGxfY29weV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVl
ICYmCi0gICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2
YWx1ZSAmJgotICAgICAgICAgICAgICBfX2FsbF9jb3B5X2Fzc2lnbmFibGU8X1R5cGVzLi4uPjo6
dmFsdWUpLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2YXRlX3R5cGU+Ojp0eXBlICZfX290
aGVyKSA9IGRlbGV0ZTsKLQotICAgIFZhcmlhbnQgJm9wZXJhdG9yPSgKLSAgICAgICAgdHlwZW5h
bWUgc3RkOjpjb25kaXRpb25hbDwKLSAgICAgICAgICAgIF9fYWxsX2NvcHlfY29uc3RydWN0aWJs
ZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX21vdmVfY29uc3Ry
dWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAgICAgIF9fYWxsX2NvcHlf
YXNzaWduYWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSwKLSAgICAgICAgICAgIFZhcmlhbnQsIF9fcHJp
dmF0ZV90eXBlPjo6dHlwZSAmX19vdGhlcikgewotICAgICAgICBpZihfX290aGVyLnZhbHVlbGVz
c19ieV9leGNlcHRpb24oKSl7Ci0gICAgICAgICAgICBfX2Rlc3Ryb3lfc2VsZigpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRleCgpPT1pbmRleCgpKXsKLSAgICAgICAg
ICAgIF9fY29weV9hc3NpZ25fb3BfdGFibGU8VmFyaWFudD46Ol9fYXBwbHlbaW5kZXgoKV0odGhp
cyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAgX19yZXBs
YWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fY29weV9hc3NpZ25b
Ci0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0gICAgVmFyaWFudCAmb3BlcmF0b3I9
KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgIShfX2Fs
bF9tb3ZlX2NvbnN0cnVjdGlibGU8X1R5cGVzLi4uPjo6dmFsdWUgJiYKLSAgICAgICAgICAgICAg
X19hbGxfbW92ZV9hc3NpZ25hYmxlPF9UeXBlcy4uLj46OnZhbHVlKSwKLSAgICAgICAgICAgIFZh
cmlhbnQsIF9fcHJpdmF0ZV90eXBlPjo6dHlwZSAmJl9fb3RoZXIpID0gZGVsZXRlOwotCi0gICAg
VmFyaWFudCAmb3BlcmF0b3I9KAotICAgICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPF9f
YWxsX21vdmVfY29uc3RydWN0aWJsZTxfVHlwZXMuLi4+Ojp2YWx1ZSAmJgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2FsbF9tb3ZlX2Fzc2lnbmFibGU8X1R5cGVzLi4u
Pjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFudCwgX19w
cml2YXRlX3R5cGU+Ojp0eXBlICYmCi0gICAgICAgICAgICBfX290aGVyKSBfX05PRVhDRVBUXyhf
X25vZXhjZXB0X3ZhcmlhbnRfbW92ZV9hc3NpZ248X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAg
ICAgaWYgKF9fb3RoZXIudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7Ci0gICAgICAgICAgICBf
X2Rlc3Ryb3lfc2VsZigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYoX19vdGhlci5pbmRl
eCgpPT1pbmRleCgpKXsKLSAgICAgICAgICAgIF9fbW92ZV9hc3NpZ25fb3BfdGFibGU8VmFyaWFu
dD46Ol9fYXBwbHlbaW5kZXgoKV0odGhpcyxfX290aGVyKTsKLSAgICAgICAgICAgIF9fb3RoZXIu
X19kZXN0cm95X3NlbGYoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewotICAgICAgICAgICAg
X19yZXBsYWNlX2NvbnN0cnVjdF9oZWxwZXI6Ol9fb3BfdGFibGU8VmFyaWFudD46Ol9fbW92ZV9h
c3NpZ25bCi0gICAgICAgICAgICAgICAgX19vdGhlci5pbmRleCgpXSh0aGlzLF9fb3RoZXIpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBlbXBsYWNlKF9Bcmdz
JiYgLi4uIF9fYXJncyl7Ci0gICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X190eXBlX2luZGV4PF9U
eXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KAotICAgICAgICAgICAgc3RkOjpmb3J3YXJkPF9Bcmdz
PihfX2FyZ3MpLi4uKTsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0
eXBlbmFtZSAuLi4gX0FyZ3M+Ci0gICAgdm9pZCBlbXBsYWNlKF9BcmdzJiYgLi4uIF9fYXJncyl7
Ci0gICAgICAgIF9fZGlyZWN0X3JlcGxhY2U8X0luZGV4PihzdGQ6OmZvcndhcmQ8X0FyZ3M+KF9f
YXJncykuLi4pOwotICAgIH0KLSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIF9faW5kZXg9PS0x
OwotICAgIH0KLSAgICBjb25zdGV4cHIgcHRyZGlmZl90IGluZGV4KCkgY29uc3QgX19OT0VYQ0VQ
VHsKLSAgICAgICAgcmV0dXJuIF9faW5kZXg7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKAotICAg
ICAgICB0eXBlbmFtZSBzdGQ6OmNvbmRpdGlvbmFsPAotICAgICAgICAgICAgX19hbGxfc3dhcHBh
YmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgX19hbGxfbW92ZV9jb25z
dHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAgICAgICAgVmFyaWFudCwgX19wcml2
YXRlX3R5cGU+Ojp0eXBlCi0gICAgICAgICAgICAmX19vdGhlcikgX19OT0VYQ0VQVF8oX19ub2V4
Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICAgICAgaWYgKF9fb3Ro
ZXIuaW5kZXgoKSA9PSBpbmRleCgpKSB7Ci0gICAgICAgICAgICBpZighdmFsdWVsZXNzX2J5X2V4
Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgIF9fc3dhcF9vcF90YWJsZTxWYXJpYW50Pjo6X19h
cHBseVtpbmRleCgpXSgqdGhpcyxfX290aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlewot
ICAgICAgICAgICAgVmFyaWFudCBfX3RlbXAoc3RkOjptb3ZlKF9fb3RoZXIpKTsKLSAgICAgICAg
ICAgIF9fb3RoZXIuX19pbmRleD1fX290aGVyLl9fbW92ZV9jb25zdHJ1Y3QoKnRoaXMpOwotICAg
ICAgICAgICAgX19pbmRleD1fX21vdmVfY29uc3RydWN0KF9fdGVtcCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1jbGFzcyBWYXJpYW50PD57Ci1wdWJsaWM6Ci0gICAgVmFy
aWFudCgpPWRlbGV0ZTsKLSAgICAKLSAgICBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkgY29uc3QgX19OT0VYQ0VQVHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNvbnN0ZXhwciBwdHJkaWZmX3QgaW5kZXgoKSBjb25zdCBfX05PRVhDRVBUewotICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgdm9pZCBzd2FwKFZhcmlhbnQmKXt9Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gX1R5cGVzPgotdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8X19h
bGxfc3dhcHBhYmxlPF9UeXBlcy4uLj46OnZhbHVlICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hbGxfbW92ZV9jb25zdHJ1Y3RpYmxlPF9UeXBlcy4uLj46OnZhbHVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUKLXN3YXAoVmFyaWFudDxfVHlwZXMuLi4+ICZf
X2xocywgVmFyaWFudDxfVHlwZXMuLi4+ICZfX3JocykgX19OT0VYQ0VQVF8oCi0gICAgX19ub2V4
Y2VwdF92YXJpYW50X3N3YXA8X1R5cGVzLi4uPjo6dmFsdWUpIHsKLSAgICBfX2xocy5zd2FwKF9f
cmhzKTsKLX0KKyAgICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBULCB0eXBl
bmFtZS4uLiBBcmdzPgorICAgICAgaW5saW5lIHN0YXRpYyBUICZjb25zdHJ1Y3RfYWx0KGFsdDxJ
LCBUPiAmYSwgQXJncyAmJi4uLiBhcmdzKSB7CisgICAgICAgIDo6bmV3IChzdGF0aWNfY2FzdDx2
b2lkICo+KG1wYXJrOjpsaWI6OmFkZHJlc3NvZihhKSkpCisgICAgICAgICAgICBhbHQ8SSwgVD4o
aW5fcGxhY2VfdHt9LCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAgICAg
ICAgcmV0dXJuIGEudmFsdWU7CisgICAgICB9CisKKyAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBS
aHM+CisgICAgICBpbmxpbmUgc3RhdGljIHZvaWQgZ2VuZXJpY19jb25zdHJ1Y3QoY29uc3RydWN0
b3IgJmxocywgUmhzICYmcmhzKSB7CisgICAgICAgIGxocy5kZXN0cm95KCk7CisgICAgICAgIGlm
ICghcmhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAgICAgICAgIHZpc2l0YXRpb246
OmJhc2U6OnZpc2l0X2FsdF9hdCgKKyAgICAgICAgICAgICAgcmhzLmluZGV4KCksCisjaWZkZWYg
TVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgIFtdKGF1dG8gJmxoc19hbHQsIGF1
dG8gJiZyaHNfYWx0KSB7CisgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6OmNvbnN0cnVjdF9h
bHQoCisgICAgICAgICAgICAgICAgICAgIGxoc19hbHQsIG1wYXJrOjpsaWI6OmZvcndhcmQ8ZGVj
bHR5cGUocmhzX2FsdCk+KHJoc19hbHQpLnZhbHVlKTsKKyAgICAgICAgICAgICAgfQorI2Vsc2UK
KyAgICAgICAgICAgICAgY3Rvcnt9CisjZW5kaWYKKyAgICAgICAgICAgICAgLAorICAgICAgICAg
ICAgICBsaHMsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmZvcndhcmQ8UmhzPihyaHMpKTsK
KyAgICAgICAgICBsaHMuaW5kZXhfID0gcmhzLmluZGV4XzsKKyAgICAgICAgfQorICAgICAgfQor
ICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4K
LXN0cnVjdCBfX3ZhcmlhbnRfYWNjZXNzb3J7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlIF9fdHlwZTsKLSAgICBzdGF0aWMgY29u
c3RleHByIF9fdHlwZSYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXQoaW5fcGxhY2U8X0luZGV4Pik7Ci0gICAgfQotICAgIHN0
YXRpYyBjb25zdGV4cHIgX190eXBlIGNvbnN0JiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0
JiBfX3YpewotICAgICAgICByZXR1cm4gX192Ll9fc3RvcmFnZS5fX2dldChpbl9wbGFjZTxfSW5k
ZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiYgX192KXsKLSAgICAgICAgcmV0dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJl
Zihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBf
X3R5cGUmJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiYgX192KXsKLSAgICAgICAgcmV0
dXJuIF9fdi5fX3N0b3JhZ2UuX19nZXRfcnJlZihpbl9wbGFjZTxfSW5kZXg+KTsKLSAgICB9Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3Rl
eHByIF9UeXBlJiBnZXQoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiBnZXQ8
X190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWU+KF9fdik7Ci19CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFRyYWl0cywgVHJhaXQgPSBUcmFpdHM6Om1vdmVfY29uc3RydWN0aWJs
ZV90cmFpdD4KKyAgICBjbGFzcyBtb3ZlX2NvbnN0cnVjdG9yOwogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIF9UeXBlJiYgZ2V0KFZhcmlh
bnQ8X1R5cGVzLi4uPiYmIF9fdil7Ci0gICAgcmV0dXJuIGdldDxfX3R5cGVfaW5kZXg8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZT4oc3RkOjptb3ZlKF9fdikpOwotfQorI2RlZmluZSBNUEFSS19W
QVJJQU5UX01PVkVfQ09OU1RSVUNUT1IobW92ZV9jb25zdHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0
aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY2xhc3MgbW92ZV9jb25zdHJ1Y3Rvcjx0
cmFpdHM8VHMuLi4+LCBtb3ZlX2NvbnN0cnVjdGlibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAg
ICAgOiBwdWJsaWMgY29uc3RydWN0b3I8dHJhaXRzPFRzLi4uPj4geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBjb25zdHJ1Y3Rvcjx0cmFpdHM8
VHMuLi4+PjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1vdmVf
Y29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9jb25z
dHJ1Y3Rvcihjb25zdCBtb3ZlX2NvbnN0cnVjdG9yICYpID0gZGVmYXVsdDsgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH5tb3ZlX2NvbnN0cnVjdG9yKCkg
PSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgbW92ZV9jb25zdHJ1Y3RvciAmb3BlcmF0b3I9KGNvbnN0IG1vdmVfY29uc3RydWN0b3IgJikg
PSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBtb3ZlX2NvbnN0cnVjdG9yICZvcGVyYXRvcj0obW92
ZV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgXAorICB9CisKKyAgICBN
UEFSS19WQVJJQU5UX01PVkVfQ09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlB
dmFpbGFibGUsCisgICAgICAgIG1vdmVfY29uc3RydWN0b3IobW92ZV9jb25zdHJ1Y3RvciAmJnRo
YXQpID0gZGVmYXVsdDspOworCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0NPTlNUUlVDVE9SKAor
ICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1vdmVf
Y29uc3RydWN0b3IgJiZ0aGF0KSBub2V4Y2VwdCgKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmFs
bDxzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFRzPjo6dmFsdWUuLi4+Ojp2YWx1
ZSkKKyAgICAgICAgICAgIDogbW92ZV9jb25zdHJ1Y3Rvcih2YWx1ZWxlc3NfdHt9KSB7CisgICAg
ICAgICAgdGhpcy0+Z2VuZXJpY19jb25zdHJ1Y3QoKnRoaXMsIG1wYXJrOjpsaWI6Om1vdmUodGhh
dCkpOworICAgICAgICB9KTsKKworICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9DT05TVFJVQ1RPUigK
KyAgICAgICAgVHJhaXQ6OlVuYXZhaWxhYmxlLAorICAgICAgICBtb3ZlX2NvbnN0cnVjdG9yKG1v
dmVfY29uc3RydWN0b3IgJiYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19WQVJJQU5UX01P
VkVfQ09OU1RSVUNUT1IKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0g
VHJhaXRzOjpjb3B5X2NvbnN0cnVjdGlibGVfdHJhaXQ+CisgICAgY2xhc3MgY29weV9jb25zdHJ1
Y3RvcjsKKworI2RlZmluZSBNUEFSS19WQVJJQU5UX0NPUFlfQ09OU1RSVUNUT1IoY29weV9jb25z
dHJ1Y3RpYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBU
cz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
Y2xhc3MgY29weV9jb25zdHJ1Y3Rvcjx0cmFpdHM8VHMuLi4+LCBjb3B5X2NvbnN0cnVjdGlibGVf
dHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBwdWJsaWMgbW92ZV9jb25zdHJ1Y3Rvcjx0cmFp
dHM8VHMuLi4+PiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3Vw
ZXIgPSBtb3ZlX2NvbnN0cnVjdG9yPHRyYWl0czxUcy4uLj4+OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1YmxpYzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgSU5IRVJJVElOR19DVE9SKGNvcHlfY29uc3RydWN0b3IsIHN1cGVyKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB1c2luZyBzdXBlcjo6b3BlcmF0b3I9OyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgZGVmaW5pdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBjb3B5X2NvbnN0cnVjdG9yKGNv
cHlfY29uc3RydWN0b3IgJiYpID0gZGVmYXVsdDsgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIH5jb3B5X2NvbnN0cnVjdG9yKCkgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9jb25zdHJ1Y3RvciAmb3BlcmF0b3I9KGNv
bnN0IGNvcHlfY29uc3RydWN0b3IgJikgPSBkZWZhdWx0OyAgICAgICAgIFwKKyAgICBjb3B5X2Nv
bnN0cnVjdG9yICZvcGVyYXRvcj0oY29weV9jb25zdHJ1Y3RvciAmJikgPSBkZWZhdWx0OyAgICAg
ICAgICAgICAgXAorICB9CisKKyAgICBNUEFSS19WQVJJQU5UX0NPUFlfQ09OU1RSVUNUT1IoCisg
ICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIGNvcHlfY29uc3RydWN0
b3IoY29uc3QgY29weV9jb25zdHJ1Y3RvciAmdGhhdCkgPSBkZWZhdWx0Oyk7CisKKyAgICBNUEFS
S19WQVJJQU5UX0NPUFlfQ09OU1RSVUNUT1IoCisgICAgICAgIFRyYWl0OjpBdmFpbGFibGUsCisg
ICAgICAgIGNvcHlfY29uc3RydWN0b3IoY29uc3QgY29weV9jb25zdHJ1Y3RvciAmdGhhdCkKKyAg
ICAgICAgICAgIDogY29weV9jb25zdHJ1Y3Rvcih2YWx1ZWxlc3NfdHt9KSB7CisgICAgICAgICAg
dGhpcy0+Z2VuZXJpY19jb25zdHJ1Y3QoKnRoaXMsIHRoYXQpOworICAgICAgICB9KTsKKworICAg
IE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUigKKyAgICAgICAgVHJhaXQ6OlVuYXZhaWxh
YmxlLAorICAgICAgICBjb3B5X2NvbnN0cnVjdG9yKGNvbnN0IGNvcHlfY29uc3RydWN0b3IgJikg
PSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJLX1ZBUklBTlRfQ09QWV9DT05TVFJVQ1RPUgorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRyYWl0cz4KKyAgICBjbGFzcyBhc3NpZ25tZW50IDogcHVi
bGljIGNvcHlfY29uc3RydWN0b3I8VHJhaXRzPiB7CisgICAgICB1c2luZyBzdXBlciA9IGNvcHlf
Y29uc3RydWN0b3I8VHJhaXRzPjsKKworICAgICAgcHVibGljOgorICAgICAgSU5IRVJJVElOR19D
VE9SKGFzc2lnbm1lbnQsIHN1cGVyKQorICAgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsKKwor
ICAgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICBp
bmxpbmUgLyogYXV0byAmICovIGF1dG8gZW1wbGFjZShBcmdzICYmLi4uIGFyZ3MpCisgICAgICAg
ICAgLT4gZGVjbHR5cGUodGhpcy0+Y29uc3RydWN0X2FsdChhY2Nlc3M6OmJhc2U6OmdldF9hbHQ8
ST4oKnRoaXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXBh
cms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpIHsKKyAgICAgICAgdGhpcy0+ZGVzdHJv
eSgpOworICAgICAgICBhdXRvICZyZXN1bHQgPSB0aGlzLT5jb25zdHJ1Y3RfYWx0KGFjY2Vzczo6
YmFzZTo6Z2V0X2FsdDxJPigqdGhpcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgICAg
IHRoaXMtPmluZGV4XyA9IEk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICB9CisKKyAg
ICAgIHByb3RlY3RlZDoKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGhhdD4KKyAgICAgIHN0cnVjdCBhc3NpZ25lciB7CisgICAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUaGlzQWx0LCB0eXBlbmFtZSBUaGF0QWx0PgorICAgICAgICBpbmxp
bmUgdm9pZCBvcGVyYXRvcigpKFRoaXNBbHQgJnRoaXNfYWx0LCBUaGF0QWx0ICYmdGhhdF9hbHQp
IGNvbnN0IHsKKyAgICAgICAgICBzZWxmLT5hc3NpZ25fYWx0KHRoaXNfYWx0LCBtcGFyazo6bGli
Ojpmb3J3YXJkPFRoYXRBbHQ+KHRoYXRfYWx0KS52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg
YXNzaWdubWVudCAqc2VsZjsKKyAgICAgIH07CisjZW5kaWYKIAotdGVtcGxhdGU8dHlwZW5hbWUg
X1R5cGUsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBfVHlwZSBjb25zdCYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gZ2V0PF9fdHlwZV9pbmRl
eDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlPihfX3YpOwotfQorICAgICAgdGVtcGxhdGUgPHN0
ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFQsIHR5cGVuYW1lIEFyZz4KKyAgICAgIGlubGluZSB2b2lk
IGFzc2lnbl9hbHQoYWx0PEksIFQ+ICZhLCBBcmcgJiZhcmcpIHsKKyAgICAgICAgaWYgKHRoaXMt
PmluZGV4KCkgPT0gSSkgeworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkK
KyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDI0NCkKKyNlbmRpZgorICAgICAgICAgIGEudmFs
dWUgPSBtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnKTsKKyNpZmRlZiBfTVNDX1ZFUgorI3By
YWdtYSB3YXJuaW5nKHBvcCkKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICB2b2lkIG9wZXJhdG9yKCkoc3RkOjp0cnVlX3R5cGUpIGNvbnN0
IHsKKyAgICAgICAgICAgICAgdGhpc18tPmVtcGxhY2U8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxB
cmc+KGFyZ18pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQgb3BlcmF0b3IoKShz
dGQ6OmZhbHNlX3R5cGUpIGNvbnN0IHsKKyAgICAgICAgICAgICAgdGhpc18tPmVtcGxhY2U8ST4o
VChtcGFyazo6bGliOjpmb3J3YXJkPEFyZz4oYXJnXykpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGFzc2lnbm1lbnQgKnRoaXNfOworICAgICAgICAgICAgQXJnICYmYXJnXzsKKyAgICAg
ICAgICB9IGltcGx7dGhpcywgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZyl9OworICAgICAg
ICAgIGltcGwobXBhcms6OmxpYjo6Ym9vbF9jb25zdGFudDwKKyAgICAgICAgICAgICAgICAgICBz
dGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSB8fAorICAgICAgICAg
ICAgICAgICAgICFzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZT57
fSk7CisgICAgICAgIH0KKyAgICAgIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBjb25zdCBfVHlwZSYmIGdldChWYXJpYW50PF9UeXBl
cy4uLj4gY29uc3QmJiBfX3YpewotICAgIHJldHVybiBnZXQ8X190eXBlX2luZGV4PF9UeXBlLF9U
eXBlcy4uLj46Ol9fdmFsdWU+KHN0ZDo6bW92ZShfX3YpKTsKLX0KKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUaGF0PgorICAgICAgaW5saW5lIHZvaWQgZ2VuZXJpY19hc3NpZ24oVGhhdCAmJnRo
YXQpIHsKKyAgICAgICAgaWYgKHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJiB0aGF0
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisg
ICAgICAgIH0gZWxzZSBpZiAodGhhdC52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgICB0aGlzLT5kZXN0cm95KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmlzaXRh
dGlvbjo6YmFzZTo6dmlzaXRfYWx0X2F0KAorICAgICAgICAgICAgICB0aGF0LmluZGV4KCksCisj
aWZkZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgICAgICAgICAgIFt0aGlzXShhdXRvICZ0
aGlzX2FsdCwgYXV0byAmJnRoYXRfYWx0KSB7CisgICAgICAgICAgICAgICAgdGhpcy0+YXNzaWdu
X2FsdCgKKyAgICAgICAgICAgICAgICAgICAgdGhpc19hbHQsIG1wYXJrOjpsaWI6OmZvcndhcmQ8
ZGVjbHR5cGUodGhhdF9hbHQpPih0aGF0X2FsdCkudmFsdWUpOworICAgICAgICAgICAgICB9Cisj
ZWxzZQorICAgICAgICAgICAgICBhc3NpZ25lcjxUaGF0Pnt0aGlzfQorI2VuZGlmCisgICAgICAg
ICAgICAgICwKKyAgICAgICAgICAgICAgKnRoaXMsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6
OmZvcndhcmQ8VGhhdD4odGhhdCkpOworICAgICAgICB9CisgICAgICB9CisgICAgfTsKIAorICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUcmFpdHMsIFRyYWl0ID0gVHJhaXRzOjptb3ZlX2Fzc2lnbmFi
bGVfdHJhaXQ+CisgICAgY2xhc3MgbW92ZV9hc3NpZ25tZW50OwogCi10ZW1wbGF0ZTxwdHJkaWZm
X3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19pbmRl
eGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCYgZ2V0KFZhcmlhbnQ8X1R5
cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9JbmRleCE9X192
LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3dfYmFkX3Zhcmlh
bnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5
cGUgY29uc3QmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6IHN0
ZDo6YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9f
dikpCi0gICAgKTsKLX0KKyNkZWZpbmUgTVBBUktfVkFSSUFOVF9NT1ZFX0FTU0lHTk1FTlQobW92
ZV9hc3NpZ25hYmxlX3RyYWl0LCBkZWZpbml0aW9uKSBcCisgIHRlbXBsYXRlIDx0eXBlbmFtZS4u
LiBUcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBj
bGFzcyBtb3ZlX2Fzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPiwgbW92ZV9hc3NpZ25hYmxlX3RyYWl0
PiAgICAgICAgICAgIFwKKyAgICAgIDogcHVibGljIGFzc2lnbm1lbnQ8dHJhaXRzPFRzLi4uPj4g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXIgPSBhc3Np
Z25tZW50PHRyYWl0czxUcy4uLj4+OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICBwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgSU5IRVJJVElOR19DVE9SKG1v
dmVfYXNzaWdubWVudCwgc3VwZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHVzaW5nIHN1cGVyOjpvcGVyYXRvcj07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9hc3NpZ25tZW50KGNv
bnN0IG1vdmVfYXNzaWdubWVudCAmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgXAorICAg
IG1vdmVfYXNzaWdubWVudChtb3ZlX2Fzc2lnbm1lbnQgJiYpID0gZGVmYXVsdDsgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB+bW92ZV9hc3NpZ25tZW50KCkgPSBkZWZhdWx0OyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbW92ZV9hc3NpZ25tZW50ICZv
cGVyYXRvcj0oY29uc3QgbW92ZV9hc3NpZ25tZW50ICYpID0gZGVmYXVsdDsgICAgICAgXAorICAg
IGRlZmluaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgfQorCisgICAgTVBBUktfVkFSSUFOVF9NT1ZFX0FTU0lHTk1FTlQo
CisgICAgICAgIFRyYWl0OjpUcml2aWFsbHlBdmFpbGFibGUsCisgICAgICAgIG1vdmVfYXNzaWdu
bWVudCAmb3BlcmF0b3I9KG1vdmVfYXNzaWdubWVudCAmJnRoYXQpID0gZGVmYXVsdDspOworCisg
ICAgTVBBUktfVkFSSUFOVF9NT1ZFX0FTU0lHTk1FTlQoCisgICAgICAgIFRyYWl0OjpBdmFpbGFi
bGUsCisgICAgICAgIG1vdmVfYXNzaWdubWVudCAmCisgICAgICAgIG9wZXJhdG9yPShtb3ZlX2Fz
c2lnbm1lbnQgJiZ0aGF0KSBub2V4Y2VwdCgKKyAgICAgICAgICAgIG1wYXJrOjpsaWI6OmFsbDwo
c3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZhbHVlICYmCisgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxUcz46OnZhbHVl
KS4uLj46OnZhbHVlKSB7CisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19hc3NpZ24obXBhcms6Omxp
Yjo6bW92ZSh0aGF0KSk7CisgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9KTsKKwor
ICAgIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6VW5hdmFp
bGFibGUsCisgICAgICAgIG1vdmVfYXNzaWdubWVudCAmb3BlcmF0b3I9KG1vdmVfYXNzaWdubWVu
dCAmJikgPSBkZWxldGU7KTsKKworI3VuZGVmIE1QQVJLX1ZBUklBTlRfTU9WRV9BU1NJR05NRU5U
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVHJhaXRzLCBUcmFpdCA9IFRyYWl0czo6Y29weV9h
c3NpZ25hYmxlX3RyYWl0PgorICAgIGNsYXNzIGNvcHlfYXNzaWdubWVudDsKKworI2RlZmluZSBN
UEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVChjb3B5X2Fzc2lnbmFibGVfdHJhaXQsIGRlZmlu
aXRpb24pIFwKKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNsYXNzIGNvcHlfYXNzaWdubWVudDx0cmFp
dHM8VHMuLi4+LCBjb3B5X2Fzc2lnbmFibGVfdHJhaXQ+ICAgICAgICAgICAgXAorICAgICAgOiBw
dWJsaWMgbW92ZV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB1c2luZyBzdXBlciA9IG1vdmVfYXNzaWdubWVudDx0cmFpdHM8VHMuLi4+
PjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHB1Ymxp
YzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBJTkhFUklUSU5HX0NUT1IoY29weV9hc3NpZ25tZW50LCBzdXBlcikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdXNpbmcgc3VwZXI6Om9wZXJhdG9yPTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBjb3B5X2Fzc2lnbm1lbnQoY29uc3QgY29weV9hc3NpZ25tZW50ICYpID0g
ZGVmYXVsdDsgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50KGNvcHlfYXNz
aWdubWVudCAmJikgPSBkZWZhdWx0OyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH5jb3B5
X2Fzc2lnbm1lbnQoKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICBkZWZpbml0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRv
cj0oY29weV9hc3NpZ25tZW50ICYmKSA9IGRlZmF1bHQ7ICAgICAgICAgICAgXAorICB9CisKKyAg
ICBNUEFSS19WQVJJQU5UX0NPUFlfQVNTSUdOTUVOVCgKKyAgICAgICAgVHJhaXQ6OlRyaXZpYWxs
eUF2YWlsYWJsZSwKKyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRvcj0oY29uc3QgY29w
eV9hc3NpZ25tZW50ICZ0aGF0KSA9IGRlZmF1bHQ7KTsKKworICAgIE1QQVJLX1ZBUklBTlRfQ09Q
WV9BU1NJR05NRU5UKAorICAgICAgICBUcmFpdDo6QXZhaWxhYmxlLAorICAgICAgICBjb3B5X2Fz
c2lnbm1lbnQgJm9wZXJhdG9yPShjb25zdCBjb3B5X2Fzc2lnbm1lbnQgJnRoYXQpIHsKKyAgICAg
ICAgICB0aGlzLT5nZW5lcmljX2Fzc2lnbih0aGF0KTsKKyAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0pOworCisgICAgTVBBUktfVkFSSUFOVF9DT1BZX0FTU0lHTk1FTlQoCisgICAg
ICAgIFRyYWl0OjpVbmF2YWlsYWJsZSwKKyAgICAgICAgY29weV9hc3NpZ25tZW50ICZvcGVyYXRv
cj0oY29uc3QgY29weV9hc3NpZ25tZW50ICYpID0gZGVsZXRlOyk7CisKKyN1bmRlZiBNUEFSS19W
QVJJQU5UX0NPUFlfQVNTSUdOTUVOVAorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICAgIGNsYXNzIGltcGwgOiBwdWJsaWMgY29weV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+IHsK
KyAgICAgIHVzaW5nIHN1cGVyID0gY29weV9hc3NpZ25tZW50PHRyYWl0czxUcy4uLj4+OworCisg
ICAgICBwdWJsaWM6CisgICAgICBJTkhFUklUSU5HX0NUT1IoaW1wbCwgc3VwZXIpCisgICAgICB1
c2luZyBzdXBlcjo6b3BlcmF0b3I9OworCisgICAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwg
dHlwZW5hbWUgQXJnPgorICAgICAgaW5saW5lIHZvaWQgYXNzaWduKEFyZyAmJmFyZykgeworICAg
ICAgICB0aGlzLT5hc3NpZ25fYWx0KGFjY2Vzczo6YmFzZTo6Z2V0X2FsdDxJPigqdGhpcyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6Zm9yd2FyZDxBcmc+KGFyZykpOwor
ICAgICAgfQorCisgICAgICBpbmxpbmUgdm9pZCBzd2FwKGltcGwgJnRoYXQpIHsKKyAgICAgICAg
aWYgKHRoaXMtPnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJiB0aGF0LnZhbHVlbGVzc19ieV9l
eGNlcHRpb24oKSkgeworICAgICAgICAgIC8vIGRvIG5vdGhpbmcuCisgICAgICAgIH0gZWxzZSBp
ZiAodGhpcy0+aW5kZXgoKSA9PSB0aGF0LmluZGV4KCkpIHsKKyAgICAgICAgICB2aXNpdGF0aW9u
OjpiYXNlOjp2aXNpdF9hbHRfYXQodGhpcy0+aW5kZXgoKSwKKyNpZmRlZiBNUEFSS19HRU5FUklD
X0xBTUJEQVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10oYXV0
byAmdGhpc19hbHQsIGF1dG8gJnRoYXRfYWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXNpbmcgc3RkOjpzd2FwOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3YXAodGhpc19hbHQudmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0X2FsdC52YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZXJ7fQorI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKnRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoYXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGltcGwgKmxo
cyA9IHRoaXM7CisgICAgICAgICAgaW1wbCAqcmhzID0gbXBhcms6OmxpYjo6YWRkcmVzc29mKHRo
YXQpOworICAgICAgICAgIGlmIChsaHMtPm1vdmVfbm90aHJvdygpICYmICFyaHMtPm1vdmVfbm90
aHJvdygpKSB7CisgICAgICAgICAgICBzdGQ6OnN3YXAobGhzLCByaHMpOworICAgICAgICAgIH0K
KyAgICAgICAgICBpbXBsIHRtcChtcGFyazo6bGliOjptb3ZlKCpyaHMpKTsKKyNpZmRlZiBNUEFS
S19FWENFUFRJT05TCisgICAgICAgICAgLy8gRVhURU5TSU9OOiBXaGVuIHRoZSBtb3ZlIGNvbnN0
cnVjdGlvbiBvZiBgbGhzYCBpbnRvIGByaHNgIHRocm93cworICAgICAgICAgIC8vIGFuZCBgdG1w
YCBpcyBub3Rocm93IG1vdmUgY29uc3RydWN0aWJsZSB0aGVuIHdlIG1vdmUgYHRtcGAgYmFjawor
ICAgICAgICAgIC8vIGludG8gYHJoc2AgYW5kIHByb3ZpZGUgdGhlIHN0cm9uZyBleGNlcHRpb24g
c2FmZXR5IGd1YXJhbnRlZS4KKyAgICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy0+Z2Vu
ZXJpY19jb25zdHJ1Y3QoKnJocywgbXBhcms6OmxpYjo6bW92ZSgqbGhzKSk7CisgICAgICAgICAg
fSBjYXRjaCAoLi4uKSB7CisgICAgICAgICAgICBpZiAodG1wLm1vdmVfbm90aHJvdygpKSB7Cisg
ICAgICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjpsaWI6Om1v
dmUodG1wKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvdzsKKyAgICAgICAgICB9
CisjZWxzZQorICAgICAgICAgIHRoaXMtPmdlbmVyaWNfY29uc3RydWN0KCpyaHMsIG1wYXJrOjps
aWI6Om1vdmUoKmxocykpOworI2VuZGlmCisgICAgICAgICAgdGhpcy0+Z2VuZXJpY19jb25zdHJ1
Y3QoKmxocywgbXBhcms6OmxpYjo6bW92ZSh0bXApKTsKKyAgICAgICAgfQorICAgICAgfQogCi10
ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSYgZ2V0KFZh
cmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKigKLSAgICAgICAgKF9JbmRleCE9
X192LmluZGV4KCkpCi0gICAgICAgICAgICA/IHN0ZDo6YWRkcmVzc29mKF9fdGhyb3dfYmFkX3Zh
cmlhbnRfYWNjZXNzPHR5cGVuYW1lIF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+Ojpf
X3R5cGUmPigiQmFkIFZhcmlhbnQgaW5kZXggaW4gZ2V0IikpCi0gICAgICAgICAgICA6IHN0ZDo6
YWRkcmVzc29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikp
Ci0gICAgKTsKLX0KKyAgICAgIHByaXZhdGU6CisjaWZuZGVmIE1QQVJLX0dFTkVSSUNfTEFNQkRB
UworICAgICAgc3RydWN0IHN3YXBwZXIgeworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGhp
c0FsdCwgdHlwZW5hbWUgVGhhdEFsdD4KKyAgICAgICAgaW5saW5lIHZvaWQgb3BlcmF0b3IoKShU
aGlzQWx0ICZ0aGlzX2FsdCwgVGhhdEFsdCAmdGhhdF9hbHQpIGNvbnN0IHsKKyAgICAgICAgICB1
c2luZyBzdGQ6OnN3YXA7CisgICAgICAgICAgc3dhcCh0aGlzX2FsdC52YWx1ZSwgdGhhdF9hbHQu
dmFsdWUpOworICAgICAgICB9CisgICAgICB9OworI2VuZGlmCiAKLXRlbXBsYXRlPHB0cmRpZmZf
dCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciB0eXBlbmFtZSBfX2luZGV4
ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiYgZ2V0KFZhcmlhbnQ8X1R5cGVzLi4u
PiYmIF9fdil7Ci0gICAgcmV0dXJuIF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4u
Pjo6Z2V0KAotICAgICAgICAoKChfSW5kZXghPV9fdi5pbmRleCgpKSA/IF9fdGhyb3dfYmFkX3Zh
cmlhbnRfYWNjZXNzPGludD4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpIDogMCksIHN0ZDo6
bW92ZShfX3YpKQotICAgICk7Ci19CisgICAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgbW92ZV9u
b3Rocm93KCkgY29uc3QgeworICAgICAgICByZXR1cm4gdGhpcy0+dmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpIHx8CisgICAgICAgICAgICAgICBtcGFyazo6bGliOjphcnJheTxib29sLCBzaXplb2Yu
Li4oVHMpPnsKKyAgICAgICAgICAgICAgICAgICB7c3RkOjppc19ub3Rocm93X21vdmVfY29uc3Ry
dWN0aWJsZTxUcz46OnZhbHVlLi4ufQorICAgICAgICAgICAgICAgfVt0aGlzLT5pbmRleCgpXTsK
KyAgICAgIH0KKyAgICB9OwogCi10ZW1wbGF0ZTxwdHJkaWZmX3QgX0luZGV4LHR5cGVuYW1lIC4u
LiBfVHlwZXM+Ci1jb25zdGV4cHIgY29uc3QgdHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4
LF9UeXBlcy4uLj46Ol9fdHlwZSYmIGdldChWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmJiBfX3Yp
ewotICAgIHJldHVybiBfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldCgK
LSAgICAgICAgKCgoX0luZGV4IT1fX3YuaW5kZXgoKSkgPyBfX3Rocm93X2JhZF92YXJpYW50X2Fj
Y2VzczxpbnQ+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSA6IDApLCBzdGQ6Om1vdmUoX192
KSkKLSAgICApOwotfQorICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBUPgor
ICAgIHN0cnVjdCBvdmVybG9hZF9sZWFmIHsKKyAgICAgIHVzaW5nIEYgPSBtcGFyazo6bGliOjpz
aXplX2NvbnN0YW50PEk+ICgqKShUKTsKKyAgICAgIG9wZXJhdG9yIEYoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUsdHlwZW5hbWUg
Li4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+IGdldF9pZihW
YXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5kZXg8X1R5cGUs
X1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6c3RkOjphZGRyZXNzb2Yo
Z2V0PF9UeXBlPihfX3YpKTsKLX0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAg
c3RydWN0IG92ZXJsb2FkX2ltcGwgeworICAgICAgcHJpdmF0ZToKKyAgICAgIHRlbXBsYXRlIDx0
eXBlbmFtZT4KKyAgICAgIHN0cnVjdCBpbXBsOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0
eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBj
b25zdD4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4g
KF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVs
bHB0cjpzdGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9fdikpOwotfQorICAgICAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90Li4uIElzPgorICAgICAgc3RydWN0IGltcGw8bXBhcms6OmxpYjo6aW5kZXhf
c2VxdWVuY2U8SXMuLi4+PiA6IG92ZXJsb2FkX2xlYWY8SXMsIFRzPi4uLiB7fTsKIAotdGVtcGxh
dGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHN0ZDo6
YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6
X190eXBlPiBnZXRfaWYoVmFyaWFudDxfVHlwZXMuLi4+JiBfX3YpewotICAgIHJldHVybiAoKF9J
bmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0gICAgICAgIHN0ZDo6YWRkcmVzc29mKF9fdmFy
aWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKLX0KKyAgICAgIHB1
YmxpYzoKKyAgICAgIHVzaW5nIHR5cGUgPSBpbXBsPG1wYXJrOjpsaWI6OmluZGV4X3NlcXVlbmNl
X2ZvcjxUcy4uLj4+OworICAgIH07CiAKLXRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5h
bWUgLi4uIF9UeXBlcz4KLWNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19p
bmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdD4gZ2V0X2lmKAotICAg
IFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKChfSW5kZXghPV9f
di5pbmRleCgpKT9udWxscHRyOgotICAgICAgICBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNj
ZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKSk7Ci19CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lLi4uIFRzPgorICAgIHVzaW5nIG92ZXJsb2FkID0gdHlwZW5hbWUgb3ZlcmxvYWRfaW1w
bDxUcy4uLj46OnR5cGU7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIF9UeXBlLHR5cGVuYW1lIC4uLiBf
VHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2ZShWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdikgX19OT0VYQ0VQVHsKLSAgICByZXR1cm4gX192LmluZGV4KCk9PV9fdHlw
ZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+OjpfX3ZhbHVlOwotfQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCB0eXBlbmFtZS4uLiBUcz4KKyAgICB1c2luZyBiZXN0X21hdGNoID0gbXBhcms6Omxp
Yjo6aW52b2tlX3Jlc3VsdF90PG92ZXJsb2FkPFRzLi4uPiwgVCAmJj47CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1zdHJ1Y3QgX192aXNpdG9yX3Jl
dHVybl90eXBlOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBpc19pbl9w
bGFjZV9pbmRleCA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgX1Zp
c2l0b3I+Ci1zdHJ1Y3QgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yPnsKLSAgICB0eXBl
ZGVmIGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxfVmlzaXRvciY+KCkoKSkgX190eXBlOwotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgX0hlYWQsdHlwZW5hbWUgLi4uIF9S
ZXN0Pgotc3RydWN0IF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfSGVhZCxfUmVzdC4u
Lj57Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6OmRlY2x2YWw8X1Zpc2l0b3ImPigpKHN0ZDo6
ZGVjbHZhbDxfSGVhZCY+KCkpKSBfX3R5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlz
aXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IF9fdmlzaXRvcl90YWJsZXsKLSAgICB0
eXBlZGVmIFZhcmlhbnQ8X1R5cGVzLi4uPiBfX3ZhcmlhbnRfdHlwZTsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUg
X19yZXR1cm5fdHlwZTsKLSAgICB0eXBlZGVmIF9fcmV0dXJuX3R5cGUgKCpfX2Z1bmNfdHlwZSko
X1Zpc2l0b3ImLF9fdmFyaWFudF90eXBlJik7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlw
ZT4KLSAgICBzdGF0aWMgX19yZXR1cm5fdHlwZSBfX3RyYW1wb2xpbmVfZnVuYyhfVmlzaXRvciYg
X192aXNpdG9yLF9fdmFyaWFudF90eXBlJiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdG9y
KGdldDxfVHlwZT4oX192KSk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IF9fZnVuY190eXBl
IF9fdHJhbXBvbGluZVtzaXplb2YuLi4oX1R5cGVzKV07Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3QgdHlwZW5hbWUgX192aXNpdG9y
X3RhYmxlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fZnVuY190eXBlIF9fdmlzaXRvcl90YWJsZTxf
VmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbc2l6ZW9mLi4uKF9UeXBlcyldPXsKLSAg
ICAgICAgJl9fdHJhbXBvbGluZV9mdW5jPF9UeXBlcz4uLi4KKyAgICB0ZW1wbGF0ZSA8c3RkOjpz
aXplX3QgST4KKyAgICBzdHJ1Y3QgaXNfaW5fcGxhY2VfaW5kZXg8aW5fcGxhY2VfaW5kZXhfdDxJ
Pj4gOiBzdGQ6OnRydWVfdHlwZSB7fTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAg
IHN0cnVjdCBpc19pbl9wbGFjZV90eXBlIDogc3RkOjpmYWxzZV90eXBlIHt9OworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX2luX3BsYWNlX3R5cGU8aW5fcGxhY2Vf
dHlwZV90PFQ+PiA6IHN0ZDo6dHJ1ZV90eXBlIHt9OworCisgIH0gIC8vIGRldGFpbAorCisgIHRl
bXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgY2xhc3MgdmFyaWFudCB7CisgICAgc3RhdGljX2Fz
c2VydCgwIDwgc2l6ZW9mLi4uKFRzKSwKKyAgICAgICAgICAgICAgICAgICJ2YXJpYW50IG11c3Qg
Y29uc2lzdCBvZiBhdCBsZWFzdCBvbmUgYWx0ZXJuYXRpdmUuIik7CisKKyAgICBzdGF0aWNfYXNz
ZXJ0KG1wYXJrOjpsaWI6OmFsbDwhc3RkOjppc19hcnJheTxUcz46OnZhbHVlLi4uPjo6dmFsdWUs
CisgICAgICAgICAgICAgICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYW4gYXJyYXkgdHlwZSBh
cyBhbiBhbHRlcm5hdGl2ZS4iKTsKKworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxs
PCFzdGQ6OmlzX3JlZmVyZW5jZTxUcz46OnZhbHVlLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAg
ICAgICAidmFyaWFudCBjYW4gbm90IGhhdmUgYSByZWZlcmVuY2UgdHlwZSBhcyBhbiBhbHRlcm5h
dGl2ZS4iKTsKKworICAgIHN0YXRpY19hc3NlcnQobXBhcms6OmxpYjo6YWxsPCFzdGQ6OmlzX3Zv
aWQ8VHM+Ojp2YWx1ZS4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgInZhcmlhbnQgY2Fu
IG5vdCBoYXZlIGEgdm9pZCB0eXBlIGFzIGFuIGFsdGVybmF0aXZlLiIpOworCisgICAgcHVibGlj
OgorICAgIHRlbXBsYXRlIDwKKyAgICAgICAgdHlwZW5hbWUgRnJvbnQgPSBtcGFyazo6bGliOjp0
eXBlX3BhY2tfZWxlbWVudF90PDAsIFRzLi4uPiwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8RnJvbnQ+Ojp2YWx1ZSwgaW50PiA9
IDA+CisgICAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50KCkgbm9leGNlcHQoCisgICAgICAgIHN0
ZDo6aXNfbm90aHJvd19kZWZhdWx0X2NvbnN0cnVjdGlibGU8RnJvbnQ+Ojp2YWx1ZSkKKyAgICAg
ICAgOiBpbXBsXyhpbl9wbGFjZV9pbmRleF90PDA+e30pIHt9CisKKyAgICB2YXJpYW50KGNvbnN0
IHZhcmlhbnQgJikgPSBkZWZhdWx0OworICAgIHZhcmlhbnQodmFyaWFudCAmJikgPSBkZWZhdWx0
OworCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBBcmcsCisgICAgICAgIHR5cGVu
YW1lIERlY2F5ZWQgPSBtcGFyazo6bGliOjpkZWNheV90PEFyZz4sCisgICAgICAgIG1wYXJrOjps
aWI6OmVuYWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8RGVjYXllZCwgdmFyaWFudD46OnZhbHVlLCBp
bnQ+ID0gMCwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8IWRldGFpbDo6aXNfaW5f
cGxhY2VfaW5kZXg8RGVjYXllZD46OnZhbHVlLCBpbnQ+ID0gMCwKKyAgICAgICAgbXBhcms6Omxp
Yjo6ZW5hYmxlX2lmX3Q8IWRldGFpbDo6aXNfaW5fcGxhY2VfdHlwZTxEZWNheWVkPjo6dmFsdWUs
IGludD4gPSAwLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWlsOjpiZXN0X21hdGNoPEFy
ZywgVHMuLi4+Ojp2YWx1ZSwKKyAgICAgICAgdHlwZW5hbWUgVCA9IG1wYXJrOjpsaWI6OnR5cGVf
cGFja19lbGVtZW50X3Q8SSwgVHMuLi4+LAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZf
dDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJnPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlu
bGluZSBjb25zdGV4cHIgdmFyaWFudChBcmcgJiZhcmcpIG5vZXhjZXB0KAorICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULCBBcmc+Ojp2YWx1ZSkKKyAgICAgICAgOiBpbXBs
Xyhpbl9wbGFjZV9pbmRleF90PEk+e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpKSB7
fQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICBzdGQ6OnNpemVfdCBJLAorICAgICAgICB0eXBl
bmFtZS4uLiBBcmdzLAorICAgICAgICB0eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNr
X2VsZW1lbnRfdDxJLCBUcy4uLj4sCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0
ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAgIGlu
bGluZSBleHBsaWNpdCBjb25zdGV4cHIgdmFyaWFudCgKKyAgICAgICAgaW5fcGxhY2VfaW5kZXhf
dDxJPiwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2VwdChzdGQ6OmlzX25vdGhyb3df
Y29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSkKKyAgICAgICAgOiBpbXBs
Xyhpbl9wbGFjZV9pbmRleF90PEk+e30sIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncyku
Li4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6ZV90IEksCisgICAgICAg
IHR5cGVuYW1lIFVwLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICB0eXBlbmFt
ZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBUcy4uLj4sCisgICAgICAg
IG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVy
X2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4K
KyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQoCisgICAgICAgIGluX3BsYWNl
X2luZGV4X3Q8ST4sCisgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gaWwsCisgICAg
ICAgIEFyZ3MgJiYuLi4gYXJncykgbm9leGNlcHQoc3RkOjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNfbm90aHJvd19jb25zdHJ1Y3RpYmxlPAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSkKKyAgICAg
ICAgOiBpbXBsXyhpbl9wbGFjZV9pbmRleF90PEk+e30sIGlsLCBtcGFyazo6bGliOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSB7fQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBU
LAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAorICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0
YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4uLj46OnZhbHVlLAorICAgICAgICBtcGFyazo6
bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJncy4uLj46OnZhbHVl
LCBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgZXhwbGljaXQgY29uc3RleHByIHZhcmlhbnQoCisgICAg
ICAgIGluX3BsYWNlX3R5cGVfdDxUPiwKKyAgICAgICAgQXJncyAmJi4uLiBhcmdzKSBub2V4Y2Vw
dChzdGQ6OmlzX25vdGhyb3dfY29uc3RydWN0aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1
ZSkKKyAgICAgICAgOiBpbXBsXyhpbl9wbGFjZV9pbmRleF90PEk+e30sIG1wYXJrOjpsaWI6OmZv
cndhcmQ8QXJncz4oYXJncykuLi4pIHt9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHR5cGVu
YW1lIFQsCisgICAgICAgIHR5cGVuYW1lIFVwLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAor
ICAgICAgICBzdGQ6OnNpemVfdCBJID0gZGV0YWlsOjpmaW5kX2luZGV4X3NmaW5hZTxULCBUcy4u
Lj46OnZhbHVlLAorICAgICAgICBtcGFyazo6bGliOjplbmFibGVfaWZfdDxzdGQ6OmlzX2NvbnN0
cnVjdGlibGU8VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjppbml0aWFsaXplcl9saXN0PFVwPiAmLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmdzLi4uPjo6dmFsdWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50PiA9IDA+CisgICAgaW5saW5lIGV4cGxpY2l0IGNvbnN0ZXhwciB2YXJpYW50
KAorICAgICAgICBpbl9wbGFjZV90eXBlX3Q8VD4sCisgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJf
bGlzdDxVcD4gaWwsCisgICAgICAgIEFyZ3MgJiYuLi4gYXJncykgbm9leGNlcHQoc3RkOjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbm90aHJvd19jb25zdHJ1Y3Rp
YmxlPAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3Mu
Li4+Ojp2YWx1ZSkKKyAgICAgICAgOiBpbXBsXyhpbl9wbGFjZV9pbmRleF90PEk+e30sIGlsLCBt
cGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSB7fQorCisgICAgfnZhcmlhbnQoKSA9
IGRlZmF1bHQ7CisKKyAgICB2YXJpYW50ICZvcGVyYXRvcj0oY29uc3QgdmFyaWFudCAmKSA9IGRl
ZmF1bHQ7CisgICAgdmFyaWFudCAmb3BlcmF0b3I9KHZhcmlhbnQgJiYpID0gZGVmYXVsdDsKKwor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcsCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVu
YWJsZV9pZl90PCFzdGQ6OmlzX3NhbWU8bXBhcms6OmxpYjo6ZGVjYXlfdDxBcmc+LCB2YXJpYW50
Pjo6dmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDAsCisgICAg
ICAgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmJlc3RfbWF0Y2g8QXJnLCBUcy4uLj46
OnZhbHVlLAorICAgICAgICAgICAgICB0eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNr
X2VsZW1lbnRfdDxJLCBUcy4uLj4sCisgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9p
Zl90PChzdGQ6OmlzX2Fzc2lnbmFibGU8VCAmLCBBcmc+Ojp2YWx1ZSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX2NvbnN0cnVjdGlibGU8VCwgQXJnPjo6dmFsdWUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgorICAgIGlubGluZSB2
YXJpYW50ICZvcGVyYXRvcj0oQXJnICYmYXJnKSBub2V4Y2VwdCgKKyAgICAgICAgKHN0ZDo6aXNf
bm90aHJvd19hc3NpZ25hYmxlPFQgJiwgQXJnPjo6dmFsdWUgJiYKKyAgICAgICAgIHN0ZDo6aXNf
bm90aHJvd19jb25zdHJ1Y3RpYmxlPFQsIEFyZz46OnZhbHVlKSkgeworICAgICAgaW1wbF8udGVt
cGxhdGUgYXNzaWduPEk+KG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJnPihhcmcpKTsKKyAgICAgIHJl
dHVybiAqdGhpczsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6ZV90
IEksCisgICAgICAgIHR5cGVuYW1lLi4uIEFyZ3MsCisgICAgICAgIHR5cGVuYW1lIFQgPSBtcGFy
azo6bGliOjp0eXBlX3BhY2tfZWxlbWVudF90PEksIFRzLi4uPiwKKyAgICAgICAgbXBhcms6Omxp
Yjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsIEFyZ3MuLi4+Ojp2YWx1ZSwg
aW50PiA9IDA+CisgICAgaW5saW5lIFQgJmVtcGxhY2UoQXJncyAmJi4uLiBhcmdzKSB7CisgICAg
ICByZXR1cm4gaW1wbF8udGVtcGxhdGUgZW1wbGFjZTxJPihtcGFyazo6bGliOjpmb3J3YXJkPEFy
Z3M+KGFyZ3MpLi4uKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHN0ZDo6c2l6
ZV90IEksCisgICAgICAgIHR5cGVuYW1lIFVwLAorICAgICAgICB0eXBlbmFtZS4uLiBBcmdzLAor
ICAgICAgICB0eXBlbmFtZSBUID0gbXBhcms6OmxpYjo6dHlwZV9wYWNrX2VsZW1lbnRfdDxJLCBU
cy4uLj4sCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90PHN0ZDo6aXNfY29uc3RydWN0
aWJsZTxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OmluaXRpYWxpemVyX2xpc3Q8VXA+ICYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZ3MuLi4+Ojp2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQ+ID0gMD4KKyAgICBpbmxpbmUgVCAmZW1wbGFjZShzdGQ6OmluaXRpYWxpemVyX2xp
c3Q8VXA+IGlsLCBBcmdzICYmLi4uIGFyZ3MpIHsKKyAgICAgIHJldHVybiBpbXBsXy50ZW1wbGF0
ZSBlbXBsYWNlPEk+KGlsLCBtcGFyazo6bGliOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8CisgICAgICAgIHR5cGVuYW1lIFQsCisgICAgICAgIHR5cGVu
YW1lLi4uIEFyZ3MsCisgICAgICAgIHN0ZDo6c2l6ZV90IEkgPSBkZXRhaWw6OmZpbmRfaW5kZXhf
c2ZpbmFlPFQsIFRzLi4uPjo6dmFsdWUsCisgICAgICAgIG1wYXJrOjpsaWI6OmVuYWJsZV9pZl90
PHN0ZDo6aXNfY29uc3RydWN0aWJsZTxULCBBcmdzLi4uPjo6dmFsdWUsIGludD4gPSAwPgorICAg
IGlubGluZSBUICZlbXBsYWNlKEFyZ3MgJiYuLi4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxf
LnRlbXBsYXRlIGVtcGxhY2U8ST4obXBhcms6OmxpYjo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPAorICAgICAgICB0eXBlbmFtZSBULAorICAgICAgICB0
eXBlbmFtZSBVcCwKKyAgICAgICAgdHlwZW5hbWUuLi4gQXJncywKKyAgICAgICAgc3RkOjpzaXpl
X3QgSSA9IGRldGFpbDo6ZmluZF9pbmRleF9zZmluYWU8VCwgVHMuLi4+Ojp2YWx1ZSwKKyAgICAg
ICAgbXBhcms6OmxpYjo6ZW5hYmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPFQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxVcD4gJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJncy4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAw
PgorICAgIGlubGluZSBUICZlbXBsYWNlKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxVcD4gaWwsIEFy
Z3MgJiYuLi4gYXJncykgeworICAgICAgcmV0dXJuIGltcGxfLnRlbXBsYXRlIGVtcGxhY2U8ST4o
aWwsIG1wYXJrOjpsaWI6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgIH0KKworICAgIGlu
bGluZSBjb25zdGV4cHIgYm9vbCB2YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgY29uc3Qgbm9leGNl
cHQgeworICAgICAgcmV0dXJuIGltcGxfLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKTsKKyAgICB9
CisKKyAgICBpbmxpbmUgY29uc3RleHByIHN0ZDo6c2l6ZV90IGluZGV4KCkgY29uc3Qgbm9leGNl
cHQgeworICAgICAgcmV0dXJuIGltcGxfLmluZGV4KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUg
PAorICAgICAgICBib29sIER1bW15ID0gdHJ1ZSwKKyAgICAgICAgbXBhcms6OmxpYjo6ZW5hYmxl
X2lmX3Q8bXBhcms6OmxpYjo6YWxsPER1bW15LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZhbHVlICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wYXJrOjpsaWI6OmlzX3N3YXBwYWJsZTxUcz46
OnZhbHVlKS4uLj46OnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludD4gPSAwPgor
ICAgIGlubGluZSB2b2lkIHN3YXAodmFyaWFudCAmdGhhdCkgbm9leGNlcHQoCisgICAgICAgIG1w
YXJrOjpsaWI6OmFsbDwoc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxUcz46OnZh
bHVlICYmCisgICAgICAgICAgICAgICAgICBtcGFyazo6bGliOjppc19ub3Rocm93X3N3YXBwYWJs
ZTxUcz46OnZhbHVlKS4uLj46OnZhbHVlKSB7CisgICAgICBpbXBsXy5zd2FwKHRoYXQuaW1wbF8p
OworICAgIH0KKworICAgIHByaXZhdGU6CisgICAgZGV0YWlsOjppbXBsPFRzLi4uPiBpbXBsXzsK
KworICAgIGZyaWVuZCBzdHJ1Y3QgZGV0YWlsOjphY2Nlc3M6OnZhcmlhbnQ7CisgICAgZnJpZW5k
IHN0cnVjdCBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgIH07CisKKyAgdGVtcGxhdGUg
PHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wg
aG9sZHNfYWx0ZXJuYXRpdmUoY29uc3QgdmFyaWFudDxUcy4uLj4gJnYpIG5vZXhjZXB0IHsKKyAg
ICByZXR1cm4gdi5pbmRleCgpID09IEk7CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgYm9vbCBob2xkc19hbHRlcm5hdGl2
ZShjb25zdCB2YXJpYW50PFRzLi4uPiAmdikgbm9leGNlcHQgeworICAgIHJldHVybiBob2xkc19h
bHRlcm5hdGl2ZTxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPih2
KTsKKyAgfQorCisgIG5hbWVzcGFjZSBkZXRhaWwgeworICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVf
dCBJLCB0eXBlbmFtZSBWPgorICAgIHN0cnVjdCBnZW5lcmljX2dldF9pbXBsIHsKKyAgICAgIGNv
bnN0ZXhwciBnZW5lcmljX2dldF9pbXBsKGludCkge30KKworICAgICAgY29uc3RleHByIEFVVE9f
UkVGUkVGIG9wZXJhdG9yKCkoViAmJnYpIGNvbnN0CisgICAgICAgIEFVVE9fUkVGUkVGX1JFVFVS
TigKKyAgICAgICAgICAgIGFjY2Vzczo6dmFyaWFudDo6Z2V0X2FsdDxJPihtcGFyazo6bGliOjpm
b3J3YXJkPFY+KHYpKS52YWx1ZSkKICAgICB9OwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRv
cix0eXBlbmFtZSAuLi4gX1R5cGVzPgotY29uc3RleHByIHR5cGVuYW1lIF9fdmlzaXRvcl9yZXR1
cm5fdHlwZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3R5cGUKLXZpc2l0KF9WaXNpdG9yJiYgX192
aXNpdG9yLFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKLSAgICByZXR1cm4gKF9fdi52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkpCi0gICAgICAgID8gX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8
dHlwZW5hbWUgX192aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9UeXBlcy4uLj46Ol9fdHlw
ZT4oIlZpc2l0aW5nIG9mIGVtcHR5IFZhcmlhbnQiKQotICAgICAgICA6IF9fdmlzaXRvcl90YWJs
ZTxfVmlzaXRvcixfVHlwZXMuLi4+OjpfX3RyYW1wb2xpbmVbX192LmluZGV4KCldKF9fdmlzaXRv
cixfX3YpOwotfQorICAgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZSBWPgorICAg
IGlubGluZSBjb25zdGV4cHIgQVVUT19SRUZSRUYgZ2VuZXJpY19nZXQoViAmJnYpCisgICAgICBB
VVRPX1JFRlJFRl9SRVRVUk4oZ2VuZXJpY19nZXRfaW1wbDxJLCBWPigKKyAgICAgICAgICBob2xk
c19hbHRlcm5hdGl2ZTxJPih2KSA/IDAgOiAodGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzKCksIDAp
KSgKKyAgICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFY+KHYpKSkKKyAgfSAgLy8gbmFtZXNw
YWNlIGRldGFpbAorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4K
KyAgaW5saW5lIGNvbnN0ZXhwciB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUcy4u
Lj4+ICZnZXQoCisgICAgICB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBkZXRhaWw6
OmdlbmVyaWNfZ2V0PEk+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5
cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJ
LCB2YXJpYW50PFRzLi4uPj4gJiZnZXQoCisgICAgICB2YXJpYW50PFRzLi4uPiAmJnYpIHsKKyAg
ICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldDxJPihtcGFyazo6bGliOjptb3ZlKHYpKTsKKyAg
fQorCisgIHRlbXBsYXRlIDxzdGQ6OnNpemVfdCBJLCB0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5l
IGNvbnN0ZXhwciBjb25zdCB2YXJpYW50X2FsdGVybmF0aXZlX3Q8SSwgdmFyaWFudDxUcy4uLj4+
ICZnZXQoCisgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmdikgeworICAgIHJldHVybiBkZXRh
aWw6OmdlbmVyaWNfZ2V0PEk+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEks
IHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IHZhcmlhbnRfYWx0ZXJu
YXRpdmVfdDxJLCB2YXJpYW50PFRzLi4uPj4gJiZnZXQoCisgICAgICBjb25zdCB2YXJpYW50PFRz
Li4uPiAmJnYpIHsKKyAgICByZXR1cm4gZGV0YWlsOjpnZW5lcmljX2dldDxJPihtcGFyazo6bGli
Ojptb3ZlKHYpKTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBU
cz4KKyAgaW5saW5lIGNvbnN0ZXhwciBUICZnZXQodmFyaWFudDxUcy4uLj4gJnYpIHsKKyAgICBy
ZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4uPjo6dmFsdWU+KHYp
OworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxp
bmUgY29uc3RleHByIFQgJiZnZXQodmFyaWFudDxUcy4uLj4gJiZ2KSB7CisgICAgcmV0dXJuIGdl
dDxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46OnZhbHVlPihtcGFyazo6bGli
Ojptb3ZlKHYpKTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBU
cz4KKyAgaW5saW5lIGNvbnN0ZXhwciBjb25zdCBUICZnZXQoY29uc3QgdmFyaWFudDxUcy4uLj4g
JnYpIHsKKyAgICByZXR1cm4gZ2V0PGRldGFpbDo6ZmluZF9pbmRleF9jaGVja2VkPFQsIFRzLi4u
Pjo6dmFsdWU+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IFRzPgorICBpbmxpbmUgY29uc3RleHByIGNvbnN0IFQgJiZnZXQoY29uc3QgdmFyaWFudDxUcy4u
Lj4gJiZ2KSB7CisgICAgcmV0dXJuIGdldDxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBU
cy4uLj46OnZhbHVlPihtcGFyazo6bGliOjptb3ZlKHYpKTsKKyAgfQorCisgIG5hbWVzcGFjZSBk
ZXRhaWwgeworCisgICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IEksIHR5cGVuYW1lIFY+CisgICAg
aW5saW5lIGNvbnN0ZXhwciAvKiBhdXRvICogKi8gQVVUTyBnZW5lcmljX2dldF9pZihWICp2KSBu
b2V4Y2VwdAorICAgICAgQVVUT19SRVRVUk4odiAmJiBob2xkc19hbHRlcm5hdGl2ZTxJPigqdikK
KyAgICAgICAgICAgICAgICAgICAgICA/IG1wYXJrOjpsaWI6OmFkZHJlc3NvZihhY2Nlc3M6OnZh
cmlhbnQ6OmdldF9hbHQ8ST4oKnYpLnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIDogbnVs
bHB0cikKKworICB9ICAvLyBuYW1lc3BhY2UgZGV0YWlsCisKKyAgdGVtcGxhdGUgPHN0ZDo6c2l6
ZV90IEksIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6OmFk
ZF9wb2ludGVyX3Q8dmFyaWFudF9hbHRlcm5hdGl2ZV90PEksIHZhcmlhbnQ8VHMuLi4+Pj4KKyAg
Z2V0X2lmKHZhcmlhbnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7CisgICAgcmV0dXJuIGRldGFpbDo6
Z2VuZXJpY19nZXRfaWY8ST4odik7CisgIH0KKworICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgSSwg
dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIgbXBhcms6OmxpYjo6YWRkX3BvaW50
ZXJfdDwKKyAgICAgIGNvbnN0IHZhcmlhbnRfYWx0ZXJuYXRpdmVfdDxJLCB2YXJpYW50PFRzLi4u
Pj4+CisgIGdldF9pZihjb25zdCB2YXJpYW50PFRzLi4uPiAqdikgbm9leGNlcHQgeworICAgIHJl
dHVybiBkZXRhaWw6OmdlbmVyaWNfZ2V0X2lmPEk+KHYpOworICB9CisKKyAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIG1wYXJrOjpsaWI6
OmFkZF9wb2ludGVyX3Q8VD4KKyAgZ2V0X2lmKHZhcmlhbnQ8VHMuLi4+ICp2KSBub2V4Y2VwdCB7
CisgICAgcmV0dXJuIGdldF9pZjxkZXRhaWw6OmZpbmRfaW5kZXhfY2hlY2tlZDxULCBUcy4uLj46
OnZhbHVlPih2KTsKKyAgfQorCisgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBU
cz4KKyAgaW5saW5lIGNvbnN0ZXhwciBtcGFyazo6bGliOjphZGRfcG9pbnRlcl90PGNvbnN0IFQ+
CisgIGdldF9pZihjb25zdCB2YXJpYW50PFRzLi4uPiAqdikgbm9leGNlcHQgeworICAgIHJldHVy
biBnZXRfaWY8ZGV0YWlsOjpmaW5kX2luZGV4X2NoZWNrZWQ8VCwgVHMuLi4+Ojp2YWx1ZT4odik7
CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZyaHMpIHsKKyAgICB1
c2luZyBkZXRhaWw6OnZpc2l0YXRpb246OnZhcmlhbnQ7CisgICAgdXNpbmcgbXBhcms6OmxpYjo6
ZXF1YWxfdG87CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRl
eCgpICE9IHJocy5pbmRleCgpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxlc3Nf
YnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgZXF1YWxfdG97fSwgbGhzLCByaHMpOworI2Vsc2UKKyAgICBy
ZXR1cm4gbGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgKGxocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgIHZhcmlhbnQ6OnZpc2l0X3ZhbHVl
X2F0KGxocy5pbmRleCgpLCBlcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlmCisgIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5hbWUgLi4uIF9WYXJpYW50cz4KLXN0cnVj
dCBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGV7Ci0gICAgdHlwZWRlZiBkZWNsdHlwZShzdGQ6
OmRlY2x2YWw8X1Zpc2l0b3ImPigpKGdldDwwPihzdGQ6OmRlY2x2YWw8X1ZhcmlhbnRzPigpKS4u
LikpCi0gICAgX190eXBlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgsdHlw
ZW5hbWUgX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI7Ci0KLXRlbXBsYXRlPHB0cmRp
ZmZfdCAuLi4gX0luZGljZXM+Ci1zdHJ1Y3QgX192aXNpdF9oZWxwZXI8MCxfX2luZGV4X3NlcXVl
bmNlPF9JbmRpY2VzLi4uPj57Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zpc2l0b3IsdHlwZW5h
bWUgLi4uIF9WYXJpYW50cz4KLSAgICBzdGF0aWMgY29uc3RleHByIHR5cGVuYW1lIF9fbXVsdGlf
dmlzaXRvcl9yZXR1cm5fdHlwZTxfVmlzaXRvcixfVmFyaWFudHMuLi4+OjpfX3R5cGUKLSAgICBf
X3Zpc2l0KF9WaXNpdG9yJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiAuLi4gX192KXsKLSAgICAgICAg
cmV0dXJuIF9fdmlzaXRvcihnZXQ8X0luZGljZXM+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPHNpemVfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9BcmdzPgotc3RydWN0IF9fYXJnX3Nl
bGVjdG9yX3Q7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9IZWFkLHR5cGVuYW1lIC4uLiBfUmVzdD4K
LXN0cnVjdCBfX2FyZ19zZWxlY3Rvcl90PDAsX0hlYWQsX1Jlc3QuLi4+ewotICAgIHR5cGVkZWYg
X0hlYWQgX190eXBlOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9I
ZWFkJiBfX2hlYWQsX1Jlc3QmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX2hlYWQ7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8c2l6ZV90IF9JbmRleCx0eXBlbmFtZSBfSGVhZCx0eXBlbmFtZSAuLi4g
X1Jlc3Q+Ci1zdHJ1Y3QgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgsX0hlYWQsX1Jlc3QuLi4+ewot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19hcmdfc2VsZWN0b3JfdDxfSW5kZXgtMSxfUmVzdC4uLj46
Ol9fdHlwZSBfX3R5cGU7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfX3R5cGUmIF9fc2VsZWN0KF9I
ZWFkJixfUmVzdCYgLi4uIF9fcmVzdCl7Ci0gICAgICAgIHJldHVybiBfX2FyZ19zZWxlY3Rvcl90
PF9JbmRleC0xLF9SZXN0Li4uPjo6X19zZWxlY3QoX19yZXN0Li4uKTsKLSAgICB9Ci19OwotCi10
ZW1wbGF0ZTxzaXplX3QgX0luZGV4LHR5cGVuYW1lIC4uLiBfQXJncz4KLWNvbnN0ZXhwciB0eXBl
bmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZSYmIF9fYXJnX3Nl
bGVjdG9yKF9BcmdzJiYgLi4uIF9fYXJncyl7Ci0gICAgcmV0dXJuIHN0ZDo6Zm9yd2FyZDx0eXBl
bmFtZSBfX2FyZ19zZWxlY3Rvcl90PF9JbmRleCxfQXJncy4uLj46Ol9fdHlwZT4oCi0gICAgICAg
IF9fYXJnX3NlbGVjdG9yX3Q8X0luZGV4LF9BcmdzLi4uPjo6X19zZWxlY3QoX19hcmdzLi4uKSk7
Ci19CisgIHRlbXBsYXRlIDx0eXBlbmFtZS4uLiBUcz4KKyAgaW5saW5lIGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yIT0oY29uc3QgdmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5n
IGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpub3Rf
ZXF1YWxfdG87CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy5pbmRl
eCgpICE9IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLnZhbHVlbGVzc19i
eV9leGNlcHRpb24oKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92
YWx1ZV9hdChsaHMuaW5kZXgoKSwgbm90X2VxdWFsX3Rve30sIGxocywgcmhzKTsKKyNlbHNlCisg
ICAgcmV0dXJuIGxocy5pbmRleCgpICE9IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICghbGhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAgdmFyaWFudDo6dmlzaXRf
dmFsdWVfYXQobGhzLmluZGV4KCksIG5vdF9lcXVhbF90b3t9LCBsaHMsIHJocykpOworI2VuZGlm
CisgIH0KIAotdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCxzaXplX3QgX1ZhcmlhbnRJbmRleCxw
dHJkaWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMnsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFtZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRp
YyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9y
LF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9fdmlzaXQoX1Zpc2l0b3ImIF9fdmlzaXRvcixf
VmFyaWFudHMmJiAuLi4gX192KXsKLSAgICAgICAgcmV0dXJuIChfX2FyZ19zZWxlY3RvcjxfVmFy
aWFudEluZGV4LTE+KF9fdi4uLikuaW5kZXgoKT09X0luZGV4KQotICAgICAgICAgICAgPyBfX3Zp
c2l0X2hlbHBlcjxfVmFyaWFudEluZGV4LTEsX19pbmRleF9zZXF1ZW5jZTxfSW5kZXgsX0luZGlj
ZXMuLi4+Pjo6X192aXNpdChfX3Zpc2l0b3Isc3RkOjpmb3J3YXJkPF9WYXJpYW50cz4oX192KS4u
LikKLSAgICAgICAgICAgIDogX192aXNpdF9oZWxwZXIyPF9JbmRleC0xLF9WYXJpYW50SW5kZXgs
X0luZGljZXMuLi4+OjpfX3Zpc2l0KF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihf
X3YpLi4uKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTxzaXplX3QgX1ZhcmlhbnRJbmRleCxwdHJk
aWZmX3QgLi4uIF9JbmRpY2VzPgotc3RydWN0IF9fdmlzaXRfaGVscGVyMjwtMSxfVmFyaWFudElu
ZGV4LF9JbmRpY2VzLi4uPnsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmlzaXRvcix0eXBlbmFt
ZSAuLi4gX1ZhcmlhbnRzPgotICAgIHN0YXRpYyBjb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotICAgIF9f
dmlzaXQoX1Zpc2l0b3ImLF9WYXJpYW50cyYmIC4uLil7Ci0gICAgICAgIHJldHVybiBfX3Rocm93
X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8
X1Zpc2l0b3IsX1ZhcmlhbnRzLi4uPjo6X190eXBlPigiVmlzaXRpbmcgb2YgZW1wdHkgVmFyaWFu
dCIpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9f
dmFyaWFudF90eXBlX2NvdW50OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3Ry
dWN0IF9fdmFyaWFudF90eXBlX2NvdW50PFZhcmlhbnQ8X1R5cGVzLi4uPj57Ci0gICAgc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1zaXplb2YuLi4oX1R5cGVzKTsKLX07Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIF9WYXJpYW50Pgotc3RydWN0IF9fdmFyaWFudF90eXBlX2NvdW50PF9WYXJp
YW50Jj57Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgX192YWx1ZT1fX3ZhcmlhbnRfdHlw
ZV9jb3VudDxfVmFyaWFudD46Ol9fdmFsdWU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBfVmFy
aWFudD4KLXN0cnVjdCBfX3ZhcmlhbnRfdHlwZV9jb3VudDxfVmFyaWFudCBjb25zdCY+ewotICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IF9fdmFsdWU9X192YXJpYW50X3R5cGVfY291bnQ8X1Zh
cmlhbnQ+OjpfX3ZhbHVlOwotfTsKLQotdGVtcGxhdGU8c2l6ZV90IF9WYXJpYW50SW5kZXgscHRy
ZGlmZl90IC4uLiBfSW5kaWNlcz4KLXN0cnVjdCBfX3Zpc2l0X2hlbHBlcjxfVmFyaWFudEluZGV4
LF9faW5kZXhfc2VxdWVuY2U8X0luZGljZXMuLi4+PnsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9WaXNpdG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB0
eXBlbmFtZSBfX211bHRpX3Zpc2l0b3JfcmV0dXJuX3R5cGU8X1Zpc2l0b3IsX1ZhcmlhbnRzLi4u
Pjo6X190eXBlCi0gICAgX192aXNpdChfVmlzaXRvciYgX192aXNpdG9yLF9WYXJpYW50cyYmIC4u
LiBfX3YpewotICAgICAgICByZXR1cm4gX192aXNpdF9oZWxwZXIyPAotICAgICAgICAgICAgX192
YXJpYW50X3R5cGVfY291bnQ8Ci0gICAgICAgICAgICAgICAgdHlwZW5hbWUgX19hcmdfc2VsZWN0
b3JfdDwKLSAgICAgICAgICAgICAgICAgICAgX1ZhcmlhbnRJbmRleC0xLF9WYXJpYW50cy4uLj46
Ol9fdHlwZT46Ol9fdmFsdWUtMSwKLSAgICAgICAgICAgIF9WYXJpYW50SW5kZXgsX0luZGljZXMu
Li4+OjpfX3Zpc2l0KAotICAgICAgICAgICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1Zh
cmlhbnRzJiY+KF9fdikuLi4pOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIF9WaXNp
dG9yLHR5cGVuYW1lIC4uLiBfVmFyaWFudHM+Ci1jb25zdGV4cHIgdHlwZW5hbWUgX19tdWx0aV92
aXNpdG9yX3JldHVybl90eXBlPF9WaXNpdG9yLF9WYXJpYW50cy4uLj46Ol9fdHlwZQotdmlzaXQo
X1Zpc2l0b3ImJiBfX3Zpc2l0b3IsX1ZhcmlhbnRzJiYgLi4uIF9fdil7Ci0gICAgcmV0dXJuIF9f
dmlzaXRfaGVscGVyPHNpemVvZi4uLihfVmFyaWFudHMpLF9faW5kZXhfc2VxdWVuY2U8Pj46Ol9f
dmlzaXQoCi0gICAgICAgIF9fdmlzaXRvcixzdGQ6OmZvcndhcmQ8X1ZhcmlhbnRzPihfX3YpLi4u
KTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZsaHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4uLj4gJnJocykgeworICAgIHVzaW5n
IGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1c2luZyBtcGFyazo6bGliOjpsZXNz
OworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgorICAgIGlmIChyaHMudmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy52YWx1ZWxlc3NfYnlfZXhj
ZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgp
KSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSkgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwg
bGVzc3t9LCBsaHMsIHJocyk7CisjZWxzZQorICAgIHJldHVybiAhcmhzLnZhbHVlbGVzc19ieV9l
eGNlcHRpb24oKSAmJgorICAgICAgICAgICAobGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8
fCBsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpIHx8CisgICAgICAgICAgICAobGhzLmluZGV4KCkg
PT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChs
aHMuaW5kZXgoKSwgbGVzc3t9LCBsaHMsIHJocykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7
Ci0gICAgcmV0dXJuIChfX2xocy5pbmRleCgpPT1fX3Jocy5pbmRleCgpKSAmJgotICAgICAgICAo
KF9fbGhzLmluZGV4KCk9PS0xKSB8fAotICAgICAgICAgX19lcXVhbGl0eV9vcF90YWJsZTxWYXJp
YW50PF9UeXBlcy4uLj4+OjpfX2VxdWFsaXR5X2NvbXBhcmVbX19saHMuaW5kZXgoKV0oCi0gICAg
ICAgICAgICAgX19saHMsX19yaHMpKTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHZhcmlhbnQ8VHMuLi4+ICZs
aHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyaWFudDxUcy4u
Lj4gJnJocykgeworICAgIHVzaW5nIGRldGFpbDo6dmlzaXRhdGlvbjo6dmFyaWFudDsKKyAgICB1
c2luZyBtcGFyazo6bGliOjpncmVhdGVyOworI2lmZGVmIE1QQVJLX0NQUDE0X0NPTlNURVhQUgor
ICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAg
aWYgKHJocy52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChs
aHMuaW5kZXgoKSA+IHJocy5pbmRleCgpKSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobGhzLmluZGV4
KCkgPCByaHMuaW5kZXgoKSkgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB2YXJpYW50Ojp2aXNp
dF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJocyk7CisjZWxzZQorICAg
IHJldHVybiAhbGhzLnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSAmJgorICAgICAgICAgICAocmhz
LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSB8fCBsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgpIHx8
CisgICAgICAgICAgICAobGhzLmluZGV4KCkgPT0gcmhzLmluZGV4KCkgJiYKKyAgICAgICAgICAg
ICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgZ3JlYXRlcnt9LCBsaHMsIHJo
cykpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFy
aWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM9PV9fcmhz
KTsKLX0KKyAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNp
bmcgZGV0YWlsOjp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6Omxl
c3NfZXF1YWw7CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKGxocy52YWx1
ZWxlc3NfYnlfZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChyaHMudmFsdWVsZXNz
X2J5X2V4Y2VwdGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpIDwgcmhz
LmluZGV4KCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA+IHJocy5pbmRleCgp
KSByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5p
bmRleCgpLCBsZXNzX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIGxocy52
YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFyaHMudmFsdWVsZXNzX2J5
X2V4Y2VwdGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPCByaHMuaW5kZXgoKSB8
fAorICAgICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAg
ICAgICB2YXJpYW50Ojp2aXNpdF92YWx1ZV9hdChsaHMuaW5kZXgoKSwgbGVzc19lcXVhbHt9LCBs
aHMsIHJocykpKSk7CisjZW5kaWYKKyAgfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVz
PgotY29uc3RleHByIGJvb2wgb3BlcmF0b3I8KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19s
aHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuIChfX2xocy5p
bmRleCgpPF9fcmhzLmluZGV4KCkpIHx8Ci0gICAgICAgICgoX19saHMuaW5kZXgoKT09X19yaHMu
aW5kZXgoKSkgJiYKLSAgICAgICAgICgoX19saHMuaW5kZXgoKSE9LTEpICYmCi0gICAgICAgICAg
X19sZXNzX3RoYW5fb3BfdGFibGU8VmFyaWFudDxfVHlwZXMuLi4+Pjo6Ci0gICAgICAgICAgX19s
ZXNzX3RoYW5fY29tcGFyZVtfX2xocy5pbmRleCgpXShfX2xocyxfX3JocykpKTsKLX0KKyAgdGVt
cGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+
PShjb25zdCB2YXJpYW50PFRzLi4uPiAmbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2YXJpYW50PFRzLi4uPiAmcmhzKSB7CisgICAgdXNpbmcgZGV0YWlsOjp2
aXNpdGF0aW9uOjp2YXJpYW50OworICAgIHVzaW5nIG1wYXJrOjpsaWI6OmdyZWF0ZXJfZXF1YWw7
CisjaWZkZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgICAgaWYgKHJocy52YWx1ZWxlc3NfYnlf
ZXhjZXB0aW9uKCkpIHJldHVybiB0cnVlOworICAgIGlmIChsaHMudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpKSByZXR1cm4gZmFsc2U7CisgICAgaWYgKGxocy5pbmRleCgpID4gcmhzLmluZGV4KCkp
IHJldHVybiB0cnVlOworICAgIGlmIChsaHMuaW5kZXgoKSA8IHJocy5pbmRleCgpKSByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHZhcmlhbnQ6OnZpc2l0X3ZhbHVlX2F0KGxocy5pbmRleCgpLCBn
cmVhdGVyX2VxdWFse30sIGxocywgcmhzKTsKKyNlbHNlCisgICAgcmV0dXJuIHJocy52YWx1ZWxl
c3NfYnlfZXhjZXB0aW9uKCkgfHwKKyAgICAgICAgICAgKCFsaHMudmFsdWVsZXNzX2J5X2V4Y2Vw
dGlvbigpICYmCisgICAgICAgICAgICAobGhzLmluZGV4KCkgPiByaHMuaW5kZXgoKSB8fAorICAg
ICAgICAgICAgIChsaHMuaW5kZXgoKSA9PSByaHMuaW5kZXgoKSAmJgorICAgICAgICAgICAgICB2
YXJpYW50Ojp2aXNpdF92YWx1ZV9hdCgKKyAgICAgICAgICAgICAgICAgIGxocy5pbmRleCgpLCBn
cmVhdGVyX2VxdWFse30sIGxocywgcmhzKSkpKTsKKyNlbmRpZgorICB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj4oVmFyaWFudDxfVHlw
ZXMuLi4+IGNvbnN0JiBfX2xocyxWYXJpYW50PF9UeXBlcy4uLj4gY29uc3QmIF9fcmhzKXsKLSAg
ICByZXR1cm4gX19yaHM8X19saHM7Ci19CisgIHN0cnVjdCBtb25vc3RhdGUge307CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIgYm9vbCBvcGVyYXRvcj49KFZhcmlh
bnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxfVHlwZXMuLi4+IGNvbnN0JiBfX3Jo
cyl7Ci0gICAgcmV0dXJuICEoX19saHM8X19yaHMpOwotfQorICBpbmxpbmUgY29uc3RleHByIGJv
b2wgb3BlcmF0b3I8KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IGZhbHNlOworICB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIC4uLiBfVHlwZXM+Ci1jb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcjw9KFZhcmlhbnQ8X1R5cGVzLi4uPiBjb25zdCYgX19saHMsVmFyaWFudDxf
VHlwZXMuLi4+IGNvbnN0JiBfX3Jocyl7Ci0gICAgcmV0dXJuICEoX19saHM+X19yaHMpOwotfQor
ICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3I+KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBu
b2V4Y2VwdCB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaW5saW5lIGNvbnN0ZXhwciBi
b29sIG9wZXJhdG9yPD0obW9ub3N0YXRlLCBtb25vc3RhdGUpIG5vZXhjZXB0IHsKKyAgICByZXR1
cm4gdHJ1ZTsKKyAgfQogCi1zdHJ1Y3QgTW9ub3N0YXRle307CisgIGlubGluZSBjb25zdGV4cHIg
Ym9vbCBvcGVyYXRvcj49KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0
dXJuIHRydWU7CisgIH0KIAotY29uc3RleHByIGlubGluZSBib29sIG9wZXJhdG9yPT0oTW9ub3N0
YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIHRydWU7fQotY29uc3RleHByIGlu
bGluZSBib29sIG9wZXJhdG9yIT0oTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsg
cmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj49KE1vbm9zdGF0
ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJldHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxp
bmUgYm9vbCBvcGVyYXRvcjw9KE1vbm9zdGF0ZSBjb25zdCYsTW9ub3N0YXRlIGNvbnN0Jil7IHJl
dHVybiB0cnVlO30KLWNvbnN0ZXhwciBpbmxpbmUgYm9vbCBvcGVyYXRvcj4oTW9ub3N0YXRlIGNv
bnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJuIGZhbHNlO30KLWNvbnN0ZXhwciBpbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoTW9ub3N0YXRlIGNvbnN0JixNb25vc3RhdGUgY29uc3QmKXsgcmV0dXJu
IGZhbHNlO30KLQotc3RydWN0IF9faGFzaF92aXNpdG9yewotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9UeXBlPgotICAgIHNpemVfdCBvcGVyYXRvcigpKF9UeXBlIGNvbnN0JiBfX3gpewotICAgICAg
ICByZXR1cm4gc3RkOjpoYXNoPF9UeXBlPigpKF9feCk7CisgIGlubGluZSBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KG1vbm9zdGF0ZSwgbW9ub3N0YXRlKSBub2V4Y2VwdCB7CisgICAgcmV0dXJu
IHRydWU7CisgIH0KKworICBpbmxpbmUgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShtb25vc3Rh
dGUsIG1vbm9zdGF0ZSkgbm9leGNlcHQgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisjaWZk
ZWYgTVBBUktfQ1BQMTRfQ09OU1RFWFBSCisgIG5hbWVzcGFjZSBkZXRhaWwgeworCisgICAgaW5s
aW5lIGNvbnN0ZXhwciBib29sIGFsbChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8Ym9vbD4gYnMpIHsK
KyAgICAgIGZvciAoYm9vbCBiIDogYnMpIHsKKyAgICAgICAgaWYgKCFiKSB7CisgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci19OwogCi0vLyAtLSBXZWJLaXQgQWRkaXRpb25zIC0tCisgIH0gIC8vIG5hbWVzcGFjZSBk
ZXRhaWwKIAotdGVtcGxhdGU8Y2xhc3MgViwgY2xhc3MuLi4gRj4KLWF1dG8gc3dpdGNoT24oViYm
IHYsIEYmJi4uLiBmKSAtPiBkZWNsdHlwZSh2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8
Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpKQotewotICAgIHJldHVybiB2aXNpdChtYWtl
VmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZikuLi4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpOwotfQor
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVmlzaXRvciwgdHlwZW5hbWUuLi4gVnM+CisgIGlubGluZSBj
b25zdGV4cHIgZGVjbHR5cGUoYXV0bykgdmlzaXQoVmlzaXRvciAmJnZpc2l0b3IsIFZzICYmLi4u
IHZzKSB7CisgICAgcmV0dXJuIChkZXRhaWw6OmFsbCh7IXZzLnZhbHVlbGVzc19ieV9leGNlcHRp
b24oKS4uLn0pCisgICAgICAgICAgICAgICAgPyAodm9pZCkwCisgICAgICAgICAgICAgICAgOiB0
aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoKSksCisgICAgICAgICAgIGRldGFpbDo6dmlzaXRhdGlv
bjo6dmFyaWFudDo6dmlzaXRfdmFsdWUoCisgICAgICAgICAgICAgICBtcGFyazo6bGliOjpmb3J3
YXJkPFZpc2l0b3I+KHZpc2l0b3IpLCBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pOwor
ICB9CisjZWxzZQorICBuYW1lc3BhY2UgZGV0YWlsIHsKIAotfSAvLyBuYW1lc3BhY2UgV1RGCisg
ICAgdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CisgICAgaW5saW5lIGNvbnN0ZXhwciBib29sIGFs
bF9pbXBsKGNvbnN0IG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIE4+ICZicywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzaXplX3QgaWR4KSB7CisgICAgICByZXR1cm4g
aWR4ID49IE4gfHwgKGJzW2lkeF0gJiYgYWxsX2ltcGwoYnMsIGlkeCArIDEpKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgTj4KKyAgICBpbmxpbmUgY29uc3RleHByIGJvb2wg
YWxsKGNvbnN0IG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIE4+ICZicykgeworICAgICAgcmV0dXJu
IGFsbF9pbXBsKGJzLCAwKTsKKyAgICB9CisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisg
IHRlbXBsYXRlIDx0eXBlbmFtZSBWaXNpdG9yLCB0eXBlbmFtZS4uLiBWcz4KKyAgaW5saW5lIGNv
bnN0ZXhwciBERUNMVFlQRV9BVVRPIHZpc2l0KFZpc2l0b3IgJiZ2aXNpdG9yLCBWcyAmJi4uLiB2
cykKKyAgICBERUNMVFlQRV9BVVRPX1JFVFVSTigKKyAgICAgICAgKGRldGFpbDo6YWxsKAorICAg
ICAgICAgICAgIG1wYXJrOjpsaWI6OmFycmF5PGJvb2wsIHNpemVvZi4uLihWcyk+e3shdnMudmFs
dWVsZXNzX2J5X2V4Y2VwdGlvbigpLi4ufX0pCisgICAgICAgICAgICAgPyAodm9pZCkwCisgICAg
ICAgICAgICAgOiB0aHJvd19iYWRfdmFyaWFudF9hY2Nlc3MoKSksCisgICAgICAgIGRldGFpbDo6
dmlzaXRhdGlvbjo6dmFyaWFudDo6dmlzaXRfdmFsdWUobXBhcms6OmxpYjo6Zm9yd2FyZDxWaXNp
dG9yPih2aXNpdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtcGFyazo6bGliOjpmb3J3YXJkPFZzPih2cykuLi4pKQorI2VuZGlmCiAKLW5hbWVz
cGFjZSBzdGQgeworICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgIGlubGluZSBhdXRvIHN3
YXAodmFyaWFudDxUcy4uLj4gJmxocywKKyAgICAgICAgICAgICAgICAgICB2YXJpYW50PFRzLi4u
PiAmcmhzKSBub2V4Y2VwdChub2V4Y2VwdChsaHMuc3dhcChyaHMpKSkKKyAgICAgIC0+IGRlY2x0
eXBlKGxocy5zd2FwKHJocykpIHsKKyAgICBsaHMuc3dhcChyaHMpOworICB9CisKKyAgbmFtZXNw
YWNlIGRldGFpbCB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4+Cisg
ICAgdXNpbmcgZW5hYmxlZF90eXBlID0gVDsKKworICAgIG5hbWVzcGFjZSBoYXNoIHsKKworICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEgsIHR5cGVuYW1lIEs+CisgICAgICBjb25zdGV4cHIgYm9v
bCBtZWV0c19yZXF1aXJlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzX2NvcHlfY29u
c3RydWN0aWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9jb25z
dHJ1Y3RpYmxlPEg+Ojp2YWx1ZSAmJgorICAgICAgICAgICAgICAgbXBhcms6OmxpYjo6aXNfaW52
b2NhYmxlX3I8c3RkOjpzaXplX3QsIEgsIGNvbnN0IEsgJj46OnZhbHVlOworICAgICAgfQorCisg
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgSz4KKyAgICAgIGNvbnN0ZXhwciBib29sIGlzX2VuYWJs
ZWQoKSB7CisgICAgICAgIHVzaW5nIEggPSBzdGQ6Omhhc2g8Sz47CisgICAgICAgIHJldHVybiBt
ZWV0c19yZXF1aXJlbWVudHM8SCwgSz4oKSAmJgorICAgICAgICAgICAgICAgc3RkOjppc19kZWZh
dWx0X2NvbnN0cnVjdGlibGU8SD46OnZhbHVlICYmCisgICAgICAgICAgICAgICBzdGQ6OmlzX2Nv
cHlfYXNzaWduYWJsZTxIPjo6dmFsdWUgJiYKKyAgICAgICAgICAgICAgIHN0ZDo6aXNfbW92ZV9h
c3NpZ25hYmxlPEg+Ojp2YWx1ZTsKKyAgICAgIH0KKworICAgIH0gIC8vIG5hbWVzcGFjZSBoYXNo
CisKKyAgfSAgLy8gbmFtZXNwYWNlIGRldGFpbAorCisjdW5kZWYgQVVUTworI3VuZGVmIEFVVE9f
UkVUVVJOCisKKyN1bmRlZiBBVVRPX1JFRlJFRgorI3VuZGVmIEFVVE9fUkVGUkVGX1JFVFVSTgor
CisjdW5kZWYgREVDTFRZUEVfQVVUTworI3VuZGVmIERFQ0xUWVBFX0FVVE9fUkVUVVJOCisKKyAg
dGVtcGxhdGUgPHR5cGVuYW1lLi4uIFRzPgorICBzdHJ1Y3QgaGFzaDxkZXRhaWw6OmVuYWJsZWRf
dHlwZTwKKyAgICAgIHN0ZDo6dmFyaWFudDxUcy4uLj4sCisgICAgICBtcGFyazo6bGliOjplbmFi
bGVfaWZfdDxtcGFyazo6bGliOjphbGw8ZGV0YWlsOjpoYXNoOjppc19lbmFibGVkPAorICAgICAg
ICAgIG1wYXJrOjpsaWI6OnJlbW92ZV9jb25zdF90PFRzPj4oKS4uLj46OnZhbHVlPj4+IHsKKyAg
ICB1c2luZyBhcmd1bWVudF90eXBlID0gc3RkOjp2YXJpYW50PFRzLi4uPjsKKyAgICB1c2luZyBy
ZXN1bHRfdHlwZSA9IHN0ZDo6c2l6ZV90OworCisgICAgaW5saW5lIHJlc3VsdF90eXBlIG9wZXJh
dG9yKCkoY29uc3QgYXJndW1lbnRfdHlwZSAmdikgY29uc3QgeworICAgICAgdXNpbmcgZGV0YWls
Ojp2aXNpdGF0aW9uOjp2YXJpYW50OworICAgICAgc3RkOjpzaXplX3QgcmVzdWx0ID0KKyAgICAg
ICAgICB2LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKQorICAgICAgICAgICAgICA/IDI5OTc5MjQ1
OCAgLy8gUmFuZG9tIHZhbHVlIGNob3NlbiBieSB0aGUgdW5pdmVyc2UgdXBvbiBjcmVhdGlvbgor
ICAgICAgICAgICAgICA6IHZhcmlhbnQ6OnZpc2l0X2FsdCgKKyNpZmRlZiBNUEFSS19HRU5FUklD
X0xBTUJEQVMKKyAgICAgICAgICAgICAgICAgICAgW10oY29uc3QgYXV0byAmYWx0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgdXNpbmcgYWx0X3R5cGUgPSBtcGFyazo6bGliOjpkZWNheV90PGRl
Y2x0eXBlKGFsdCk+OworICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIHZhbHVlX3R5cGUgPSBt
cGFyazo6bGliOjpyZW1vdmVfY29uc3RfdDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgYWx0X3R5cGU6OnZhbHVlX3R5cGU+OworICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBoYXNoPHZhbHVlX3R5cGU+e30oYWx0LnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
I2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgaGFzaGVye30KKyNlbmRpZgorICAgICAgICAgICAg
ICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgIHYpOworICAgICAgcmV0dXJuIGhhc2hfY29t
YmluZShyZXN1bHQsIGhhc2g8c3RkOjpzaXplX3Q+e30odi5pbmRleCgpKSk7CisgICAgfQorCisg
ICAgcHJpdmF0ZToKKyNpZm5kZWYgTVBBUktfR0VORVJJQ19MQU1CREFTCisgICAgc3RydWN0IGhh
c2hlciB7CisgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQWx0PgorICAgICAgaW5saW5lIHN0ZDo6
c2l6ZV90IG9wZXJhdG9yKCkoY29uc3QgQWx0ICZhbHQpIGNvbnN0IHsKKyAgICAgICAgdXNpbmcg
YWx0X3R5cGUgPSBtcGFyazo6bGliOjpkZWNheV90PEFsdD47CisgICAgICAgIHVzaW5nIHZhbHVl
X3R5cGUgPQorICAgICAgICAgICAgbXBhcms6OmxpYjo6cmVtb3ZlX2NvbnN0X3Q8dHlwZW5hbWUg
YWx0X3R5cGU6OnZhbHVlX3R5cGU+OworICAgICAgICByZXR1cm4gaGFzaDx2YWx1ZV90eXBlPnt9
KGFsdC52YWx1ZSk7CisgICAgICB9CisgICAgfTsKKyNlbmRpZgogCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgaGFzaDxXVEY6Ok1vbm9zdGF0ZT57Ci0gICAgc2l6ZV90IG9wZXJhdG9yKCkoV1RGOjpNb25v
c3RhdGUpIF9fTk9FWENFUFR7Ci0gICAgICAgIHJldHVybiA0MjsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSAuLi4gX1R5cGVzPgotc3RydWN0IGhhc2g8V1RGOjpWYXJpYW50PF9UeXBl
cy4uLj4+ewotICAgIHNpemVfdCBvcGVyYXRvcigpKFdURjo6VmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0ICZ2KSBfX05PRVhDRVBUIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6aGFzaDxwdHJkaWZmX3Q+
KCkodi5pbmRleCgpKSBeIFdURjo6dmlzaXQoV1RGOjpfX2hhc2hfdmlzaXRvcigpLCB2KTsKKyAg
ICBzdGF0aWMgc3RkOjpzaXplX3QgaGFzaF9jb21iaW5lKHN0ZDo6c2l6ZV90IGxocywgc3RkOjpz
aXplX3QgcmhzKSB7CisgICAgICByZXR1cm4gbGhzIF49IHJocyArIDB4OWUzNzc5YjkgKyAobGhz
IDw8IDYpICsgKGxocyA+PiAyKTsKICAgICB9Ci19OworICB9OwogCi19IC8vIG5hbWVzcGFjZSBz
dGQKKyAgdGVtcGxhdGUgPD4KKyAgc3RydWN0IGhhc2g8c3RkOjptb25vc3RhdGU+IHsKKyAgICB1
c2luZyBhcmd1bWVudF90eXBlID0gc3RkOjptb25vc3RhdGU7CisgICAgdXNpbmcgcmVzdWx0X3R5
cGUgPSBzdGQ6OnNpemVfdDsKIAotdXNpbmcgV1RGOjpNb25vc3RhdGU7Ci11c2luZyBXVEY6OlZh
cmlhbnQ7CisgICAgaW5saW5lIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoY29uc3QgYXJndW1lbnRf
dHlwZSAmKSBjb25zdCBub2V4Y2VwdCB7CisgICAgICByZXR1cm4gNjY3NDA4MzE7ICAvLyByZXR1
cm4gYSBmdW5kYW1lbnRhbGx5IGF0dHJhY3RpdmUgcmFuZG9tIHZhbHVlLgorICAgIH0KKyAgfTsK
IAotI2VuZGlmIC8vICFDT01QSUxFUihDTEFORykgfHwgV1RGX0NQUF9TVERfVkVSID49IDE0Cit9
ICAvLyBuYW1lc3BhY2Ugc3RkCiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5n
KHBvcCkKLSNlbmRpZgorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPGNsYXNzIFYsIGNsYXNz
Li4uIEY+CithdXRvIHN3aXRjaE9uKFYmJiB2LCBGJiYuLi4gZikgLT4gZGVjbHR5cGUodmlzaXQo
bWFrZVZpc2l0b3Ioc3RkOjpmb3J3YXJkPEY+KGYpLi4uKSwgc3RkOjpmb3J3YXJkPFY+KHYpKSkK
K3sKKyAgICByZXR1cm4gc3RkOjp2aXNpdChtYWtlVmlzaXRvcihzdGQ6OmZvcndhcmQ8Rj4oZiku
Li4pLCBzdGQ6OmZvcndhcmQ8Vj4odikpOworfQorCit9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90
ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9UZXh0QnJlYWtJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKICNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZP
Uk0oSU9TKQogCi1zdGF0aWMgVmFyaWFudDxUZXh0QnJlYWtJdGVyYXRvcklDVSwgVGV4dEJyZWFr
SXRlcmF0b3JQbGF0Zm9ybT4gbWFwTW9kZVRvQmFja2luZ0l0ZXJhdG9yKFN0cmluZ1ZpZXcgc3Ry
aW5nLCBUZXh0QnJlYWtJdGVyYXRvcjo6TW9kZSBtb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsZSkKK3N0YXRpYyBzdGQ6OnZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVh
a0l0ZXJhdG9yUGxhdGZvcm0+IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0
cmluZywgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBUZXh0QnJlYWtJdGVyYXRv
cjo6TW9kZTo6TGluZToKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1RleHRCcmVha0l0ZXJhdG9y
LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvVGV4dEJyZWFrSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBtX2xvY2FsZTsKICAgICB9CiAKLSAgICBWYXJpYW50PFRleHRCcmVha0l0ZXJh
dG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBtX2JhY2tpbmc7CisgICAgc3RkOjp2
YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3JtPiBt
X2JhY2tpbmc7CiAgICAgTW9kZSBtX21vZGU7CiAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxlOwog
fTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvbWFjL1RleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9tYWMvVGV4dEJy
ZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbQkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dURi93dGYvdGV4dC9tYWMvVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGlj
IFZhcmlhbnQ8VGV4dEJyZWFrSXRlcmF0b3JJQ1UsIFRleHRCcmVha0l0ZXJhdG9yUGxhdGZvcm0+
IG1hcE1vZGVUb0JhY2tpbmdJdGVyYXRvcihTdHJpbmdWaWV3IHN0cmluZywgVGV4dEJyZWFrSXRl
cmF0b3I6Ok1vZGUgbW9kZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGUpCitzdGF0aWMgc3Rk
Ojp2YXJpYW50PFRleHRCcmVha0l0ZXJhdG9ySUNVLCBUZXh0QnJlYWtJdGVyYXRvclBsYXRmb3Jt
PiBtYXBNb2RlVG9CYWNraW5nSXRlcmF0b3IoU3RyaW5nVmlldyBzdHJpbmcsIFRleHRCcmVha0l0
ZXJhdG9yOjpNb2RlIG1vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxlKQogewogICAgIHN3
aXRjaCAobW9kZSkgewogICAgIGNhc2UgVGV4dEJyZWFrSXRlcmF0b3I6Ok1vZGU6OkxpbmU6Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNzggQEAKKzIwMTctMDgtMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJp
YW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1
ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1v
ZHVsZXMvY2FjaGUvQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OmRvTWF0Y2gp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZTo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlOjprZXlzKToKKyAgICAgICAgKiBN
b2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaDoKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoQm9keS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJv
ZHk6OmV4dHJhY3QpOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmlzQmxvYiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OmlzRm9ybURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hC
b2R5Ojppc0FycmF5QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6
aXNBcnJheUJ1ZmZlclZpZXcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojpp
c1VSTFNlYXJjaFBhcmFtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6Omlz
VGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGZXRjaEJvZHk6OmJsb2JCb2R5IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6Zm9ybURhdGFCb2R5KToKKyAgICAgICAg
KFdlYkNvcmU6OkZldGNoQm9keTo6Zm9ybURhdGFCb2R5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZldGNoQm9keTo6YXJyYXlCdWZmZXJCb2R5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkZldGNoQm9keTo6YXJyYXlCdWZmZXJWaWV3Qm9keSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpGZXRjaEJvZHk6OnRleHRCb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoQm9keTo6dGV4
dEJvZHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmV0Y2hCb2R5Ojp1cmxTZWFyY2hQYXJh
bXNCb2R5IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL2ZldGNoL0ZldGNoSGVhZGVycy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpmaWxsSGVhZGVyTWFwKToKKyAgICAgICAgKiBNb2R1bGVzL2Zl
dGNoL0ZldGNoSGVhZGVycy5oOgorICAgICAgICAqIE1vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZldGNoUmVxdWVzdDo6Y3JlYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL2ZldGNoL0ZldGNoUmVxdWVzdC5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRpbnVl
UHJpbWFyeUtleSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmg6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1
bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5T2ZWYXJpYW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6aXNvbGF0ZWRDb3B5KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkdldEFsbFJlc3VsdDo6YWRkS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdl
dEFsbFJlc3VsdDo6YWRkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCR2V0QWxsUmVzdWx0
OjprZXlzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6dmFsdWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkZpbGVQ
YXRocyBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVzdWx0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmVuY29kZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJHZXRBbGxSZXN1bHQ6OmRlY29kZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleTo6aXNW
YWxpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmNvbXBhcmUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5oOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5OjphcnJheSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OnN0cmluZyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXk6OmRhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SURCS2V5OjpudW1iZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
OjpiaW5hcnkgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6SURCS2V5RGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlEYXRhOjptYXliZUNyZWF0ZUlEQktleSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJLZXlEYXRhOjppc29sYXRlZENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6
SURCS2V5RGF0YTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6
OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpjb21wYXJlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmxvZ2dpbmdTdHJpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
RGF0YTo6aGFzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpzdHJpbmcg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5RGF0YTo6ZGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpudW1iZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCS2V5RGF0YTo6YmluYXJ5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURh
dGE6OmFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleURhdGE6OmVuY29kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlEYXRhOjpkZWNvZGUpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNJ
REJLZXlQYXRoVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNvbGF0ZWRDb3B5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmxvZ2dpbmdTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVBhdGguaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgpOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6c2V0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVl
c3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0OjpyZXF1ZXN0ZWRJbmRleFJlY29yZFR5cGUgY29uc3QpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJp
YWxpemVJREJLZXlQYXRoKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhY29udHJvbHMvTWVkaWFD
b250cm9sc0hvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9sc0hvc3Q6OmRp
c3BsYXlOYW1lRm9yVHJhY2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9NZWRp
YUNvbnRyb2xzSG9zdC5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1lZGlhQ29uc3RyYWludHMpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmg6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYVRyYWNrQ29uc3RyYWludHMuaDoKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0ljZVNlcnZlci5oOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNv
bm5lY3Rpb246OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQ
cm9jZXNzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNEUFByb2Nlc3Nvcjo6UGFyc2luZ1Jlc3Vs
dDo6cGFyc2luZ1N0YXR1cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTRFBQcm9jZXNzb3I6
OlBhcnNpbmdSZXN1bHQ6OmNhbmRpZGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvSURMVHlwZXMu
aDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9CdWZmZXJTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkJ1ZmZlclNvdXJjZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCdWZmZXJT
b3VyY2U6Omxlbmd0aCBjb25zdCk6CisgICAgICAgICogYmluZGluZ3MvanMvQ2FsbFRyYWNlclR5
cGVzLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6bWF5YmVDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVLZXlQYXRoQXJyYXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFVuaW9uLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2Vi
R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvSlNWYWx1ZSk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUNh
bGxUcmFjZXJQYXJhbWV0ZXIpOgorICAgICAgICAqIGNyeXB0by9DcnlwdG9BbGdvcml0aG0uaDoK
KyAgICAgICAgKiBjcnlwdG8vQ3J5cHRvS2V5Lmg6CisgICAgICAgICogY3J5cHRvL1N1YnRsZUNy
eXB0by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVDcnlwdG9BbGdvcml0aG1QYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnRsZUNyeXB0bzo6ZXhwb3J0S2V5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN1YnRsZUNyeXB0bzo6d3JhcEtleSk6CisgICAgICAgICogY3J5cHRv
L1N1YnRsZUNyeXB0by5oOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29y
aXRobUFFU19DQkMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0NC
Qzo6aW1wb3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0
aG1BRVNfQ0ZCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobUFFU19DRkI6
OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGht
QUVTX0NUUi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1BRVNfQ1RSOjpp
bXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFF
U19HQ00uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0dDTTo6aW1w
b3J0S2V5KToKKyAgICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
S1cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtQUVTX0tXOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDREguY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0S2V5KToKKyAg
ICAgICAgKiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDcnlwdG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KToKKyAgICAgICAg
KiBjcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNyeXB0b0FsZ29yaXRobUhLREY6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1ITUFDOjppbXBvcnRLZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0
aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDcnlwdG9B
bGdvcml0aG1QQktERjI6OmltcG9ydEtleSk6CisgICAgICAgICogY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtUlNBRVNfUEtDUzFfdjFfNS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
cnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjppbXBvcnRLZXkpOgorICAgICAgICAqIGNy
eXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9PQUVQ
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNyeXB0b0FsZ29yaXRobVJTQV9PQUVQOjppbXBvcnRL
ZXkpOgorICAgICAgICAqIGNyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQV9QU1Mu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5
KToKKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFt
cy5oOgorICAgICAgICAqIGNyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobUhrZGZQYXJh
bXMuaDoKKyAgICAgICAgKiBjcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5
UGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtUGJr
ZGYyUGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGht
UnNhSGFzaGVkSW1wb3J0UGFyYW1zLmg6CisgICAgICAgICogY3J5cHRvL3BhcmFtZXRlcnMvQ3J5
cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmg6CisgICAgICAgICogY3NzL0NTU1N0
eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVEZWNsYXJhdGlv
bjo6bmFtZWRJdGVtKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oOgorICAg
ICAgICAqIGNzcy9ET01NYXRyaXguaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTU1hdHJpeDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBjc3MvRE9NTWF0cml4UmVhZE9ubHkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTU1hdHJpeFJlYWRPbmx5OjpjcmVhdGUpOgorICAgICAgICAqIGNzcy9Gb250RmFjZS5o
OgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OmRlc2NyaXB0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjppc0FjdGl2ZU1hdGNoIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OnNldEFsdGVybmF0aXZlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjptZXRhZGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6c2V0TWV0YWRhdGEpOgorICAgICAgICAqIGRvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkSW5z
ZXJ0QXNTZXBhcmF0ZU1hcmtlcik6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluZGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnJlbW92ZUV2ZW50TGlzdGVuZXJGb3JC
aW5kaW5ncyk6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogZG9tL01l
c3NhZ2VFdmVudC5oOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0
ZXJuYXRpdmVzRm9yTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcik6CisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmg6CisgICAgICAgICogZmlsZWFwaS9CbG9i
Lmg6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXI6OnJlc3VsdCBjb25zdCk6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVy
Lmg6CisgICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRPckluZGV4ZWRJdGVtT3JJdGVtcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyBj
b25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oOgorICAgICAgICAqIGh0
bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudDo6bmFt
ZWRJdGVtKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5oOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMgY29uc3QpOgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6Om5hbWVk
SXRlbSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6c2VsZWN0TWVkaWFSZXNvdXJjZSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
Lmg6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxTZWxlY3RFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9VUkxTZWFyY2hQYXJhbXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VVJMU2VhcmNoUGFyYW1zOjpjcmVhdGUpOgorICAgICAg
ICAqIGh0bWwvVVJMU2VhcmNoUGFyYW1zLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudENvbG9yIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRDTVlLQSBj
b25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1N0eWxlOjppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1N0eWxlOjppc0N1cnJlbnRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNTdHlsZTo6aGFzT3ZlcnJpZGVBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNTdHlsZTo6b3ZlcnJpZGVBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNT
dHlsZTo6Y2FudmFzR3JhZGllbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5
bGU6OmNhbnZhc1BhdHRlcm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6
OmNvbG9yIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBbnkuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDoKKyAgICAgICAg
KiBodG1sL3RyYWNrL1RyYWNrRXZlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNw
cDoKKyAgICAgICAgKiBwYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkludGVyc2VjdGlvbk9ic2VydmVyOjpJbnRlcnNlY3Rpb25PYnNlcnZlcik6CisgICAg
ICAgICogcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmg6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmRh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6
c2l6ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNy
ZWF0ZUNGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmhpbnRN
ZW1vcnlOb3ROZWVkZWRTb29uIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9E
ZWNvZGluZ09wdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aXNO
b25lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6aXNTeW5jaHJv
bm91cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGluZ09wdGlvbnM6OmlzQXN5bmNo
cm9ub3VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kaW5nT3B0aW9uczo6c2l6ZUZv
ckRyYXdpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RpbmdPcHRpb25zOjpoYXMg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cmVhbGl6ZU5leHRGYWxsYmFjayk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJBVkZPYmpDLm1tOgorICAgICAgICAo
V2ViQ29yZTo6V2ViQXVkaW9Tb3VyY2VQcm92aWRlckFWRk9iakM6OmF1ZGlvU2FtcGxlc0F2YWls
YWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTFZhbHVlLmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdnZWRDb250
ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQpOgorICAgICAgICAqIHRlc3RpbmcvVHlwZUNvbnZl
cnNpb25zLmg6CisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6CisKIDIwMTctMDgtMTkg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbV2ViQ3J5cHRvXSBSZW1v
dmUgdGhlIEtleUFsZ29yaXRobSB0eXBlIGhpZXJhcmNoeQpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9jYWNoZS9DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9jYWNoZS9DYWNoZS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvY2FjaGUvQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw4ICs2Myw4IEBA
IHZvaWQgQ2FjaGU6OmRvTWF0Y2goc3RkOjpvcHRpb25hbDxSZXF1ZXMKIHsKICAgICBSZWZQdHI8
RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0OwogICAgIGlmIChpbmZvKSB7Ci0gICAgICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7
Ci0gICAgICAgICAgICByZXF1ZXN0ID0gV1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGlu
Zm8udmFsdWUoKSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkpIHsKKyAgICAgICAg
ICAgIHJlcXVlc3QgPSBzdGQ6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgp
KS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9
ICJHRVQiICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkgewogICAgICAgICAgICAgICAgIGlmICht
YXRjaFR5cGUgPT0gTWF0Y2hUeXBlOjpPbmx5Rmlyc3QpIHsKICAgICAgICAgICAgICAgICAgICAg
cHJvbWlzZS0+cmVzb2x2ZSgpOwpAQCAtMTIyLDggKzEyMiw4IEBAIHZvaWQgQ2FjaGU6OmFkZEFs
bChWZWN0b3I8UmVxdWVzdEluZm8+JiYKIHZvaWQgQ2FjaGU6OnB1dChSZXF1ZXN0SW5mbyYmIGlu
Zm8sIFJlZjxGZXRjaFJlc3BvbnNlPiYmIHJlc3BvbnNlLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9p
ZD4mJiBwcm9taXNlKQogewogICAgIFJlZlB0cjxGZXRjaFJlcXVlc3Q+IHJlcXVlc3Q7Ci0gICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8pKSB7
Ci0gICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbyku
cmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8
RmV0Y2hSZXF1ZXN0Pj4oaW5mbykpIHsKKyAgICAgICAgcmVxdWVzdCA9IHN0ZDo6Z2V0PFJlZlB0
cjxGZXRjaFJlcXVlc3Q+PihpbmZvKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBpZiAocmVx
dWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIpIHsKICAgICAgICAgICAgIHByb21pc2UucmVqZWN0KEV4
Y2VwdGlvbiB7IFR5cGVFcnJvciwgQVNDSUlMaXRlcmFsKCJSZXF1ZXN0IG1ldGhvZCBpcyBub3Qg
R0VUIikgfSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xOTIsOCArMTkyLDggQEAgdm9pZCBD
YWNoZTo6cHV0KFJlcXVlc3RJbmZvJiYgaW5mbywgUmVmPAogdm9pZCBDYWNoZTo6cmVtb3ZlKFJl
cXVlc3RJbmZvJiYgaW5mbywgQ2FjaGVRdWVyeU9wdGlvbnMmJiBvcHRpb25zLCBET01Qcm9taXNl
RGVmZXJyZWQ8SURMQm9vbGVhbj4mJiBwcm9taXNlKQogewogICAgIFJlZlB0cjxGZXRjaFJlcXVl
c3Q+IHJlcXVlc3Q7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNo
UmVxdWVzdD4+KGluZm8pKSB7Ci0gICAgICAgIHJlcXVlc3QgPSBXVEY6OmdldDxSZWZQdHI8RmV0
Y2hSZXF1ZXN0Pj4oaW5mbykucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mbykpIHsKKyAgICAgICAgcmVxdWVz
dCA9IHN0ZDo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbmZvKS5yZWxlYXNlTm9uTnVsbCgp
OwogICAgICAgICBpZiAocmVxdWVzdC0+bWV0aG9kKCkgIT0gIkdFVCIgJiYgIW9wdGlvbnMuaWdu
b3JlTWV0aG9kKSB7CiAgICAgICAgICAgICBwcm9taXNlLnJlc29sdmUoZmFsc2UpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjEzLDggKzIxMyw4IEBAIHZvaWQgQ2FjaGU6OmtleXMoc3RkOjpv
cHRpb25hbDxSZXF1ZXN0SW4KIHsKICAgICBSZWZQdHI8RmV0Y2hSZXF1ZXN0PiByZXF1ZXN0Owog
ICAgIGlmIChpbmZvKSB7Ci0gICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0
cjxGZXRjaFJlcXVlc3Q+PihpbmZvLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICByZXF1ZXN0ID0g
V1RGOjpnZXQ8UmVmUHRyPEZldGNoUmVxdWVzdD4+KGluZm8udmFsdWUoKSkucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEZldGNoUmVx
dWVzdD4+KGluZm8udmFsdWUoKSkpIHsKKyAgICAgICAgICAgIHJlcXVlc3QgPSBzdGQ6OmdldDxS
ZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5mby52YWx1ZSgpKS5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgaWYgKHJlcXVlc3QtPm1ldGhvZCgpICE9ICJHRVQiICYmICFvcHRpb25zLmlnbm9y
ZU1ldGhvZCkgewogICAgICAgICAgICAgICAgIHByb21pc2UucmVzb2x2ZShWZWN0b3I8UmVmPEZl
dGNoUmVxdWVzdD4+IHsgfSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9jYWNoZS9DYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlU3RvcmFnZUNvbm5lY3Rp
b24uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hl
L0NhY2hlU3RvcmFnZUNvbm5lY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMjQgKzE1
OCwzMiBAQCB2b2lkIENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OnB1dFJlY29yZHNDCiAKIENhY2hl
U3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOjpp
c29sYXRlZFJlc3BvbnNlQm9keShjb25zdCBSZXNwb25zZUJvZHkmIGJvZHkpCiB7Ci0gICAgcmV0
dXJuIFdURjo6c3dpdGNoT24oYm9keSwgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYgZm9ybURhdGEp
IHsKLSAgICAgICAgcmV0dXJuIGZvcm1EYXRhLT5pc29sYXRlZENvcHkoKTsKLSAgICB9LCBbXShj
b25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSB7Ci0gICAgICAgIHJldHVybiBidWZmZXIt
PmNvcHkoKTsKLSAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKLSAgICAgICAgcmV0
dXJuIENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSB7IH07Ci0gICAgfSk7Cisg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYm9keSwKKyAgICAgICAgW10oY29uc3QgUmVmPEZvcm1E
YXRhPiYgZm9ybURhdGEpIC0+IENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSB7
CisgICAgICAgICAgICByZXR1cm4gZm9ybURhdGEtPmlzb2xhdGVkQ29weSgpOworICAgICAgICB9
LAorICAgICAgICBbXShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSAtPiBDYWNoZVN0
b3JhZ2VDb25uZWN0aW9uOjpSZXNwb25zZUJvZHkgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZl
ci0+Y29weSgpOworICAgICAgICB9LAorICAgICAgICBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYp
IC0+IENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSB7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgQ2Fj
aGVTdG9yYWdlQ29ubmVjdGlvbjo6UmVzcG9uc2VCb2R5IGNvcHlSZXNwb25zZUJvZHkoY29uc3Qg
Q2FjaGVTdG9yYWdlQ29ubmVjdGlvbjo6UmVzcG9uc2VCb2R5JiBib2R5KQogewotICAgIHJldHVy
biBXVEY6OnN3aXRjaE9uKGJvZHksIFtdKGNvbnN0IFJlZjxGb3JtRGF0YT4mIGZvcm1EYXRhKSB7
Ci0gICAgICAgIHJldHVybiBmb3JtRGF0YS5jb3B5UmVmKCk7Ci0gICAgfSwgW10oY29uc3QgUmVm
PFNoYXJlZEJ1ZmZlcj4mIGJ1ZmZlcikgewotICAgICAgICByZXR1cm4gYnVmZmVyLmNvcHlSZWYo
KTsKLSAgICB9LCBbXShjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsKLSAgICAgICAgcmV0dXJuIENh
Y2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSB7IH07Ci0gICAgfSk7CisgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24oYm9keSwKKyAgICAgICAgW10oY29uc3QgUmVmPEZvcm1EYXRhPiYg
Zm9ybURhdGEpIC0+IENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlc3BvbnNlQm9keSB7CisgICAg
ICAgICAgICByZXR1cm4gZm9ybURhdGEuY29weVJlZigpOworICAgICAgICB9LAorICAgICAgICBb
XShjb25zdCBSZWY8U2hhcmVkQnVmZmVyPiYgYnVmZmVyKSAtPiBDYWNoZVN0b3JhZ2VDb25uZWN0
aW9uOjpSZXNwb25zZUJvZHkgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci5jb3B5UmVmKCk7
CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgLT4gQ2FjaGVT
dG9yYWdlQ29ubmVjdGlvbjo6UmVzcG9uc2VCb2R5IHsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgKTsKIH0KIAogQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbjo6UmVj
b3JkIENhY2hlU3RvcmFnZUNvbm5lY3Rpb246OlJlY29yZDo6Y29weSgpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlU3RvcmFnZUNvbm5lY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NhY2hlL0NhY2hlU3RvcmFnZUNvbm5l
Y3Rpb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcg
QEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgcXVlcnlDYWNoZU1h
dGNoKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBjYWNoZWRSZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgQ2FjaGVRdWVy
eU9wdGlvbnMmKTsKIAotICAgIHVzaW5nIFJlc3BvbnNlQm9keSA9IFZhcmlhbnQ8c3RkOjpudWxs
cHRyX3QsIFJlZjxGb3JtRGF0YT4sIFJlZjxTaGFyZWRCdWZmZXI+PjsKKyAgICB1c2luZyBSZXNw
b25zZUJvZHkgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxGb3JtRGF0YT4sIFJl
ZjxTaGFyZWRCdWZmZXI+PjsKICAgICBzdGF0aWMgUmVzcG9uc2VCb2R5IGlzb2xhdGVkUmVzcG9u
c2VCb2R5KGNvbnN0IFJlc3BvbnNlQm9keSYpOwogCiAgICAgc3RydWN0IFJlY29yZCB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxzL0NyZWRlbnRpYWxDcmVhdGlvbk9w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2NyZWRlbnRpYWxz
L0NyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9jcmVkZW50aWFscy9DcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RydWN0IENyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMgewotICAgIHVzaW5nIFBhc3N3b3JkQ3Jl
ZGVudGlhbEluaXQgPSBWYXJpYW50PFBhc3N3b3JkQ3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1M
Rm9ybUVsZW1lbnQ+PjsKKyAgICB1c2luZyBQYXNzd29yZENyZWRlbnRpYWxJbml0ID0gc3RkOjp2
YXJpYW50PFBhc3N3b3JkQ3JlZGVudGlhbERhdGEsIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+PjsK
IAogICAgIHN0ZDo6b3B0aW9uYWw8UGFzc3dvcmRDcmVkZW50aWFsSW5pdD4gcGFzc3dvcmQ7CiAg
ICAgc3RkOjpvcHRpb25hbDxGZWRlcmF0ZWRDcmVkZW50aWFsSW5pdD4gZmVkZXJhdGVkOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmNwcAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEJvZHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MiwzNiArNDIsMzYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBG
ZXRjaEJvZHkgRmV0Y2hCb2R5OjpleHRyYWN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIEluaXQmJiB2YWx1ZSwgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBpZiAoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QmxvYj4+KHZhbHVlKSkgewotICAgICAgICBSZWY8Y29u
c3QgQmxvYj4gYmxvYiA9IFdURjo6Z2V0PFJlZlB0cjxCbG9iPj4odmFsdWUpLnJlbGVhc2VOb25O
dWxsKCk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPEJsb2I+Pih2YWx1
ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEJsb2I+IGJsb2IgPSBzdGQ6OmdldDxSZWZQdHI8Qmxv
Yj4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBjb250ZW50VHlwZSA9IGJsb2It
PnR5cGUoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJsb2IpKTsKICAgICB9
Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPERPTUZvcm1EYXRhPj4odmFs
dWUpKSB7Ci0gICAgICAgIFJlZjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBXVEY6OmdldDxS
ZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8RE9NRm9ybURhdGE+Pih2YWx1ZSkpIHsKKyAgICAg
ICAgUmVmPERPTUZvcm1EYXRhPiBkb21Gb3JtRGF0YSA9IHN0ZDo6Z2V0PFJlZlB0cjxET01Gb3Jt
RGF0YT4+KHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICBhdXRvIGZvcm1EYXRhID0g
Rm9ybURhdGE6OmNyZWF0ZU11bHRpUGFydChkb21Gb3JtRGF0YS5nZXQoKSwgZG9tRm9ybURhdGEt
PmVuY29kaW5nKCksICZzdGF0aWNfY2FzdDxEb2N1bWVudCY+KGNvbnRleHQpKTsKICAgICAgICAg
Y29udGVudFR5cGUgPSBtYWtlU3RyaW5nKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0i
LCBmb3JtRGF0YS0+Ym91bmRhcnkoKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gRmV0Y2hCb2R5
KFdURk1vdmUoZm9ybURhdGEpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25z
dCBVUkxTZWFyY2hQYXJhbXM+IHBhcmFtcyA9IFdURjo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJh
bXM+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8VVJMU2VhcmNoUGFyYW1zPj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25z
dCBVUkxTZWFyY2hQYXJhbXM+IHBhcmFtcyA9IHN0ZDo6Z2V0PFJlZlB0cjxVUkxTZWFyY2hQYXJh
bXM+Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgY29udGVudFR5cGUgPSBIVFRQ
SGVhZGVyVmFsdWVzOjpmb3JtVVJMRW5jb2RlZENvbnRlbnRUeXBlKCk7CiAgICAgICAgIHJldHVy
biBGZXRjaEJvZHkoV1RGTW92ZShwYXJhbXMpKTsKICAgICB9CiAKLSAgICBpZiAoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkpIHsKLSAgICAgICAgUmVm
PGNvbnN0IEFycmF5QnVmZmVyPiBidWZmZXIgPSBXVEY6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+
Pih2YWx1ZSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2
ZTxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkpIHsKKyAgICAgICAgUmVmPGNvbnN0IEFycmF5
QnVmZmVyPiBidWZmZXIgPSBzdGQ6OmdldDxSZWZQdHI8QXJyYXlCdWZmZXI+Pih2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikp
OwogICAgIH0KLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3Pj4odmFsdWUpKSB7Ci0gICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1
ZmZlciA9IFdURjo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5v
bk51bGwoKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8QXJyYXlCdWZm
ZXJWaWV3Pj4odmFsdWUpKSB7CisgICAgICAgIFJlZjxjb25zdCBBcnJheUJ1ZmZlclZpZXc+IGJ1
ZmZlciA9IHN0ZDo6Z2V0PFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+Pih2YWx1ZSkucmVsZWFzZU5v
bk51bGwoKTsKICAgICAgICAgcmV0dXJuIEZldGNoQm9keShXVEZNb3ZlKGJ1ZmZlcikpOwogICAg
IH0KIAotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4odmFsdWUpKTsK
KyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KHZhbHVlKSk7CiAgICAg
Y29udGVudFR5cGUgPSBIVFRQSGVhZGVyVmFsdWVzOjp0ZXh0UGxhaW5Db250ZW50VHlwZSgpOwot
ICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShXVEY6OmdldDxTdHJpbmc+KHZhbHVlKSkpOwor
ICAgIHJldHVybiBGZXRjaEJvZHkoV1RGTW92ZShzdGQ6OmdldDxTdHJpbmc+KHZhbHVlKSkpOwog
fQogCiB2b2lkIEZldGNoQm9keTo6YXJyYXlCdWZmZXIoRmV0Y2hCb2R5T3duZXImIG93bmVyLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2ZldGNoL0ZldGNoQm9keS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hCb2R5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE1ICs1Mywx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb25zdW1lQXNTdHJlYW0oRmV0Y2hCb2R5T3duZXImLCBG
ZXRjaFJlc3BvbnNlU291cmNlJik7CiAjZW5kaWYKIAotICAgIGJvb2wgaXNCbG9iKCkgY29uc3Qg
eyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSk7
IH0KLSAgICBib29sIGlzRm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFJlZjxGb3JtRGF0YT4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1
ZmZlcj4+KG1fZGF0YSk7IH0KLSAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4o
bV9kYXRhKTsgfQotICAgIGJvb2wgaXNVUkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7IHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEp
OyB9Ci0gICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFN0cmluZz4obV9kYXRhKTsgfQorICAgIGJvb2wgaXNCbG9iKCkgY29uc3QgeyByZXR1cm4g
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQmxvYj4+KG1fZGF0YSk7IH0KKyAgICBi
b29sIGlzRm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJl
ZjxGb3JtRGF0YT4+KG1fZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlCdWZmZXIoKSBjb25zdCB7
IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZjxjb25zdCBBcnJheUJ1ZmZlcj4+KG1f
ZGF0YSk7IH0KKyAgICBib29sIGlzQXJyYXlCdWZmZXJWaWV3KCkgY29uc3QgeyByZXR1cm4gc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Pj4obV9kYXRhKTsg
fQorICAgIGJvb2wgaXNVUkxTZWFyY2hQYXJhbXMoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpOyB9CisgICAg
Ym9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmlu
Zz4obV9kYXRhKTsgfQogICAgIGJvb2wgaXNSZWFkYWJsZVN0cmVhbSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNSZWFkYWJsZVN0cmVhbTsgfQogCi0gICAgdXNpbmcgSW5pdCA9IFZhcmlhbnQ8UmVmUHRy
PEJsb2I+LCBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEFycmF5QnVmZmVyPiwgUmVm
UHRyPERPTUZvcm1EYXRhPiwgUmVmUHRyPFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CisgICAg
dXNpbmcgSW5pdCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8QmxvYj4sIFJlZlB0cjxBcnJheUJ1ZmZl
clZpZXc+LCBSZWZQdHI8QXJyYXlCdWZmZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+LCBSZWZQdHI8
VVJMU2VhcmNoUGFyYW1zPiwgU3RyaW5nPjsKICAgICBzdGF0aWMgRmV0Y2hCb2R5IGV4dHJhY3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIEluaXQmJiwgU3RyaW5nJik7CiAgICAgc3RhdGljIEZl
dGNoQm9keSBsb2FkaW5nQm9keSgpIHsgcmV0dXJuIHsgfTsgfQogCkBAIC03MSw3ICs3MSw3IEBA
IHB1YmxpYzoKIAogICAgIFJlZlB0cjxGb3JtRGF0YT4gYm9keUFzRm9ybURhdGEoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCYpIGNvbnN0OwogCi0gICAgdXNpbmcgVGFrZW5EYXRhID0gVmFyaWFudDxz
dGQ6Om51bGxwdHJfdCwgUmVmPEZvcm1EYXRhPiwgUmVmPFNoYXJlZEJ1ZmZlcj4+OworICAgIHVz
aW5nIFRha2VuRGF0YSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPEZvcm1EYXRh
PiwgUmVmPFNoYXJlZEJ1ZmZlcj4+OwogICAgIFRha2VuRGF0YSB0YWtlKCk7CiAKICAgICB2b2lk
IHNldEFzRm9ybURhdGEoUmVmPEZvcm1EYXRhPiYmIGRhdGEpIHsgbV9kYXRhID0gV1RGTW92ZShk
YXRhKTsgfQpAQCAtOTksMTYgKzk5LDE2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25zdW1lVGV4
dChSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNvbnN1
bWVCbG9iKEZldGNoQm9keU93bmVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CiAKLSAgICBj
b25zdCBCbG9iJiBibG9iQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBC
bG9iPj4obV9kYXRhKS5nZXQoKTsgfQotICAgIEZvcm1EYXRhJiBmb3JtRGF0YUJvZHkoKSB7IHJl
dHVybiBXVEY6OmdldDxSZWY8Rm9ybURhdGE+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgY29uc3Qg
Rm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxGb3Jt
RGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KLSAgICBjb25zdCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZm
ZXJCb2R5KCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyPj4o
bV9kYXRhKS5nZXQoKTsgfQotICAgIGNvbnN0IEFycmF5QnVmZmVyVmlldyYgYXJyYXlCdWZmZXJW
aWV3Qm9keSgpIGNvbnN0IHsgcmV0dXJuIFdURjo6Z2V0PFJlZjxjb25zdCBBcnJheUJ1ZmZlclZp
ZXc+PihtX2RhdGEpLmdldCgpOyB9Ci0gICAgU3RyaW5nJiB0ZXh0Qm9keSgpIHsgcmV0dXJuIFdU
Rjo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQotICAgIGNvbnN0IFN0cmluZyYgdGV4dEJvZHkoKSBj
b25zdCB7IHJldHVybiBXVEY6OmdldDxTdHJpbmc+KG1fZGF0YSk7IH0KLSAgICBjb25zdCBVUkxT
ZWFyY2hQYXJhbXMmIHVybFNlYXJjaFBhcmFtc0JvZHkoKSBjb25zdCB7IHJldHVybiBXVEY6Omdl
dDxSZWY8Y29uc3QgVVJMU2VhcmNoUGFyYW1zPj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0
IEJsb2ImIGJsb2JCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IEJsb2I+
PihtX2RhdGEpLmdldCgpOyB9CisgICAgRm9ybURhdGEmIGZvcm1EYXRhQm9keSgpIHsgcmV0dXJu
IHN0ZDo6Z2V0PFJlZjxGb3JtRGF0YT4+KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBjb25zdCBGb3Jt
RGF0YSYgZm9ybURhdGFCb2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPEZvcm1EYXRh
Pj4obV9kYXRhKS5nZXQoKTsgfQorICAgIGNvbnN0IEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlckJv
ZHkoKSBjb25zdCB7IHJldHVybiBzdGQ6OmdldDxSZWY8Y29uc3QgQXJyYXlCdWZmZXI+PihtX2Rh
dGEpLmdldCgpOyB9CisgICAgY29uc3QgQXJyYXlCdWZmZXJWaWV3JiBhcnJheUJ1ZmZlclZpZXdC
b2R5KCkgY29uc3QgeyByZXR1cm4gc3RkOjpnZXQ8UmVmPGNvbnN0IEFycmF5QnVmZmVyVmlldz4+
KG1fZGF0YSkuZ2V0KCk7IH0KKyAgICBTdHJpbmcmIHRleHRCb2R5KCkgeyByZXR1cm4gc3RkOjpn
ZXQ8U3RyaW5nPihtX2RhdGEpOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0Qm9keSgpIGNvbnN0
IHsgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV9kYXRhKTsgfQorICAgIGNvbnN0IFVSTFNlYXJj
aFBhcmFtcyYgdXJsU2VhcmNoUGFyYW1zQm9keSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6Z2V0PFJl
Zjxjb25zdCBVUkxTZWFyY2hQYXJhbXM+PihtX2RhdGEpLmdldCgpOyB9CiAKLSAgICB1c2luZyBE
YXRhID0gVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0IEJsb2I+LCBSZWY8Rm9ybURh
dGE+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3Piwg
UmVmPGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CisgICAgdXNpbmcgRGF0YSA9IHN0
ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPGNvbnN0IEJsb2I+LCBSZWY8Rm9ybURhdGE+
LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXI+LCBSZWY8Y29uc3QgQXJyYXlCdWZmZXJWaWV3PiwgUmVm
PGNvbnN0IFVSTFNlYXJjaFBhcmFtcz4sIFN0cmluZz47CiAgICAgRGF0YSBtX2RhdGEgeyBudWxs
cHRyIH07CiAKICAgICBGZXRjaEJvZHlDb25zdW1lciBtX2NvbnN1bWVyIHsgRmV0Y2hCb2R5Q29u
c3VtZXI6OlR5cGU6Ok5vbmUgfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gv
RmV0Y2hIZWFkZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Zl
dGNoL0ZldGNoSGVhZGVycy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCAr
NzcsOCBAQCBzdGF0aWMgRXhjZXB0aW9uT3I8dm9pZD4gYXBwZW5kVG9IZWFkZXJNCiAvLyBodHRw
czovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXJzLWZpbGwKIHN0YXRpYyBF
eGNlcHRpb25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMsIGNv
bnN0IEZldGNoSGVhZGVyczo6SW5pdCYgaGVhZGVyc0luaXQsIEZldGNoSGVhZGVyczo6R3VhcmQg
Z3VhcmQpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFZlY3RvcjxT
dHJpbmc+Pj4oaGVhZGVyc0luaXQpKSB7Ci0gICAgICAgIGF1dG8mIHNlcXVlbmNlID0gV1RGOjpn
ZXQ8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4oaGVhZGVyc0luaXQpOworICAgIGlmIChzdGQ6Omhv
bGRzX2FsdGVybmF0aXZlPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+KGhlYWRlcnNJbml0KSkgewor
ICAgICAgICBhdXRvJiBzZXF1ZW5jZSA9IHN0ZDo6Z2V0PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+
KGhlYWRlcnNJbml0KTsKICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBzZXF1ZW5jZSkgewog
ICAgICAgICAgICAgaWYgKGhlYWRlci5zaXplKCkgIT0gMikKICAgICAgICAgICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiSGVhZGVyIHN1Yi1zZXF1ZW5jZSBtdXN0IGNvbnRh
aW4gZXhhY3RseSB0d28gaXRlbXMiIH07CkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBFeGNlcHRp
b25Pcjx2b2lkPiBmaWxsSGVhZGVyTWFwKEgKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1
dG8mIHJlY29yZCA9IFdURjo6Z2V0PFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+PihoZWFkZXJzSW5pdCk7CisgICAgICAgIGF1dG8mIHJlY29yZCA9IHN0ZDo6Z2V0PFZl
Y3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PihoZWFkZXJzSW5pdCk7CiAg
ICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogcmVjb3JkKSB7CiAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IGFwcGVuZFRvSGVhZGVyTWFwKGhlYWRlci5rZXksIGhlYWRlci52YWx1ZSwgaGVhZGVy
cywgZ3VhcmQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hIZWFkZXJzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaEhlYWRlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIFJlc3BvbnNl
CiAgICAgfTsKIAotICAgIHVzaW5nIEluaXQgPSBWYXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5n
Pj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PjsKKyAgICB1c2lu
ZyBJbml0ID0gc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6
OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+PjsKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8
UmVmPEZldGNoSGVhZGVycz4+IGNyZWF0ZShzdGQ6Om9wdGlvbmFsPEluaXQ+JiYpOwogCiAgICAg
c3RhdGljIFJlZjxGZXRjaEhlYWRlcnM+IGNyZWF0ZShHdWFyZCBndWFyZCA9IEd1YXJkOjpOb25l
LCBIVFRQSGVhZGVyTWFwJiYgaGVhZGVycyA9IHsgfSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
ZXRjaEhlYWRlcnMgeyBndWFyZCwgV1RGTW92ZShoZWFkZXJzKSB9KTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjIw
OTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsMTIgKzIzNSwxMiBAQCBFeGNlcHRpb25PcjxSZWY8RmV0Y2hS
ZXF1ZXN0Pj4gRmV0Y2hSZXF1CiB7CiAgICAgYXV0byByZXF1ZXN0ID0gYWRvcHRSZWYoKm5ldyBG
ZXRjaFJlcXVlc3QoY29udGV4dCwgc3RkOjpudWxsb3B0LCBGZXRjaEhlYWRlcnM6OmNyZWF0ZShG
ZXRjaEhlYWRlcnM6Okd1YXJkOjpSZXF1ZXN0KSwgeyB9KSk7CiAKLSAgICBpZiAoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
cXVlc3QtPmluaXRpYWxpemVXaXRoKFdURjo6Z2V0PFN0cmluZz4oaW5wdXQpLCBXVEZNb3ZlKGlu
aXQpKTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGlucHV0KSkgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKHN0ZDo6Z2V0PFN0
cmluZz4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gcmVxdWVzdC0+aW5pdGlhbGl6ZVdp
dGgoKldURjo6Z2V0PFJlZlB0cjxGZXRjaFJlcXVlc3Q+PihpbnB1dCksIFdURk1vdmUoaW5pdCkp
OworICAgICAgICBhdXRvIHJlc3VsdCA9IHJlcXVlc3QtPmluaXRpYWxpemVXaXRoKCpzdGQ6Omdl
dDxSZWZQdHI8RmV0Y2hSZXF1ZXN0Pj4oaW5wdXQpLCBXVEZNb3ZlKGluaXQpKTsKICAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0
Y2gvRmV0Y2hSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9m
ZXRjaC9GZXRjaFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9mZXRjaC9GZXRjaFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBjbGFzcyBVUkxTZWFyY2hQYXJhbXM7CiBjbGFzcyBGZXRjaFJlcXVlc3QgZmluYWwgOiBw
dWJsaWMgRmV0Y2hCb2R5T3duZXIgewogcHVibGljOgogICAgIHVzaW5nIEluaXQgPSBGZXRjaFJl
cXVlc3RJbml0OwotICAgIHVzaW5nIEluZm8gPSBWYXJpYW50PFJlZlB0cjxGZXRjaFJlcXVlc3Q+
LCBTdHJpbmc+OworICAgIHVzaW5nIEluZm8gPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEZldGNoUmVx
dWVzdD4sIFN0cmluZz47CiAKICAgICB1c2luZyBDYWNoZSA9IEZldGNoT3B0aW9uczo6Q2FjaGU7
CiAgICAgdXNpbmcgQ3JlZGVudGlhbHMgPSBGZXRjaE9wdGlvbnM6OkNyZWRlbnRpYWxzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9mZXRjaC9GZXRjaFJlc3BvbnNlLmgJKHJldmlz
aW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZmV0Y2gvRmV0Y2hSZXNwb25z
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNh
bmNlbCgpOwogI2VuZGlmCiAKLSAgICB1c2luZyBSZXNwb25zZURhdGEgPSBWYXJpYW50PHN0ZDo6
bnVsbHB0cl90LCBSZWY8Rm9ybURhdGE+LCBSZWY8U2hhcmVkQnVmZmVyPj47CisgICAgdXNpbmcg
UmVzcG9uc2VEYXRhID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBSZWY8Rm9ybURhdGE+
LCBSZWY8U2hhcmVkQnVmZmVyPj47CiAgICAgUmVzcG9uc2VEYXRhIGNvbnN1bWVCb2R5KCk7CiAg
ICAgdm9pZCBzZXRCb2R5RGF0YShSZXNwb25zZURhdGEmJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IElEQkN1cnNv
cjo6Y29udGludWVQcmkKICAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBl
eGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9uICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mg
c291cmNlIG9yIGVmZmVjdGl2ZSBvYmplY3Qgc3RvcmUgaGFzIGJlZW4gZGVsZXRlZC4iKSB9Owog
Ci0gICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291
cmNlKSkKKyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkluZGV4Pj4o
bV9zb3VyY2UpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
LCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdjb250aW51ZVByaW1hcnlLZXknIG9u
ICdJREJDdXJzb3InOiBUaGUgY3Vyc29yJ3Mgc291cmNlIGlzIG5vdCBhbiBpbmRleC4iKSB9Owog
CiAgICAgYXV0byBkaXJlY3Rpb24gPSBtX2luZm8uY3Vyc29yRGlyZWN0aW9uKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1
YWwgfklEQkN1cnNvcigpOwogCi0gICAgdXNpbmcgU291cmNlID0gVmFyaWFudDxSZWZQdHI8SURC
T2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+PjsKKyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6
OnZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPiwgUmVmUHRyPElEQkluZGV4Pj47CiAKICAg
ICBjb25zdCBTb3VyY2UmIHNvdXJjZSgpIGNvbnN0OwogICAgIElEQkN1cnNvckRpcmVjdGlvbiBk
aXJlY3Rpb24oKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDcgKzE1MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxJREJPYmplY3RTdG9yZT4+IElEQkRhdGEK
ICAgICBpZiAoa2V5UGF0aCAmJiAhaXNJREJLZXlQYXRoVmFsaWQoa2V5UGF0aC52YWx1ZSgpKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCBBU0NJSUxpdGVyYWwoIkZh
aWxlZCB0byBleGVjdXRlICdjcmVhdGVPYmplY3RTdG9yZScgb24gJ0lEQkRhdGFiYXNlJzogVGhl
IGtleVBhdGggb3B0aW9uIGlzIG5vdCBhIHZhbGlkIGtleSBwYXRoLiIpIH07CiAKLSAgICBpZiAo
a2V5UGF0aCAmJiBwYXJhbWV0ZXJzLmF1dG9JbmNyZW1lbnQgJiYgKChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFN0cmluZz4oa2V5UGF0aC52YWx1ZSgpKSAmJiBXVEY6OmdldDxTdHJpbmc+KGtleVBh
dGgudmFsdWUoKSkuaXNFbXB0eSgpKSB8fCBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxT
dHJpbmc+PihrZXlQYXRoLnZhbHVlKCkpKSkKKyAgICBpZiAoa2V5UGF0aCAmJiBwYXJhbWV0ZXJz
LmF1dG9JbmNyZW1lbnQgJiYgKChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0
aC52YWx1ZSgpKSAmJiBzdGQ6OmdldDxTdHJpbmc+KGtleVBhdGgudmFsdWUoKSkuaXNFbXB0eSgp
KSB8fCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoLnZhbHVl
KCkpKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVND
SUlMaXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlT2JqZWN0U3RvcmUnIG9uICdJREJE
YXRhYmFzZSc6IFRoZSBhdXRvSW5jcmVtZW50IG9wdGlvbiB3YXMgc2V0IGJ1dCB0aGUga2V5UGF0
aCBvcHRpb24gd2FzIGVtcHR5IG9yIGFuIGFycmF5LiIpIH07CiAKICAgICAvLyBJbnN0YWxsIHRo
ZSBuZXcgT2JqZWN0U3RvcmUgaW50byB0aGUgY29ubmVjdGlvbidzIG1ldGFkYXRhLgpAQCAtMTcx
LDEwICsxNzEsMTAgQEAgRXhjZXB0aW9uT3I8UmVmPElEQlRyYW5zYWN0aW9uPj4gSURCRGF0YQog
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsIEFTQ0lJTGl0ZXJh
bCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUg
ZGF0YWJhc2UgY29ubmVjdGlvbiBpcyBjbG9zaW5nLiIpIH07CiAKICAgICBWZWN0b3I8U3RyaW5n
PiBvYmplY3RTdG9yZXM7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPFN0
cmluZz4+KHN0b3JlTmFtZXMpKQotICAgICAgICBvYmplY3RTdG9yZXMgPSBXVEZNb3ZlKFdURjo6
Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8VmVjdG9yPFN0cmluZz4+KHN0b3JlTmFtZXMpKQorICAgICAgICBvYmplY3RTdG9y
ZXMgPSBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihzdG9yZU5hbWVzKSk7CiAgICAg
ZWxzZQotICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoV1RGOjpnZXQ8U3RyaW5n
PihzdG9yZU5hbWVzKSkpOworICAgICAgICBvYmplY3RTdG9yZXMuYXBwZW5kKFdURk1vdmUoc3Rk
OjpnZXQ8U3RyaW5nPihzdG9yZU5hbWVzKSkpOwogCiAgICAgaWYgKG9iamVjdFN0b3Jlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ3RyYW5zYWN0aW9uJyBvbiAnSURCRGF0YWJh
c2UnOiBUaGUgc3RvcmVOYW1lcyBwYXJhbWV0ZXIgd2FzIGVtcHR5LiIpIH07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogCiAgICAgRXhjZXB0
aW9uT3I8UmVmPElEQk9iamVjdFN0b3JlPj4gY3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBPYmplY3RTdG9yZVBhcmFtZXRlcnMmJik7CiAKLSAgICB1c2luZyBTdHJpbmdPclZl
Y3Rvck9mU3RyaW5ncyA9IFdURjo6VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKKyAg
ICB1c2luZyBTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyA9IHN0ZDo6dmFyaWFudDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+PjsKICAgICBFeGNlcHRpb25PcjxSZWY8SURCVHJhbnNhY3Rpb24+PiB0cmFu
c2FjdGlvbihTdHJpbmdPclZlY3Rvck9mU3RyaW5ncyYmIHN0b3JlTmFtZXMsIElEQlRyYW5zYWN0
aW9uTW9kZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gZGVsZXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGNsb3NlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJHZXRBbGxSZXN1bHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5jcHAJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJl
c3VsdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgaXNvbGF0ZWRDb3B5T2ZWYXJp
YW50KGNvbnN0IFdURjo6VmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1
ZT4sIHN0ZDo6bnVsbHB0cl90PiYgc291cmNlLCBXVEY6OlZhcmlhbnQ8VmVjdG9yPElEQktleURh
dGE+LCBWZWN0b3I8SURCVmFsdWU+LCBzdGQ6Om51bGxwdHJfdD4mIHRhcmdldCkKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgaXNvbGF0ZWRDb3B5T2ZWYXJpYW50KGNvbnN0IHN0ZDo6dmFyaWFu
dDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90PiYg
c291cmNlLCBzdGQ6OnZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFsdWU+
LCBzdGQ6Om51bGxwdHJfdD4mIHRhcmdldCkKIHsKICAgICB0YXJnZXQgPSBWZWN0b3I8VD4oKTsK
LSAgICBhdXRvJiBzb3VyY2VWZWN0b3IgPSBXVEY6OmdldDxWZWN0b3I8VD4+KHNvdXJjZSk7Ci0g
ICAgYXV0byYgdGFyZ2V0VmVjdG9yID0gV1RGOjpnZXQ8VmVjdG9yPFQ+Pih0YXJnZXQpOworICAg
IGF1dG8mIHNvdXJjZVZlY3RvciA9IHN0ZDo6Z2V0PFZlY3RvcjxUPj4oc291cmNlKTsKKyAgICBh
dXRvJiB0YXJnZXRWZWN0b3IgPSBzdGQ6OmdldDxWZWN0b3I8VD4+KHRhcmdldCk7CiAgICAgdGFy
Z2V0VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc291cmNlVmVjdG9yLnNpemUoKSk7CiAg
ICAgZm9yIChhdXRvJiBlbGVtZW50IDogc291cmNlVmVjdG9yKQogICAgICAgICB0YXJnZXRWZWN0
b3IudW5jaGVja2VkQXBwZW5kKGVsZW1lbnQuaXNvbGF0ZWRDb3B5KCkpOwpAQCAtNTYsNyArNTYs
NyBAQCB2b2lkIElEQkdldEFsbFJlc3VsdDo6aXNvbGF0ZWRDb3B5KGNvbnN0CiB7CiAgICAgZGVz
dGluYXRpb24ubV90eXBlID0gc291cmNlLm1fdHlwZTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pihzb3VyY2UubV9yZXN1bHRzKSkKKyAgICBpZiAoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4oc291cmNlLm1fcmVzdWx0cykpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIHN3aXRjaCAoc291cmNlLm1fdHlwZSkgewpAQCAtNzIsMjkg
KzcyLDI5IEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0Ojppc29sYXRlZENvcHkoY29uc3QKIHZvaWQg
SURCR2V0QWxsUmVzdWx0OjphZGRLZXkoSURCS2V5RGF0YSYmIGtleSkKIHsKICAgICBBU1NFUlQo
bV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpKTsKLSAgICBX
VEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUoa2V5
KSk7CisgICAgQVNTRVJUKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURhdGE+
PihtX3Jlc3VsdHMpKTsKKyAgICBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fcmVzdWx0
cykuYXBwZW5kKFdURk1vdmUoa2V5KSk7CiB9CiAKIHZvaWQgSURCR2V0QWxsUmVzdWx0OjphZGRW
YWx1ZShJREJWYWx1ZSYmIHZhbHVlKQogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhlZERC
OjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOwotICAgIFdURjo6Z2V0PFZlY3RvcjxJREJW
YWx1ZT4+KG1fcmVzdWx0cykuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKKyAgICBBU1NFUlQoc3Rk
Ojpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpKTsKKyAgICBz
dGQ6OmdldDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpLmFwcGVuZChXVEZNb3ZlKHZhbHVl
KSk7CiB9CiAKIGNvbnN0IFZlY3RvcjxJREJLZXlEYXRhPiYgSURCR2V0QWxsUmVzdWx0OjprZXlz
KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV90eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6
S2V5cyk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8VmVjdG9yPElEQktleURh
dGE+PihtX3Jlc3VsdHMpKTsKLSAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihtX3Jlc3VsdHMpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxJ
REJLZXlEYXRhPj4obV9yZXN1bHRzKSk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJL
ZXlEYXRhPj4obV9yZXN1bHRzKTsKIH0KIAogY29uc3QgVmVjdG9yPElEQlZhbHVlPiYgSURCR2V0
QWxsUmVzdWx0Ojp2YWx1ZXMoKSBjb25zdAogewogICAgIEFTU0VSVChtX3R5cGUgPT0gSW5kZXhl
ZERCOjpHZXRBbGxUeXBlOjpWYWx1ZXMpOwotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOwotICAgIHJldHVybiBXVEY6OmdldDxW
ZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpOworICAgIHJldHVybiBzdGQ6Omdl
dDxWZWN0b3I8SURCVmFsdWU+PihtX3Jlc3VsdHMpOwogfQogCiBWZWN0b3I8U3RyaW5nPiBJREJH
ZXRBbGxSZXN1bHQ6OmFsbEJsb2JGaWxlUGF0aHMoKSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBA
IFZlY3RvcjxTdHJpbmc+IElEQkdldEFsbFJlc3VsdDo6YWxsQmxvYkYKICAgICBBU1NFUlQobV90
eXBlID09IEluZGV4ZWREQjo6R2V0QWxsVHlwZTo6VmFsdWVzKTsKIAogICAgIEhhc2hTZXQ8U3Ry
aW5nPiBwYXRoU2V0OwotICAgIGZvciAoYXV0byYgdmFsdWUgOiBXVEY6OmdldDxWZWN0b3I8SURC
VmFsdWU+PihtX3Jlc3VsdHMpKSB7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHN0ZDo6Z2V0PFZl
Y3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cykpIHsKICAgICAgICAgZm9yIChhdXRvJiBwYXRoIDog
dmFsdWUuYmxvYkZpbGVQYXRocygpKQogICAgICAgICAgICAgcGF0aFNldC5hZGQocGF0aCk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCR2V0QWxsUmVz
dWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
R2V0QWxsUmVzdWx0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkdldEFsbFJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgaXNvbGF0ZWRDb3B5KGNvbnN0IElEQkdl
dEFsbFJlc3VsdCYgc291cmNlLCBJREJHZXRBbGxSZXN1bHQmIGRlc3RpbmF0aW9uKTsKIAogICAg
IEluZGV4ZWREQjo6R2V0QWxsVHlwZSBtX3R5cGUgeyBJbmRleGVkREI6OkdldEFsbFR5cGU6Oktl
eXMgfTsKLSAgICBXVEY6OlZhcmlhbnQ8VmVjdG9yPElEQktleURhdGE+LCBWZWN0b3I8SURCVmFs
dWU+LCBzdGQ6Om51bGxwdHJfdD4gbV9yZXN1bHRzIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dmFy
aWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFZlY3RvcjxJREJWYWx1ZT4sIHN0ZDo6bnVsbHB0cl90
PiBtX3Jlc3VsdHMgeyBudWxscHRyIH07CiB9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgpA
QCAtODQsMTAgKzg0LDEwIEBAIHZvaWQgSURCR2V0QWxsUmVzdWx0OjplbmNvZGUoRW5jb2RlciYg
ZW4KIAogICAgIHN3aXRjaCAobV9yZXN1bHRzLmluZGV4KCkpIHsKICAgICBjYXNlIDA6Ci0gICAg
ICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3Jlc3VsdHMpOwor
ICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV9yZXN1bHRz
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgotICAgICAgICBlbmNvZGVyIDw8IFdURjo6
Z2V0PFZlY3RvcjxJREJWYWx1ZT4+KG1fcmVzdWx0cyk7CisgICAgICAgIGVuY29kZXIgPDwgc3Rk
OjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4obV9yZXN1bHRzKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAyOgogICAgICAgICBicmVhazsKQEAgLTEwOSwxMiArMTA5LDEyIEBAIGJvb2wgSURCR2V0
QWxsUmVzdWx0OjpkZWNvZGUoRGVjb2RlciYgZGUKICAgICBzd2l0Y2ggKGluZGV4KSB7CiAgICAg
Y2FzZSAwOgogICAgICAgICByZXN1bHQubV9yZXN1bHRzID0gVmVjdG9yPElEQktleURhdGE+KCk7
Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihyZXN1bHQubV9yZXN1bHRzKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpn
ZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQubV9yZXN1bHRzKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMToKICAgICAgICAgcmVzdWx0
Lm1fcmVzdWx0cyA9IFZlY3RvcjxJREJWYWx1ZT4oKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShXVEY6OmdldDxWZWN0b3I8SURCVmFsdWU+PihyZXN1bHQubV9yZXN1bHRzKSkpCisgICAg
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUoc3RkOjpnZXQ8VmVjdG9yPElEQlZhbHVlPj4ocmVzdWx0
Lm1fcmVzdWx0cykpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIDI6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QktleS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgYm9vbCBJ
REJLZXk6OmlzVmFsaWQoKSBjb25zdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
bV90eXBlID09IEtleVR5cGU6OkFycmF5KSB7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogV1RG
OjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKSkgeworICAgICAgICBmb3IgKGF1dG8mIGtleSA6
IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4obV92YWx1ZSkpIHsKICAgICAgICAgICAgIGlmICgha2V5
LT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBA
IC0xMDksOCArMTA5LDggQEAgaW50IElEQktleTo6Y29tcGFyZShjb25zdCBJREJLZXkmIG90aGVy
KQogCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7Ci0g
ICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8SURCS2V5VmVjdG9yPihtX3ZhbHVlKTsKLSAg
ICAgICAgYXV0byYgb3RoZXJBcnJheSA9IFdURjo6Z2V0PElEQktleVZlY3Rvcj4ob3RoZXIubV92
YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8SURCS2V5VmVjdG9yPihtX3Zh
bHVlKTsKKyAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IHN0ZDo6Z2V0PElEQktleVZlY3Rvcj4o
b3RoZXIubV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6
ZSgpICYmIGkgPCBvdGhlckFycmF5LnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoaW50
IHJlc3VsdCA9IGFycmF5W2ldLT5jb21wYXJlKCpvdGhlckFycmF5W2ldKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTIyLDEzICsxMjIsMTMgQEAgaW50IElEQktleTo6Y29t
cGFyZShjb25zdCBJREJLZXkmIG90aGVyKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
Y2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBjb21wYXJlQmluYXJ5S2V5RGF0
YShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIFdURjo6Z2V0PFRocmVh
ZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBjb21wYXJl
QmluYXJ5S2V5RGF0YShzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSksIHN0
ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKSk7CiAgICAgY2FzZSBL
ZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIHJldHVybiAtY29kZVBvaW50Q29tcGFyZShXVEY6Omdl
dDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpLCBXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIC1jb2RlUG9pbnRDb21wYXJlKHN0ZDo6Z2V0PFN0cmluZz4ob3RoZXIubV92
YWx1ZSksIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0
ZToKICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjogewotICAgICAgICBhdXRvIG51bWJlciA9IFdU
Rjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7Ci0gICAgICAgIGF1dG8gb3RoZXJOdW1iZXIgPSBXVEY6
OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAgICAgICBhdXRvIG51bWJlciA9IHN0ZDo6
Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAgICAgIGF1dG8gb3RoZXJOdW1iZXIgPSBzdGQ6Omdl
dDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOwogICAgICAgICByZXR1cm4gKG51bWJlciA8IG90aGVy
TnVtYmVyKSA/IC0xIDogKChudW1iZXIgPiBvdGhlck51bWJlcikgPyAxIDogMCk7CiAgICAgfQog
ICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQktleS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDMxICsxMTMs
MzEgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4mIGFycmF5KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6QXJyYXkpOwot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VmVjdG9yPFJlZlB0cjxJREJLZXk+Pj4obV92YWx1ZSk7
CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8UmVmUHRyPElEQktleT4+PihtX3ZhbHVl
KTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0cmluZygpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OlN0cmluZyk7Ci0gICAgICAgIHJldHVybiBX
VEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3RyaW5n
PihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBkb3VibGUgZGF0ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6OkRhdGUpOwotICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91YmxlIG51bWJlcigpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV90eXBlID09IEtleVR5cGU6Ok51bWJlcik7Ci0gICAgICAgIHJldHVybiBX
VEY6OmdldDxkb3VibGU+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKTsKICAgICB9CiAKICAgICBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgYmlu
YXJ5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3R5cGUgPT0gS2V5VHlwZTo6Qmlu
YXJ5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3Zh
bHVlKTsKICAgICB9CiAKICAgICBpbnQgY29tcGFyZShjb25zdCBJREJLZXkmIG90aGVyKSBjb25z
dDsKQEAgLTE3MSw3ICsxNzEsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IElEQktleShjb25z
dCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYpOwogCiAgICAgY29uc3QgS2V5VHlwZSBtX3R5cGU7Ci0g
ICAgVmFyaWFudDxWZWN0b3I8UmVmUHRyPElEQktleT4+LCBTdHJpbmcsIGRvdWJsZSwgVGhyZWFk
U2FmZURhdGFCdWZmZXI+IG1fdmFsdWU7CisgICAgc3RkOjp2YXJpYW50PFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsK
IAogICAgIGNvbnN0IHNpemVfdCBtX3NpemVFc3RpbWF0ZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5RGF0YS5jcHAJKHJldmlzaW9uIDIyMDk1
NCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIElEQktleURhdGE6OklEQktleURhdGEoY29u
c3QgSURCS2V5KiBrZXkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlUeXBlOjpBcnJheTog
ewogICAgICAgICBtX3ZhbHVlID0gVmVjdG9yPElEQktleURhdGE+KCk7Ci0gICAgICAgIGF1dG8m
IGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAg
YXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwogICAg
ICAgICBmb3IgKGF1dG8mIGtleTIgOiBrZXktPmFycmF5KCkpCiAgICAgICAgICAgICBhcnJheS5h
cHBlbmQoSURCS2V5RGF0YShrZXkyLmdldCgpKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtODEsMjAg
KzgxLDIwIEBAIFJlZlB0cjxJREJLZXk+IElEQktleURhdGE6Om1heWJlQ3JlYXRlSUQKICAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwogICAgIGNhc2UgS2V5VHlwZTo6QXJy
YXk6IHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBhcnJheTsKLSAgICAgICAgZm9y
IChhdXRvJiBrZXlEYXRhIDogV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKSkg
eworICAgICAgICBmb3IgKGF1dG8mIGtleURhdGEgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0
YT4+KG1fdmFsdWUpKSB7CiAgICAgICAgICAgICBhcnJheS5hcHBlbmQoa2V5RGF0YS5tYXliZUNy
ZWF0ZUlEQktleSgpKTsKICAgICAgICAgICAgIEFTU0VSVChhcnJheS5sYXN0KCkpOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KGFycmF5KTsKICAgICB9CiAg
ICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6Ci0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUJp
bmFyeShXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gSURCS2V5OjpjcmVhdGVCaW5hcnkoc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+
KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlU3RyaW5nKFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CiAg
ICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRl
KFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVEYXRlKHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6TnVt
YmVyOgotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoV1RGOjpnZXQ8ZG91Ymxl
PihtX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihzdGQ6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKICAgICBjYXNlIEtleVR5cGU6Ok1heDoKICAgICBjYXNlIEtl
eVR5cGU6Ok1pbjoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMjUsMjAgKzEy
NSwyMCBAQCB2b2lkIElEQktleURhdGE6Omlzb2xhdGVkQ29weShjb25zdCBJREJLCiAgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAgIGRlc3RpbmF0aW9u
Lm1fdmFsdWUgPSBWZWN0b3I8SURCS2V5RGF0YT4oKTsKLSAgICAgICAgYXV0byYgZGVzdGluYXRp
b25BcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4oZGVzdGluYXRpb24ubV92YWx1
ZSk7Ci0gICAgICAgIGZvciAoYXV0byYga2V5IDogV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
Pihzb3VyY2UubV92YWx1ZSkpCisgICAgICAgIGF1dG8mIGRlc3RpbmF0aW9uQXJyYXkgPSBzdGQ6
OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGRlc3RpbmF0aW9uLm1fdmFsdWUpOworICAgICAgICBm
b3IgKGF1dG8mIGtleSA6IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4oc291cmNlLm1fdmFs
dWUpKQogICAgICAgICAgICAgZGVzdGluYXRpb25BcnJheS5hcHBlbmQoa2V5Lmlzb2xhdGVkQ29w
eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToK
LSAgICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVm
ZmVyPihzb3VyY2UubV92YWx1ZSk7CisgICAgICAgIGRlc3RpbmF0aW9uLm1fdmFsdWUgPSBzdGQ6
OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4oc291cmNlLm1fdmFsdWUpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBLZXlUeXBlOjpTdHJpbmc6Ci0gICAgICAgIGRlc3RpbmF0aW9uLm1fdmFs
dWUgPSBXVEY6OmdldDxTdHJpbmc+KHNvdXJjZS5tX3ZhbHVlKS5pc29sYXRlZENvcHkoKTsKKyAg
ICAgICAgZGVzdGluYXRpb24ubV92YWx1ZSA9IHN0ZDo6Z2V0PFN0cmluZz4oc291cmNlLm1fdmFs
dWUpLmlzb2xhdGVkQ29weSgpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpE
YXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOgotICAgICAgICBkZXN0aW5hdGlvbi5tX3Zh
bHVlID0gV1RGOjpnZXQ8ZG91YmxlPihzb3VyY2UubV92YWx1ZSk7CisgICAgICAgIGRlc3RpbmF0
aW9uLm1fdmFsdWUgPSBzdGQ6OmdldDxkb3VibGU+KHNvdXJjZS5tX3ZhbHVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIGNhc2UgS2V5VHlwZTo6TWF4OgogICAgIGNhc2UgS2V5VHlwZTo6TWluOgpA
QCAtMTYwLDI1ICsxNjAsMjUgQEAgdm9pZCBJREJLZXlEYXRhOjplbmNvZGUoS2V5ZWRFbmNvZGVy
JiBlbgogICAgIGNhc2UgS2V5VHlwZTo6SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgS2V5VHlwZTo6QXJyYXk6IHsKLSAgICAgICAgYXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0
b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAgICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0
PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7CiAgICAgICAgIGVuY29kZXIuZW5jb2RlT2Jq
ZWN0cygiYXJyYXkiLCBhcnJheS5iZWdpbigpLCBhcnJheS5lbmQoKSwgW10oS2V5ZWRFbmNvZGVy
JiBlbmNvZGVyLCBjb25zdCBJREJLZXlEYXRhJiBrZXkpIHsKICAgICAgICAgICAgIGtleS5lbmNv
ZGUoZW5jb2Rlcik7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNh
c2UgS2V5VHlwZTo6QmluYXJ5OiB7Ci0gICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJl
YWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSkuZGF0YSgpOworICAgICAgICBhdXRvKiBkYXRhID0g
c3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAgICAgICAg
ZW5jb2Rlci5lbmNvZGVCb29sKCJoYXNCaW5hcnkiLCAhIWRhdGEpOwogICAgICAgICBpZiAoZGF0
YSkKICAgICAgICAgICAgIGVuY29kZXIuZW5jb2RlQnl0ZXMoImJpbmFyeSIsIGRhdGEtPmRhdGEo
KSwgZGF0YS0+c2l6ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZzoKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVTdHJpbmcoInN0cmluZyIsIFdURjo6
Z2V0PFN0cmluZz4obV92YWx1ZSkpOworICAgICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3Ry
aW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIEtleVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6Ci0gICAgICAgIGVu
Y29kZXIuZW5jb2RlRG91YmxlKCJudW1iZXIiLCBXVEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsK
KyAgICAgICAgZW5jb2Rlci5lbmNvZGVEb3VibGUoIm51bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4o
bV92YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLZXlUeXBlOjpNYXg6CiAgICAg
Y2FzZSBLZXlUeXBlOjpNaW46CkBAIC0yMjAsMTIgKzIyMCwxMiBAQCBib29sIElEQktleURhdGE6
OmRlY29kZShLZXllZERlY29kZXImIGRlCiAKICAgICBpZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlU
eXBlOjpTdHJpbmcpIHsKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBTdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlU3RyaW5nKCJzdHJpbmciLCBXVEY6OmdldDxTdHJpbmc+
KHJlc3VsdC5tX3ZhbHVlKSk7CisgICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZVN0cmluZygi
c3RyaW5nIiwgc3RkOjpnZXQ8U3RyaW5nPihyZXN1bHQubV92YWx1ZSkpOwogICAgIH0KIAogICAg
IGlmIChyZXN1bHQubV90eXBlID09IEtleVR5cGU6Ok51bWJlciB8fCByZXN1bHQubV90eXBlID09
IEtleVR5cGU6OkRhdGUpIHsKICAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSAwLjA7Ci0gICAgICAg
IHJldHVybiBkZWNvZGVyLmRlY29kZURvdWJsZSgibnVtYmVyIiwgV1RGOjpnZXQ8ZG91YmxlPihy
ZXN1bHQubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGVEb3VibGUoIm51
bWJlciIsIHN0ZDo6Z2V0PGRvdWJsZT4ocmVzdWx0Lm1fdmFsdWUpKTsKICAgICB9CiAKICAgICBp
ZiAocmVzdWx0Lm1fdHlwZSA9PSBLZXlUeXBlOjpCaW5hcnkpIHsKQEAgLTI1Myw3ICsyNTMsNyBA
QCBib29sIElEQktleURhdGE6OmRlY29kZShLZXllZERlY29kZXImIGRlCiAgICAgfTsKICAgICAK
ICAgICByZXN1bHQubV92YWx1ZSA9IFZlY3RvcjxJREJLZXlEYXRhPigpOwotICAgIHJldHVybiBk
ZWNvZGVyLmRlY29kZU9iamVjdHMoImFycmF5IiwgV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+
PihyZXN1bHQubV92YWx1ZSksIGFycmF5RnVuY3Rpb24pOworICAgIHJldHVybiBkZWNvZGVyLmRl
Y29kZU9iamVjdHMoImFycmF5Iiwgc3RkOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihyZXN1bHQu
bV92YWx1ZSksIGFycmF5RnVuY3Rpb24pOwogfQogCiBpbnQgSURCS2V5RGF0YTo6Y29tcGFyZShj
b25zdCBJREJLZXlEYXRhJiBvdGhlcikgY29uc3QKQEAgLTI3Nyw4ICsyNzcsOCBAQCBpbnQgSURC
S2V5RGF0YTo6Y29tcGFyZShjb25zdCBJREJLZXlEYXRhCiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIEtleVR5cGU6OkFycmF5OiB7Ci0g
ICAgICAgIGF1dG8mIGFycmF5ID0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVl
KTsKLSAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRh
Pj4ob3RoZXIubV92YWx1ZSk7CisgICAgICAgIGF1dG8mIGFycmF5ID0gc3RkOjpnZXQ8VmVjdG9y
PElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byYgb3RoZXJBcnJheSA9IHN0ZDo6
Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4ob3RoZXIubV92YWx1ZSk7CiAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpICYmIGkgPCBvdGhlckFycmF5LnNpemUoKTsgKytp
KSB7CiAgICAgICAgICAgICBpZiAoaW50IHJlc3VsdCA9IGFycmF5W2ldLmNvbXBhcmUob3RoZXJB
cnJheVtpXSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI5MCwxMyArMjkw
LDEzIEBAIGludCBJREJLZXlEYXRhOjpjb21wYXJlKGNvbnN0IElEQktleURhdGEKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5OgotICAgICAgICByZXR1
cm4gY29tcGFyZUJpbmFyeUtleURhdGEoV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1f
dmFsdWUpLCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gY29tcGFyZUJpbmFyeUtleURhdGEoc3RkOjpnZXQ8VGhyZWFkU2FmZURh
dGFCdWZmZXI+KG1fdmFsdWUpLCBzdGQ6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIu
bV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1cm4gY29k
ZVBvaW50Q29tcGFyZShXVEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpLCBXVEY6OmdldDxTdHJpbmc+
KG90aGVyLm1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoc3RkOjpn
ZXQ8U3RyaW5nPihtX3ZhbHVlKSwgc3RkOjpnZXQ8U3RyaW5nPihvdGhlci5tX3ZhbHVlKSk7CiAg
ICAgY2FzZSBLZXlUeXBlOjpEYXRlOgogICAgIGNhc2UgS2V5VHlwZTo6TnVtYmVyOiB7Ci0gICAg
ICAgIGF1dG8gbnVtYmVyID0gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKLSAgICAgICAgYXV0
byBvdGhlck51bWJlciA9IFdURjo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CisgICAgICAg
IGF1dG8gbnVtYmVyID0gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAgICAgICAgYXV0byBv
dGhlck51bWJlciA9IHN0ZDo6Z2V0PGRvdWJsZT4ob3RoZXIubV92YWx1ZSk7CiAKICAgICAgICAg
aWYgKG51bWJlciA9PSBvdGhlck51bWJlcikKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzI1
LDcgKzMyNSw3IEBAIFN0cmluZyBJREJLZXlEYXRhOjpsb2dnaW5nU3RyaW5nKCkgY29uc3QKICAg
ICBjYXNlIEtleVR5cGU6OkFycmF5OiB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
ICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8YXJyYXk+IC0geyAiKTsKLSAgICAgICAg
YXV0byYgYXJyYXkgPSBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOworICAg
ICAgICBhdXRvJiBhcnJheSA9IHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFycmF5W2ldLmxvZ2dpbmdTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBpZiAoaSA8IGFycmF5LnNpemUoKSAtIDEpCkBAIC0zMzksNyArMzM5LDcgQEAgU3Ry
aW5nIElEQktleURhdGE6OmxvZ2dpbmdTdHJpbmcoKSBjb25zdAogICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI8YmluYXJ5PiAtICIpOwogCi0g
ICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1
ZSkuZGF0YSgpOworICAgICAgICBhdXRvKiBkYXRhID0gc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFC
dWZmZXI+KG1fdmFsdWUpLmRhdGEoKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiKG51bGwpIik7CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVy
LnRvU3RyaW5nKCk7CkBAIC0zNTcsMTIgKzM1NywxMiBAQCBTdHJpbmcgSURCS2V5RGF0YTo6bG9n
Z2luZ1N0cmluZygpIGNvbnN0CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEtleVR5
cGU6OlN0cmluZzoKLSAgICAgICAgcmVzdWx0ID0gIjxzdHJpbmc+IC0gIiArIFdURjo6Z2V0PFN0
cmluZz4obV92YWx1ZSk7CisgICAgICAgIHJlc3VsdCA9ICI8c3RyaW5nPiAtICIgKyBzdGQ6Omdl
dDxTdHJpbmc+KG1fdmFsdWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkRh
dGU6Ci0gICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiPGRhdGU+IC0gJWYiLCBXVEY6Omdl
dDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCI8ZGF0
ZT4gLSAlZiIsIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpOwogICAgIGNhc2UgS2V5VHlwZTo6
TnVtYmVyOgotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjxudW1iZXI+IC0gJWYiLCBX
VEY6OmdldDxkb3VibGU+KG1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCI8bnVtYmVyPiAtICVmIiwgc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSk7CiAgICAgY2FzZSBL
ZXlUeXBlOjpNYXg6CiAgICAgICAgIHJldHVybiAiPG1heGltdW0+IjsKICAgICBjYXNlIEtleVR5
cGU6Ok1pbjoKQEAgLTQ0MiwxMyArNDQyLDEzIEBAIGJvb2wgSURCS2V5RGF0YTo6b3BlcmF0b3I9
PShjb25zdCBJREJLZXkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBLZXlUeXBlOjpO
dW1iZXI6CiAgICAgY2FzZSBLZXlUeXBlOjpEYXRlOgotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8
ZG91YmxlPihtX3ZhbHVlKSA9PSBXVEY6OmdldDxkb3VibGU+KG90aGVyLm1fdmFsdWUpOworICAg
ICAgICByZXR1cm4gc3RkOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSA9PSBzdGQ6OmdldDxkb3VibGU+
KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSA9PSBXVEY6OmdldDxTdHJpbmc+KG90aGVyLm1f
dmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKSA9PSBzdGQ6
OmdldDxTdHJpbmc+KG90aGVyLm1fdmFsdWUpOwogICAgIGNhc2UgS2V5VHlwZTo6QmluYXJ5Ogot
ICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpID09
IFdURjo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihvdGhlci5tX3ZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6Z2V0PFRocmVhZFNhZmVEYXRhQnVmZmVyPihtX3ZhbHVlKSA9PSBzdGQ6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4ob3RoZXIubV92YWx1ZSk7CiAgICAgY2FzZSBLZXlUeXBl
OjpBcnJheToKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92
YWx1ZSkgPT0gV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFZlY3RvcjxJREJLZXlEYXRhPj4obV92YWx1ZSkgPT0gc3Rk
OjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihvdGhlci5tX3ZhbHVlKTsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJLZXlEYXRhLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDEzICsxMzEsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgS2V5VHlwZTo6TnVtYmVyOgogICAgICAgICBjYXNlIEtleVR5cGU6OkRhdGU6Ci0gICAg
ICAgICAgICBoYXNoQ29kZXMuYXBwZW5kKFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2Yo
ZG91YmxlKT4oJldURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQoU3RyaW5nSGFzaGVyOjpoYXNoTWVtb3J5PHNpemVvZihkb3VibGUpPigmc3Rk
OjpnZXQ8ZG91YmxlPihtX3ZhbHVlKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgS2V5VHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZChTdHJpbmdI
YXNoOjpoYXNoKFdURjo6Z2V0PFN0cmluZz4obV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGhhc2hD
b2Rlcy5hcHBlbmQoU3RyaW5nSGFzaDo6aGFzaChzdGQ6OmdldDxTdHJpbmc+KG1fdmFsdWUpKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBLZXlUeXBlOjpCaW5hcnk6IHsKLSAg
ICAgICAgICAgIGF1dG8qIGRhdGEgPSBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92
YWx1ZSkuZGF0YSgpOworICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0ZDo6Z2V0PFRocmVhZFNh
ZmVEYXRhQnVmZmVyPihtX3ZhbHVlKS5kYXRhKCk7CiAgICAgICAgICAgICBpZiAoIWRhdGEpCiAg
ICAgICAgICAgICAgICAgaGFzaENvZGVzLmFwcGVuZCgwKTsKICAgICAgICAgICAgIGVsc2UKQEAg
LTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjYXNlIEtleVR5cGU6OkFycmF5OgotICAgICAgICAgICAgZm9yIChhdXRvJiBrZXkg
OiBXVEY6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQorICAgICAgICAgICAgZm9y
IChhdXRvJiBrZXkgOiBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpKQogICAg
ICAgICAgICAgICAgIGhhc2hDb2Rlcy5hcHBlbmQoa2V5Lmhhc2goKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMTU5LDM4ICsxNTksMzggQEAgcHVibGljOgogICAgIFN0cmlu
ZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBl
OjpTdHJpbmcpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8U3RyaW5nPihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFN0cmluZz4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgZG91
YmxlIGRhdGUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBl
OjpEYXRlKTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CisgICAg
ICAgIHJldHVybiBzdGQ6OmdldDxkb3VibGU+KG1fdmFsdWUpOwogICAgIH0KIAogICAgIGRvdWJs
ZSBudW1iZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBLZXlUeXBl
OjpOdW1iZXIpOwotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8ZG91YmxlPihtX3ZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6Z2V0PGRvdWJsZT4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgY29u
c3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIGJpbmFyeSgpIGNvbnN0CiAgICAgewogICAgICAgICBB
U1NFUlQobV90eXBlID09IEtleVR5cGU6OkJpbmFyeSk7Ci0gICAgICAgIHJldHVybiBXVEY6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6Omdl
dDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CiAgICAgfQogCiAgICAgY29uc3QgVmVj
dG9yPElEQktleURhdGE+JiBhcnJheSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV90
eXBlID09IEtleVR5cGU6OkFycmF5KTsKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFZlY3RvcjxJ
REJLZXlEYXRhPj4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6OmdldDxWZWN0b3I8SURC
S2V5RGF0YT4+KG1fdmFsdWUpOwogICAgIH0KIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBp
c29sYXRlZENvcHkoY29uc3QgSURCS2V5RGF0YSYgc291cmNlLCBJREJLZXlEYXRhJiBkZXN0aW5h
dGlvbik7CiAKICAgICBLZXlUeXBlIG1fdHlwZTsKLSAgICBWYXJpYW50PFZlY3RvcjxJREJLZXlE
YXRhPiwgU3RyaW5nLCBkb3VibGUsIFRocmVhZFNhZmVEYXRhQnVmZmVyPiBtX3ZhbHVlOworICAg
IHN0ZDo6dmFyaWFudDxWZWN0b3I8SURCS2V5RGF0YT4sIFN0cmluZywgZG91YmxlLCBUaHJlYWRT
YWZlRGF0YUJ1ZmZlcj4gbV92YWx1ZTsKIAogICAgIGJvb2wgbV9pc051bGwgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9pc0RlbGV0ZWRWYWx1ZSB7IGZhbHNlIH07CkBAIC0yNDIsMTcgKzI0MiwxNyBA
QCB2b2lkIElEQktleURhdGE6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyCiAgICAgY2FzZSBLZXlU
eXBlOjpNaW46CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6QXJyYXk6Ci0gICAg
ICAgIGVuY29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPElEQktleURhdGE+PihtX3ZhbHVlKTsKKyAg
ICAgICAgZW5jb2RlciA8PCBzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KG1fdmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OkJpbmFyeToKLSAgICAgICAgZW5jb2Rl
ciA8PCBXVEY6OmdldDxUaHJlYWRTYWZlRGF0YUJ1ZmZlcj4obV92YWx1ZSk7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KG1fdmFsdWUpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OlN0cmluZzoKLSAgICAgICAgZW5jb2RlciA8PCBX
VEY6OmdldDxTdHJpbmc+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PFN0
cmluZz4obV92YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS2V5VHlwZTo6RGF0ZToK
ICAgICBjYXNlIEtleVR5cGU6Ok51bWJlcjoKLSAgICAgICAgZW5jb2RlciA8PCBXVEY6OmdldDxk
b3VibGU+KG1fdmFsdWUpOworICAgICAgICBlbmNvZGVyIDw8IHN0ZDo6Z2V0PGRvdWJsZT4obV92
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTI3NiwyMyArMjc2LDIzIEBAIGJv
b2wgSURCS2V5RGF0YTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBLZXlUeXBlOjpBcnJheToKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gVmVjdG9y
PElEQktleURhdGE+KCk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8VmVj
dG9yPElEQktleURhdGE+PihrZXlEYXRhLm1fdmFsdWUpKSkKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShzdGQ6OmdldDxWZWN0b3I8SURCS2V5RGF0YT4+KGtleURhdGEubV92YWx1ZSkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5
cGU6OkJpbmFyeToKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gVGhyZWFkU2FmZURhdGFCdWZm
ZXIoKTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxUaHJlYWRTYWZlRGF0
YUJ1ZmZlcj4oa2V5RGF0YS5tX3ZhbHVlKSkpCisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
c3RkOjpnZXQ8VGhyZWFkU2FmZURhdGFCdWZmZXI+KGtleURhdGEubV92YWx1ZSkpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtleVR5cGU6OlN0
cmluZzoKICAgICAgICAga2V5RGF0YS5tX3ZhbHVlID0gU3RyaW5nKCk7Ci0gICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoV1RGOjpnZXQ8U3RyaW5nPihrZXlEYXRhLm1fdmFsdWUpKSkKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShzdGQ6OmdldDxTdHJpbmc+KGtleURhdGEubV92YWx1ZSkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEtl
eVR5cGU6OkRhdGU6CiAgICAgY2FzZSBLZXlUeXBlOjpOdW1iZXI6CiAgICAgICAgIGtleURhdGEu
bV92YWx1ZSA9IDAuMDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShXVEY6OmdldDxkb3Vi
bGU+KGtleURhdGEubV92YWx1ZSkpKQorICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHN0ZDo6
Z2V0PGRvdWJsZT4oa2V5RGF0YS5tX3ZhbHVlKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleVBhdGguY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjA1LDcgKzIwNSw3IEBAIGJvb2wgaXNJREJLZXlQYXRoVmFsaWQoY29uc3QgSURCS2V5UGF0
aCYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9KTsKLSAgICByZXR1cm4g
V1RGOjp2aXNpdCh2aXNpdG9yLCBrZXlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjp2aXNpdCh2aXNp
dG9yLCBrZXlQYXRoKTsKIH0KIAogSURCS2V5UGF0aCBpc29sYXRlZENvcHkoY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKQEAgLTIyMCw3ICsyMjAsNyBAQCBJREJLZXlQYXRoIGlzb2xhdGVkQ29w
eShjb25zdCBJREJLZXlQYXRoCiAgICAgICAgIHJldHVybiB2ZWN0b3JDb3B5OwogICAgIH0pOwog
Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CisgICAgcmV0dXJuIHN0
ZDo6dmlzaXQodmlzaXRvciwga2V5UGF0aCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC0yNDQs
NyArMjQ0LDcgQEAgU3RyaW5nIGxvZ2dpbmdTdHJpbmcoY29uc3QgSURCS2V5UGF0aCYgcAogICAg
ICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH0pOwogCi0gICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgcGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6dmlzaXQodmlzaXRvciwg
cGF0aCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCS2V5UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVBhdGguaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgSURCS2V5UGF0aCA9IFdURjo6
VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+PjsKK3VzaW5nIElEQktleVBhdGggPSBzdGQ6
OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj47CiBib29sIGlzSURCS2V5UGF0aFZhbGlk
KGNvbnN0IElEQktleVBhdGgmKTsKIAogZW51bSBjbGFzcyBJREJLZXlQYXRoUGFyc2VFcnJvciB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NSw3ICs0
NDUsNyBAQCBFeGNlcHRpb25PcjxSZWY8SURCSW5kZXg+PiBJREJPYmplY3RTdG9yCiAgICAgaWYg
KG5hbWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsK
IAotICAgIGlmIChwYXJhbWV0ZXJzLm11bHRpRW50cnkgJiYgV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0aCkpCisgICAgaWYgKHBhcmFtZXRlcnMubXVsdGlFbnRy
eSAmJiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY3JlYXRlSW5kZXgnIG9uICdJREJPYmplY3RTdG9yZSc6IFRo
ZSBrZXlQYXRoIGFyZ3VtZW50IHdhcyBhbiBhcnJheSBhbmQgdGhlIG11bHRpRW50cnkgb3B0aW9u
IGlzIHRydWUuIikgfTsKIAogICAgIC8vIEluc3RhbGwgdGhlIG5ldyBJbmRleCBpbnRvIHRoZSBP
YmplY3RTdG9yZSdzIGluZm8uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
OCw4ICsxNzgsOCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFNvdXJjZShJREJDdXJzb3ImIGN1CiAK
ICAgICBtX3NvdXJjZSA9IFNvdXJjZSB7ICZjdXJzb3IgfTsKICAgICBtX2N1cnNvclJlcXVlc3RO
b3RpZmllciA9IHN0ZDo6bWFrZV91bmlxdWU8U2NvcGVHdWFyZD4oW3RoaXNdKCkgewotICAgICAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3Vy
Y2UudmFsdWUoKSkpOwotICAgICAgICBXVEY6OmdldDxSZWZQdHI8SURCQ3Vyc29yPj4obV9zb3Vy
Y2UudmFsdWUoKSktPmRlY3JlbWVudE91dHN0YW5kaW5nUmVxdWVzdENvdW50KCk7CisgICAgICAg
IEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJj
ZS52YWx1ZSgpKSk7CisgICAgICAgIHN0ZDo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihtX3NvdXJj
ZS52YWx1ZSgpKS0+ZGVjcmVtZW50T3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQoKTsKICAgICB9KTsK
IH0KIApAQCAtMjA3LDkgKzIwNyw5IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVj
dFN0b3JlSWQKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3NvdXJjZS52YWx1ZSgpLAotICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiYgb2JqZWN0U3RvcmUpIHsgcmV0dXJuIG9iamVjdFN0b3JlLT5pbmZvKCkuaWRlbnRpZmllcigp
OyB9LAotICAgICAgICBbXSAoY29uc3QgUmVmUHRyPElEQkluZGV4PiYgaW5kZXgpIHsgcmV0dXJu
IGluZGV4LT5pbmZvKCkub2JqZWN0U3RvcmVJZGVudGlmaWVyKCk7IH0sCi0gICAgICAgIFtdIChj
b25zdCBSZWZQdHI8SURCQ3Vyc29yPiYpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgW10gKGNvbnN0
IFJlZlB0cjxJREJPYmplY3RTdG9yZT4mIG9iamVjdFN0b3JlKSAtPiB1aW50NjRfdCB7IHJldHVy
biBvYmplY3RTdG9yZS0+aW5mbygpLmlkZW50aWZpZXIoKTsgfSwKKyAgICAgICAgW10gKGNvbnN0
IFJlZlB0cjxJREJJbmRleD4mIGluZGV4KSAtPiB1aW50NjRfdCB7IHJldHVybiBpbmRleC0+aW5m
bygpLm9iamVjdFN0b3JlSWRlbnRpZmllcigpOyB9LAorICAgICAgICBbXSAoY29uc3QgUmVmUHRy
PElEQkN1cnNvcj4mKSAtPiB1aW50NjRfdCB7IHJldHVybiAwOyB9CiAgICAgKTsKIH0KIApAQCAt
MjM4LDcgKzIzOCw3IEBAIEluZGV4ZWREQjo6SW5kZXhSZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnIK
IHsKICAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElEKCkpOwogICAg
IEFTU0VSVChtX3NvdXJjZSk7Ci0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVm
UHRyPElEQkluZGV4Pj4obV9zb3VyY2UudmFsdWUoKSkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFJlZlB0cjxJREJJbmRleD4+KG1fc291cmNlLnZhbHVlKCkpKTsKIAogICAg
IHJldHVybiBtX3JlcXVlc3RlZEluZGV4UmVjb3JkVHlwZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsMTAgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfklEQlJl
cXVlc3QoKTsKIAotICAgIHVzaW5nIFJlc3VsdCA9IFZhcmlhbnQ8UmVmUHRyPElEQkN1cnNvcj4s
IFJlZlB0cjxJREJEYXRhYmFzZT4sIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4+OworICAgIHVz
aW5nIFJlc3VsdCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURCQ3Vyc29yPiwgUmVmUHRyPElEQkRh
dGFiYXNlPiwgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPj47CiAgICAgRXhjZXB0aW9uT3I8c3Rk
OjpvcHRpb25hbDxSZXN1bHQ+PiByZXN1bHQoKSBjb25zdDsKIAotICAgIHVzaW5nIFNvdXJjZSA9
IFZhcmlhbnQ8UmVmUHRyPElEQk9iamVjdFN0b3JlPiwgUmVmUHRyPElEQkluZGV4PiwgUmVmUHRy
PElEQkN1cnNvcj4+OworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SURC
T2JqZWN0U3RvcmU+LCBSZWZQdHI8SURCSW5kZXg+LCBSZWZQdHI8SURCQ3Vyc29yPj47CiAgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxTb3VyY2U+JiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3Nv
dXJjZTsgfQogCiAgICAgRXhjZXB0aW9uT3I8RE9NRXJyb3IqPiBlcnJvcigpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHNlcmlhbGl6
ZUlEQktleVBhdGgKICAgICAgICAgICAgICAgICBlbmNvZGVyLmVuY29kZVN0cmluZygic3RyaW5n
Iiwgc3RyaW5nKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKLSAgICAgICAgV1RGOjp2
aXNpdCh2aXNpdG9yLCBrZXlQYXRoLnZhbHVlKCkpOworICAgICAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIGtleVBhdGgudmFsdWUoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGVuY29kZXItPmVuY29k
ZUVudW0oInR5cGUiLCBLZXlQYXRoVHlwZTo6TnVsbCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFjb250cm9scy9NZWRpYUNvbnRyb2xzSG9zdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL01lZGlhQ29udHJvbHNIb3N0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzEx
MSw3IEBAIFN0cmluZyBNZWRpYUNvbnRyb2xzSG9zdDo6ZGlzcGxheU5hbWVGb3IKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgcmV0dXJuIFdURjo6
dmlzaXQoWyZwYWdlXShhdXRvJiB0cmFjaykgeworICAgIHJldHVybiBzdGQ6OnZpc2l0KFsmcGFn
ZV0oYXV0byYgdHJhY2spIHsKICAgICAgICAgcmV0dXJuIHBhZ2UtPmdyb3VwKCkuY2FwdGlvblBy
ZWZlcmVuY2VzKCkuZGlzcGxheU5hbWVGb3JUcmFjayh0cmFjay5nZXQoKSk7CiAgICAgfSwgdHJh
Y2sudmFsdWUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJv
bHMvTWVkaWFDb250cm9sc0hvc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY29udHJvbHMvTWVkaWFDb250cm9sc0hvc3QuaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL01lZGlhQ29udHJvbHNIb3N0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dFRyYWNrPj4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShUZXh0VHJhY2tMaXN0Jik7
CiAgICAgVmVjdG9yPFJlZlB0cjxBdWRpb1RyYWNrPj4gc29ydGVkVHJhY2tMaXN0Rm9yTWVudShB
dWRpb1RyYWNrTGlzdCYpOwogCi0gICAgdXNpbmcgVGV4dE9yQXVkaW9UcmFjayA9IFdURjo6VmFy
aWFudDxSZWZQdHI8VGV4dFRyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+PjsKKyAgICB1c2luZyBU
ZXh0T3JBdWRpb1RyYWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxUZXh0VHJhY2s+LCBSZWZQdHI8
QXVkaW9UcmFjaz4+OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZUZvclRyYWNrKGNvbnN0IHN0ZDo6
b3B0aW9uYWw8VGV4dE9yQXVkaW9UcmFjaz4mKTsKIAogICAgIFRleHRUcmFjayogY2FwdGlvbk1l
bnVPZmZJdGVtKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01l
ZGlhRGV2aWNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDcgKzc3LDcgQEAgRG9jdW1lbnQqIE1lZGlhRGV2aWNlczo6ZG9jdW1lbnQoKSBjb25z
dAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKIH0KIAotc3RhdGljIE1lZGlhQ29uc3RyYWludHMgY3JlYXRlTWVkaWFDb25zdHJhaW50cyhj
b25zdCBWYXJpYW50PGJvb2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4mIGNvbnN0cmFpbnRzKQor
c3RhdGljIE1lZGlhQ29uc3RyYWludHMgY3JlYXRlTWVkaWFDb25zdHJhaW50cyhjb25zdCBzdGQ6
OnZhcmlhbnQ8Ym9vbCwgTWVkaWFUcmFja0NvbnN0cmFpbnRzPiYgY29uc3RyYWludHMpCiB7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oY29uc3RyYWludHMsCiAgICAgICAgIFsmXSAoYm9vbCBp
c1ZhbGlkKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RGV2aWNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDgg
KzYxLDggQEAgcHVibGljOgogICAgIHVzaW5nIEVudW1lcmF0ZURldmljZXNQcm9taXNlID0gRE9N
UHJvbWlzZURlZmVycmVkPElETFNlcXVlbmNlPElETEludGVyZmFjZTxNZWRpYURldmljZUluZm8+
Pj47CiAKICAgICBzdHJ1Y3QgU3RyZWFtQ29uc3RyYWludHMgewotICAgICAgICBWYXJpYW50PGJv
b2wsIE1lZGlhVHJhY2tDb25zdHJhaW50cz4gdmlkZW87Ci0gICAgICAgIFZhcmlhbnQ8Ym9vbCwg
TWVkaWFUcmFja0NvbnN0cmFpbnRzPiBhdWRpbzsKKyAgICAgICAgc3RkOjp2YXJpYW50PGJvb2ws
IE1lZGlhVHJhY2tDb25zdHJhaW50cz4gdmlkZW87CisgICAgICAgIHN0ZDo6dmFyaWFudDxib29s
LCBNZWRpYVRyYWNrQ29uc3RyYWludHM+IGF1ZGlvOwogICAgIH07CiAgICAgRXhjZXB0aW9uT3I8
dm9pZD4gZ2V0VXNlck1lZGlhKGNvbnN0IFN0cmVhbUNvbnN0cmFpbnRzJiwgUHJvbWlzZSYmKSBj
b25zdDsKICAgICB2b2lkIGVudW1lcmF0ZURldmljZXMoRW51bWVyYXRlRGV2aWNlc1Byb21pc2Um
JikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
VHJhY2tDb25zdHJhaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRzLmgJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFUcmFja0NvbnN0cmFpbnRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgc3RydWN0IENvbnN0cmFpbkJvb2xl
YW5QYXJhbWV0ZXJzIHsKIH07CiAKIHN0cnVjdCBDb25zdHJhaW5ET01TdHJpbmdQYXJhbWV0ZXJz
IHsKLSAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+IGV4
YWN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+Pj4g
aWRlYWw7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8U3Ry
aW5nPj4+IGV4YWN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgVmVj
dG9yPFN0cmluZz4+PiBpZGVhbDsKIH07CiAKIHN0cnVjdCBDb25zdHJhaW5Eb3VibGVSYW5nZSA6
IERvdWJsZVJhbmdlIHsKQEAgLTU2LDEwICs1NiwxMCBAQCBzdHJ1Y3QgQ29uc3RyYWluTG9uZ1Jh
bmdlIDogTG9uZ1JhbmdlIHsKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gaWRlYWw7CiB9OwogCi11
c2luZyBDb25zdHJhaW5Cb29sZWFuID0gVmFyaWFudDxib29sLCBDb25zdHJhaW5Cb29sZWFuUGFy
YW1ldGVycz47Ci11c2luZyBDb25zdHJhaW5ET01TdHJpbmcgPSBWYXJpYW50PFN0cmluZywgVmVj
dG9yPFN0cmluZz4sIENvbnN0cmFpbkRPTVN0cmluZ1BhcmFtZXRlcnM+OwotdXNpbmcgQ29uc3Ry
YWluRG91YmxlID0gVmFyaWFudDxkb3VibGUsIENvbnN0cmFpbkRvdWJsZVJhbmdlPjsKLXVzaW5n
IENvbnN0cmFpbkxvbmcgPSBWYXJpYW50PGludCwgQ29uc3RyYWluTG9uZ1JhbmdlPjsKK3VzaW5n
IENvbnN0cmFpbkJvb2xlYW4gPSBzdGQ6OnZhcmlhbnQ8Ym9vbCwgQ29uc3RyYWluQm9vbGVhblBh
cmFtZXRlcnM+OwordXNpbmcgQ29uc3RyYWluRE9NU3RyaW5nID0gc3RkOjp2YXJpYW50PFN0cmlu
ZywgVmVjdG9yPFN0cmluZz4sIENvbnN0cmFpbkRPTVN0cmluZ1BhcmFtZXRlcnM+OwordXNpbmcg
Q29uc3RyYWluRG91YmxlID0gc3RkOjp2YXJpYW50PGRvdWJsZSwgQ29uc3RyYWluRG91YmxlUmFu
Z2U+OwordXNpbmcgQ29uc3RyYWluTG9uZyA9IHN0ZDo6dmFyaWFudDxpbnQsIENvbnN0cmFpbkxv
bmdSYW5nZT47CiAKIHN0cnVjdCBNZWRpYVRyYWNrQ29uc3RyYWludFNldCB7CiAgICAgc3RkOjpv
cHRpb25hbDxDb25zdHJhaW5Mb25nPiB3aWR0aDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDSWNlU2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2ZXIuaAkocmV2aXNpb24gMjIwOTU0KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENJY2VTZXJ2ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1
Y3QgUlRDSWNlU2VydmVyIHsKLSAgICBWYXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+IHVy
bHM7CisgICAgc3RkOjp2YXJpYW50PFN0cmluZywgVmVjdG9yPFN0cmluZz4+IHVybHM7CiAgICAg
U3RyaW5nIGNyZWRlbnRpYWw7CiAgICAgU3RyaW5nIHVzZXJuYW1lOwogfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDgg
KzE4NCw4IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFJUQ1BlZXJDb25uZWN0aW9uOjpyZW0KIAogRXhj
ZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gUlRDUGVlckNvbm5lY3Rpb246OmFkZFRy
YW5zY2VpdmVyKEFkZFRyYW5zY2VpdmVyVHJhY2tPcktpbmQmJiB3aXRoVHJhY2ssIGNvbnN0IFJU
Q1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKIHsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxTdHJpbmc+KHdpdGhUcmFjaykpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBraW5kID0g
V1RGOjpnZXQ8U3RyaW5nPih3aXRoVHJhY2spOworICAgIGlmIChzdGQ6OmhvbGRzX2FsdGVybmF0
aXZlPFN0cmluZz4od2l0aFRyYWNrKSkgeworICAgICAgICBjb25zdCBTdHJpbmcmIGtpbmQgPSBz
dGQ6OmdldDxTdHJpbmc+KHdpdGhUcmFjayk7CiAgICAgICAgIGlmIChraW5kICE9ICJhdWRpbyIg
JiYga2luZCAhPSAidmlkZW8iKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVF
cnJvciB9OwogCkBAIC0xOTMsNyArMTkzLDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5z
Y2VpdmVyPj4gUlRDUAogICAgICAgICByZXR1cm4gY29tcGxldGVBZGRUcmFuc2NlaXZlcihXVEZN
b3ZlKHNlbmRlciksIGluaXQsIGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSwga2luZCk7CiAg
ICAgfQogCi0gICAgUmVmPE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gV1RGOjpnZXQ8UmVmUHRy
PE1lZGlhU3RyZWFtVHJhY2s+Pih3aXRoVHJhY2spLnJlbGVhc2VOb25OdWxsKCk7CisgICAgUmVm
PE1lZGlhU3RyZWFtVHJhY2s+IHRyYWNrID0gc3RkOjpnZXQ8UmVmUHRyPE1lZGlhU3RyZWFtVHJh
Y2s+Pih3aXRoVHJhY2spLnJlbGVhc2VOb25OdWxsKCk7CiAgICAgY29uc3QgU3RyaW5nJiB0cmFj
a0lkID0gdHJhY2stPmlkKCk7CiAgICAgY29uc3QgU3RyaW5nJiB0cmFja0tpbmQgPSB0cmFjay0+
a2luZCgpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNyw3ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmPFJU
Q1J0cFNlbmRlcj4+IGFkZFRyYWNrKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmLCBjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxNZWRpYVN0cmVhbT4+Jik7CiAgICAgRXhjZXB0aW9u
T3I8dm9pZD4gcmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJik7CiAKLSAgICB1c2luZyBBZGRUcmFu
c2NlaXZlclRyYWNrT3JLaW5kID0gVmFyaWFudDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4sIFN0
cmluZz47CisgICAgdXNpbmcgQWRkVHJhbnNjZWl2ZXJUcmFja09yS2luZCA9IHN0ZDo6dmFyaWFu
dDxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4sIFN0cmluZz47CiAgICAgRXhjZXB0aW9uT3I8UmVm
PFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoQWRkVHJhbnNjZWl2ZXJUcmFja09y
S2luZCYmLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKIAogICAgIC8vIDYuMSBQZWVy
LXRvLXBlZXIgZGF0YSBBUEkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vU0RQUHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9TRFBQcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTAgKzYwLDEwIEBAIHB1YmxpYzoKICAgICBSZXN1bHQgZ2VuZXJhdGVDYW5kaWRhdGVM
aW5lKGNvbnN0IEljZUNhbmRpZGF0ZSYsIFN0cmluZyYgb3V0Q2FuZGlkYXRlTGluZSkgY29uc3Q7
CiAKICAgICBzdHJ1Y3QgUGFyc2luZ1Jlc3VsdCB7Ci0gICAgICAgIFZhcmlhbnQ8SWNlQ2FuZGlk
YXRlLCBSZXN1bHQ+IHJlc3VsdDsKKyAgICAgICAgc3RkOjp2YXJpYW50PEljZUNhbmRpZGF0ZSwg
UmVzdWx0PiByZXN1bHQ7CiAKLSAgICAgICAgUmVzdWx0IHBhcnNpbmdTdGF0dXMoKSBjb25zdCB7
IHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEljZUNhbmRpZGF0ZT4ocmVzdWx0KSA/IFJl
c3VsdDo6U3VjY2VzcyA6IFdURjo6Z2V0PFNEUFByb2Nlc3Nvcjo6UmVzdWx0PihyZXN1bHQpOyB9
Ci0gICAgICAgIEljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlKCkgeyByZXR1cm4gV1RGOjpnZXQ8SWNl
Q2FuZGlkYXRlPihyZXN1bHQpOyB9CisgICAgICAgIFJlc3VsdCBwYXJzaW5nU3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxJY2VDYW5kaWRhdGU+KHJlc3VsdCkg
PyBSZXN1bHQ6OlN1Y2Nlc3MgOiBzdGQ6OmdldDxTRFBQcm9jZXNzb3I6OlJlc3VsdD4ocmVzdWx0
KTsgfQorICAgICAgICBJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSgpIHsgcmV0dXJuIHN0ZDo6Z2V0
PEljZUNhbmRpZGF0ZT4ocmVzdWx0KTsgfQogICAgIH07CiAgICAgUGFyc2luZ1Jlc3VsdCBwYXJz
ZUNhbmRpZGF0ZUxpbmUoY29uc3QgU3RyaW5nJiBjYW5kaWRhdGVMaW5lKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvSURMVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBlcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9JRExUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsMTEg
KzIyOCwxMSBAQCBzdHJ1Y3QgSURMRXJyb3IgOiBJRExVbnN1cHBvcnRlZFR5cGUgeyB9CiBzdHJ1
Y3QgSURMRE9NRXhjZXB0aW9uIDogSURMVW5zdXBwb3J0ZWRUeXBlIHsgfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUuLi4gVHM+Ci1zdHJ1Y3QgSURMVW5pb24gOiBJRExUeXBlPFZhcmlhbnQ8dHlwZW5h
bWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+IHsKK3N0cnVjdCBJRExVbmlvbiA6IElETFR5
cGU8c3RkOjp2YXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5cGUuLi4+PiB7CiAg
ICAgdXNpbmcgVHlwZUxpc3QgPSBicmlnYW5kOjpsaXN0PFRzLi4uPjsKIAotICAgIHVzaW5nIFBh
cmFtZXRlclR5cGUgPSBjb25zdCBWYXJpYW50PHR5cGVuYW1lIFRzOjpJbXBsZW1lbnRhdGlvblR5
cGUuLi4+JjsKLSAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUgPSBjb25zdCBzdGQ6Om9w
dGlvbmFsPFZhcmlhbnQ8dHlwZW5hbWUgVHM6OkltcGxlbWVudGF0aW9uVHlwZS4uLj4+JjsKKyAg
ICB1c2luZyBQYXJhbWV0ZXJUeXBlID0gY29uc3Qgc3RkOjp2YXJpYW50PHR5cGVuYW1lIFRzOjpJ
bXBsZW1lbnRhdGlvblR5cGUuLi4+JjsKKyAgICB1c2luZyBOdWxsYWJsZVBhcmFtZXRlclR5cGUg
PSBjb25zdCBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDx0eXBlbmFtZSBUczo6SW1wbGVtZW50
YXRpb25UeXBlLi4uPj4mOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IElETEJ1
ZmZlclNvdXJjZSA6IElETFdyYXBwZXI8VD4geyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQnVmZmVyU291cmNlLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0J1ZmZlclNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICsz
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQnVmZmVyU291cmNlIHsKIHB1Ymxp
YzoKLSAgICB1c2luZyBWYXJpYW50VHlwZSA9IFdURjo6VmFyaWFudDxSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+OworICAgIHVzaW5nIFZhcmlh
bnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyPj47CiAKICAgICBCdWZmZXJTb3VyY2UoKSB7IH0KICAgICBCdWZm
ZXJTb3VyY2UoVmFyaWFudFR5cGUmJiB2YXJpYW50KQpAQCAtNDUsMTQgKzQ1LDE0IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IHVpbnQ4X3QqIGRhdGEoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuIFdURjo6dmlzaXQoW10oYXV0byYgYnVmZmVyKSAtPiBjb25zdCB1aW50OF90KiB7CisgICAg
ICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1ZmZlcikgLT4gY29uc3QgdWludDhfdCog
ewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZmZXIt
PmRhdGEoKSk7CiAgICAgICAgIH0sIG1fdmFyaWFudCk7CiAgICAgfQogCiAgICAgc2l6ZV90IGxl
bmd0aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChbXShhdXRvJiBi
dWZmZXIpIC0+IHNpemVfdCB7CisgICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KFtdKGF1dG8mIGJ1
ZmZlcikgLT4gc2l6ZV90IHsKICAgICAgICAgICAgIHJldHVybiBidWZmZXItPmJ5dGVMZW5ndGgo
KTsKICAgICAgICAgfSwgbV92YXJpYW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9DYWxsVHJhY2VyVHlwZXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbFRyYWNlclR5cGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZhcmlh
bnQ8Cit0eXBlZGVmIHN0ZDo6dmFyaWFudDwKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OkltYWdlU21vb3RoaW5nUXVhbGl0eSwKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Oldp
bmRpbmdSdWxlLAogICAgIERPTU1hdHJpeEluaXQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MCwxMSArMjcwLDExIEBAIGJvb2wgaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKEV4ZWNTdGEKIHsKICAgICBMT0coSW5kZXhlZERCLCAiaW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlIik7CiAKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGtleVBhdGgpKTsKKyAgICBBU1NFUlQoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJp
bmc+KGtleVBhdGgpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAg
ICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQYXJzZUtleVBhdGgoV1RGOjpn
ZXQ8U3RyaW5nPihrZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgSURCUGFy
c2VLZXlQYXRoKHN0ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJy
b3IpOwogICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9uZSk7CiAK
ICAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlzRW1wdHkoKSkKQEAgLTI5Nyw4ICsyOTcsOCBAQCBi
b29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShFeGVjU3RhCiAKIFJlZlB0cjxJREJLZXk+
IG1heWJlQ3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVjU3RhdGUmIGV4
ZWMsIGNvbnN0IEpTVmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewot
ICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKSkg
ewotICAgICAgICBhdXRvJiBhcnJheSA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRo
KTsKKyAgICBpZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxWZWN0b3I8U3RyaW5nPj4oa2V5UGF0
aCkpIHsKKyAgICAgICAgYXV0byYgYXJyYXkgPSBzdGQ6OmdldDxWZWN0b3I8U3RyaW5nPj4oa2V5
UGF0aCk7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4gcmVzdWx0OwogICAgICAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhcnJheS5zaXplKCkpOwogICAgICAgICBmb3Ig
KGF1dG8mIHN0cmluZyA6IGFycmF5KSB7CkBAIC0zMTAsMTcgKzMxMCwxNyBAQCBSZWZQdHI8SURC
S2V5PiBtYXliZUNyZWF0ZUlEQktleUZyb21TY3JpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNy
ZWF0ZUFycmF5KFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGludGVybmFs
Q3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgV1RGOjpn
ZXQ8U3RyaW5nPihrZXlQYXRoKSk7CisgICAgcmV0dXJuIGludGVybmFsQ3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgc3RkOjpnZXQ8U3RyaW5nPihrZXlQ
YXRoKSk7CiB9CiAKIGJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKEV4ZWNTdGF0
ZSYgZXhlYywgY29uc3QgSlNWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUiKTsKIAotICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5
UGF0aCkpOworICAgIEFTU0VSVChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4oa2V5UGF0
aCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKICAgICBJREJLZXlQYXRo
UGFyc2VFcnJvciBlcnJvcjsKLSAgICBJREJQYXJzZUtleVBhdGgoV1RGOjpnZXQ8U3RyaW5nPihr
ZXlQYXRoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgSURCUGFyc2VLZXlQYXRoKHN0
ZDo6Z2V0PFN0cmluZz4oa2V5UGF0aCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwogICAgIEFT
U0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvcjo6Tm9uZSk7CiAKICAgICBpZiAoIWtl
eVBhdGhFbGVtZW50cy5zaXplKCkpCkBAIC00MDAsNyArNDAwLDcgQEAgc3RhdGljIFZlY3RvcjxJ
REJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQQogICAgICAgICByZXR1cm4ga2V5czsKICAgICB9KTsK
IAotICAgIHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIGluZm8ua2V5UGF0aCgpKTsKKyAgICBy
ZXR1cm4gc3RkOjp2aXNpdCh2aXNpdG9yLCBpbmZvLmtleVBhdGgoKSk7CiB9CiAKIHZvaWQgZ2Vu
ZXJhdGVJbmRleEtleUZvclZhbHVlKEV4ZWNTdGF0ZSYgZXhlYywgY29uc3QgSURCSW5kZXhJbmZv
JiBpbmZvLCBKU1ZhbHVlIHZhbHVlLCBJbmRleEtleSYgb3V0S2V5KQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0VW5pb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRVbmlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zODUsNyArMzg1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4g
c3RydWN0IEpTQ29udmVydAogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBuZWVkc1N0YXRlID0g
dHJ1ZTsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgbmVlZHNHbG9iYWxPYmplY3QgPSB0cnVl
OwogCi0gICAgdXNpbmcgU2VxdWVuY2UgPSBicmlnYW5kOjptYWtlX3NlcXVlbmNlPGJyaWdhbmQ6
OnB0cmRpZmZfdDwwPiwgV1RGOjp2YXJpYW50X3NpemU8SW1wbGVtZW50YXRpb25UeXBlPjo6dmFs
dWU+OworICAgIHVzaW5nIFNlcXVlbmNlID0gYnJpZ2FuZDo6bWFrZV9zZXF1ZW5jZTxicmlnYW5k
OjpwdHJkaWZmX3Q8MD4sIHN0ZDo6dmFyaWFudF9zaXplPEltcGxlbWVudGF0aW9uVHlwZT46OnZh
bHVlPjsKIAogICAgIHN0YXRpYyBKU0M6OkpTVmFsdWUgY29udmVydChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IEltcGxlbWVudGF0
aW9uVHlwZSYgdmFyaWFudCkKICAgICB7CkBAIC0zOTYsNyArMzk2LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gVD4gc3RydWN0IEpTQ29udmVydAogICAgICAgICAgICAgdXNpbmcgSSA9IHR5cGVu
YW1lIFdURjo6UmVtb3ZlQ1ZBbmRSZWZlcmVuY2U8ZGVjbHR5cGUodHlwZSk+Ojp0eXBlOjp0eXBl
OwogICAgICAgICAgICAgaWYgKEk6OnZhbHVlID09IGluZGV4KSB7CiAgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXR1cm5WYWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0b0pT
PGJyaWdhbmQ6OmF0PFR5cGVMaXN0LCBJPj4oc3RhdGUsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXQ8
STo6dmFsdWU+KHZhcmlhbnQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRvSlM8
YnJpZ2FuZDo6YXQ8VHlwZUxpc3QsIEk+PihzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBzdGQ6OmdldDxJ
Ojp2YWx1ZT4odmFyaWFudCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0V2ViR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2NiArNjYsNjYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogSlNWYWx1ZSBjb252ZXJ0VG9KU1ZhbHVlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMQW55JiBhbnkpCiB7CiAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24oYW55LAotICAgICAgICBbXSAoc3RkOjpudWxscHRyX3Qp
IHsKKyAgICAgICAgW10gKHN0ZDo6bnVsbHB0cl90KSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAg
IHJldHVybiBqc051bGwoKTsKICAgICAgICAgfSwKLSAgICAgICAgW10gKGJvb2wgdmFsdWUpIHsK
KyAgICAgICAgW10gKGJvb2wgdmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChpbnQgdmFsdWUpIHsK
KyAgICAgICAgW10gKGludCB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4g
anNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbXSAodW5zaWduZWQgdmFsdWUp
IHsKKyAgICAgICAgW10gKHVuc2lnbmVkIHZhbHVlKSAtPiBKU1ZhbHVlIHsKICAgICAgICAgICAg
IHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAgIFtdIChsb25nIGxv
bmcgdmFsdWUpIHsKKyAgICAgICAgW10gKGxvbmcgbG9uZyB2YWx1ZSkgLT4gSlNWYWx1ZSB7CiAg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIodmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBb
XSAoZmxvYXQgdmFsdWUpIHsKKyAgICAgICAgW10gKGZsb2F0IHZhbHVlKSAtPiBKU1ZhbHVlIHsK
ICAgICAgICAgICAgIHJldHVybiBqc051bWJlcih2YWx1ZSk7CiAgICAgICAgIH0sCi0gICAgICAg
IFsmXSAoY29uc3QgU3RyaW5nJiB2YWx1ZSkgeworICAgICAgICBbJl0gKGNvbnN0IFN0cmluZyYg
dmFsdWUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KCZzdGF0ZSwgdmFsdWUpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFZlY3Rvcjxi
b29sPiYgdmFsdWVzKSB7CisgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZXMp
IC0+IEpTVmFsdWUgewogICAgICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAg
ICAgICAgICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCiAgICAgICAgICAgICAgICAgbGlz
dC5hcHBlbmQoanNCb29sZWFuKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoJnN0YXRlLCAwLCAmZ2xvYmFsT2JqZWN0LCBsaXN0KTsKICAgICAgICAgfSwKLSAgICAg
ICAgWyZdIChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAgICAgWyZd
IChjb25zdCBSZWZQdHI8RmxvYXQzMkFycmF5PiYgYXJyYXkpIC0+IEpTVmFsdWUgewogICAgICAg
ICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXQoKSk7CiAg
ICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPEludDMyQXJyYXk+JiBhcnJheSkg
eworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxJbnQzMkFycmF5PiYgYXJyYXkpIC0+IEpTVmFs
dWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBhcnJh
eS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFVpbnQ4QXJy
YXk+JiBhcnJheSkgeworICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxVaW50OEFycmF5PiYgYXJy
YXkpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBhcnJheS5nZXQoKSk7CiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3QgUmVm
UHRyPFVpbnQzMkFycmF5PiYgYXJyYXkpIHsKKyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8VWlu
dDMyQXJyYXk+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfSwKLSAgICAgICAg
WyZdIChjb25zdCBSZWZQdHI8V2ViR0xCdWZmZXI+JiBidWZmZXIpIHsKKyAgICAgICAgWyZdIChj
b25zdCBSZWZQdHI8V2ViR0xCdWZmZXI+JiBidWZmZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAg
ICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiYgYnVm
ZmVyKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+JiBidWZm
ZXIpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJl
ZlB0cjxXZWJHTFByb2dyYW0+JiBwcm9ncmFtKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4mIHByb2dyYW0pIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJu
IHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCBwcm9ncmFtLmdldCgpKTsKICAgICAgICAgfSwK
LSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+JiBidWZmZXIpIHsK
KyAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+JiBidWZmZXIpIC0+
IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCBidWZmZXIuZ2V0KCkpOwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJlZlB0cjxX
ZWJHTFRleHR1cmU+JiB0ZXh0dXJlKSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdM
VGV4dHVyZT4mIHRleHR1cmUpIC0+IEpTVmFsdWUgewogICAgICAgICAgICAgcmV0dXJuIHRvSlMo
JnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB0ZXh0dXJlLmdldCgpKTsKICAgICAgICAgfSwKLSAgICAg
ICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4mIGFycmF5KSB7
CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+JiBh
cnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9i
YWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShXRUJHTDIpCiAg
ICAgICAgICwKLSAgICAgICAgWyZdIChjb25zdCBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVj
dD4mIGFycmF5KSB7CisgICAgICAgIFsmXSAoY29uc3QgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3Q+JiBhcnJheSkgLT4gSlNWYWx1ZSB7CiAgICAgICAgICAgICByZXR1cm4gdG9KUygmc3Rh
dGUsICZnbG9iYWxPYmplY3QsIGFycmF5LmdldCgpKTsKICAgICAgICAgfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTcyNTEsNyArNzI1MSw3IEBA
IHN1YiBHZW5lcmF0ZUNhbGxUcmFjZXJQYXJhbWV0ZXIoKQogICAgIG15ICgkbmFtZSwgJHR5cGUs
ICRpbmRlbnQpID0gQF87CiAKICAgICBpZiAoJHR5cGUtPmlzVW5pb24pIHsKLSAgICAgICAgcmV0
dXJuICRpbmRlbnQgLiAiICAgIFdURjo6dmlzaXQoWyZdIChhdXRvJiB2YWx1ZSkgeyBjYWxsVHJh
Y2VyUGFyYW1ldGVycy5hcHBlbmQodmFsdWUpOyB9LCAiIC4gJG5hbWUgLiAiKTsiOworICAgICAg
ICByZXR1cm4gJGluZGVudCAuICIgICAgc3RkOjp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7IGNh
bGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1ZSk7IH0sICIgLiAkbmFtZSAuICIpOyI7CiAg
ICAgfQogCiAgICAgcmV0dXJuICRpbmRlbnQgLiAiICAgIGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFw
cGVuZCgiIC4gJG5hbWUgLiAiKTsiOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdENhbGxUcmFjZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsVHJhY2VyLmNwcAkocmV2
aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENhbGxUcmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTYsNyArMjk2LDcgQEAg
c3RhdGljIGlubGluZSBib29sIHNldEpTVGVzdENhbGxUcmFjZXJUZQogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZmFsc2UpOwogICAgIGlmIChVTkxJS0VMWShpbXBsLmNhbGxU
cmFjaW5nQWN0aXZlKCkpKSB7CiAgICAgICAgIFZlY3RvcjxUZXN0Q2FsbFRyYWNlckludGVyZmFj
ZVZhcmlhbnQ+IGNhbGxUcmFjZXJQYXJhbWV0ZXJzOwotICAgICAgICBXVEY6OnZpc2l0KFsmXSAo
YXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMuYXBwZW5kKHZhbHVlKTsgfSwgbmF0
aXZlVmFsdWUpOworICAgICAgICBzdGQ6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRy
YWNlclBhcmFtZXRlcnMuYXBwZW5kKHZhbHVlKTsgfSwgbmF0aXZlVmFsdWUpOwogICAgICAgICBD
YWxsVHJhY2VyOjp0ZXN0Q2FsbFRyYWNlckludGVyZmFjZShpbXBsLCBBU0NJSUxpdGVyYWwoInRl
c3RBdHRyaWJ1dGVXaXRoVmFyaWFudCIpLCBXVEZNb3ZlKGNhbGxUcmFjZXJQYXJhbWV0ZXJzKSk7
CiAgICAgfQogICAgIGltcGwuc2V0VGVzdEF0dHJpYnV0ZVdpdGhWYXJpYW50KFdURk1vdmUobmF0
aXZlVmFsdWUpKTsKQEAgLTQwMyw3ICs0MDMsNyBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNv
ZGVkSlNWYWx1ZSgpKTsKICAgICBpZiAoVU5MSUtFTFkoaW1wbC5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSkgewogICAgICAgICBWZWN0b3I8VGVzdENhbGxUcmFjZXJJbnRlcmZhY2VWYXJpYW50PiBjYWxs
VHJhY2VyUGFyYW1ldGVyczsKLSAgICAgICAgV1RGOjp2aXNpdChbJl0gKGF1dG8mIHZhbHVlKSB7
IGNhbGxUcmFjZXJQYXJhbWV0ZXJzLmFwcGVuZCh2YWx1ZSk7IH0sIHZhcmlhbnRBcmcpOworICAg
ICAgICBzdGQ6OnZpc2l0KFsmXSAoYXV0byYgdmFsdWUpIHsgY2FsbFRyYWNlclBhcmFtZXRlcnMu
YXBwZW5kKHZhbHVlKTsgfSwgdmFyaWFudEFyZyk7CiAgICAgICAgIENhbGxUcmFjZXI6OnRlc3RD
YWxsVHJhY2VySW50ZXJmYWNlKGltcGwsIEFTQ0lJTGl0ZXJhbCgidGVzdE9wZXJhdGlvbldpdGhW
YXJpYW50QXJndW1lbnQiKSwgV1RGTW92ZShjYWxsVHJhY2VyUGFyYW1ldGVycykpOwogICAgIH0K
ICAgICBpbXBsLnRlc3RPcGVyYXRpb25XaXRoVmFyaWFudEFyZ3VtZW50KFdURk1vdmUodmFyaWFu
dEFyZykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG0uaAkocmV2
aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM7CiBjbGFzcyBDcnlwdG9LZXk7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogCi11c2luZyBLZXlEYXRhID0gVmFyaWFudDxWZWN0b3I8dWludDhfdD4sIEpzb25XZWJLZXk+
OwotdXNpbmcgS2V5T3JLZXlQYWlyID0gVmFyaWFudDxSZWZQdHI8Q3J5cHRvS2V5PiwgQ3J5cHRv
S2V5UGFpcj47Cit1c2luZyBLZXlEYXRhID0gc3RkOjp2YXJpYW50PFZlY3Rvcjx1aW50OF90Piwg
SnNvbldlYktleT47Cit1c2luZyBLZXlPcktleVBhaXIgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPENy
eXB0b0tleT4sIENyeXB0b0tleVBhaXI+OwogCiBjbGFzcyBDcnlwdG9BbGdvcml0aG0gOiBwdWJs
aWMgUmVmQ291bnRlZDxDcnlwdG9BbGdvcml0aG0+IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvS2V5LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Ny
eXB0by9DcnlwdG9LZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBlbnVtIGNs
YXNzIENyeXB0b0tleUNsYXNzIHsKIGNsYXNzIENyeXB0b0tleSA6IHB1YmxpYyBUaHJlYWRTYWZl
UmVmQ291bnRlZDxDcnlwdG9LZXk+IHsKIHB1YmxpYzoKICAgICB1c2luZyBUeXBlID0gQ3J5cHRv
S2V5VHlwZTsKLSAgICB1c2luZyBLZXlBbGdvcml0aG0gPSBWYXJpYW50PENyeXB0b0tleUFsZ29y
aXRobSwgQ3J5cHRvQWVzS2V5QWxnb3JpdGhtLCBDcnlwdG9FY0tleUFsZ29yaXRobSwgQ3J5cHRv
SG1hY0tleUFsZ29yaXRobSwgQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLCBDcnlwdG9Sc2FL
ZXlBbGdvcml0aG0+OworICAgIHVzaW5nIEtleUFsZ29yaXRobSA9IHN0ZDo6dmFyaWFudDxDcnlw
dG9LZXlBbGdvcml0aG0sIENyeXB0b0Flc0tleUFsZ29yaXRobSwgQ3J5cHRvRWNLZXlBbGdvcml0
aG0sIENyeXB0b0htYWNLZXlBbGdvcml0aG0sIENyeXB0b1JzYUhhc2hlZEtleUFsZ29yaXRobSwg
Q3J5cHRvUnNhS2V5QWxnb3JpdGhtPjsKIAogICAgIENyeXB0b0tleShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyLCBUeXBlLCBib29sIGV4dHJhY3RhYmxlLCBDcnlwdG9LZXlVc2FnZUJpdG1hcCk7
CiAgICAgdmlydHVhbCB+Q3J5cHRvS2V5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8v
U3VidGxlQ3J5cHRvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3Vi
dGxlQ3J5cHRvLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L1N1YnRsZUNyeXB0by5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDE0ICs5NiwxNCBAQCBzdGF0
aWMgRXhjZXB0aW9uT3I8c3RkOjp1bmlxdWVfcHRyPENyeXB0CiAgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KGFsZ29yaXRobUlkZW50aWZpZXIpKSB7
CisgICAgaWYgKHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihhbGdvcml0aG1JZGVudGlm
aWVyKSkgewogICAgICAgICBhdXRvIG5ld1BhcmFtcyA9IFN0cm9uZzxKU09iamVjdD4odm0sIGNv
bnN0cnVjdEVtcHR5T2JqZWN0KCZzdGF0ZSkpOwotICAgICAgICBuZXdQYXJhbXMtPnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiksIGpzU3RyaW5nKCZzdGF0
ZSwgV1RGOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkpOworICAgICAgICBuZXdQ
YXJhbXMtPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJuYW1lIiks
IGpzU3RyaW5nKCZzdGF0ZSwgc3RkOjpnZXQ8U3RyaW5nPihhbGdvcml0aG1JZGVudGlmaWVyKSkp
OwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZUNyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnMoc3RhdGUsIG5ld1BhcmFtcywgb3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBhdXRvJiB2
YWx1ZSA9IFdURjo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+PihhbGdvcml0aG1JZGVu
dGlmaWVyKTsKKyAgICBhdXRvJiB2YWx1ZSA9IHN0ZDo6Z2V0PEpTQzo6U3Ryb25nPEpTQzo6SlNP
YmplY3Q+PihhbGdvcml0aG1JZGVudGlmaWVyKTsKIAogICAgIGF1dG8gcGFyYW1zID0gY29udmVy
dERpY3Rpb25hcnk8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oc3RhdGUsIHZhbHVlLmdldCgp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBFeGNlcHRpb24geyBFeGlzdGluZ0V4
Y2VwdGlvbkVycm9yIH0pOwpAQCAtODY3LDEyICs4NjcsMTIgQEAgdm9pZCBTdWJ0bGVDcnlwdG86
OmV4cG9ydEtleShLZXlGb3JtYXQgZgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9y
bWF0OjpTcGtpOgogICAgICAgICBjYXNlIFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpQa2NzODoK
ICAgICAgICAgY2FzZSBTdWJ0bGVDcnlwdG86OktleUZvcm1hdDo6UmF3OiB7Ci0gICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4mIHJhd0tleSA9IFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5
KTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgcmF3S2V5ID0gc3RkOjpnZXQ8VmVjdG9y
PHVpbnQ4X3Q+PihrZXkpOwogICAgICAgICAgICAgZnVsZmlsbFByb21pc2VXaXRoQXJyYXlCdWZm
ZXIoV1RGTW92ZShjYXB0dXJlZFByb21pc2UpLCByYXdLZXkuZGF0YSgpLCByYXdLZXkuc2l6ZSgp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBjYXNlIFN1YnRsZUNy
eXB0bzo6S2V5Rm9ybWF0OjpKd2s6Ci0gICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29s
dmU8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5Pj4oV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5
PihrZXkpKSk7CisgICAgICAgICAgICBjYXB0dXJlZFByb21pc2UtPnJlc29sdmU8SURMRGljdGlv
bmFyeTxKc29uV2ViS2V5Pj4oV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihrZXkpKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC05MzYsMTEgKzkzNiwxMSBAQCB2b2lkIFN1YnRsZUNyeXB0bzo6d3JhcEtleShKU0M6
OkV4ZWNTdGF0CiAgICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlNwa2k6CiAg
ICAgICAgIGNhc2UgU3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6OlBrY3M4OgogICAgICAgICBjYXNl
IFN1YnRsZUNyeXB0bzo6S2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgICAgICBieXRlcyA9IFdURjo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oa2V5KTsKKyAgICAgICAgICAgIGJ5dGVzID0gc3RkOjpnZXQ8
VmVjdG9yPHVpbnQ4X3Q+PihrZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U3VidGxlQ3J5cHRvOjpLZXlGb3JtYXQ6Okp3azogewogICAgICAgICAgICAgLy8gRklYTUU6IENv
bnZlcnRpbmcgdG8gSlMganVzdCB0byBKU09OLVN0cmluZ2lmeSBzZWVtcyBpbmVmZmljaWVudC4g
V2Ugc2hvdWxkIGZpbmQgYSB3YXkgdG8gZ28gZGlyZWN0bHkgZnJvbSB0aGUgc3RydWN0IHRvIEpT
T04uCi0gICAgICAgICAgICBhdXRvIGp3ayA9IHRvSlM8SURMRGljdGlvbmFyeTxKc29uV2ViS2V5
Pj4oKihwcm9taXNlLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpKSwgKihwcm9taXNlLT5n
bG9iYWxPYmplY3QoKSksIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oa2V5KSkpOworICAg
ICAgICAgICAgYXV0byBqd2sgPSB0b0pTPElETERpY3Rpb25hcnk8SnNvbldlYktleT4+KCoocHJv
bWlzZS0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKSksICoocHJvbWlzZS0+Z2xvYmFsT2Jq
ZWN0KCkpLCBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGtleSkpKTsKICAgICAgICAgICAg
IFN0cmluZyBqd2tTdHJpbmcgPSBKU09OU3RyaW5naWZ5KHByb21pc2UtPmdsb2JhbE9iamVjdCgp
LT5nbG9iYWxFeGVjKCksIGp3aywgMCk7CiAgICAgICAgICAgICBDU3RyaW5nIGp3a1V0ZjhTdHJp
bmcgPSBqd2tTdHJpbmcudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICAgICAgICAgIGJ5dGVz
LmFwcGVuZChqd2tVdGY4U3RyaW5nLmRhdGEoKSwgandrVXRmOFN0cmluZy5sZW5ndGgoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3J5cHRvL1N1YnRsZUNyeXB0by5oCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vU3VidGxlQ3J5cHRvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDggKzU4LDggQEAgcHVibGljOgogCiAgICAgdXNpbmcgS2V5Rm9ybWF0ID0gQ3J5cHRvS2V5
Rm9ybWF0OwogCi0gICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IFZhcmlhbnQ8SlNDOjpT
dHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz47Ci0gICAgdXNpbmcgS2V5RGF0YVZhcmlhbnQg
PSBWYXJpYW50PFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4sIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyPiwgSnNvbldlYktleT47CisgICAgdXNpbmcgQWxnb3JpdGhtSWRlbnRpZmllciA9IHN0
ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPjsKKyAgICB1c2lu
ZyBLZXlEYXRhVmFyaWFudCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIEpzb25XZWJLZXk+OwogCiAgICAgdm9pZCBl
bmNyeXB0KEpTQzo6RXhlY1N0YXRlJiwgQWxnb3JpdGhtSWRlbnRpZmllciYmLCBDcnlwdG9LZXkm
LCBCdWZmZXJTb3VyY2UmJiBkYXRhLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKICAgICB2b2lk
IGRlY3J5cHQoSlNDOjpFeGVjU3RhdGUmLCBBbGdvcml0aG1JZGVudGlmaWVyJiYsIENyeXB0b0tl
eSYsIEJ1ZmZlclNvdXJjZSYmIGRhdGEsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0NCQy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0NCQy5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DQkMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBv
cnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6
Okp3azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfQ0JDOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0Fs
Z0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfQ0ZCLmNw
cAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMv
Q3J5cHRvQWxnb3JpdGhtQUVTX0NGQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19DRkI6OmltcG9ydEtleShDCiAgICAgUmVmUHRy
PENyeXB0b0tleUFFUz4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBD
cnlwdG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBv
cnRSYXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWlu
dDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENy
eXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3Rk
OjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1
dG8gY2hlY2tBbGdDYWxsYmFjayA9IFtdKHNpemVfdCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgYWxn
KSAtPiBib29sIHsKQEAgLTExOSw3ICsxMTksNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19D
RkI6OmltcG9ydEtleShDCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH07Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobUFFU19DVFIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0
by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19DVFIuY3BwCShyZXZpc2lvbiAyMjA5NTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNf
Q1RSLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ3J5cHRvQWxn
b3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRvS2V5QUVTPiByZXN1
bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UmF3
OgotICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5p
ZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRS
YXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKICAgICAgICAgYXV0byBjaGVja0FsZ0NhbGxiYWNr
ID0gW10oc2l6ZV90IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBhbGcpIC0+IGJvb2wgewpAQCAtMTI4
LDcgKzEyOCw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtQUVTX0NUUjo6aW1wb3J0S2V5KEMKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfTsKLSAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRKd2socGFyYW1ldGVycy0+aWRlbnRpZmll
ciwgV1RGTW92ZShXVEY6OmdldDxKc29uV2ViS2V5PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMsIFdURk1vdmUoY2hlY2tBbGdDYWxsYmFjaykpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0Fs
Z0NhbGxiYWNrKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDog
U291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtQUVTX0dDTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRv
QWxnb3JpdGhtQUVTX0dDTS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19HQ00uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBv
cnRLZXkoQwogICAgIFJlZlB0cjxDcnlwdG9LZXlBRVM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9
IENyeXB0b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUo
V1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwor
ICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlBRVM6OmltcG9ydFJhdyhwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0
YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6
Okp3azogewogICAgICAgICBhdXRvIGNoZWNrQWxnQ2FsbGJhY2sgPSBbXShzaXplX3QgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1BRVNfR0NNOjppbXBvcnRLZXkoQwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9OwotICAgICAgICByZXN1bHQgPSBDcnlwdG9L
ZXlBRVM6OmltcG9ydEp3ayhwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0
PEpzb25XZWJLZXk+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcywgV1RGTW92ZShjaGVja0Fs
Z0NhbGxiYWNrKSk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBh
cmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkp
LCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1BRVNfS1cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUFFU19LVy5jcHAJ
KHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobUFFU19LVy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMCBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobUFFU19LVzo6aW1wb3J0S2V5KENyCiAgICAgUmVmUHRyPENy
eXB0b0tleUFFUz4gcmVzdWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlw
dG9LZXlGb3JtYXQ6OlJhdzoKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5QUVTOjppbXBvcnRS
YXcocGFyYW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhf
dD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0
b0tleUFFUzo6aW1wb3J0UmF3KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShz
aXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CisgICAgICAgIHJlc3Vs
dCA9IENyeXB0b0tleUFFUzo6aW1wb3J0SndrKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIFdURk1v
dmUoc3RkOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBbXShz
aXplX3QgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIGFsZykgLT4gYm9vbCB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGxlbmd0aCkgewogICAgICAgICAgICAgY2FzZSBDcnlwdG9LZXlBRVM6OnNfbGVuZ3Ro
MTI4OgogICAgICAgICAgICAgICAgIHJldHVybiBhbGcuaXNOdWxsKCkgfHwgYWxnID09IEFMRzEy
ODsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUVDREguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDREguY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RILmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtRUNESDo6aW1wb3J0
S2V5KENyeXAKICAgICBSZWZQdHI8Q3J5cHRvS2V5RUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZv
cm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldl
YktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAg
SnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKIAog
ICAgICAgICBib29sIGlzVXNhZ2VzQWxsb3dlZCA9IGZhbHNlOwogICAgICAgICBpZiAoIWtleS5k
LmlzTnVsbCgpKSB7CkBAIC0xNTAsMjEgKzE1MCwyMSBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUVD
REg6OmltcG9ydEtleShDcnlwCiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhF
cnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0
ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoV1RGOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSks
IGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1bHQgPSBDcnlwdG9LZXlFQzo6aW1w
b3J0UmF3KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwg
V1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpTcGtpOgog
ICAgICAgICBpZiAodXNhZ2VzKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50
YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0
ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFy
YW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6
OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1
cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJs
ZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBr
Y3M4OgogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZURlcml2
ZUtleSkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykgJiYgKHVzYWdlcyBe
IChDcnlwdG9LZXlVc2FnZURlcml2ZUtleSB8IENyeXB0b0tleVVzYWdlRGVyaXZlQml0cykpKSB7
CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9y
dFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFtZWRDdXJ2ZSwg
V1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVz
YWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2NzOChlY1BhcmFt
ZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1FQ0RTQS5j
cHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1z
L0NyeXB0b0FsZ29yaXRobUVDRFNBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBA
QCB2b2lkIENyeXB0b0FsZ29yaXRobUVDRFNBOjppbXBvcnRLZXkoQ3J5CiAgICAgUmVmUHRyPENy
eXB0b0tleUVDPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0
b0tleUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6
OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92
ZShzdGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAo
KCFrZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtl
eS5kLmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAg
ICAgICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTI0LDIxICsxMjQs
MjEgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1FQ0RTQTo6aW1wb3J0S2V5KENyeQogICAgICAgICAg
ICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRSYXcoZWNQYXJh
bWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6
Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAg
ICAgcmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFJhdyhlY1BhcmFtZXRlcnMuaWRlbnRpZmll
ciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6U3BraToKICAgICAgICAgaWYgKHVzYWdlcyAmJiAodXNhZ2Vz
IF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFj
ayhTeW50YXhFcnJvcik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
cmVzdWx0ID0gQ3J5cHRvS2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIs
IGVjUGFyYW1ldGVycy5uYW1lZEN1cnZlLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5RUM6OmltcG9ydFNwa2koZWNQYXJhbWV0ZXJzLmlkZW50aWZpZXIsIGVjUGFyYW1ldGVycy5u
YW1lZEN1cnZlLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkpLCBleHRy
YWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3Jt
YXQ6OlBrY3M4OgogICAgICAgICBpZiAodXNhZ2VzICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2Fn
ZVNpZ24pKSB7CiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
RUM6OmltcG9ydFBrY3M4KGVjUGFyYW1ldGVycy5pZGVudGlmaWVyLCBlY1BhcmFtZXRlcnMubmFt
ZWRDdXJ2ZSwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFj
dGFibGUsIHVzYWdlcyk7CisgICAgICAgIHJlc3VsdCA9IENyeXB0b0tleUVDOjppbXBvcnRQa2Nz
OChlY1BhcmFtZXRlcnMuaWRlbnRpZmllciwgZWNQYXJhbWV0ZXJzLm5hbWVkQ3VydmUsIFdURk1v
dmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKCFyZXN1bHQpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobUhLREYuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bUhLREYuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxn
b3JpdGhtcy9DcnlwdG9BbGdvcml0aG1IS0RGLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyAr
NjcsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhLREY6OmltcG9ydEtleShDcnlwCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJh
bWV0ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0
YSkpLCB1c2FnZXMpKTsKKyAgICBjYWxsYmFjayhDcnlwdG9LZXlSYXc6OmNyZWF0ZShwYXJhbWV0
ZXJzLT5pZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4oZGF0YSkp
LCB1c2FnZXMpKTsKIH0KIAogRXhjZXB0aW9uT3I8c2l6ZV90PiBDcnlwdG9BbGdvcml0aG1IS0RG
OjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1ITUFDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdv
cml0aG1ITUFDLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRv
L2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtSE1BQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MSw3ICsxMDEsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobUhNQUM6OmltcG9ydEtleShDcnlwCiAg
ICAgUmVmUHRyPENyeXB0b0tleUhNQUM+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewog
ICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpSYXc6Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tl
eUhNQUM6OmltcG9ydFJhdyhobWFjUGFyYW1ldGVycy5sZW5ndGgudmFsdWVfb3IoMCksIGhtYWNQ
YXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90
Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRv
S2V5SE1BQzo6aW1wb3J0UmF3KGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1h
Y1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIENyeXB0b0tleUZvcm1hdDo6SndrOiB7CiAgICAgICAgIGF1dG8gY2hlY2tBbGdDYWxsYmFj
ayA9IFtdKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaCwgY29uc3QgU3RyaW5nJiBhbGcp
IC0+IGJvb2wgewpAQCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtSE1BQzo6
aW1wb3J0S2V5KENyeXAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfTsKLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5SE1BQzo6aW1wb3J0SndrKGht
YWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwgaG1hY1BhcmFtZXRlcnMuaGFzaElkZW50
aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktleT4oZGF0YSkpLCBleHRyYWN0YWJsZSwg
dXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2spKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5
cHRvS2V5SE1BQzo6aW1wb3J0SndrKGhtYWNQYXJhbWV0ZXJzLmxlbmd0aC52YWx1ZV9vcigwKSwg
aG1hY1BhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8SnNvbldlYktl
eT4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBXVEZNb3ZlKGNoZWNrQWxnQ2FsbGJhY2sp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1QQktERjIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVBC
S0RGMi5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdv
cml0aG1zL0NyeXB0b0FsZ29yaXRobVBCS0RGMi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcg
KzY3LDcgQEAgdm9pZCBDcnlwdG9BbGdvcml0aG1QQktERjI6OmltcG9ydEtleShDcgogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFy
YW1ldGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShXVEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRh
dGEpKSwgdXNhZ2VzKSk7CisgICAgY2FsbGJhY2soQ3J5cHRvS2V5UmF3OjpjcmVhdGUocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEp
KSwgdXNhZ2VzKSk7CiB9CiAKIEV4Y2VwdGlvbk9yPHNpemVfdD4gQ3J5cHRvQWxnb3JpdGhtUEJL
REYyOjpnZXRLZXlMZW5ndGgoY29uc3QgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyYpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19Q
S0NTMV92MV81LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3Jp
dGhtcy9DcnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81LmNwcAkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNB
RVNfUEtDUzFfdjFfNS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjppbQogICAgIFJlZlB0cjxDcnlwdG9LZXlS
U0E+IHJlc3VsdDsKICAgICBzd2l0Y2ggKGZvcm1hdCkgewogICAgIGNhc2UgQ3J5cHRvS2V5Rm9y
bWF0OjpKd2s6IHsKLSAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKFdURjo6Z2V0PEpz
b25XZWJLZXk+KGRhdGEpKTsKKyAgICAgICAgSnNvbldlYktleSBrZXkgPSBXVEZNb3ZlKHN0ZDo6
Z2V0PEpzb25XZWJLZXk+KGRhdGEpKTsKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFrZXkuZC5p
c051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VEZWNyeXB0KSkgfHwgKGtleS5kLmlz
TnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZUVuY3J5cHQpKSkpIHsKICAgICAgICAg
ICAgIGV4Y2VwdGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIENyeXB0b0FsZ29yaXRobVJTQUVTX1BLQ1MxX3YxXzU6
OmltCiAgICAgICAgICAgICBleGNlcHRpb25DYWxsYmFjayhTeW50YXhFcnJvcik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5UlNBOjpp
bXBvcnRTcGtpKHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHN0ZDo6bnVsbG9wdCwgV1RGTW92ZShX
VEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShwYXJhbWV0ZXJzLT5pZGVu
dGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+Pihk
YXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBDcnlwdG9LZXlGb3JtYXQ6OlBrY3M4OiB7CkBAIC0xMjEsNyArMTIxLDcgQEAgdm9pZCBD
cnlwdG9BbGdvcml0aG1SU0FFU19QS0NTMV92MV81OjppbQogICAgICAgICAgICAgZXhjZXB0aW9u
Q2FsbGJhY2soU3ludGF4RXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgc3RkOjpudWxsb3B0LCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1aW50OF90Pj4o
ZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0gQ3J5cHRvS2V5
UlNBOjppbXBvcnRQa2NzOChwYXJhbWV0ZXJzLT5pZGVudGlmaWVyLCBzdGQ6Om51bGxvcHQsIFdU
Rk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2Fn
ZXMpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vYWxnb3JpdGhtcy9Dcnlw
dG9BbGdvcml0aG1SU0FTU0FfUEtDUzFfdjFfNS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NT
MV92MV81LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIENyeXB0b0Fs
Z29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAgUmVmUHRyPENyeXB0b0tleVJTQT4gcmVz
dWx0OwogICAgIHN3aXRjaCAoZm9ybWF0KSB7CiAgICAgY2FzZSBDcnlwdG9LZXlGb3JtYXQ6Okp3
azogewotICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoV1RGOjpnZXQ8SnNvbldlYktl
eT4oZGF0YSkpOworICAgICAgICBKc29uV2ViS2V5IGtleSA9IFdURk1vdmUoc3RkOjpnZXQ8SnNv
bldlYktleT4oZGF0YSkpOwogCiAgICAgICAgIGlmICh1c2FnZXMgJiYgKCgha2V5LmQuaXNOdWxs
KCkgJiYgKHVzYWdlcyBeIENyeXB0b0tleVVzYWdlU2lnbikpIHx8IChrZXkuZC5pc051bGwoKSAm
JiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VWZXJpZnkpKSkpIHsKICAgICAgICAgICAgIGV4Y2Vw
dGlvbkNhbGxiYWNrKFN5bnRheEVycm9yKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIENyeXB0
b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAgICAgICBy
ZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlmaWVy
LCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKFdURjo6Z2V0PFZlY3Rvcjx1
aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKKyAgICAgICAgcmVzdWx0ID0g
Q3J5cHRvS2V5UlNBOjppbXBvcnRTcGtpKHJzYVBhcmFtZXRlcnMuaWRlbnRpZmllciwgcnNhUGFy
YW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxWZWN0b3I8dWludDhfdD4+
KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIENyeXB0b0tleUZvcm1hdDo6UGtjczg6IHsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lk
IENyeXB0b0FsZ29yaXRobVJTQVNTQV9QS0NTMV92MV81OjppCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgLy8gRklYTUU6IDx3ZWJraXQub3JnL2IvMTY1NDM2PgotICAg
ICAgICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50
aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpnZXQ8VmVj
dG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAgICByZXN1
bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFBrY3M4KHBhcmFtZXRlcnMtPmlkZW50aWZpZXIsIHJz
YVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoc3RkOjpnZXQ8VmVjdG9yPHVpbnQ4
X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0Ny
eXB0b0FsZ29yaXRobVJTQV9PQUVQLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
cnlwdG8vYWxnb3JpdGhtcy9DcnlwdG9BbGdvcml0aG1SU0FfT0FFUC5jcHAJKHJldmlzaW9uIDIy
MDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0b0FsZ29yaXRo
bVJTQV9PQUVQLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgQ3J5
cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleSgKICAgICBSZWZQdHI8Q3J5cHRvS2V5UlNB
PiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tleUZvcm1h
dDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6OmdldDxKc29u
V2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShzdGQ6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgYm9vbCBpc1VzYWdlc0FsbG93ZWQgPSBm
YWxzZTsKICAgICAgICAgaWYgKCFrZXkuZC5pc051bGwoKSkgewpAQCAtMTU3LDcgKzE1Nyw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleSgKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+
Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJz
LmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlm
aWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODogewpAQCAtMTY2LDcgKzE2
Niw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX09BRVA6OmltcG9ydEtleSgKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8x
NjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShX
VEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL2Fs
Z29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3J5cHRvL2FsZ29yaXRobXMvQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUy5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9hbGdvcml0aG1zL0NyeXB0
b0FsZ29yaXRobVJTQV9QU1MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw3ICs5OCw3IEBAIHZv
aWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KEMKICAgICBSZWZQdHI8Q3J5cHRv
S2V5UlNBPiByZXN1bHQ7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICBjYXNlIENyeXB0b0tl
eUZvcm1hdDo6SndrOiB7Ci0gICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShXVEY6Omdl
dDxKc29uV2ViS2V5PihkYXRhKSk7CisgICAgICAgIEpzb25XZWJLZXkga2V5ID0gV1RGTW92ZShz
dGQ6OmdldDxKc29uV2ViS2V5PihkYXRhKSk7CiAKICAgICAgICAgaWYgKHVzYWdlcyAmJiAoKCFr
ZXkuZC5pc051bGwoKSAmJiAodXNhZ2VzIF4gQ3J5cHRvS2V5VXNhZ2VTaWduKSkgfHwgKGtleS5k
LmlzTnVsbCgpICYmICh1c2FnZXMgXiBDcnlwdG9LZXlVc2FnZVZlcmlmeSkpKSkgewogICAgICAg
ICAgICAgZXhjZXB0aW9uQ2FsbGJhY2soU3ludGF4RXJyb3IpOwpAQCAtMTQzLDcgKzE0Myw3IEBA
IHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KEMKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8xNjU0MzY+
Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0U3BraShyc2FQYXJhbWV0ZXJz
LmlkZW50aWZpZXIsIHJzYVBhcmFtZXRlcnMuaGFzaElkZW50aWZpZXIsIFdURk1vdmUoV1RGOjpn
ZXQ8VmVjdG9yPHVpbnQ4X3Q+PihkYXRhKSksIGV4dHJhY3RhYmxlLCB1c2FnZXMpOworICAgICAg
ICByZXN1bHQgPSBDcnlwdG9LZXlSU0E6OmltcG9ydFNwa2kocnNhUGFyYW1ldGVycy5pZGVudGlm
aWVyLCByc2FQYXJhbWV0ZXJzLmhhc2hJZGVudGlmaWVyLCBXVEZNb3ZlKHN0ZDo6Z2V0PFZlY3Rv
cjx1aW50OF90Pj4oZGF0YSkpLCBleHRyYWN0YWJsZSwgdXNhZ2VzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgQ3J5cHRvS2V5Rm9ybWF0OjpQa2NzODogewpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgQ3J5cHRvQWxnb3JpdGhtUlNBX1BTUzo6aW1wb3J0S2V5KEMKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8x
NjU0MzY+Ci0gICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1l
dGVycy0+aWRlbnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShX
VEY6OmdldDxWZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7Cisg
ICAgICAgIHJlc3VsdCA9IENyeXB0b0tleVJTQTo6aW1wb3J0UGtjczgocGFyYW1ldGVycy0+aWRl
bnRpZmllciwgcnNhUGFyYW1ldGVycy5oYXNoSWRlbnRpZmllciwgV1RGTW92ZShzdGQ6OmdldDxW
ZWN0b3I8dWludDhfdD4+KGRhdGEpKSwgZXh0cmFjdGFibGUsIHVzYWdlcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL1dlYkNvcmUvY3J5cHRvL3Bh
cmFtZXRlcnMvQ3J5cHRvQWxnb3JpdGhtRWNkc2FQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5o
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9D
cnlwdG9BbGdvcml0aG1FY2RzYVBhcmFtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENyeXB0b0FsZ29yaXRobUVjZHNhUGFyYW1z
IGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAg
IC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAg
IFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBz
dGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAg
ICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAgQ2xhc3Mg
cGFyYW1ldGVyc0NsYXNzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ2xhc3M6OkVjZHNhUGFyYW1z
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0
aG1Ia2RmUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFt
ZXRlcnMvQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Ia2RmUGFyYW1z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ3J5cHRvQWxnb3JpdGhtSGtkZlBhcmFtcyBmaW5hbCA6IHB1YmxpYyBDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzIHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWVyZ2lu
ZyBoYXNoIGFuZCBoYXNoSWRlbnRpZmllci4KLSAgICBWYXJpYW50PEpTQzo6U3Ryb25nPEpTQzo6
SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CisgICAgc3RkOjp2YXJpYW50PEpTQzo6U3Ryb25nPEpT
Qzo6SlNPYmplY3Q+LCBTdHJpbmc+IGhhc2g7CiAgICAgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
ciBoYXNoSWRlbnRpZmllcjsKICAgICBCdWZmZXJTb3VyY2Ugc2FsdDsKICAgICBCdWZmZXJTb3Vy
Y2UgaW5mbzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobUhtYWNLZXlQYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jcnlw
dG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zLmgJKHJldmlzaW9uIDIy
MDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRo
bUhtYWNLZXlQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1IbWFjS2V5UGFyYW1zIGZpbmFsIDog
cHVibGljIENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnMgewogcHVibGljOgogICAgIC8vIEZJWE1F
OiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVyLgotICAgIFZhcmlhbnQ8
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKKyAgICBzdGQ6OnZhcmlh
bnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsKICAgICBDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogICAgIHN0ZDo6b3B0aW9uYWw8c2l6
ZV90PiBsZW5ndGg7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0Ny
eXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVBia2RmMlBhcmFtcy5oCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1QYmtkZjJQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJs
aWM6CiAgICAgQnVmZmVyU291cmNlIHNhbHQ7CiAgICAgdW5zaWduZWQgbG9uZyBpdGVyYXRpb25z
OwogICAgIC8vIEZJWE1FOiBDb25zaWRlciBtZXJnaW5nIGhhc2ggYW5kIGhhc2hJZGVudGlmaWVy
LgotICAgIFZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFzaDsK
KyAgICBzdGQ6OnZhcmlhbnQ8SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4sIFN0cmluZz4gaGFz
aDsKICAgICBDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyIGhhc2hJZGVudGlmaWVyOwogCiAgICAg
Y29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBzYWx0VmVjdG9yKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0FsZ29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NyeXB0by9wYXJhbWV0ZXJzL0NyeXB0b0Fs
Z29yaXRobVJzYUhhc2hlZEltcG9ydFBhcmFtcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBv
cnRQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRJbXBvcnRQYXJhbXMgZmluYWwg
OiBwdWJsaWMgQ3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycyB7CiBwdWJsaWM6CiAgICAgLy8gRklY
TUU6IENvbnNpZGVyIG1lcmdpbmcgaGFzaCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFu
dDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFy
aWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0
b0FsZ29yaXRobUlkZW50aWZpZXIgaGFzaElkZW50aWZpZXI7CiAKICAgICBDbGFzcyBwYXJhbWV0
ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDbGFzczo6UnNhSGFzaGVkSW1wb3J0UGFy
YW1zOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdv
cml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jcnlwdG8vcGFyYW1ldGVycy9DcnlwdG9BbGdvcml0aG1Sc2FIYXNoZWRLZXlHZW5QYXJhbXMu
aAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3J5cHRvL3BhcmFtZXRlcnMv
Q3J5cHRvQWxnb3JpdGhtUnNhSGFzaGVkS2V5R2VuUGFyYW1zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ3J5cHRvQWxnb3JpdGht
UnNhSGFzaGVkS2V5R2VuUGFyYW1zIGZpbmFsIDogcHVibGljIENyeXB0b0FsZ29yaXRobVJzYUtl
eUdlblBhcmFtcyB7CiBwdWJsaWM6CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgaGFz
aCBhbmQgaGFzaElkZW50aWZpZXIuCi0gICAgVmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpTT2Jq
ZWN0PiwgU3RyaW5nPiBoYXNoOworICAgIHN0ZDo6dmFyaWFudDxKU0M6OlN0cm9uZzxKU0M6OkpT
T2JqZWN0PiwgU3RyaW5nPiBoYXNoOwogICAgIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXIgaGFz
aElkZW50aWZpZXI7CiAKICAgICBDbGFzcyBwYXJhbWV0ZXJzQ2xhc3MoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBDbGFzczo6UnNhSGFzaGVkS2V5R2VuUGFyYW1zOyB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgQ1NTUHJvcGVydHlJbmZvIHBhcnNlSmF2YVNjcmlw
dENTCiAKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgZG91YmxlPj4gQ1NTU3R5
bGVEZWNsYXJhdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
KQorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3VibGU+PiBDU1NTdHlsZURl
Y2xhcmF0aW9uOjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7
CiAgICAgYXV0byBwcm9wZXJ0eUluZm8gPSBwYXJzZUphdmFTY3JpcHRDU1NQcm9wZXJ0eU5hbWUo
cHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SW5mby5wcm9wZXJ0eUlEKQpAQCAtMjU5
LDE3ICsyNTksMTcgQEAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgZG91YmxlPj4gQwog
ICAgIGF1dG8gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZv
LnByb3BlcnR5SUQpOwogICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgLy8gSWYgdGhlIHByb3Bl
cnR5IGlzIGEgc2hvcnRoYW5kIHByb3BlcnR5IChzdWNoIGFzICJwYWRkaW5nIiksIGl0IGNhbiBv
bmx5IGJlIGFjY2Vzc2VkIHVzaW5nIGdldFByb3BlcnR5VmFsdWUuCi0gICAgICAgIHJldHVybiBW
YXJpYW50PFN0cmluZywgZG91YmxlPiB7IGdldFByb3BlcnR5VmFsdWVJbnRlcm5hbChwcm9wZXJ0
eUluZm8ucHJvcGVydHlJRCkgfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxTdHJpbmcs
IGRvdWJsZT4geyBnZXRQcm9wZXJ0eVZhbHVlSW50ZXJuYWwocHJvcGVydHlJbmZvLnByb3BlcnR5
SUQpIH07CiAgICAgfQogICAgIAogICAgIGlmIChwcm9wZXJ0eUluZm8uaGFkUGl4ZWxPclBvc1By
ZWZpeCAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSkgewogICAgICAgICAvLyBDYWxs
IHRoaXMgdmVyc2lvbiBvZiB0aGUgZ2V0dGVyIHNvIHRoYXQsIGUuZy4sIHBpeGVsVG9wIHJldHVy
bnMgdG9wIGFzIGEgbnVtYmVyCiAgICAgICAgIC8vIGluIHBpeGVsIHVuaXRzIGFuZCBwb3NUb3Ag
c2hvdWxkIGRvZXMgdGhlIHNhbWUgX2lmXyB0aGlzIGlzIGEgcG9zaXRpb25lZCBlbGVtZW50Lgog
ICAgICAgICAvLyBGSVhNRTogSWYgbm90IGEgcG9zaXRpb25lZCBlbGVtZW50LCBNU0lFIGRvY3Vt
ZW50YXRpb24gc2F5cyBwb3NUb3Agc2hvdWxkIHJldHVybiAwOyB0aGlzIHJ1bGUgaXMgbm90IGlt
cGxlbWVudGVkLgotICAgICAgICByZXR1cm4gVmFyaWFudDxTdHJpbmcsIGRvdWJsZT4geyBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5mbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpIH07CisgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBkb3Vi
bGU+IHsgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZmxvYXRWYWx1ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSB9OwogICAgIH0KIAotICAgIHJldHVybiBWYXJpYW50PFN0
cmluZywgZG91YmxlPiB7IHZhbHVlLT5jc3NUZXh0KCkgfTsKKyAgICByZXR1cm4gc3RkOjp2YXJp
YW50PFN0cmluZywgZG91YmxlPiB7IHZhbHVlLT5jc3NUZXh0KCkgfTsKIH0KIAogRXhjZXB0aW9u
T3I8dm9pZD4gQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYgcHJvcGVydHlOYW1lLCBTdHJpbmcgdmFsdWUsIGJvb2wmIHByb3BlcnR5U3VwcG9ydGVk
KQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENTU1N0
eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAK
ICAgICAvLyBCaW5kaW5ncyBzdXBwb3J0LgotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJp
bmcsIGRvdWJsZT4+IG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHN0ZDo6dmFyaWFudDxTdHJpbmcsIGRvdWJsZT4+IG5hbWVkSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXROYW1lZEl0ZW0oY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBTdHJpbmcgdmFsdWUsIGJvb2wmIHByb3BlcnR5U3VwcG9ydGVkKTsK
ICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiBzdXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3Q7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9ET01NYXRyaXguaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTU1hdHJpeCA6IHB1YmxpYyBET01NYXRy
aXhSZWFkT25seSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRy
aXg+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxWYXJpYW50PFN0cmluZywgVmVjdG9yPGRvdWJsZT4+
PiYmIGluaXQpCisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxET01NYXRyaXg+PiBjcmVhdGUo
c3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0b3I8ZG91YmxlPj4+JiYgaW5p
dCkKICAgICB7CiAgICAgICAgIGF1dG8gbWF0cml4ID0gYWRvcHRSZWYoKm5ldyBET01NYXRyaXgp
OwogICAgICAgICBpZiAoIWluaXQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4
UmVhZE9ubHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvRE9NTWF0cml4UmVh
ZE9ubHkuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0RPTU1hdHJp
eFJlYWRPbmx5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RydWN0IERPTVBv
aW50SW5pdDsKIGNsYXNzIERPTU1hdHJpeFJlYWRPbmx5IDogcHVibGljIFNjcmlwdFdyYXBwYWJs
ZSwgcHVibGljIFJlZkNvdW50ZWQ8RE9NTWF0cml4UmVhZE9ubHk+IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPERPTU1h
dHJpeFJlYWRPbmx5Pj4gY3JlYXRlKHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxTdHJpbmcsIFZlY3Rv
cjxkb3VibGU+Pj4mJiBpbml0KQorICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8RE9NTWF0cml4
UmVhZE9ubHk+PiBjcmVhdGUoc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBWZWN0
b3I8ZG91YmxlPj4+JiYgaW5pdCkKICAgICB7CiAgICAgICAgIGF1dG8gbWF0cml4ID0gYWRvcHRS
ZWYoKm5ldyBET01NYXRyaXhSZWFkT25seSk7CiAgICAgICAgIGlmICghaW5pdCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9Gb250RmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Gb250RmFjZS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Rm9udEZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFN0cmluZyBmZWF0dXJlU2V0dGluZ3M7CiAgICAgfTsKICAgICAKLSAgICB1c2luZyBTb3Vy
Y2UgPSBWYXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+LCBSZWZQdHI8SlND
OjpBcnJheUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8U3Ry
aW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmll
dz4+OwogICAgIHN0YXRpYyBFeGNlcHRpb25PcjxSZWY8Rm9udEZhY2U+PiBjcmVhdGUoRG9jdW1l
bnQmLCBjb25zdCBTdHJpbmcmIGZhbWlseSwgU291cmNlJiYsIGNvbnN0IERlc2NyaXB0b3JzJik7
CiAgICAgc3RhdGljIFJlZjxGb250RmFjZT4gY3JlYXRlKENTU0ZvbnRGYWNlJik7CiAgICAgdmly
dHVhbCB+Rm9udEZhY2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgyLDcgKzI4Miw3IEBAIGVudW0gY2xhc3MgQ3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0aW9uU3QK
ICAgICBDb25mbGljdHNXaXRoU3RhbmRhcmRFbGVtZW50TmFtZQogfTsKIAotdXNpbmcgUmVuZGVy
aW5nQ29udGV4dCA9IFZhcmlhbnQ8Cit1c2luZyBSZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp2YXJp
YW50PAogI2lmIEVOQUJMRShXRUJHTCkKICAgICBSZWZQdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0
PiwKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmgJKHJldmlzaW9u
IDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHB1YmxpYzoKICAgICBzdHJ1Y3QgRHJhZ2dlZENvbnRl
bnREYXRhIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IHRhcmdldE5vZGU7CiAgICAgfTsKLSAgICB1
c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVzY3JpcHRpb25EYXRhLCBE
aWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBEcmFnZ2VkQ29udGVudERh
dGE+OworICAgIHVzaW5nIERhdGEgPSBzdGQ6OnZhcmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERl
c2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwg
RHJhZ2dlZENvbnRlbnREYXRhPjsKIAogICAgIERvY3VtZW50TWFya2VyKHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3RpdmVNYXRjaCk7CiAgICAgRG9j
dW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVu
ZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiA9IFN0cmluZygpKTsKQEAgLTE5OCwx
MiArMTk4LDEyIEBAIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzaGlmdE9mZnNldHMKIAog
aW5saW5lIGNvbnN0IFN0cmluZyYgRG9jdW1lbnRNYXJrZXI6OmRlc2NyaXB0aW9uKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+KG1fZGF0YSkgPyBX
VEY6OmdldDxTdHJpbmc+KG1fZGF0YSkgOiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKSA/IHN0ZDo6Z2V0PFN0cmluZz4obV9k
YXRhKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIGlubGluZSBib29sIERvY3VtZW50TWFya2VyOjpp
c0FjdGl2ZU1hdGNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxib29sPihtX2RhdGEpICYmIFdURjo6Z2V0PGJvb2w+KG1fZGF0YSk7CisgICAgcmV0dXJuIHN0
ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4obV9kYXRhKSAmJiBzdGQ6OmdldDxib29sPihtX2Rh
dGEpOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWN0aXZlTWF0Y2goYm9v
bCBpc0FjdGl2ZU1hdGNoKQpAQCAtMjI3LDIyICsyMjcsMjIgQEAgaW5saW5lIERvY3VtZW50TWFy
a2VyOjpEb2N1bWVudE1hcmtlcihNYQogCiBpbmxpbmUgY29uc3QgVmVjdG9yPFN0cmluZz4mIERv
Y3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6Omdl
dDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLmFsdGVybmF0aXZlczsKKyAgICBy
ZXR1cm4gc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5h
dGl2ZXM7CiB9CiAKIGlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBbHRlcm5hdGl2ZShj
b25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBzaXplX3QgaW5kZXgpCiB7Ci0gICAgV1RGOjpnZXQ8
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNbaW5kZXhdID0g
YWx0ZXJuYXRpdmU7CisgICAgc3RkOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9k
YXRhKS5hbHRlcm5hdGl2ZXNbaW5kZXhdID0gYWx0ZXJuYXRpdmU7CiB9CiAKIGlubGluZSBpZCBE
b2N1bWVudE1hcmtlcjo6bWV0YWRhdGEoKSBjb25zdAogewotICAgIHJldHVybiBXVEY6OmdldDxE
aWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhLmdldCgpOworICAgIHJl
dHVybiBzdGQ6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRh
LmdldCgpOwogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0TWV0YWRhdGEoaWQg
bWV0YWRhdGEpCiB7Ci0gICAgV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9k
YXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOworICAgIHN0ZDo6Z2V0PERpY3RhdGlvbkFsdGVybmF0
aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEgPSBtZXRhZGF0YTsKIH0KIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCBzdGF0aWMgYm9v
bCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCiAgICAgaWYgKG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBXVEY6OmdldDxEb2N1bWVu
dE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXROb2Rl
KQorICAgICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKICAgICAg
ICAgICAgIHJldHVybiB0YXJnZXROb2RlLT5yZW5kZXJlcigpICYmIHRhcmdldE5vZGUtPnJlbmRl
cmVyKCktPmlzUmVuZGVyUmVwbGFjZWQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIEV2ZW50
VGFyZ2V0OjphZGRFdmVudExpc3RlbmVyRm9yQmluCiAgICAgICAgIGFkZEV2ZW50TGlzdGVuZXIo
ZXZlbnRUeXBlLCBsaXN0ZW5lci5yZWxlYXNlTm9uTnVsbCgpLCBjYXB0dXJlKTsKICAgICB9KTsK
IAotICAgIFdURjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdCh2aXNp
dG9yLCB2YXJpYW50KTsKIH0KIAogdm9pZCBFdmVudFRhcmdldDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
ckZvckJpbmRpbmdzKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4mJiBsaXN0ZW5lciwgTGlzdGVuZXJPcHRpb25zT3JCb29sZWFuJiYgdmFyaWFudCkK
QEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIEV2ZW50VGFyZ2V0OjpyZW1vdmVFdmVudExpc3RlbmVy
Rm9yCiAgICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCAqbGlzdGVuZXIsIGNh
cHR1cmUpOwogICAgIH0pOwogCi0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAg
ICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogfQogCiBib29sIEV2ZW50VGFyZ2V0Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lciwgY29uc3QgTGlzdGVuZXJPcHRpb25zJiBvcHRpb25zKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw5ICs5MSw5IEBAIHB1
YmxpYzoKICAgICAgICAgYm9vbCBvbmNlOwogICAgIH07CiAKLSAgICB1c2luZyBBZGRFdmVudExp
c3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IFZhcmlhbnQ8QWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMs
IGJvb2w+OworICAgIHVzaW5nIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zT3JCb29sZWFuID0gc3Rk
Ojp2YXJpYW50PEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLCBib29sPjsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFkZEV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYsIEFkZEV2ZW50TGlzdGVuZXJPcHRp
b25zT3JCb29sZWFuJiYpOwotICAgIHVzaW5nIExpc3RlbmVyT3B0aW9uc09yQm9vbGVhbiA9IFZh
cmlhbnQ8TGlzdGVuZXJPcHRpb25zLCBib29sPjsKKyAgICB1c2luZyBMaXN0ZW5lck9wdGlvbnNP
ckJvb2xlYW4gPSBzdGQ6OnZhcmlhbnQ8TGlzdGVuZXJPcHRpb25zLCBib29sPjsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXJGb3JCaW5kaW5ncyhjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiYsIExpc3RlbmVyT3B0
aW9uc09yQm9vbGVhbiYmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjxib29sPiBk
aXNwYXRjaEV2ZW50Rm9yQmluZGluZ3MoRXZlbnQmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL01lc3Nh
Z2VFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQmxvYjsKIAotdXNpbmcgTWVzc2FnZUV2ZW50U291cmNlID0gVmFyaWFu
dDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPE1lc3NhZ2VQb3J0Pj47Cit1c2luZyBNZXNzYWdl
RXZlbnRTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxNZXNz
YWdlUG9ydD4+OwogCiBjbGFzcyBNZXNzYWdlRXZlbnQgZmluYWwgOiBwdWJsaWMgRXZlbnQgewog
cHVibGljOgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIFNW
R1F1YWxpZmllZE5hbWU7CiBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVG91Y2hFdmVudDsKIAot
dXNpbmcgTm9kZU9yU3RyaW5nID0gVmFyaWFudDxSZWZQdHI8Tm9kZT4sIFN0cmluZz47Cit1c2lu
ZyBOb2RlT3JTdHJpbmcgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPE5vZGU+LCBTdHJpbmc+OwogCiBj
bGFzcyBOb2RlUmFyZURhdGFCYXNlIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXIKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVS
ZXZlcnNpb246IHsKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0aXZlKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIFN0cmluZyByZXBsYWNlbWVudFN0cmluZyA9IFdURjo6Z2V0
PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ+KG1fZGV0YWlscyk7CisgICAgICAgIFN0cmluZyBy
ZXBsYWNlbWVudFN0cmluZyA9IHN0ZDo6Z2V0PEF1dG9jb3JyZWN0aW9uUmVwbGFjZW1lbnQ+KG1f
ZGV0YWlscyk7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudFN0cmluZy5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CkBAIC0zMjYsNyArMzI2
LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcgogI2lmIFVTRShE
SUNUQVRJT05fQUxURVJOQVRJVkVTKQogICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRl
eHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7Cisg
ICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBzdGQ6OmdldDxBbHRlcm5hdGl2ZURp
Y3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmICghZGljdGF0aW9uQ29udGV4
dCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0g
cm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CkBAIC01
OTIsOSArNTkyLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVAog
ICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVJl
dmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlczogewotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKQorICAgICAgICBp
ZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+
KG1hcmtlci5kYXRhKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhdXRv
JiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1h
cmtlci5kYXRhKCkpOworICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gc3RkOjpnZXQ8RG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBpZiAoY3Vy
cmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgPSB3b3JkUmFuZ2U7CkBAIC02
NDIsOSArNjQyLDkgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaQog
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2
ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKIHsKICNpZiBVU0UoRElD
VEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpOworICAgIEFTU0VS
VChzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPiht
YXJrZXIuZGF0YSgpKSk7CiAgICAgaWYgKGF1dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENs
aWVudCgpKQotICAgICAgICBjbGllbnQtPnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlcyhXVEY6
OmdldDxEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkuY29udGV4
dCk7CisgICAgICAgIGNsaWVudC0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKHN0ZDo6Z2V0
PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hcmtlcik7CiAjZW5kaWYKQEAgLTY1NSw3ICs2NTUs
NyBAQCBWZWN0b3I8U3RyaW5nPiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyCiAjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCiAgICAgQVNTRVJUKG1hcmtlci50eXBlKCkgPT0gRG9jdW1l
bnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgaWYgKGF1dG8qIGNsaWVudCA9
IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQotICAgICAgICByZXR1cm4gY2xpZW50LT5kaWN0YXRp
b25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1h
cmtlci5kYXRhKCkpLmNvbnRleHQpOworICAgICAgICByZXR1cm4gY2xpZW50LT5kaWN0YXRpb25B
bHRlcm5hdGl2ZXMoc3RkOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtl
ci5kYXRhKCkpLmNvbnRleHQpOwogICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0obWFya2VyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNB
Y3RpdmU7CiAgICAgICAgIEFsdGVybmF0aXZlVGV4dFR5cGUgdHlwZTsKICAgICAgICAgU3RyaW5n
IG9yaWdpbmFsVGV4dDsKLSAgICAgICAgVmFyaWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50
LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+IGRldGFpbHM7CisgICAgICAgIHN0ZDo6dmFy
aWFudDxBdXRvY29ycmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRl
eHQ+IGRldGFpbHM7CiAgICAgfTsKIAogICAgIFN0cmluZyBkaXNtaXNzU29vbihSZWFzb25Gb3JE
aXNtaXNzaW5nQWx0ZXJuYXRpdmVUZXh0KTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9pc0Rpc21pc3NlZEJ5RWRpdGluZzsKICAgICBBbHRlcm5hdGl2ZVRleHRUeXBl
IG1fdHlwZTsKICAgICBTdHJpbmcgbV9vcmlnaW5hbFRleHQ7Ci0gICAgVmFyaWFudDxBdXRvY29y
cmVjdGlvblJlcGxhY2VtZW50LCBBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+IG1fZGV0YWls
czsKKyAgICBzdGQ6OnZhcmlhbnQ8QXV0b2NvcnJlY3Rpb25SZXBsYWNlbWVudCwgQWx0ZXJuYXRp
dmVEaWN0YXRpb25Db250ZXh0PiBtX2RldGFpbHM7CiAKICAgICBTdHJpbmcgbV9vcmlnaW5hbFN0
cmluZ0Zvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CiAgICAgUG9zaXRpb24gbV9wb3NpdGlv
bkZvckxhc3REZWxldGVkQXV0b2NvcnJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0Jsb2IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaAko
cmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQmxv
YjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKLXVzaW5nIEJsb2JQYXJ0VmFyaWFu
dCA9IFZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4sIFN0cmluZz47Cit1c2luZyBCbG9iUGFydFZhcmlhbnQg
PSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXI+LCBSZWZQdHI8QmxvYj4sIFN0cmluZz47CiAKIGNsYXNzIEJsb2IgOiBwdWJs
aWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgVVJMUmVnaXN0cmFibGUsIHB1YmxpYyBSZWZDb3Vu
dGVkPEJsb2I+IHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgRmlsZVJlYWRl
cjo6ZmlyZUV2ZW50KGNvbnN0IEF0b21pY1MKICAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZl
bnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBtX2xvYWRlciA/IG1fbG9hZGVyLT5ieXRlc0xvYWRlZCgp
IDogMCwgbV9sb2FkZXIgPyBtX2xvYWRlci0+dG90YWxCeXRlcygpIDogMCkpOwogfQogCi1zdGQ6
Om9wdGlvbmFsPFZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiBGaWxl
UmVhZGVyOjpyZXN1bHQoKSBjb25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8U3RyaW5n
LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlcj4+PiBGaWxlUmVhZGVyOjpyZXN1bHQoKSBjb25zdAog
ewogICAgIGlmICghbV9sb2FkZXIgfHwgbV9lcnJvcikKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCShyZXZpc2lvbiAyMjA5
NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIFJlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkg
eyByZXR1cm4gbV9lcnJvcjsgfQogICAgIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRUeXBlIHJlYWRU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkVHlwZTsgfQotICAgIHN0ZDo6b3B0aW9uYWw8VmFy
aWFudDxTdHJpbmcsIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyPj4+IHJlc3VsdCgpIGNvbnN0Owor
ICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFN0cmluZywgUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXI+Pj4gcmVzdWx0KCkgY29uc3Q7CiAKICAgICB1c2luZyBSZWZDb3VudGVkOjpyZWY7CiAg
ICAgdXNpbmcgUmVmQ291bnRlZDo6ZGVyZWY7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbGxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbGxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI4ICs0Mywy
OCBAQCBpbmxpbmUgSFRNTEFsbENvbGxlY3Rpb246OkhUTUxBbGxDb2xsZWN0CiB9CiAKIC8vIGh0
dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwj
ZG9tLWh0bWxhbGxjb2xsZWN0aW9uLWl0ZW0KLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8
SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFt
ZWRPckluZGV4ZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVPckluZGV4KSBj
b25zdAorc3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwg
UmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEFsbENvbGxlY3Rpb246Om5hbWVkT3JJbmRleGVkSXRlbU9y
SXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3QKIHsKICAgICBpZiAo
bmFtZU9ySW5kZXguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAg
ICBpZiAoYXV0byBpbmRleCA9IEpTQzo6cGFyc2VJbmRleCgqbmFtZU9ySW5kZXguaW1wbCgpKSkK
LSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVs
ZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IGl0ZW0oaW5kZXgudmFsdWUoKSkgfSB9OworICAg
ICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxF
bGVtZW50Pj4geyBSZWZQdHI8RWxlbWVudD4geyBpdGVtKGluZGV4LnZhbHVlKCkpIH0gfTsKIAog
ICAgIHJldHVybiBuYW1lZEl0ZW1Pckl0ZW1zKG5hbWVPckluZGV4KTsKIH0KIAogLy8gaHR0cHM6
Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjb25j
ZXB0LWdldC1hbGwtbmFtZWQKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxl
Y3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxsQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJ
dGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPHN0ZDo6
dmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBIVE1MQWxs
Q29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNv
bnN0CiB7CiAgICAgYXV0byBuYW1lZEl0ZW1zID0gdGhpcy0+bmFtZWRJdGVtcyhuYW1lKTsKIAog
ICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFZhcmlh
bnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVt
ZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1swXSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2
YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8
RWxlbWVudD4geyBXVEZNb3ZlKG5hbWVkSXRlbXNbMF0pIH0gfTsKIAotICAgIHJldHVybiBWYXJp
YW50PFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4sIFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IHsgZG93bmNhc3Q8RG9jdW1lbnQ+KG93bmVyTm9kZSgpKS5hbGxGaWx0ZXJl
ZEJ5TmFtZShuYW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTENv
bGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiB7IGRv
d25jYXN0PERvY3VtZW50Pihvd25lck5vZGUoKSkuYWxsRmlsdGVyZWRCeU5hbWUobmFtZSkgfSB9
OwogfQogCiBIVE1MQWxsTmFtZWRTdWJDb2xsZWN0aW9uOjp+SFRNTEFsbE5hbWVkU3ViQ29sbGVj
dGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQWxsQ29sbGVjdGlvbi5oCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbGxDb2xsZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAgY2xhc3MgSFRNTEFsbENvbGxlY3Rpb24g
ZmluYWwgOiBwdWJsaWMgQQogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTEFsbENvbGxlY3Rp
b24+IGNyZWF0ZShEb2N1bWVudCYsIENvbGxlY3Rpb25UeXBlKTsKIAotICAgIHN0ZDo6b3B0aW9u
YWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBSZWZQdHI8RWxlbWVudD4+PiBuYW1l
ZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZU9ySW5kZXgpIGNv
bnN0OwotICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8SFRNTENvbGxlY3Rpb24+LCBS
ZWZQdHI8RWxlbWVudD4+PiBuYW1lZEl0ZW1Pckl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyYpIGNv
bnN0OworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MQ29sbGVjdGlv
bj4sIFJlZlB0cjxFbGVtZW50Pj4+IG5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lT3JJbmRleCkgY29uc3Q7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnZh
cmlhbnQ8UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVt
T3JJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBIVE1M
QWxsQ29sbGVjdGlvbihEb2N1bWVudCYsIENvbGxlY3Rpb25UeXBlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw3
IEBAIFJlZjxEb2N1bWVudFBhcnNlcj4gSFRNTERvY3VtZW50OjpjcmVhdGUKIH0KIAogLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZG9tLWRvY3VtZW50
LW5hbWVkaXRlbQotc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQ
dHI8RWxlbWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+PiBIVE1MRG9jdW1lbnQ6Om5hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCitzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFu
dDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rp
b24+Pj4gSFRNTERvY3VtZW50OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQog
ewogICAgIGlmIChuYW1lLmlzTnVsbCgpIHx8ICFoYXNEb2N1bWVudE5hbWVkSXRlbSgqbmFtZS5p
bXBsKCkpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwpAQCAtMTIwLDE2ICsxMjAsMTYg
QEAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxET01XaW5kb3c+LAogICAgIGlmIChVTkxJ
S0VMWShkb2N1bWVudE5hbWVkSXRlbUNvbnRhaW5zTXVsdGlwbGVFbGVtZW50cygqbmFtZS5pbXBs
KCkpKSkgewogICAgICAgICBhdXRvIGNvbGxlY3Rpb24gPSBkb2N1bWVudE5hbWVkSXRlbXMobmFt
ZSk7CiAgICAgICAgIEFTU0VSVChjb2xsZWN0aW9uLT5sZW5ndGgoKSA+IDEpOwotICAgICAgICBy
ZXR1cm4gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8
SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4geyBXVEZNb3ZlKGNvbGxl
Y3Rpb24pIH0gfTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93
PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxIVE1M
Q29sbGVjdGlvbj4geyBXVEZNb3ZlKGNvbGxlY3Rpb24pIH0gfTsKICAgICB9CiAKICAgICBhdXRv
JiBlbGVtZW50ID0gKmRvY3VtZW50TmFtZWRJdGVtKCpuYW1lLmltcGwoKSk7CiAgICAgaWYgKFVO
TElLRUxZKGlzPEhUTUxJRnJhbWVFbGVtZW50PihlbGVtZW50KSkpIHsKICAgICAgICAgaWYgKGF1
dG8qIGRvbVdpbmRvdyA9IGRvd25jYXN0PEhUTUxJRnJhbWVFbGVtZW50PihlbGVtZW50KS5jb250
ZW50V2luZG93KCkpCi0gICAgICAgICAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8RE9NV2luZG93
PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxET01X
aW5kb3c+IHsgZG9tV2luZG93IH0gfTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8
UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhUTUxDb2xsZWN0aW9u
Pj4geyBSZWZQdHI8RE9NV2luZG93PiB7IGRvbVdpbmRvdyB9IH07CiAgICAgfQogCi0gICAgcmV0
dXJuIFZhcmlhbnQ8UmVmUHRyPERPTVdpbmRvdz4sIFJlZlB0cjxFbGVtZW50PiwgUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPj4geyBSZWZQdHI8RWxlbWVudD4geyAmZWxlbWVudCB9IH07CisgICAgcmV0
dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+PiB7IFJlZlB0cjxFbGVtZW50PiB7ICZlbGVtZW50IH0gfTsKIH0K
IAogVmVjdG9yPEF0b21pY1N0cmluZz4gSFRNTERvY3VtZW50OjpzdXBwb3J0ZWRQcm9wZXJ0eU5h
bWVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IHdp
ZHRoKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGhlaWdodCgpOwogICAgIAotICAgIHN0ZDo6
b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8RE9NV2luZG93PiwgUmVmUHRyPEVsZW1lbnQ+LCBSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAg
IHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxET01XaW5kb3c+LCBSZWZQdHI8RWxl
bWVudD4sIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4+PiBuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAgICAgVmVjdG9yPEF0b21pY1N0cmluZz4gc3VwcG9ydGVkUHJvcGVydHlOYW1lcygp
IGNvbnN0OwogCiAgICAgRWxlbWVudCogZG9jdW1lbnROYW1lZEl0ZW0oY29uc3QgQXRvbWljU3Ry
aW5nSW1wbCYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudE5hbWVkSXRlbS5nZXRFbGVt
ZW50QnlEb2N1bWVudE5hbWVkSXRlbShuYW1lLCAqdGhpcyk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTYgKzUyLDE2IEBAIEhUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uOjp+SFRNTEZvcm1Db24KIHsKIH0KIAotc3RkOjpvcHRpb25hbDxWYXJpYW50
PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEZvcm1Db250cm9s
c0NvbGxlY3Rpb246Om5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAor
c3RkOjpvcHRpb25hbDxzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8
RWxlbWVudD4+PiBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6bmFtZWRJdGVtT3JJdGVtcyhj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgYXV0byBuYW1lZEl0ZW1zID0gdGhpcy0+
bmFtZWRJdGVtcyhuYW1lKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKICAgICBpZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkK
LSAgICAgICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8RWxl
bWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07Cisg
ICAgICAgIHJldHVybiBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBSZWZQdHI8
RWxlbWVudD4+IHsgUmVmUHRyPEVsZW1lbnQ+IHsgV1RGTW92ZShuYW1lZEl0ZW1zWzBdKSB9IH07
CiAKLSAgICByZXR1cm4gVmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVt
ZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyBvd25lck5vZGUoKS5yYWRpb05vZGVMaXN0
KG5hbWUpIH0gfTsKKyAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0
PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxSYWRpb05vZGVMaXN0PiB7IG93bmVyTm9kZSgp
LnJhZGlvTm9kZUxpc3QobmFtZSkgfSB9OwogfQogCiBjb25zdCBWZWN0b3I8Rm9ybUFzc29jaWF0
ZWRFbGVtZW50Kj4mIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpmb3JtQ29udHJvbEVsZW1l
bnRzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0Nv
bGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24o
KTsKIAogICAgIEhUTUxFbGVtZW50KiBpdGVtKHVuc2lnbmVkIG9mZnNldCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVm
UHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtT3JJdGVtcyhjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAg
ICBzdGQ6Om9wdGlvbmFsPHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4sIFJlZlB0
cjxFbGVtZW50Pj4+IG5hbWVkSXRlbU9ySXRlbXMoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAg
ICAvLyBGb3IgQ2FjaGVkSFRNTENvbGxlY3Rpb24uCiAgICAgSFRNTEVsZW1lbnQqIGN1c3RvbUVs
ZW1lbnRBZnRlcihFbGVtZW50KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywxNiArMTYzLDE2IEBA
IEhUTUxFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6Oml0ZW0odW5zaWcKICAgICByZXR1cm4gZWxl
bWVudHMoKS0+aXRlbShpbmRleCk7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8VmFyaWFudDxSZWZQdHI8
UmFkaW9Ob2RlTGlzdD4sIFJlZlB0cjxFbGVtZW50Pj4+IEhUTUxGb3JtRWxlbWVudDo6bmFtZWRJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK3N0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50
PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gSFRNTEZvcm1FbGVtZW50
OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIGF1dG8gbmFtZWRJ
dGVtcyA9IG5hbWVkRWxlbWVudHMobmFtZSk7CiAKICAgICBpZiAobmFtZWRJdGVtcy5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAgICAgaWYgKG5hbWVkSXRlbXMuc2l6
ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWYXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0Piwg
UmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVtc1sw
XSkgfSB9OworICAgICAgICByZXR1cm4gc3RkOjp2YXJpYW50PFJlZlB0cjxSYWRpb05vZGVMaXN0
PiwgUmVmUHRyPEVsZW1lbnQ+PiB7IFJlZlB0cjxFbGVtZW50PiB7IFdURk1vdmUobmFtZWRJdGVt
c1swXSkgfSB9OwogCi0gICAgcmV0dXJuIFZhcmlhbnQ8UmVmUHRyPFJhZGlvTm9kZUxpc3Q+LCBS
ZWZQdHI8RWxlbWVudD4+IHsgUmVmUHRyPFJhZGlvTm9kZUxpc3Q+IHsgcmFkaW9Ob2RlTGlzdChu
YW1lKSB9IH07CisgICAgcmV0dXJuIHN0ZDo6dmFyaWFudDxSZWZQdHI8UmFkaW9Ob2RlTGlzdD4s
IFJlZlB0cjxFbGVtZW50Pj4geyBSZWZQdHI8UmFkaW9Ob2RlTGlzdD4geyByYWRpb05vZGVMaXN0
KG5hbWUpIH0gfTsKIH0KIAogVmVjdG9yPEF0b21pY1N0cmluZz4gSFRNTEZvcm1FbGVtZW50Ojpz
dXBwb3J0ZWRQcm9wZXJ0eU5hbWVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBIVE1M
RWxlbWVudCogaXRlbSh1bnNpZ25lZCBpbmRleCk7Ci0gICAgc3RkOjpvcHRpb25hbDxWYXJpYW50
PFJlZlB0cjxSYWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtKGNvbnN0
IEF0b21pY1N0cmluZyYpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjp2YXJpYW50PFJlZlB0cjxS
YWRpb05vZGVMaXN0PiwgUmVmUHRyPEVsZW1lbnQ+Pj4gbmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0
cmluZyYpOwogICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHN1cHBvcnRlZFByb3BlcnR5TmFtZXMo
KSBjb25zdDsKIAogICAgIFN0cmluZyBlbmN0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmVuY29kaW5nVHlwZSgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjUsNyArMTM2NSw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXIKIAogICAgICAgICAgICAgLy8g
Mi4gRW5kIHRoZSBzeW5jaHJvbm91cyBzZWN0aW9uLCBjb250aW51aW5nIHRoZSByZW1haW5pbmcg
c3RlcHMgaW4gcGFyYWxsZWwuCiAgICAgICAgICAgICAvLyAzLiBSdW4gdGhlIHJlc291cmNlIGZl
dGNoIGFsZ29yaXRobSB3aXRoIHRoZSBhc3NpZ25lZCBtZWRpYSBwcm92aWRlciBvYmplY3QuCi0g
ICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoCisgICAgICAgICAgICBzdGQ6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICAg
ICAgICAgICAgICBbdGhpc10oUmVmUHRyPE1lZGlhU3RyZWFtPiBzdHJlYW0pIHsgbV9tZWRpYVN0
cmVhbVNyY09iamVjdCA9IHN0cmVhbTsgfSwKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcg
QEAgdXNpbmcgQ3VlSW50ZXJ2YWwgPSBDdWVJbnRlcnZhbFRyZWU6OkludAogdXNpbmcgQ3VlTGlz
dCA9IFZlY3RvcjxDdWVJbnRlcnZhbD47CiAjZW5kaWYKIAotdXNpbmcgTWVkaWFQcm92aWRlciA9
IHN0ZDo6b3B0aW9uYWw8VmFyaWFudDwKK3VzaW5nIE1lZGlhUHJvdmlkZXIgPSBzdGQ6Om9wdGlv
bmFsPHN0ZDo6dmFyaWFudDwKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbT4sCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bnNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uc0NvbGxlY3Rpb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0SXRlbSh1bnNpZ25lZCBp
bmRleCwgSFRNTE9wdGlvbkVsZW1lbnQqKTsKICAgICAKLSAgICB1c2luZyBPcHRpb25Pck9wdEdy
b3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgUmVmUHRyPEhU
TUxPcHRHcm91cEVsZW1lbnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVudE9ySW50ID0gVmFyaWFu
dDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OworICAgIHVzaW5nIE9wdGlvbk9yT3B0R3JvdXBF
bGVtZW50ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxI
VE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNpbmcgSFRNTEVsZW1lbnRPckludCA9IHN0ZDo6
dmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3VwRWxlbWVudCYsIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8SFRNTEVsZW1lbnRPckludD4mIGJlZm9yZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZW1vdmUoaW50IGluZGV4KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw4ICs1MSw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgdXNlc01lbnVMaXN0KCkgY29uc3Q7CiAKLSAgICB1c2luZyBP
cHRpb25Pck9wdEdyb3VwRWxlbWVudCA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxPcHRpb25FbGVtZW50
PiwgUmVmUHRyPEhUTUxPcHRHcm91cEVsZW1lbnQ+PjsKLSAgICB1c2luZyBIVE1MRWxlbWVudE9y
SW50ID0gVmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OworICAgIHVzaW5nIE9wdGlv
bk9yT3B0R3JvdXBFbGVtZW50ID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MT3B0aW9uRWxlbWVu
dD4sIFJlZlB0cjxIVE1MT3B0R3JvdXBFbGVtZW50Pj47CisgICAgdXNpbmcgSFRNTEVsZW1lbnRP
ckludCA9IHN0ZDo6dmFyaWFudDxSZWZQdHI8SFRNTEVsZW1lbnQ+LCBpbnQ+OwogICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IGFkZChjb25zdCBPcHRpb25Pck9wdEdyb3VwRWxl
bWVudCYsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8SFRNTEVsZW1lbnRPckludD4mIGJlZm9yZSk7CiAK
ICAgICB1c2luZyBOb2RlOjpyZW1vdmU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1VSTFNl
YXJjaFBhcmFtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9VUkxTZWFy
Y2hQYXJhbXMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1VS
TFNlYXJjaFBhcmFtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDIyICs0MSwyNSBAQCBVUkxT
ZWFyY2hQYXJhbXM6OlVSTFNlYXJjaFBhcmFtcyhjb25zdCBWCiB7CiB9CiAKLUV4Y2VwdGlvbk9y
PFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBVUkxTZWFyY2hQYXJhbXM6OmNyZWF0ZShWYXJpYW50PFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0
cmluZz4+LCBTdHJpbmc+JiYgdmFyaWFudCkKK0V4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJh
bXM+PiBVUkxTZWFyY2hQYXJhbXM6OmNyZWF0ZShzdGQ6OnZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxT
dHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4sIFN0cmlu
Zz4mJiB2YXJpYW50KQogewotICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoWyZd
KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIHZlY3RvcikgLT4gRXhjZXB0aW9uT3I8UmVm
PFVSTFNlYXJjaFBhcmFtcz4+IHsKLSAgICAgICAgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0
cmluZywgU3RyaW5nPj4gcGFpcnM7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHZl
Y3RvcikgewotICAgICAgICAgICAgaWYgKHBhaXIuc2l6ZSgpICE9IDIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgICAgICAgICAgcGFpcnMuYXBw
ZW5kKHtwYWlyWzBdLCBwYWlyWzFdfSk7CisgICAgcmV0dXJuIFdURjo6c3dpdGNoT24odmFyaWFu
dCwKKyAgICAgICAgW10oY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgdmVjdG9yKSAtPiBF
eGNlcHRpb25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4geworICAgICAgICAgICAgVmVjdG9yPFdU
Rjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4gcGFpcnM7CisgICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHBhaXIgOiB2ZWN0b3IpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFpci5z
aXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVF
cnJvciB9OworICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCh7cGFpclswXSwgcGFpclsxXX0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVVJMU2Vh
cmNoUGFyYW1zKFdURk1vdmUocGFpcnMpKSk7CisgICAgICAgIH0sCisgICAgICAgIFtdKGNvbnN0
IFZlY3RvcjxXVEY6OktleVZhbHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+JiBwYWlycykgLT4gRXhj
ZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFtcz4+IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhwYWlycykpOworICAgICAgICB9LAorICAgICAgICBb
XShjb25zdCBTdHJpbmcmIHN0cmluZykgLT4gRXhjZXB0aW9uT3I8UmVmPFVSTFNlYXJjaFBhcmFt
cz4+IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhz
dHJpbmcsIG51bGxwdHIpKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBVUkxTZWFyY2hQYXJhbXMoV1RGTW92ZShwYWlycykpKTsKLSAgICB9LCBbJl0oY29uc3QgVmVj
dG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4mIHBhaXJzKSB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBhcmFtcyhwYWlycykpOwotICAgIH0sIFsm
XShjb25zdCBTdHJpbmcmIHN0cmluZykgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBV
UkxTZWFyY2hQYXJhbXMoc3RyaW5nLCBudWxscHRyKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIFdU
Rjo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CisgICAgKTsKIH0KIAogU3RyaW5nIFVSTFNlYXJj
aFBhcmFtczo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvVVJMU2VhcmNoUGFyYW1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9VUkxTZWFyY2hQYXJhbXMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9VUkxTZWFyY2hQYXJhbXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFVSTFNlYXJjaFBhcmFtcyA6IHB1YmxpYyBS
ZWZDb3VudGVkPFVSTFNlYXJjaFBhcmFtcz4gewogcHVibGljOgotICAgIHN0YXRpYyBFeGNlcHRp
b25PcjxSZWY8VVJMU2VhcmNoUGFyYW1zPj4gY3JlYXRlKFZhcmlhbnQ8VmVjdG9yPFZlY3RvcjxT
dHJpbmc+PiwgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgU3RyaW5nPj4sIFN0cmlu
Zz4mJik7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxVUkxTZWFyY2hQYXJhbXM+PiBjcmVh
dGUoc3RkOjp2YXJpYW50PFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4sIFZlY3RvcjxXVEY6OktleVZh
bHVlUGFpcjxTdHJpbmcsIFN0cmluZz4+LCBTdHJpbmc+JiYpOwogICAgIHN0YXRpYyBSZWY8VVJM
U2VhcmNoUGFyYW1zPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIERPTVVSTCogYXNzb2Np
YXRlZFVSTCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVSTFNlYXJjaFBh
cmFtcyhzdHJpbmcsIGFzc29jaWF0ZWRVUkwpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAy
MjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBAQCBjbGFzcyBUZXh0TWV0cmlj
czsKIHN0cnVjdCBET01NYXRyaXhJbml0OwogCiAjaWYgRU5BQkxFKFZJREVPKQotdXNpbmcgQ2Fu
dmFzSW1hZ2VTb3VyY2UgPSBWYXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRy
PEhUTUxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKK3VzaW5nIENh
bnZhc0ltYWdlU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Piwg
UmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKICNl
bHNlCi11c2luZyBDYW52YXNJbWFnZVNvdXJjZSA9IFZhcmlhbnQ8UmVmUHRyPEhUTUxJbWFnZUVs
ZW1lbnQ+LCBSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+PjsKK3VzaW5nIENhbnZhc0ltYWdlU291
cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxD
YW52YXNFbGVtZW50Pj47CiAjZW5kaWYKIAogY2xhc3MgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1YmxpYyBDYW52YXNQYXRo
IHsKQEAgLTE3Miw3ICsxNzIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENvbXBvc2l0ZU9w
ZXJhdGlvbihjb25zdCBTdHJpbmcmKTsKIAotICAgIHVzaW5nIFN0eWxlID0gVmFyaWFudDxTdHJp
bmcsIFJlZlB0cjxDYW52YXNHcmFkaWVudD4sIFJlZlB0cjxDYW52YXNQYXR0ZXJuPj47CisgICAg
dXNpbmcgU3R5bGUgPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+
LCBSZWZQdHI8Q2FudmFzUGF0dGVybj4+OwogICAgIFN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHlsZSYmKTsKICAgICBTdHlsZSBmaWxsU3R5bGUo
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5j
cHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDEyICsxMzUsMTIgQEAgQ2FudmFzU3R5
bGUgQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbgogCiBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5bGUpKQotICAgICAgICByZXR1cm4gV1RGOjpnZXQ8
Q29sb3I+KG1fc3R5bGUpID09IFdURjo6Z2V0PENvbG9yPihvdGhlci5tX3N0eWxlKTsKKyAgICBp
ZiAoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpob2xkc19h
bHRlcm5hdGl2ZTxDb2xvcj4ob3RoZXIubV9zdHlsZSkpCisgICAgICAgIHJldHVybiBzdGQ6Omdl
dDxDb2xvcj4obV9zdHlsZSkgPT0gc3RkOjpnZXQ8Q29sb3I+KG90aGVyLm1fc3R5bGUpOwogCi0g
ICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKSkgewotICAgICAg
ICBhdXRvJiBhID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7Ci0gICAgICAgIGF1dG8m
IGIgPSBXVEY6OmdldDxDTVlLQUNvbG9yPihvdGhlci5tX3N0eWxlKTsKKyAgICBpZiAoc3RkOjpo
b2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSAmJiBzdGQ6OmhvbGRzX2FsdGVy
bmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpKSB7CisgICAgICAgIGF1dG8mIGEgPSBz
dGQ6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKTsKKyAgICAgICAgYXV0byYgYiA9IHN0ZDo6Z2V0
PENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpOwogICAgICAgICByZXR1cm4gYS5jID09IGIuYyAm
JiBhLm0gPT0gYi5tICYmIGEueSA9PSBiLnkgJiYgYS5rID09IGIuayAmJiBhLmEgPT0gYi5hOwog
ICAgIH0KIApAQCAtMTQ5LDE1ICsxNDksMTUgQEAgYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFs
ZW50Q29sb3IoY29ucwogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBKGZsb2F0
IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0PENvbG9yPihtX3N0
eWxlKSA9PSBDb2xvciB7IHIsIGcsIGIsIGEgfTsKKyAgICByZXR1cm4gc3RkOjpob2xkc19hbHRl
cm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgc3RkOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IENv
bG9yIHsgciwgZywgYiwgYSB9OwogfQogCiBib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRD
TVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKSBjb25zdAog
ewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSkK
KyAgICBpZiAoIXN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8mIGNoYW5uZWxzID0gV1RGOjpnZXQ8Q01Z
S0FDb2xvcj4obV9zdHlsZSk7CisgICAgYXV0byYgY2hhbm5lbHMgPSBzdGQ6OmdldDxDTVlLQUNv
bG9yPihtX3N0eWxlKTsKICAgICByZXR1cm4gYyA9PSBjaGFubmVscy5jICYmIG0gPT0gY2hhbm5l
bHMubSAmJiB5ID09IGNoYW5uZWxzLnkgJiYgayA9PSBjaGFubmVscy5rICYmIGEgPT0gY2hhbm5l
bHMuYTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5o
CShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMCArNTAsMTAgQEAgcHVibGljOgogICAgIHN0
YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgY29sb3IpOwog
ICAgIHN0YXRpYyBDYW52YXNTdHlsZSBjcmVhdGVGcm9tU3RyaW5nV2l0aE92ZXJyaWRlQWxwaGEo
Y29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpOwogCi0gICAgYm9vbCBpc1ZhbGlkKCkg
Y29uc3QgeyByZXR1cm4gIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7
IH0KLSAgICBib29sIGlzQ3VycmVudENvbG9yKCkgY29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1fc3R5bGUpOyB9Ci0gICAgYm9vbCBoYXNPdmVycmlk
ZUFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNDdXJyZW50Q29sb3IoKSAmJiBXVEY6OmdldDxDdXJy
ZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxwaGE7IH0KLSAgICBmbG9hdCBvdmVycmlkZUFs
cGhhKCkgY29uc3QgeyByZXR1cm4gV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVy
cmlkZUFscGhhLnZhbHVlKCk7IH0KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiAh
c3RkOjpob2xkc19hbHRlcm5hdGl2ZTxJbnZhbGlkPihtX3N0eWxlKTsgfQorICAgIGJvb2wgaXND
dXJyZW50Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPEN1cnJl
bnRDb2xvcj4obV9zdHlsZSk7IH0KKyAgICBib29sIGhhc092ZXJyaWRlQWxwaGEoKSBjb25zdCB7
IHJldHVybiBpc0N1cnJlbnRDb2xvcigpICYmIHN0ZDo6Z2V0PEN1cnJlbnRDb2xvcj4obV9zdHls
ZSkub3ZlcnJpZGVBbHBoYTsgfQorICAgIGZsb2F0IG92ZXJyaWRlQWxwaGEoKSBjb25zdCB7IHJl
dHVybiBzdGQ6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxwaGEudmFsdWUo
KTsgfQogCiAgICAgU3RyaW5nIGNvbG9yKCkgY29uc3Q7CiAgICAgQ2FudmFzR3JhZGllbnQqIGNh
bnZhc0dyYWRpZW50KCkgY29uc3Q7CkBAIC05MSw3ICs5MSw3IEBAIHByaXZhdGU6CiAKICAgICBD
YW52YXNTdHlsZShDdXJyZW50Q29sb3IpOwogCi0gICAgVmFyaWFudDxJbnZhbGlkLCBDb2xvciwg
Q01ZS0FDb2xvciwgUmVmUHRyPENhbnZhc0dyYWRpZW50PiwgUmVmUHRyPENhbnZhc1BhdHRlcm4+
LCBDdXJyZW50Q29sb3I+IG1fc3R5bGU7CisgICAgc3RkOjp2YXJpYW50PEludmFsaWQsIENvbG9y
LCBDTVlLQUNvbG9yLCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+LCBSZWZQdHI8Q2FudmFzUGF0dGVy
bj4sIEN1cnJlbnRDb2xvcj4gbV9zdHlsZTsKIH07CiAKIENvbG9yIGN1cnJlbnRDb2xvcihIVE1M
Q2FudmFzRWxlbWVudCopOwpAQCAtMTA0LDIxICsxMDQsMjEgQEAgaW5saW5lIENhbnZhc1N0eWxl
OjpDYW52YXNTdHlsZSgpCiAKIGlubGluZSBDYW52YXNHcmFkaWVudCogQ2FudmFzU3R5bGU6OmNh
bnZhc0dyYWRpZW50KCkgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4obV9zdHlsZSkpCisgICAgaWYgKCFzdGQ6OmhvbGRzX2Fs
dGVybmF0aXZlPFJlZlB0cjxDYW52YXNHcmFkaWVudD4+KG1fc3R5bGUpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGOjpnZXQ8UmVmUHRyPENhbnZhc0dyYWRpZW50Pj4o
bV9zdHlsZSkuZ2V0KCk7CisgICAgcmV0dXJuIHN0ZDo6Z2V0PFJlZlB0cjxDYW52YXNHcmFkaWVu
dD4+KG1fc3R5bGUpLmdldCgpOwogfQogCiBpbmxpbmUgQ2FudmFzUGF0dGVybiogQ2FudmFzU3R5
bGU6OmNhbnZhc1BhdHRlcm4oKSBjb25zdAogewotICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1fc3R5bGUpKQorICAgIGlmICghc3RkOjpob2xk
c19hbHRlcm5hdGl2ZTxSZWZQdHI8Q2FudmFzUGF0dGVybj4+KG1fc3R5bGUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gV1RGOjpnZXQ8UmVmUHRyPENhbnZhc1BhdHRlcm4+
PihtX3N0eWxlKS5nZXQoKTsKKyAgICByZXR1cm4gc3RkOjpnZXQ8UmVmUHRyPENhbnZhc1BhdHRl
cm4+PihtX3N0eWxlKS5nZXQoKTsKIH0KIAogaW5saW5lIFN0cmluZyBDYW52YXNTdHlsZTo6Y29s
b3IoKSBjb25zdAogewotICAgIGF1dG8mIGNvbG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
b2xvcj4obV9zdHlsZSkgPyBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlL
QUNvbG9yPihtX3N0eWxlKS5jb2xvcjsKKyAgICBhdXRvJiBjb2xvciA9IHN0ZDo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpID8gc3RkOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogc3Rk
OjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29sb3I7CiAgICAgcmV0dXJuIGNvbG9yLnNlcmlh
bGl6ZWQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHRleEltYWdlM0QoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RzaXplaSBkZXB0aCwgR0MzRGludCBib3JkZXIs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4m
JiBwaXhlbHMpOwogCiAgICAgdm9pZCB0ZXhTdWJJbWFnZTNEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgem9m
ZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEc2l6ZWkgZGVwdGgs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4m
JiBwaXhlbHMpOwotICAgIHVzaW5nIFRleEltYWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0
cjxJbWFnZURhdGE+LCBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFz
RWxlbWVudD4sIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VT
b3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VF
bGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1l
bnQ+PjsKICAgICB2b2lkIHRleFN1YkltYWdlM0QoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB6b2Zmc2V0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIFRleEltYWdlU291cmNlJiYpOwogCiAgICAg
dm9pZCBjb3B5VGV4U3ViSW1hZ2UzRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHpvZmZzZXQsIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBbnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFueS5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFueS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywyOCArMjcsMjEgQEAKIAogI2lmIEVOQUJMRShXRUJHTCkKIAorI2luY2x1ZGUgIldlYkdMQnVm
ZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUg
IldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKICNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJB
cnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDMyQXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lL1VpbnQ4QXJyYXkuaD4KIAotbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBFeGVjU3RhdGU7Ci1jbGFzcyBKU1ZhbHVlOwotfQotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotY2xhc3MgV2ViR0xC
dWZmZXI7Ci1jbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotY2xhc3MgV2ViR0xQcm9ncmFtOwotY2xh
c3MgV2ViR0xSZW5kZXJidWZmZXI7Ci1jbGFzcyBXZWJHTFRleHR1cmU7Ci1jbGFzcyBXZWJHTFZl
cnRleEFycmF5T2JqZWN0OwotY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotdXNp
bmcgV2ViR0xBbnkgPSBWYXJpYW50PAordXNpbmcgV2ViR0xBbnkgPSBzdGQ6OnZhcmlhbnQ8CiAg
ICAgc3RkOjpudWxscHRyX3QsCiAgICAgYm9vbCwKICAgICBpbnQsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExODksNyArMTE4
OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGEKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0byYgZGF0
YSkgeworICAgIHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYgKCFidWZm
ZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMt
PnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTIx
OCw3ICsxMjE4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdQog
ICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV1RGOjp2aXNpdChbJl0oYXV0
byYgZGF0YSkgeworICAgIHN0ZDo6dmlzaXQoWyZdKGF1dG8mIGRhdGEpIHsKICAgICAgICAgaWYg
KCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgZGF0YS5nZXQoKSkpIHsKICAgICAgICAgICAgIHRoaXMtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJv
ZmZzZXQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjc2LDcgKzM2
NzYsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCCiAjZW5kaWYK
ICAgICApOwogCi0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgc291cmNlLnZhbHVlKCkp
OworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKIH0KIAog
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUFycmF5QnVmZmVyVHlwZShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHR5cGUsIHN0ZDo6b3B0aW9uYWw8SlND
OjpUeXBlZEFycmF5VHlwZT4gYXJyYXlUeXBlKQpAQCAtNDIxMiw3ICs0MjEyLDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogI2VuZGlmCiAgICAgKTsKIAotICAg
IHJldHVybiBXVEY6OnZpc2l0KHZpc2l0b3IsIHNvdXJjZS52YWx1ZSgpKTsKKyAgICByZXR1cm4g
c3RkOjp2aXNpdCh2aXNpdG9yLCBzb3VyY2UudmFsdWUoKSk7CiB9CiAKIFJlZlB0cjxJbWFnZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1h
Z2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNyAr
MTMzLDcgQEAgcHVibGljOgogICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdD
M0RlbnVtIGRmYWN0b3IpOwogICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3Jj
UkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBo
YSk7CiAKLSAgICB1c2luZyBCdWZmZXJEYXRhU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxB
cnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+PjsKKyAgICB1c2luZyBCdWZmZXJE
YXRhU291cmNlID0gc3RkOjp2YXJpYW50PFJlZlB0cjxBcnJheUJ1ZmZlcj4sIFJlZlB0cjxBcnJh
eUJ1ZmZlclZpZXc+PjsKICAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25n
IGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpOwogICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51
bSB0YXJnZXQsIHN0ZDo6b3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJiwgR0MzRGVudW0gdXNh
Z2UpOwogICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBv
ZmZzZXQsIHN0ZDo6b3B0aW9uYWw8QnVmZmVyRGF0YVNvdXJjZT4mJik7CkBAIC0yNDcsOSArMjQ3
LDkgQEAgcHVibGljOgogICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+JiYpOwogCiAjaWYgRU5BQkxFKFZJREVPKQotICAg
IHVzaW5nIFRleEltYWdlU291cmNlID0gV1RGOjpWYXJpYW50PFJlZlB0cjxJbWFnZURhdGE+LCBS
ZWZQdHI8SFRNTEltYWdlRWxlbWVudD4sIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4sIFJlZlB0
cjxIVE1MVmlkZW9FbGVtZW50Pj47CisgICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZh
cmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4sIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRy
PEhUTUxDYW52YXNFbGVtZW50PiwgUmVmUHRyPEhUTUxWaWRlb0VsZW1lbnQ+PjsKICNlbHNlCi0g
ICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBXVEY6OlZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4s
IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47Cisg
ICAgdXNpbmcgVGV4SW1hZ2VTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8UmVmUHRyPEltYWdlRGF0YT4s
IFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiwgUmVmUHRyPEhUTUxDYW52YXNFbGVtZW50Pj47CiAj
ZW5kaWYKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBzdGQ6Om9wdGlvbmFsPFRleEltYWdlU291cmNlPik7CkBAIC0yNjMs
NyArMjYzLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUeXBlZEFycmF5LCBjbGFz
cyBEYXRhVHlwZT4KICAgICBjbGFzcyBUeXBlZExpc3QgewogICAgIHB1YmxpYzoKLSAgICAgICAg
dXNpbmcgVmFyaWFudFR5cGUgPSBWYXJpYW50PFJlZlB0cjxUeXBlZEFycmF5PiwgVmVjdG9yPERh
dGFUeXBlPj47CisgICAgICAgIHVzaW5nIFZhcmlhbnRUeXBlID0gc3RkOjp2YXJpYW50PFJlZlB0
cjxUeXBlZEFycmF5PiwgVmVjdG9yPERhdGFUeXBlPj47CiAKICAgICAgICAgVHlwZWRMaXN0KFZh
cmlhbnRUeXBlJiYgdmFyaWFudCkKICAgICAgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUodmFy
aWFudCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RyYWNrRXZlbnQuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UcmFja0V2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBUcmFja0V2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgV1RGTW92
ZSh0cmFjaykpKTsKICAgICB9CiAKLSAgICB1c2luZyBUcmFja0V2ZW50VHJhY2sgPSBWYXJpYW50
PFJlZlB0cjxWaWRlb1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNr
Pj47CisgICAgdXNpbmcgVHJhY2tFdmVudFRyYWNrID0gc3RkOjp2YXJpYW50PFJlZlB0cjxWaWRl
b1RyYWNrPiwgUmVmUHRyPEF1ZGlvVHJhY2s+LCBSZWZQdHI8VGV4dFRyYWNrPj47CiAKICAgICBz
dHJ1Y3QgSW5pdCA6IHB1YmxpYyBFdmVudEluaXQgewogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRy
YWNrRXZlbnRUcmFjaz4gdHJhY2s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDYW52YXMoSFRNTENhbnZhc0VsZW1lbnQm
LCBjb25zdCBTdHJpbmcmIGNzc0NhbnZhc05hbWUpOwogCi0gICAgdHlwZWRlZiBWYXJpYW50PAor
ICAgIHR5cGVkZWYgc3RkOjp2YXJpYW50PAogICAgICAgICBDYW52YXNHcmFkaWVudCosCiAgICAg
ICAgIENhbnZhc1BhdHRlcm4qLAogICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCosCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUgfHwgIVdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8UmVmUHRyPElEQkRhdGFiYXNlPj4ocmVzdWx0VmFsdWUudmFs
dWUoKSkpIHsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCAhc3RkOjpob2xkc19hbHRlcm5h
dGl2ZTxSZWZQdHI8SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAg
ICAgICAgbV9leGVjdXRhYmxlV2l0aERhdGFiYXNlLT5yZXF1ZXN0Q2FsbGJhY2soKS5zZW5kRmFp
bHVyZSgiVW5leHBlY3RlZCByZXN1bHQgdHlwZS4iKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGF1dG8gZGF0YWJhc2VSZXN1bHQgPSBXVEY6OmdldDxSZWZQdHI8
SURCRGF0YWJhc2U+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgYXV0byBkYXRhYmFz
ZVJlc3VsdCA9IHN0ZDo6Z2V0PFJlZlB0cjxJREJEYXRhYmFzZT4+KHJlc3VsdFZhbHVlLnZhbHVl
KCkpOwogICAgICAgICBtX2V4ZWN1dGFibGVXaXRoRGF0YWJhc2UtPmV4ZWN1dGUoKmRhdGFiYXNl
UmVzdWx0KTsKICAgICAgICAgZGF0YWJhc2VSZXN1bHQtPmNsb3NlKCk7CiAgICAgfQpAQCAtMTgy
LDcgKzE4Miw3IEBAIHN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXkKICAg
ICAgICAga2V5UGF0aC0+c2V0QXJyYXkoV1RGTW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4g
a2V5UGF0aDsKICAgICB9KTsKLSAgICByZXR1cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBpZGJLZXlQ
YXRoLnZhbHVlKCkpOworICAgIHJldHVybiBzdGQ6OnZpc2l0KHZpc2l0b3IsIGlkYktleVBhdGgu
dmFsdWUoKSk7CiB9CiAKIHN0YXRpYyBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9u
Rm9yRGF0YWJhc2UoSURCRGF0YWJhc2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSwgSURCVHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBJREJUcmFuc2FjdGlvbk1vZGU6
OlJlYWRvbmx5KQpAQCAtMzczLDEyICszNzMsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1
ZSgpOwotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8ICFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgeworICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlIHx8ICFzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPFJlZlB0cjxJREJDdXJzb3I+
PihyZXN1bHRWYWx1ZS52YWx1ZSgpKSkgewogICAgICAgICAgICAgZW5kKGZhbHNlKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY3Vyc29yID0gV1RGOjpn
ZXQ8UmVmUHRyPElEQkN1cnNvcj4+KHJlc3VsdFZhbHVlLnZhbHVlKCkpOworICAgICAgICBhdXRv
IGN1cnNvciA9IHN0ZDo6Z2V0PFJlZlB0cjxJREJDdXJzb3I+PihyZXN1bHRWYWx1ZS52YWx1ZSgp
KTsKIAogICAgICAgICBpZiAobV9za2lwQ291bnQpIHsKICAgICAgICAgICAgIGlmIChjdXJzb3It
PmFkdmFuY2UobV9za2lwQ291bnQpLmhhc0V4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvSW50ZXJzZWN0aW9uT2JzZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCwxMCArNDAsMTAgQEAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXI6OkludGVyc2VjdGlv
bk9ic2VydgogICAgICwgbV9yb290TWFyZ2luKFdURk1vdmUoaW5pdC5yb290TWFyZ2luKSkKICAg
ICAsIG1fY2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpCiB7Ci0gICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpCi0gICAgICAgIG1fdGhyZXNob2xk
cy5hcHBlbmQoV1RGOjpnZXQ8ZG91YmxlPihpbml0LnRocmVzaG9sZCkpOworICAgIGlmIChzdGQ6
OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKQorICAgICAgICBtX3Ro
cmVzaG9sZHMuYXBwZW5kKHN0ZDo6Z2V0PGRvdWJsZT4oaW5pdC50aHJlc2hvbGQpKTsKICAgICBl
bHNlCi0gICAgICAgIG1fdGhyZXNob2xkcyA9IFdURjo6Z2V0PFZlY3Rvcjxkb3VibGU+PihXVEZN
b3ZlKGluaXQudGhyZXNob2xkKSk7CisgICAgICAgIG1fdGhyZXNob2xkcyA9IHN0ZDo6Z2V0PFZl
Y3Rvcjxkb3VibGU+PihXVEZNb3ZlKGluaXQudGhyZXNob2xkKSk7CiB9CiAKIHZvaWQgSW50ZXJz
ZWN0aW9uT2JzZXJ2ZXI6Om9ic2VydmUoRWxlbWVudCYpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9JbnRlcnNlY3Rpb25PYnNlcnZlci5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ludGVyc2VjdGlvbk9ic2VydmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQy
LDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBJbml0IHsKICAgICAgICAgUmVmUHRyPEVs
ZW1lbnQ+IHJvb3Q7CiAgICAgICAgIFN0cmluZyByb290TWFyZ2luOwotICAgICAgICBWYXJpYW50
PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+IHRocmVzaG9sZDsKKyAgICAgICAgc3RkOjp2YXJpYW50
PGRvdWJsZSwgVmVjdG9yPGRvdWJsZT4+IHRocmVzaG9sZDsKICAgICB9OwogCiAgICAgc3RhdGlj
IFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZlcj4gY3JlYXRlKFJlZjxJbnRlcnNlY3Rpb25PYnNlcnZl
ckNhbGxiYWNrPiYmIGNhbGxiYWNrLCBJbml0JiYgaW5pdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNp
b24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBnaXZlbiBmcmFtZSB2aWV3IGhhcyBi
ZWVuIGxhaWQgb3V0LgogICAgIHZpcnR1YWwgdm9pZCBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZy
YW1lVmlldyYpIHsgfQogCi0gICAgdXNpbmcgTGF5b3V0Vmlld3BvcnRPcmlnaW5Pck92ZXJyaWRl
UmVjdCA9IFdURjo6VmFyaWFudDxzdGQ6Om9wdGlvbmFsPEZsb2F0UG9pbnQ+LCBzdGQ6Om9wdGlv
bmFsPEZsb2F0UmVjdD4+OworICAgIHVzaW5nIExheW91dFZpZXdwb3J0T3JpZ2luT3JPdmVycmlk
ZVJlY3QgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpvcHRpb25hbDxGbG9hdFBvaW50Piwgc3RkOjpvcHRp
b25hbDxGbG9hdFJlY3Q+PjsKICAgICB2aXJ0dWFsIHZvaWQgcmVjb25jaWxlU2Nyb2xsaW5nU3Rh
dGUoRnJhbWVWaWV3JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IExheW91dFZpZXdwb3J0T3Jp
Z2luT3JPdmVycmlkZVJlY3QmLCBib29sIC8qIHByb2dyYW1tYXRpY1Njcm9sbCAqLywgVmlld3Bv
cnRSZWN0U3RhYmlsaXR5LCBTY3JvbGxpbmdMYXllclBvc2l0aW9uQWN0aW9uKSB7IH0KIAogICAg
IC8vIFNob3VsZCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIHNsb3cgcmVwYWludCBvYmplY3RzIGNv
dW50ZXIgY2hhbmdlcyBiZXR3ZWVuIHplcm8gYW5kIG9uZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA4LDcg
KzIwOCw3IEBAIGNvbnN0IGNoYXIqIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnQ6OmQKICNlbmRp
ZgogICAgICAgICBbXShjb25zdCBNYXBwZWRGaWxlRGF0YSYgZGF0YSkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5kYXRhKCkpOyB9CiAgICAgKTsKLSAgICByZXR1
cm4gV1RGOjp2aXNpdCh2aXNpdG9yLCBtX2ltbXV0YWJsZURhdGEpOworICAgIHJldHVybiBzdGQ6
OnZpc2l0KHZpc2l0b3IsIG1faW1tdXRhYmxlRGF0YSk7CiB9CiAKICNpZiAhVVNFKENGKQpAQCAt
MjE5LDE3ICsyMTksMjQgQEAgdm9pZCBTaGFyZWRCdWZmZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRT
bwogCiBzaXplX3QgU2hhcmVkQnVmZmVyOjpEYXRhU2VnbWVudDo6c2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgYXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcigKLSAgICAgICAgW10oY29uc3QgVmVj
dG9yPGNoYXI+JiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfSwKKyAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX2ltbXV0YWJsZURhdGEsCisgICAgICAgIFtdKGNvbnN0IFZlY3RvcjxjaGFy
PiYgZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUoKTsKKyAg
ICAgICAgfSwKICNpZiBVU0UoQ0YpCi0gICAgICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFS
ZWY+JiBkYXRhKSB7IHJldHVybiBDRkRhdGFHZXRMZW5ndGgoZGF0YS5nZXQoKSk7IH0sCisgICAg
ICAgIFtdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JiBkYXRhKSAtPiBzaXplX3QgeworICAg
ICAgICAgICAgcmV0dXJuIENGRGF0YUdldExlbmd0aChkYXRhLmdldCgpKTsKKyAgICAgICAgfSwK
ICNlbmRpZgogI2lmIFVTRShTT1VQKQotICAgICAgICBbXShjb25zdCBHVW5pcXVlUHRyPFNvdXBC
dWZmZXI+JiBkYXRhKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPmxlbmd0aCk7
IH0sCisgICAgICAgIFtdKGNvbnN0IEdVbmlxdWVQdHI8U291cEJ1ZmZlcj4mIGRhdGEpIC0+IHNp
emVfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5sZW5n
dGgpOworICAgICAgICB9LAogI2VuZGlmCi0gICAgICAgIFtdKGNvbnN0IE1hcHBlZEZpbGVEYXRh
JiBkYXRhKSB7IHJldHVybiBkYXRhLnNpemUoKTsgfQorICAgICAgICBbXShjb25zdCBNYXBwZWRG
aWxlRGF0YSYgZGF0YSkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnNpemUo
KTsKKyAgICAgICAgfQogICAgICk7Ci0gICAgcmV0dXJuIFdURjo6dmlzaXQodmlzaXRvciwgbV9p
bW11dGFibGVEYXRhKTsKIH0KIAogU2hhcmVkQnVmZmVyRGF0YVZpZXc6OlNoYXJlZEJ1ZmZlckRh
dGFWaWV3KFJlZjxTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50PiYmIHNlZ21lbnQsIHNpemVfdCBw
b3NpdGlvbldpdGhpblNlZ21lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRC
dWZmZXIuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hh
cmVkQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiwxOSArMTE2LDI4IEBAIHB1YmxpYzoK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIERhdGFTZWdtZW50KFZlY3RvcjxjaGFyPiYmIGRhdGEp
Ci0gICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKSB7IH0KKyAgICAg
ICAgICAgIDogbV9pbW11dGFibGVEYXRhKFdURk1vdmUoZGF0YSkpCisgICAgICAgIHsKKyAgICAg
ICAgfQogI2lmIFVTRShDRikKICAgICAgICAgRGF0YVNlZ21lbnQoUmV0YWluUHRyPENGRGF0YVJl
Zj4mJiBkYXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEoV1RGTW92ZShkYXRhKSkg
eyB9CisgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShXVEZNb3ZlKGRhdGEpKQorICAgICAg
ICB7CisgICAgICAgIH0KICNlbmRpZgogI2lmIFVTRShTT1VQKQogICAgICAgICBEYXRhU2VnbWVu
dChHVW5pcXVlUHRyPFNvdXBCdWZmZXI+JiYgZGF0YSkKLSAgICAgICAgICAgIDogbV9pbW11dGFi
bGVEYXRhKFdURk1vdmUoZGF0YSkpIHsgfQorICAgICAgICAgICAgOiBtX2ltbXV0YWJsZURhdGEo
V1RGTW92ZShkYXRhKSkKKyAgICAgICAgeworICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgRGF0
YVNlZ21lbnQoTWFwcGVkRmlsZURhdGEmJiBkYXRhKQotICAgICAgICAgICAgOiBtX2ltbXV0YWJs
ZURhdGEoV1RGTW92ZShkYXRhKSkgeyB9CisgICAgICAgICAgICA6IG1faW1tdXRhYmxlRGF0YShX
VEZNb3ZlKGRhdGEpKQorICAgICAgICB7CisgICAgICAgIH0KIAotICAgICAgICBWYXJpYW50PFZl
Y3RvcjxjaGFyPiwKKyAgICAgICAgc3RkOjp2YXJpYW50PAorICAgICAgICAgICAgVmVjdG9yPGNo
YXI+LAogI2lmIFVTRShDRikKICAgICAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+LAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0IFBsYXRmb3JtRGVzY3JpcHRpb24gewogICAgICAgICBO
b25lLAogICAgICAgICBDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlLAogICAgIH0gdHlwZTsKLSAgICBW
YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24q
PiBkZXNjcmlwdGlvbjsKKyAgICBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIGNvbnN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbio+IGRlc2NyaXB0aW9uOwogfTsKIAogY2xhc3MgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShyZXZp
c2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgIT0gUGxh
dGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICByZXR1cm4gb3BlcmF0b3I9PSgqV1RGOjpnZXQ8Y29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4ob3RoZXIucGxhdGZvcm1EZXNjcmlwdGlvbigp
LmRlc2NyaXB0aW9uKSk7CisgICAgICAgIHJldHVybiBvcGVyYXRvcj09KCpzdGQ6OmdldDxjb25z
dCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9u
KCkuZGVzY3JpcHRpb24pKTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsg
fQogCkBAIC0xMDIsNyArMTAyLDcgQEAgYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmRl
Y29kZShEZQogaW5saW5lIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB0b0NBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKIHsK
ICAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLnR5cGUgPT0gUGxh
dGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0gICAgcmV0dXJuIENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9u
KSk7CisgICAgcmV0dXJuIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbigqc3RkOjpnZXQ8Y29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlw
dGlvbigpLmRlc2NyaXB0aW9uKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jZi9TaGFyZWRCdWZmZXJDRi5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNyBAQCBTaGFyZWRCdWZmZXI6OlNoYXJlZEJ1ZmZlcihDRkRhdGFSZWYgZGF0
CiBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBTaGFyZWRCdWZmZXI6OmNyZWF0ZUNGRGF0YSgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fc2VnbWVudHMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKGF1dG8g
ZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PihtX3NlZ21lbnRzWzBdLnNl
Z21lbnQtPm1faW1tdXRhYmxlRGF0YSkpCisgICAgICAgIGlmIChhdXRvIGRhdGEgPSBzdGQ6Omdl
dF9pZjxSZXRhaW5QdHI8Q0ZEYXRhUmVmPj4oJm1fc2VnbWVudHNbMF0uc2VnbWVudC0+bV9pbW11
dGFibGVEYXRhKSkKICAgICAgICAgICAgIHJldHVybiAqZGF0YTsKICAgICB9CiAgICAgcmV0dXJu
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUlu
dDgqPihkYXRhKCkpLCBzaXplKCkpKTsKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBTaGFyZWRCdWZm
ZXI6OmhpbnRNZW1vcnlOb3ROZWVkZWRTbwogewogICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkg
OiBtX3NlZ21lbnRzKSB7CiAgICAgICAgIGlmIChlbnRyeS5zZWdtZW50LT5oYXNPbmVSZWYoKSkg
ewotICAgICAgICAgICAgaWYgKGF1dG8gZGF0YSA9IFdURjo6Z2V0X2lmPFJldGFpblB0cjxDRkRh
dGFSZWY+PihlbnRyeS5zZWdtZW50LT5tX2ltbXV0YWJsZURhdGEpKQorICAgICAgICAgICAgaWYg
KGF1dG8gZGF0YSA9IHN0ZDo6Z2V0X2lmPFJldGFpblB0cjxDRkRhdGFSZWY+PigmZW50cnkuc2Vn
bWVudC0+bV9pbW11dGFibGVEYXRhKSkKICAgICAgICAgICAgICAgICBPU0FsbG9jYXRvcjo6aGlu
dE1lbW9yeU5vdE5lZWRlZFNvb24oY29uc3RfY2FzdDxVSW50OCo+KENGRGF0YUdldEJ5dGVQdHIo
ZGF0YS0+Z2V0KCkpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEtPmdldCgpKSk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
ZWNvZGluZ09wdGlvbnMuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDE3
ICs1NiwxNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTm9uZSgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgV1RGOjpnZXQ8RGVjb2RpbmdNb2RlPiht
X2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpOb25lOworICAgICAgICByZXR1
cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3RkOjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5n
TW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2RlOjpOb25lOwogICAgIH0KICAgICAKICAgICBib29s
IGlzU3luY2hyb25vdXMoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5n
TW9kZSgpICYmIFdURjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09
IERlY29kaW5nTW9kZTo6U3luY2hyb25vdXM7CisgICAgICAgIHJldHVybiBoYXNEZWNvZGluZ01v
ZGUoKSAmJiBzdGQ6OmdldDxEZWNvZGluZ01vZGU+KG1fZGVjb2RpbmdNb2RlT3JTaXplKSA9PSBE
ZWNvZGluZ01vZGU6OlN5bmNocm9ub3VzOwogICAgIH0KIAogICAgIGJvb2wgaXNBc3luY2hyb25v
dXMoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGhhc0RlY29kaW5nTW9kZSgpICYmIFdU
Rjo6Z2V0PERlY29kaW5nTW9kZT4obV9kZWNvZGluZ01vZGVPclNpemUpID09IERlY29kaW5nTW9k
ZTo6QXN5bmNocm9ub3VzOworICAgICAgICByZXR1cm4gaGFzRGVjb2RpbmdNb2RlKCkgJiYgc3Rk
OjpnZXQ8RGVjb2RpbmdNb2RlPihtX2RlY29kaW5nTW9kZU9yU2l6ZSkgPT0gRGVjb2RpbmdNb2Rl
OjpBc3luY2hyb25vdXM7CiAgICAgfQogCiAgICAgYm9vbCBpc0FzeW5jaHJvbm91c0NvbXBhdGli
bGVXaXRoKGNvbnN0IERlY29kaW5nT3B0aW9ucyYgZGVjb2RpbmdPcHRpb25zKSBjb25zdApAQCAt
MTEwLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICBzdGQ6Om9wdGlvbmFsPEludFNpemU+IHNpemVG
b3JEcmF3aW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChoYXNTaXplKCkpOwotICAg
ICAgICByZXR1cm4gV1RGOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXplPj4obV9kZWNvZGluZ01v
ZGVPclNpemUpOworICAgICAgICByZXR1cm4gc3RkOjpnZXQ8c3RkOjpvcHRpb25hbDxJbnRTaXpl
Pj4obV9kZWNvZGluZ01vZGVPclNpemUpOwogICAgIH0KIAogICAgIHN0YXRpYyBpbnQgbWF4RGlt
ZW5zaW9uKGNvbnN0IEludFNpemUmIHNpemUpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGJvb2wgaGFzKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KG1fZGVjb2RpbmdNb2RlT3JT
aXplKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6aG9sZHNfYWx0ZXJuYXRpdmU8VD4obV9kZWNvZGlu
Z01vZGVPclNpemUpOwogICAgIH0KIAogICAgIGJvb2wgaGFzRGVjb2RpbmdNb2RlKCkgY29uc3QK
QEAgLTE0MCw3ICsxNDAsNyBAQCBwcml2YXRlOgogICAgIC8vIC0gQXN5bmNocm9ub3VzICsgYW55
U2l6ZTogRGVjb2RpbmdNb2RlOjpBc3luY2hyb25vdXMKICAgICAvLyAtIEFzeW5jaHJvbm91cyAr
IGludHJpbnNpY1NpemU6IGFuIGVtcHR5IHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+CiAgICAgLy8g
LSBBc3luY2hyb25vdXMgKyBzaXplRm9yRHJhd2luZzogYSBub25lIGVtcHR5IHN0ZDo6b3B0aW9u
YWw8SW50U2l6ZT4+Ci0gICAgdXNpbmcgRGVjb2RpbmdNb2RlT3JTaXplID0gVmFyaWFudDxEZWNv
ZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6ZT4+OworICAgIHVzaW5nIERlY29kaW5nTW9k
ZU9yU2l6ZSA9IHN0ZDo6dmFyaWFudDxEZWNvZGluZ01vZGUsIHN0ZDo6b3B0aW9uYWw8SW50U2l6
ZT4+OwogICAgIERlY29kaW5nTW9kZU9yU2l6ZSBtX2RlY29kaW5nTW9kZU9yU2l6ZTsKIH07CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YXNjYWRlRm9udHMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3
LDcgKzE1Nyw3IEBAIHN0YXRpYyBGb250UmFuZ2VzIHJlYWxpemVOZXh0RmFsbGJhY2soY28KICAg
ICAgICAgICAgIHJldHVybiBmb250RmFtaWx5U3BlY2lmaWNhdGlvbi5mb250UmFuZ2VzKGRlc2Ny
aXB0aW9uKTsKICAgICAgICAgfSk7CiAgICAgICAgIGNvbnN0IGF1dG8mIGN1cnJlbnRGYW1pbHkg
PSBkZXNjcmlwdGlvbi5lZmZlY3RpdmVGYW1pbHlBdChpbmRleCsrKTsKLSAgICAgICAgYXV0byBy
YW5nZXMgPSBXVEY6OnZpc2l0KHZpc2l0b3IsIGN1cnJlbnRGYW1pbHkpOworICAgICAgICBhdXRv
IHJhbmdlcyA9IHN0ZDo6dmlzaXQodmlzaXRvciwgY3VycmVudEZhbWlseSk7CiAgICAgICAgIGlm
ICghcmFuZ2VzLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIHJhbmdlczsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3JpcHRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RGVzY3Jp
cHRpb24uaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udERlc2NyaXB0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
dHlwZWRlZiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwgRm9udAogCiAjZGVmaW5lIFVTRV9Q
TEFURk9STV9TWVNURU1fRkFMTEJBQ0tfTElTVCAoKFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVf
T1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEwMDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTMwMCkpCiAKLXR5cGVkZWYgVmFy
aWFudDxBdG9taWNTdHJpbmcsIEZvbnRGYW1pbHlQbGF0Zm9ybVNwZWNpZmljYXRpb24+IEZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uOwordHlwZWRlZiBzdGQ6OnZhcmlhbnQ8QXRvbWljU3RyaW5nLCBG
b250RmFtaWx5UGxhdGZvcm1TcGVjaWZpY2F0aW9uPiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbjsK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdEZvbnRGYW1pbHlOYW1lczsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291cmNlUHJvdmlkZXJB
VkZPYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9XZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQy5tbQkocmV2aXNpb24gMjIwOTU0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1dlYkF1ZGlvU291
cmNlUHJvdmlkZXJBVkZPYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAg
dm9pZCBXZWJBdWRpb1NvdXJjZVByb3ZpZGVyQVZGT2JqQzo6dW5wcgogdm9pZCBXZWJBdWRpb1Nv
dXJjZVByb3ZpZGVyQVZGT2JqQzo6YXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiwgY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgUGxhdGZvcm1BdWRpb0RhdGEmIGRh
dGEsIGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgZnJh
bWVDb3VudCkKIHsKICAgICBBU1NFUlQoZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigp
LnR5cGUgPT0gUGxhdGZvcm1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0cmVhbUJhc2ljVHlwZSk7Ci0g
ICAgYXV0byYgYmFzaWNEZXNjcmlwdGlvbiA9ICpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOworICAgIGF1dG8mIGJhc2ljRGVzY3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlv
bigpLmRlc2NyaXB0aW9uKTsKICAgICBpZiAoIW1faW5wdXREZXNjcmlwdGlvbiB8fCBtX2lucHV0
RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gYmFzaWNEZXNjcmlwdGlvbikKICAg
ICAgICAgcHJlcGFyZShiYXNpY0Rlc2NyaXB0aW9uKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTFZhbHVlLmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgU1FMVmFsdWUgPSBWYXJpYW50PHN0ZDo6
bnVsbHB0cl90LCBTdHJpbmcsIGRvdWJsZT47Cit1c2luZyBTUUxWYWx1ZSA9IHN0ZDo6dmFyaWFu
dDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBkb3VibGU+OwogCiB9OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50
Q29udGFpbgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IG1hcmtlcnMpIHsKLSAgICAgICAgYXV0byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8
RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOworICAg
ICAgICBhdXRvJiBkcmFnZ2VkQ29udGVudERhdGEgPSBzdGQ6OmdldDxEb2N1bWVudE1hcmtlcjo6
RHJhZ2dlZENvbnRlbnREYXRhPihtYXJrZXItPmRhdGEoKSk7CiAgICAgICAgIGlmIChkcmFnZ2Vk
Q29udGVudERhdGEudGFyZ2V0Tm9kZSA9PSAmZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvVHlwZUNvbnZlcnNpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVyc2lvbnMu
aAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9UeXBlQ29udmVy
c2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAg
IFN0cmluZyBzdHJpbmdWYWx1ZTsKICAgICAgICAgU3RyaW5nIHRyZWF0TnVsbEFzRW1wdHlTdHJp
bmdWYWx1ZTsKICAgICAgICAgVmVjdG9yPFN0cmluZz4gc2VxdWVuY2VWYWx1ZTsKLSAgICAgICAg
VmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJpbmc+LCBPdGhlckRpY3Rpb25hcnk+IHVu
aW9uVmFsdWU7CisgICAgICAgIHN0ZDo6dmFyaWFudDxSZWZQdHI8Tm9kZT4sIFZlY3RvcjxTdHJp
bmc+LCBPdGhlckRpY3Rpb25hcnk+IHVuaW9uVmFsdWU7CiAgICAgICAgIGludCBjbGFtcExvbmdW
YWx1ZTsKICAgICAgICAgaW50IGVuZm9yY2VSYW5nZUxvbmdWYWx1ZTsKICAgICB9OwpAQCAtMTIy
LDcgKzEyMiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBWZWN0b3I8V1RGOjpLZXlWYWx1ZVBhaXI8
U3RyaW5nLCBWZWN0b3I8U3RyaW5nPj4+JiB0ZXN0U2VxdWVuY2VSZWNvcmQoKSBjb25zdCB7IHJl
dHVybiBtX3NlcXVlbmNlUmVjb3JkOyB9CiAgICAgdm9pZCBzZXRUZXN0U2VxdWVuY2VSZWNvcmQo
Y29uc3QgVmVjdG9yPFdURjo6S2V5VmFsdWVQYWlyPFN0cmluZywgVmVjdG9yPFN0cmluZz4+PiYg
dmFsdWUpIHsgbV9zZXF1ZW5jZVJlY29yZCA9IHZhbHVlOyB9CiAKLSAgICB1c2luZyBUZXN0VW5p
b24gPSBWYXJpYW50PFN0cmluZywgaW50LCBib29sLCBSZWZQdHI8Tm9kZT4sIFZlY3RvcjxpbnQ+
PjsKKyAgICB1c2luZyBUZXN0VW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIGJvb2ws
IFJlZlB0cjxOb2RlPiwgVmVjdG9yPGludD4+OwogICAgIGNvbnN0IFRlc3RVbmlvbiYgdGVzdFVu
aW9uKCkgY29uc3QgeyByZXR1cm4gbV91bmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdFVuaW9uKFRl
c3RVbmlvbiYmIHZhbHVlKSB7IG1fdW5pb24gPSB2YWx1ZTsgfQogCkBAIC0xMzAsMTUgKzEzMCwx
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXN0RGljdGlvbmFyeShEaWN0aW9uYXJ5JiYgZGlj
dGlvbmFyeSkgeyBtX3Rlc3REaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTsgfQogICAgIAogCi0gICAg
dXNpbmcgVGVzdENsYW1wVW5pb24gPSBWYXJpYW50PFN0cmluZywgaW50LCBWZWN0b3I8aW50Pj47
CisgICAgdXNpbmcgVGVzdENsYW1wVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZl
Y3RvcjxpbnQ+PjsKICAgICBjb25zdCBUZXN0Q2xhbXBVbmlvbiYgdGVzdENsYW1wVW5pb24oKSBj
b25zdCB7IHJldHVybiBtX2NsYW1wVW5pb247IH0KICAgICB2b2lkIHNldFRlc3RDbGFtcFVuaW9u
KGNvbnN0IFRlc3RDbGFtcFVuaW9uJiB2YWx1ZSkgeyBtX2NsYW1wVW5pb24gPSB2YWx1ZTsgfQog
Ci0gICAgdXNpbmcgVGVzdEVuZm9yY2VSYW5nZVVuaW9uID0gVmFyaWFudDxTdHJpbmcsIGludCwg
VmVjdG9yPGludD4+OworICAgIHVzaW5nIFRlc3RFbmZvcmNlUmFuZ2VVbmlvbiA9IHN0ZDo6dmFy
aWFudDxTdHJpbmcsIGludCwgVmVjdG9yPGludD4+OwogICAgIGNvbnN0IFRlc3RFbmZvcmNlUmFu
Z2VVbmlvbiYgdGVzdEVuZm9yY2VSYW5nZVVuaW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmZvcmNl
UmFuZ2VVbmlvbjsgfQogICAgIHZvaWQgc2V0VGVzdEVuZm9yY2VSYW5nZVVuaW9uKGNvbnN0IFRl
c3RFbmZvcmNlUmFuZ2VVbmlvbiYgdmFsdWUpIHsgbV9lbmZvcmNlUmFuZ2VVbmlvbiA9IHZhbHVl
OyB9CiAKLSAgICB1c2luZyBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uID0gVmFyaWFu
dDxTdHJpbmcsIGludCwgVmVjdG9yPFN0cmluZz4+OworICAgIHVzaW5nIFRlc3RUcmVhdE51bGxB
c0VtcHR5U3RyaW5nVW5pb24gPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBpbnQsIFZlY3RvcjxTdHJp
bmc+PjsKICAgICBjb25zdCBUZXN0VHJlYXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uJiB0ZXN0VHJl
YXROdWxsQXNFbXB0eVN0cmluZ1VuaW9uKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdE51bGxBc0Vt
cHR5U3RyaW5nVW5pb247IH0KICAgICB2b2lkIHNldFRlc3RUcmVhdE51bGxBc0VtcHR5U3RyaW5n
VW5pb24oY29uc3QgVGVzdFRyZWF0TnVsbEFzRW1wdHlTdHJpbmdVbmlvbiYgdmFsdWUpIHsgbV90
cmVhdE51bGxBc0VtcHR5U3RyaW5nVW5pb24gPSB2YWx1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgcHVi
bGljOgogICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5
cGU7IH0KICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7IH0KIAotICAgIHVzaW5nIFNlbmRUeXBlcyA9IFZhcmlhbnQ8UmVmUHRyPERv
Y3VtZW50PiwgUmVmUHRyPEJsb2I+LCBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+LCBSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlcj4sIFJlZlB0cjxET01Gb3JtRGF0YT4sIFN0cmluZz47CisgICAg
dXNpbmcgU2VuZFR5cGVzID0gc3RkOjp2YXJpYW50PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxC
bG9iPiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiwgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXI+LCBSZWZQdHI8RE9NRm9ybURhdGE+LCBTdHJpbmc+OwogCiAgICAgY29uc3QgVVJMJiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX3VybDsgfQogICAgIFN0cmluZyBzdGF0dXNUZXh0KCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjIwOTU0KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0wOC0xOSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEltcG9ydCBhIGJldHRlciBzdGQ6OnZhcmlh
bnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU4
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0NhcHR1cmU6OmV2ZW50VG9TdHJpbmcpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtDYXB0dXJlOjpSZXNvdXJjZTo6dXJsKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDYXB0dXJlOjpOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmVucXVldWVFdmVudEhhbmRs
ZXIpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAg
ICAoSVBDOjpBcmd1bWVudENvZGVyPElEQktleVBhdGg+OjplbmNvZGUpOgorICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01IVE1MU2VsZWN0RWxlbWVudC5jcHA6
CisgICAgICAgICh3ZWJraXRfZG9tX2h0bWxfc2VsZWN0X2VsZW1lbnRfYWRkKToKKwogMjAxNy0w
OC0xOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtCZWFjb25d
IEltcHJvdmUgZXJyb3IgcmVwb3J0aW5nCkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlRXZlbnQuY3BwCShy
ZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUv
TmV0d29ya0NhcHR1cmVFdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw3ICs0NzksNyBA
QCBzdGQ6OnN0cmluZyBldmVudFRvU3RyaW5nKGNvbnN0IENhcHR1cmVFCiB7CiAgICAganNvbiBy
ZXN1bHQ7CiAKLSAgICBXVEY6OnZpc2l0KFsmcmVzdWx0XShjb25zdCBhdXRvJiBldmVudCkgewor
ICAgIHN0ZDo6dmlzaXQoWyZyZXN1bHRdKGNvbnN0IGF1dG8mIGV2ZW50KSB7CiAgICAgICAgIHVz
aW5nIEV2ZW50VHlwZSA9IHN0ZDo6ZGVjYXlfdDxkZWNsdHlwZShldmVudCk+OwogICAgICAgICBy
ZXN1bHQgPSBKU09OQ29kZXI8RXZlbnRUeXBlPjo6ZW5jb2RlKGV2ZW50KTsKICAgICB9LCBldmVu
dCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0Nh
cHR1cmVFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgc3RydWN0IFJlZGlyZWN0U2VudEV2ZW50Owog
c3RydWN0IERhdGFSZWNlaXZlZEV2ZW50Owogc3RydWN0IEZpbmlzaGVkRXZlbnQ7CiAKLXVzaW5n
IENhcHR1cmVFdmVudCA9IFdURjo6VmFyaWFudDxSZXF1ZXN0U2VudEV2ZW50LCBSZXNwb25zZVJl
Y2VpdmVkRXZlbnQsIFJlZGlyZWN0UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RTZW50RXZlbnQsIERh
dGFSZWNlaXZlZEV2ZW50LCBGaW5pc2hlZEV2ZW50PjsKK3VzaW5nIENhcHR1cmVFdmVudCA9IHN0
ZDo6dmFyaWFudDxSZXF1ZXN0U2VudEV2ZW50LCBSZXNwb25zZVJlY2VpdmVkRXZlbnQsIFJlZGly
ZWN0UmVjZWl2ZWRFdmVudCwgUmVkaXJlY3RTZW50RXZlbnQsIERhdGFSZWNlaXZlZEV2ZW50LCBG
aW5pc2hlZEV2ZW50PjsKIHVzaW5nIE9wdGlvbmFsQ2FwdHVyZUV2ZW50ID0gc3RkOjpvcHRpb25h
bDxDYXB0dXJlRXZlbnQ+OwogdXNpbmcgQ2FwdHVyZUV2ZW50cyA9IFZlY3RvcjxDYXB0dXJlRXZl
bnQ+OwogdXNpbmcgQ2FwdHVyZUNsb2NrVHlwZSA9IFdURjo6TW9ub3RvbmljVGltZTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291
cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTAgKzQ4LDEwIEBAIGNvbnN0IFdlYkNvcmU6OlVSTCYg
UmVzb3VyY2U6OnVybCgpCiAgICAgICAgIGF1dG8gZXZlbnQgPSBldmVudHMubmV4dEV2ZW50KCk7
CiAgICAgICAgIGlmICghZXZlbnQpCiAgICAgICAgICAgICBERUJVR19MT0dfRVJST1IoIkV2ZW50
IHN0cmVhbSBkb2VzIG5vdCBjb250YWluIGV2ZW50czogZmlsZSA9ICIgU1RSSU5HX1NQRUNJRklF
UiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkpOwotICAgICAgICBlbHNlIGlmICghV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpKQorICAgICAgICBlbHNl
IGlmICghc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxSZXF1ZXN0U2VudEV2ZW50PigqZXZlbnQpKQog
ICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFdmVudCBzdHJlYW0gZG9lcyBub3QgaGF2ZSBh
IHJlcXVlc3RTZW50IGV2ZW50OiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIo
bV9ldmVudEZpbGVQYXRoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byByZXF1
ZXN0U2VudEV2ZW50ID0gV1RGOjpnZXQ8UmVxdWVzdFNlbnRFdmVudD4oKmV2ZW50KTsKKyAgICAg
ICAgICAgIGF1dG8gcmVxdWVzdFNlbnRFdmVudCA9IHN0ZDo6Z2V0PFJlcXVlc3RTZW50RXZlbnQ+
KCpldmVudCk7CiAgICAgICAgICAgICBXZWJDb3JlOjpVUkxQYXJzZXIgcGFyc2VyKHJlcXVlc3RT
ZW50RXZlbnQucmVxdWVzdC51cmwpOwogICAgICAgICAgICAgbV91cmwgPSBwYXJzZXIucmVzdWx0
KCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuY3BwCShyZXZpc2lv
biAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0RhdGFUYXNrUmVwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjplbnF1ZXVlRXZlbnQKICAgICAgICAgICAgICAgICBy
ZXBsYXlGaW5pc2hlZChldmVudCk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICBXVEY6OnZp
c2l0KHZpc2l0b3IsICpldmVudCk7CisgICAgICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgKmV2ZW50
KTsKICAgICB9KTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgzLDEy
ICsyNTgzLDEyIEBAIGJvb2wgQXJndW1lbnRDb2RlcjxDYXB0dXJlRGV2aWNlPjo6ZGVjb2QKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIHZvaWQgQXJndW1lbnRDb2RlcjxJREJLZXlQYXRo
Pjo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7
Ci0gICAgYm9vbCBpc1N0cmluZyA9IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihrZXlQ
YXRoKTsKKyAgICBib29sIGlzU3RyaW5nID0gc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxTdHJpbmc+
KGtleVBhdGgpOwogICAgIGVuY29kZXIgPDwgaXNTdHJpbmc7CiAgICAgaWYgKGlzU3RyaW5nKQot
ICAgICAgICBlbmNvZGVyIDw8IFdURjo6Z2V0PFN0cmluZz4oa2V5UGF0aCk7CisgICAgICAgIGVu
Y29kZXIgPDwgc3RkOjpnZXQ8U3RyaW5nPihrZXlQYXRoKTsKICAgICBlbHNlCi0gICAgICAgIGVu
Y29kZXIgPDwgV1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KGtleVBhdGgpOworICAgICAgICBlbmNv
ZGVyIDw8IHN0ZDo6Z2V0PFZlY3RvcjxTdHJpbmc+PihrZXlQYXRoKTsKIH0KIAogYm9vbCBBcmd1
bWVudENvZGVyPElEQktleVBhdGg+OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgSURCS2V5UGF0
aCYga2V5UGF0aCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc1LDcgKzE3NSw3IEBAIHN0
cnVjdCBNZWRpYUNvbnN0cmFpbnRzOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci11c2luZyBJREJLZXlQYXRoID0gVmFyaWFudDxTdHJpbmcsIFZl
Y3RvcjxTdHJpbmc+PjsKK3VzaW5nIElEQktleVBhdGggPSBzdGQ6OnZhcmlhbnQ8U3RyaW5nLCBW
ZWN0b3I8U3RyaW5nPj47CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eS5jcHAJKHJldmlzaW9uIDIyMDk1NCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1VzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3
ICs4Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShjb25zdCBN
ZWRpYVRpbWUmIHRpbWUsIGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiBhdWRpb0RhdGEsIGNvbnN0
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpIGZpbmFsIHsKICAgICAgICAgaWYgKG1fZGVzY3JpcHRpb24gIT0gZGVzY3JpcHRpb24pIHsK
ICAgICAgICAgICAgIEFTU0VSVChkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlw
ZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKLSAgICAg
ICAgICAgIG1fZGVzY3JpcHRpb24gPSAqV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIG1fZGVzY3JpcHRpb24gPSAqc3RkOjpnZXQ8Y29uc3QgQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRl
c2NyaXB0aW9uKTsKIAogICAgICAgICAgICAgLy8gQWxsb2NhdGUgYSByaW5nIGJ1ZmZlciBsYXJn
ZSBlbm91Z2ggdG8gY29udGFpbiAyIHNlY29uZHMgb2YgYXVkaW8uCiAgICAgICAgICAgICBtX251
bWJlck9mRnJhbWVzID0gbV9kZXNjcmlwdGlvbi5zYW1wbGVSYXRlKCkgKiAyOwpJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvRE9NL1dlYktpdERP
TUhUTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyMjA5NTQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCB3ZWJraXRfZG9tX2h0bWxfc2Vs
ZWN0X2VsZW1lbnRfYWRkKAogICAgIFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50KiBpdGVtID0g
V2ViS2l0Ojpjb3JlKHNlbGYpOwogICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50KiBjb252ZXJ0ZWRF
bGVtZW50ID0gV2ViS2l0Ojpjb3JlKGVsZW1lbnQpOwogICAgIFdlYkNvcmU6OkhUTUxFbGVtZW50
KiBjb252ZXJ0ZWRCZWZvcmUgPSBXZWJLaXQ6OmNvcmUoYmVmb3JlKTsKLSAgICBWYXJpYW50PFJl
ZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0
R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CisgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0R3JvdXBF
bGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CiAgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxPcHRpb25F
bGVtZW50Pihjb252ZXJ0ZWRFbGVtZW50KSkKICAgICAgICAgdmFyaWFudEVsZW1lbnQgPSAmZG93
bmNhc3Q8V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ+KCpjb252ZXJ0ZWRFbGVtZW50KTsKICAg
ICBlbHNlIGlmIChpczxXZWJDb3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Pihjb252ZXJ0ZWRFbGVt
ZW50KSkKSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMDk1NCkK
KysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDE3LTA4LTE5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgSW1wb3J0IGEgYmV0dGVyIHN0ZDo6dmFyaWFudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTgzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9NSFRNTFNlbGVjdEVsZW1lbnQu
bW06CisgICAgICAgICgtW0RPTUhUTUxTZWxlY3RFbGVtZW50IGFkZDpiZWZvcmU6XSk6CisKIDIw
MTctMDgtMTcgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAg
ICBbUEFMXSBSZWxvY2F0ZSBTZXNzaW9uSUQgdG8gcm9vdApJbmRleDogU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01IVE1MU2VsZWN0RWxlbWVudC5tbQkocmV2aXNpb24g
MjIwOTU0KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUhUTUxTZWxlY3RFbGVt
ZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDcgQEAgLSAodm9pZClhZGQ6KERP
TUhUTUxFbGVtZW50ICopZWxlbWVudCBiZQogICAgICAgICByYWlzZVR5cGVFcnJvckV4Y2VwdGlv
bigpOwogCiAgICAgYXV0byYgY29yZUVsZW1lbnQgPSAqY29yZShlbGVtZW50KTsKLSAgICBWYXJp
YW50PFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpI
VE1MT3B0R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CisgICAgc3RkOjp2YXJpYW50PFJl
ZlB0cjxXZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudD4sIFJlZlB0cjxXZWJDb3JlOjpIVE1MT3B0
R3JvdXBFbGVtZW50Pj4gdmFyaWFudEVsZW1lbnQ7CiAgICAgaWYgKGlzPFdlYkNvcmU6OkhUTUxP
cHRpb25FbGVtZW50Pihjb3JlRWxlbWVudCkpCiAgICAgICAgIHZhcmlhbnRFbGVtZW50ID0gJmRv
d25jYXN0PFdlYkNvcmU6OkhUTUxPcHRpb25FbGVtZW50Pihjb3JlRWxlbWVudCk7CiAgICAgZWxz
ZSBpZiAoaXM8V2ViQ29yZTo6SFRNTE9wdEdyb3VwRWxlbWVudD4oY29yZUVsZW1lbnQpKQpJbmRl
eDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjIwOTU0KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTctMDgtMTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAg
ICBJbXBvcnQgYSBiZXR0ZXIgc3RkOjp2YXJpYW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1ODMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTctMDgtMTkgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPUyBXSzJdIEFk
ZCBhIHZlcnNpb24gb2YgRGF0YUludGVyYWN0aW9uVGVzdHMuRXh0ZXJuYWxTb3VyY2VBdHRyaWJ1
dGVkU3RyaW5nVG9Db250ZW50RWRpdGFibGUgdGhhdCBkb2Vzbid0IGhpdCBhIGRlYnVnIGFzc2Vy
dGlvbgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDIyMDk1NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1ZhcmlhbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywzNyArMzcsMzcgQEAgbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogCiBURVNUKFdURl9WYXJpYW50LCBJbml0aWFsKQogewotICAgIFZhcmlhbnQ8aW50
LCBkb3VibGU+IHYxOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGRvdWJsZT4gdjE7CiAgICAgRVhQ
RUNUX1RSVUUodjEuaW5kZXgoKSA9PSAwKTsKLSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldDxpbnQ+
KHYxKSA9PSAwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+KHYxKSA9PSAwKTsKIAog
ICAgIHN0cnVjdCBUIHsKICAgICAgICAgVCgpIDogdmFsdWUoMTUpIHsgfQogICAgICAgICBpbnQg
dmFsdWU7CiAgICAgfTsKIAotICAgIFZhcmlhbnQ8VCwgaW50PiB2MjsKKyAgICBzdGQ6OnZhcmlh
bnQ8VCwgaW50PiB2MjsKICAgICBFWFBFQ1RfVFJVRSh2Mi5pbmRleCgpID09IDApOwotICAgIEVY
UEVDVF9UUlVFKFdURjo6Z2V0PFQ+KHYyKS52YWx1ZSA9PSAxNSk7CisgICAgRVhQRUNUX1RSVUUo
c3RkOjpnZXQ8VD4odjIpLnZhbHVlID09IDE1KTsKIH0KIAogVEVTVChXVEZfVmFyaWFudCwgQmFz
aWMpCiB7Ci0gICAgVmFyaWFudDxpbnQsIGRvdWJsZT4gdmFyaWFudCA9IDE7CisgICAgc3RkOjp2
YXJpYW50PGludCwgZG91YmxlPiB2YXJpYW50ID0gMTsKICAgICBFWFBFQ1RfVFJVRSh2YXJpYW50
LmluZGV4KCkgPT0gMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8aW50Pih2YXJpYW50KSA9
PSAxKTsKLSAgICBFWFBFQ1RfVFJVRSgqV1RGOjpnZXRfaWY8aW50Pih2YXJpYW50KSA9PSAxKTsK
LSAgICBFWFBFQ1RfVFJVRShXVEY6OmdldF9pZjxkb3VibGU+KHZhcmlhbnQpID09IG51bGxwdHIp
OwotICAgIEVYUEVDVF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7
Ci0gICAgRVhQRUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50
KSk7CisgICAgRVhQRUNUX1RSVUUoc3RkOjpnZXQ8aW50Pih2YXJpYW50KSA9PSAxKTsKKyAgICBF
WFBFQ1RfVFJVRSgqc3RkOjpnZXRfaWY8aW50PigmdmFyaWFudCkgPT0gMSk7CisgICAgRVhQRUNU
X1RSVUUoc3RkOjpnZXRfaWY8ZG91YmxlPigmdmFyaWFudCkgPT0gbnVsbHB0cik7CisgICAgRVhQ
RUNUX1RSVUUoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbnQ+KHZhcmlhbnQpKTsKKyAgICBFWFBF
Q1RfRkFMU0Uoc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxkb3VibGU+KHZhcmlhbnQpKTsKIAogICAg
IHZhcmlhbnQgPSAxLjA7CiAgICAgRVhQRUNUX1RSVUUodmFyaWFudC5pbmRleCgpID09IDEpOwot
ICAgIEVYUEVDVF9UUlVFKFdURjo6Z2V0PGRvdWJsZT4odmFyaWFudCkgPT0gMSk7Ci0gICAgRVhQ
RUNUX1RSVUUoKldURjo6Z2V0X2lmPGRvdWJsZT4odmFyaWFudCkgPT0gMS4wKTsKLSAgICBFWFBF
Q1RfVFJVRShXVEY6OmdldF9pZjxpbnQ+KHZhcmlhbnQpID09IG51bGxwdHIpOwotICAgIEVYUEVD
VF9UUlVFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8ZG91YmxlPih2YXJpYW50KSk7Ci0gICAgRVhQ
RUNUX0ZBTFNFKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8aW50Pih2YXJpYW50KSk7CisgICAgRVhQ
RUNUX1RSVUUoc3RkOjpnZXQ8ZG91YmxlPih2YXJpYW50KSA9PSAxKTsKKyAgICBFWFBFQ1RfVFJV
RSgqc3RkOjpnZXRfaWY8ZG91YmxlPigmdmFyaWFudCkgPT0gMS4wKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmdldF9pZjxpbnQ+KCZ2YXJpYW50KSA9PSBudWxscHRyKTsKKyAgICBFWFBFQ1RfVFJV
RShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGRvdWJsZT4odmFyaWFudCkpOworICAgIEVYUEVDVF9G
QUxTRShzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGludD4odmFyaWFudCkpOwogfQogCiBURVNUKFdU
Rl9WYXJpYW50LCBCYXNpY1Zpc2l0b3IpCkBAIC05NCwxOCArOTQsMTggQEAgVEVTVChXVEZfVmFy
aWFudCwgQmFzaWNWaXNpdG9yKQogCiAgICAgVHlwZSB0eXBlID0gVHlwZTo6Tm9uZTsKIAotICAg
IFZhcmlhbnQ8aW50LCBmbG9hdCwgU3RyaW5nPiB2YXJpYW50ID0gODsKLSAgICBXVEY6OnZpc2l0
KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBT
dHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFu
dCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6SW50ID09IHR5cGUpOwogCiAKICAgICB2YXJpYW50
ID0gMS4wZjsKLSAgICBXVEY6OnZpc2l0KFZpc2l0b3IodHlwZSksIHZhcmlhbnQpOworICAgIHN0
ZDo6dmlzaXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlwZTo6
RmxvYXQgPT0gdHlwZSk7CiAKIAogICAgIHZhcmlhbnQgPSAiaGVsbG8iOwotICAgIFdURjo6dmlz
aXQoVmlzaXRvcih0eXBlKSwgdmFyaWFudCk7CisgICAgc3RkOjp2aXNpdChWaXNpdG9yKHR5cGUp
LCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcgPT0gdHlwZSk7CiB9CiAK
QEAgLTEyNywxMiArMTI3LDEyIEBAIFRFU1QoV1RGX1ZhcmlhbnQsIFJldGFpblB0cikKICAgICAK
ICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQdHI7CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4g
cmV0YWluUHRyOwotICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRh
dGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9y
LCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0
cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVmUHRyKSk7CisgICAgc3RkOjp2aXNpdCh2
aXNpdG9yLCB2YXJpYW50KTsKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpSZWZQdHIgPT0gdHlwZSk7
CiAgICAgCiAgICAgdmFyaWFudCA9IFdURk1vdmUocmV0YWluUHRyKTsKLSAgICBXVEY6OnZpc2l0
KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAg
ICAgRVhQRUNUX1RSVUUoVHlwZTo6UmV0YWluUHRyID09IHR5cGUpOwogfQogI2VuZGlmCkBAIC0x
NTQsMTggKzE1NCwxOCBAQCBURVNUKFdURl9WYXJpYW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRv
CiAgICAgICAgIFsmXShTdHJpbmcpIHsgdHlwZSA9IFR5cGU6OlN0cmluZzsgfQogICAgICk7CiAK
LSAgICBWYXJpYW50PGludCwgZmxvYXQsIFN0cmluZz4gdmFyaWFudCA9IDg7Ci0gICAgV1RGOjp2
aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZhcmlhbnQ8aW50LCBmbG9hdCwgU3Ry
aW5nPiB2YXJpYW50ID0gODsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOwogICAg
IEVYUEVDVF9UUlVFKFR5cGU6OkludCA9PSB0eXBlKTsKIAogCiAgICAgdmFyaWFudCA9IDEuMGY7
Ci0gICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBzdGQ6OnZpc2l0KHZpc2l0
b3IsIHZhcmlhbnQpOwogICAgIEVYUEVDVF9UUlVFKFR5cGU6OkZsb2F0ID09IHR5cGUpOwogCiAK
ICAgICB2YXJpYW50ID0gImhlbGxvIjsKLSAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQp
OworICAgIHN0ZDo6dmlzaXQodmlzaXRvciwgdmFyaWFudCk7CiAgICAgRVhQRUNUX1RSVUUoVHlw
ZTo6U3RyaW5nID09IHR5cGUpOwogfQogCkBAIC0xODAsNyArMTgwLDcgQEAgVEVTVChXVEZfVmFy
aWFudCwgVmlzaXRvclVzaW5nU3dpdGNoT24pCiAKICAgICBUeXBlIHR5cGUgPSBUeXBlOjpOb25l
OwogCi0gICAgVmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OworICAgIHN0
ZDo6dmFyaWFudDxpbnQsIGZsb2F0LCBTdHJpbmc+IHZhcmlhbnQgPSA4OwogICAgIHR5cGUgPSBX
VEY6OnN3aXRjaE9uKHZhcmlhbnQsCiAgICAgICAgIFtdKGludCkgeyByZXR1cm4gVHlwZTo6SW50
OyB9LAogICAgICAgICBbXShmbG9hdCkgeyByZXR1cm4gVHlwZTo6RmxvYXQ7IH0sCkBAIC0yMTMs
NyArMjEzLDcgQEAgVEVTVChXVEZfVmFyaWFudCwgQ29uc3RydWN0b3JEZXN0cnVjdG9yKQogCiAg
ICAgewogICAgICAgICBhdXRvIHVuaXF1ZVB0ciA9IHN0ZDo6bWFrZV91bmlxdWU8Q29uc3RydWN0
b3JEZXN0cnVjdG9yQ291bnRlcj4oKTsKLSAgICAgICAgVmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8
Q29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcj4sIGludD4gdiA9IFdURk1vdmUodW5pcXVlUHRy
KTsKKyAgICAgICAgc3RkOjp2YXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJ1Y3RvckRlc3Ry
dWN0b3JDb3VudGVyPiwgaW50PiB2ID0gV1RGTW92ZSh1bmlxdWVQdHIpOwogCiAgICAgICAgIEVY
UEVDVF9FUSgxdSwgQ29uc3RydWN0b3JEZXN0cnVjdG9yQ291bnRlcjo6Y29uc3RydWN0aW9uQ291
bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMHUsIENvbnN0cnVjdG9yRGVzdHJ1Y3RvckNvdW50ZXI6
OmRlc3RydWN0aW9uQ291bnQpOwpAQCAtMjI4LDcgKzIyOCw3IEBAIFRFU1QoV1RGX1ZhcmlhbnQs
IFJlZlB0cikKICAgICB7CiAgICAgICAgIFJlZkxvZ2dlciBhKCJhIik7CiAgICAgICAgIFJlZlB0
cjxSZWZMb2dnZXI+IHJlZigmYSk7Ci0gICAgICAgIFZhcmlhbnQ8UmVmUHRyPFJlZkxvZ2dlcj4s
IGludD4gdiA9IHJlZjsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZlB0cjxSZWZMb2dnZXI+LCBp
bnQ+IHYgPSByZWY7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgcmVmKGEpIGRl
cmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5jX3N0cigpKTsKQEAgLTIzNiw3ICsyMzYs
NyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWZQdHIpCiAgICAgewogICAgICAgICBSZWZMb2dnZXIg
YSgiYSIpOwogICAgICAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWYoJmEpOwotICAgICAgICBWYXJp
YW50PFJlZlB0cjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3ZlKHJlZik7CisgICAgICAgIHN0
ZDo6dmFyaWFudDxSZWZQdHI8UmVmTG9nZ2VyPiwgaW50PiB2ID0gV1RGTW92ZShyZWYpOwogICAg
IH0KIAogICAgIEFTU0VSVF9TVFJFUSgicmVmKGEpIGRlcmVmKGEpICIsIHRha2VMb2dTdHIoKS5j
X3N0cigpKTsKQEAgLTI0Nyw3ICsyNDcsNyBAQCBURVNUKFdURl9WYXJpYW50LCBSZWYpCiAgICAg
ewogICAgICAgICBSZWZMb2dnZXIgYSgiYSIpOwogICAgICAgICBSZWY8UmVmTG9nZ2VyPiByZWYo
YSk7Ci0gICAgICAgIFZhcmlhbnQ8UmVmPFJlZkxvZ2dlcj4sIGludD4gdiA9IFdURk1vdmUocmVm
KTsKKyAgICAgICAgc3RkOjp2YXJpYW50PFJlZjxSZWZMb2dnZXI+LCBpbnQ+IHYgPSBXVEZNb3Zl
KHJlZik7CiAgICAgfQogCiAgICAgQVNTRVJUX1NUUkVRKCJyZWYoYSkgZGVyZWYoYSkgIiwgdGFr
ZUxvZ1N0cigpLmNfc3RyKCkpOwpAQCAtMjY1LDExICsyNjUsMTEgQEAgcHVibGljOgogCiBURVNU
KFdURl9WYXJpYW50LCBPcGVyYXRvckFtcGVyc2FuZCkKIHsKLSAgICBWYXJpYW50PEhvbGRlcjxp
bnQ+LCBpbnQ+IHYgPSBIb2xkZXI8aW50PigxMCk7Ci0gICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8
SG9sZGVyPGludD4+KHYpLmRhdGEgPT0gMTApOworICAgIHN0ZDo6dmFyaWFudDxIb2xkZXI8aW50
PiwgaW50PiB2ID0gSG9sZGVyPGludD4oMTApOworICAgIEVYUEVDVF9UUlVFKHN0ZDo6Z2V0PEhv
bGRlcjxpbnQ+Pih2KS5kYXRhID09IDEwKTsKIAogICAgIHYgPSAyMDsKLSAgICBFWFBFQ1RfVFJV
RShXVEY6OmdldDxpbnQ+KHYpID09IDIwKTsKKyAgICBFWFBFQ1RfVFJVRShzdGQ6OmdldDxpbnQ+
KHYpID09IDIwKTsKIH0KIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>