<?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>140431</bug_id>
          
          <creation_ts>2015-01-14 00:06:08 -0800</creation_ts>
          <short_desc>REGRESSION(r178390): Way too many failures to skip (Requested by ap_ on #webkit).</short_desc>
          <delta_ts>2015-01-15 16:45:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>126408</blocked>
    
    <blocked>140423</blocked>
    
    <blocked>140424</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>dino</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1061099</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:06:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/178390 broke the build:
Way too many failures to skip (Requested by ap_ on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061103</commentid>
    <comment_count>1</comment_count>
      <attachid>244586</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:06:55 -0800</bug_when>
    <thetext>Created attachment 244586
ROLLOUT of r178390

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061106</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-14 00:07:12 -0800</bug_when>
    <thetext>*** Bug 140423 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061108</commentid>
    <comment_count>3</comment_count>
      <attachid>244586</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:10:11 -0800</bug_when>
    <thetext>Comment on attachment 244586
ROLLOUT of r178390

Clearing flags on attachment: 244586

Committed r178411: &lt;http://trac.webkit.org/changeset/178411&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061109</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:10:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061698</commentid>
    <comment_count>5</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-15 16:45:59 -0800</bug_when>
    <thetext>Was totally about to fix things and now the original patch won&apos;t apply cleanly on my tree. Nice.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244586</attachid>
            <date>2015-01-14 00:06:55 -0800</date>
            <delta_ts>2015-01-14 00:10:11 -0800</delta_ts>
            <desc>ROLLOUT of r178390</desc>
            <filename>bug-140431-20150114000701.patch</filename>
            <type>text/plain</type>
            <size>874444</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4NDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM5ZDM4MjBlYWE0MjRm
NDJkNjk5Y2RmZjhiOTIzYzYyMDJkMjEzMS4uM2ExY2JhOWJhZjg0MjIxMTk3MWQ4NmFkMGM3ZjQ1
ODI4YTBlMTk3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE1LTAxLTE0ICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTc4MzkwLCByMTc4MzkyLCByMTc4Mzk4LCByMTc4NDAwLAorICAgICAg
ICByMTc4NDAyLCBhbmQgcjE3ODQxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MDQzMQorCisgICAgICAgIFdheSB0b28gbWFueSBmYWlsdXJlcyB0
byBza2lwIChSZXF1ZXN0ZWQgYnkgYXBfIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJldmVydGVk
IGNoYW5nZXNldHM6CisKKyAgICAgICAgIldlYkdMMjogU3VwcG9ydCB3ZWJnbDIgY29udGV4dCBj
cmVhdGlvbi4iCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjY0MDgKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4Mzkw
CisKKyAgICAgICAgIlVucmV2aWV3ZWQgaU9TIGJ1aWxkIGZpeCBhZnRlciByMTc4MzkwLiIKKyAg
ICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4MzkyCisKKyAgICAgICAg
IltVbnJldmlld2VkXSBXaW5kb3dzIGJ1aWxkIGZpeCBhZnRlciByMTc4MzkwLiIKKyAgICAgICAg
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4Mzk4CisKKyAgICAgICAgIltVbnJl
dmlld2VkXSBTcGVjdWxhdGl2ZSB0ZXN0IGZpeCBhZnRlciByMTc4MzkwLiIKKyAgICAgICAgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4NDAwCisKKyAgICAgICAgIltVbnJldmll
d2VkXSBTa2lwIHdlYmdsIHRlc3RzIGZvciB0ZW1wb3JhcmlseS4iCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA0MjMKKyAgICAgICAgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4NDAyCisKKyAgICAgICAgIltFRkxdIEZpeCBidWls
ZCBhZnRlciByMTc4MzkwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQwNDI0CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzE3ODQxMAorCiAyMDE1LTAxLTEzICBIdW5zZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5n
LmNvbT4KIAogICAgICAgICBbRUZMXSBGaXggYnVpbGQgYWZ0ZXIgcjE3ODM5MCAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKaW5kZXggN2QyOGFmNzQ1OWFhMGRkYWFlZWIxOTI2YjE4YWQ0NWJlNGNmMjkwYi4u
ZGRiZTgzNzE5ZWZkOTk1YjMzZGU3MWRhMjFjNjc2Mzg1YTI4NWEwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTU0MCw4ICs1NDAsNiBAQCBzZXQoV2ViQ29yZV9OT05fU1ZHX0lETF9GSUxFUwog
ICAgIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaWRsCiAgICAgaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5pZGwKLSAgICBodG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmlk
bAotICAgIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCiAgICAgaHRtbC9j
YW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlk
bAogICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaWRsCkBAIC01NTcs
NyArNTU1LDcgQEAgc2V0KFdlYkNvcmVfTk9OX1NWR19JRExfRklMRVMKICAgICBodG1sL2NhbnZh
cy9XZWJHTExvc2VDb250ZXh0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwK
ICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5pZGwKLSAgICBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwKICAgICBodG1s
L2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwKICAgICBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuaWRsCkBAIC0xMTQ3LDkgKzExNDUsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgYmluZGluZ3MvanMvSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTVmlkZW9UcmFja0N1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1ZpZGVvVHJhY2tMaXN0
Q3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKLSAgICBiaW5kaW5ncy9qcy9KU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
Ci0gICAgYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAor
ICAgIGJpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3Jr
ZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3Bw
CkBAIC0xMjE1LDggKzEyMTEsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgY3NzL0NTU0lt
cG9ydFJ1bGUuY3BwCiAgICAgY3NzL0NTU0luaGVyaXRlZFZhbHVlLmNwcAogICAgIGNzcy9DU1NJ
bml0aWFsVmFsdWUuY3BwCi0gICAgY3NzL0NTU0tleWZyYW1lUnVsZS5jcHAKLSAgICBjc3MvQ1NT
S2V5ZnJhbWVzUnVsZS5jcHAKICAgICBjc3MvQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5jcHAKICAg
ICBjc3MvQ1NTTWVkaWFSdWxlLmNwcAogICAgIGNzcy9DU1NPTVV0aWxzLmNwcApAQCAtMTI4MCw2
ICsxMjc0LDggQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9WaWV3cG9ydFN0eWxlUmVz
b2x2ZXIuY3BwCiAgICAgY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcAogICAgIGNzcy9XZWJL
aXRDU1NSZXNvdXJjZVZhbHVlLmNwcAorICAgIGNzcy9DU1NLZXlmcmFtZVJ1bGUuY3BwCisgICAg
Y3NzL0NTU0tleWZyYW1lc1J1bGUuY3BwCiAgICAgY3NzL1dlYktpdENTU01hdHJpeC5jcHAKICAg
ICBjc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAKICAgICBjc3MvV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwCkBAIC0xNjczLDggKzE2NjksNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAKICAgICBodG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmNwcAotICAgIGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCi0g
ICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1sL2NhbnZh
cy9XZWJHTEJ1ZmZlci5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmNwcAogICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAK
QEAgLTE2OTQsNyArMTY4OCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAg
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCi0gICAgaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgaHRtbC9jYW52
YXMvV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xT
aGFyZWRPYmplY3QuY3BwCkBAIC0yNzcyLDggKzI3NjYsNiBAQCBpZiAoRU5BQkxFX1dFQkdMKQog
ICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAogICAgICAgICBodG1s
L2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAogICAgICAgICBodG1sL2NhbnZh
cy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKLSAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVu
ZGVyaW5nQ29udGV4dC5jcHAKLSAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI3OTMsNyArMjc4NSw3IEBA
IGlmIChFTkFCTEVfV0VCR0wpCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAog
ICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgICAgIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmNwcAotICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAorICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgICAgICBodG1s
L2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBAIC0yODE1LDggKzI4MDcsNiBAQCBpZiAoRU5BQkxF
X1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbAogICAg
ICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmlkbAogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5pZGwKLSAgICAgICAgaHRtbC9jYW52YXMv
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwKLSAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dC5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5pZGwKICAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwKQEAgLTI4MzIsNyArMjgyMiw3IEBAIGlm
IChFTkFCTEVfV0VCR0wpCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRs
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICAgICAgaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsCi0gICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaWRsCisgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuaWRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKaW5kZXggZDg2
YzdjNGNhMjc3YjM5NjIyNjcxM2EzY2RiOWEzMmI5OTE0Y2E0OC4uMjllYTRlZGQ4YjA0MTRlODNi
NTJmM2YzZWUyNjQzNTM1Y2YzZjNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNwcApAQCAt
NTQsOCArNTQsNiBAQAogI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAiCiAjaW5j
bHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcCIKICNpbmNsdWRlICJKU09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcCIKLSNpbmNsdWRlICJKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQu
Y3BwIgotI2luY2x1ZGUgIkpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAi
SlNXZWJHTEFjdGl2ZUluZm8uY3BwIgogI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuY3BwIgogI2lu
Y2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAiCkBAIC03MSw3ICs2OSw3IEBA
CiAjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmNwcCIKICNpbmNsdWRlICJKU1dlYkdMUHJv
Z3JhbS5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5jcHAiCi0jaW5jbHVkZSAi
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5jcHAiCiAjaW5jbHVkZSAi
SlNXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5jcHAiCiAjaW5jbHVkZSAiSlNXZWJHTFRleHR1
cmUuY3BwIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBi
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggODNmYTc1MDcwZmI0MjA4
NjgxNzU4NjBlZmNmNGI3YTcxYzc3MTNkNS4uYzFhODUwNjQ5NGZiNzU2Yjg3Nzg2OTliYjY3YWZm
OWE4NzkxNWRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC00NDQsMTQgKzQ0
NCwxMiBAQCBOT05fU1ZHX0JJTkRJTkdfSURMUyA9IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2Fu
dmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJi
dWZmZXIuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsIFwK
ICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Lmlk
bCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsIFwKICAgICAk
KFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVW5pZm9ybUxvY2F0aW9uLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmlkbCBcCi0gICAg
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCBcCi0g
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbCBcCi0J
JChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAg
JChXZWJDb3JlKS9odG1sL3RyYWNrL0F1ZGlvVHJhY2suaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0
bWwvdHJhY2svQXVkaW9UcmFja0xpc3QuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvdHJhY2sv
RGF0YUN1ZS5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9q
L1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2oKaW5kZXggYzljODY4MTZiNDU2ZTJhNDIyYWQyNDJkMzJjYTBmZDc2N2YzODUwNy4u
OTQ5Mzc1ZTJhMTVlMzJiMTA3NjFhZjk0MjQ0NTFjNTI5ZDhjNGUxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC02MzYsNiArNjM2LDIw
IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNv
dXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIj4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3x4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzIn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMy
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJv
fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxX
aW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxk
IENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0xTaGFkZXIuY3BwIj4KICAg
ICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTc0OCwzMCArNzYy
LDYgQEAKICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViQ29yZVxEZXJpdmVk
U291cmNlc1xKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIj4KLSAgICAgIDxFeGNsdWRlZEZy
b21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVh
c2VfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z19XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNs
dWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdE
ZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4
dC5jcHAiPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRl
ZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
LSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJj
ZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCI+Ci0gICAgICA8RXhjbHVkZWRGcm9t
QnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNl
X1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVk
ZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQ
cm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVp
bGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CkBAIC03ODYsMzAgKzc3Niw3IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4
Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYmluZGluZ3NcanNcSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCI+Ci0g
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAg
ICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIj4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50
cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAi
PgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgotICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KLSAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgot
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgIDwv
Q2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cY3NzXENTU0ltYWdlU2V0VmFsdWUuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdp
bjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHx4
NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAgLTY2NzEsOCArNjYzOCw2IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xPRVNUZXh0dXJlSGFsZkZsb2F0LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXE9FU1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxj
YW52YXNcT0VTVmVydGV4QXJyYXlPYmplY3QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFxjYW52YXNcV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMQnVmZmVy
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxjYW52YXNcV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmNwcCIgLz4KQEAgLTY2OTIsNyAr
NjY1Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTE9i
amVjdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJH
TFByb2dyYW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNc
V2ViR0xSZW5kZXJidWZmZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRt
bFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFkZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxjYW52
YXNcV2ViR0xTaGFyZWRPYmplY3QuY3BwIiAvPgpAQCAtMTg3MjcsNiArMTg2OTIsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTExvc2VDb250ZXh0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU1dlYkdM
UHJvZ3JhbS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNc
SlNXZWJHTFJlbmRlcmJ1ZmZlci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNvcmVcRGVy
aXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0
dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0xTaGFkZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpT
V2ViR0xUZXh0dXJlLmgiIC8+CkBAIC0xODc5NSw5ICsxODc2MSw2IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNFWFRzUkdCLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9y
bUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNFWFRGcmFnRGVw
dGguaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xKU0VYVEJsZW5kTWluTWF4LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQ
cm9qZWN0TmFtZSlcSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhY2Nlc3NpYmlsaXR5XEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjc3NcQ1NTSW1hZ2VTZXRW
YWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY3NzXFdlYktpdENTU1Jlc291
cmNlVmFsdWUuaCIgLz4KQEAgLTE4ODk3LDggKzE4ODYwLDYgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGh0bWxcY2FudmFzXE9FU1RleHR1cmVIYWxmRmxvYXQuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXE9FU1ZlcnRleEFy
cmF5T2JqZWN0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXGNhbnZhc1xXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTEFjdGl2ZUluZm8uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMQnVmZmVyLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
IC8+CkBAIC0xODkxOSw3ICsxODg4MCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXGNhbnZhc1xXZWJHTE9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aHRtbFxjYW52YXNcV2ViR0xQcm9ncmFtLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxodG1sXGNhbnZhc1xXZWJHTFJlbmRlcmJ1ZmZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFNoYWRl
ci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxc
Y2FudmFzXFdlYkdMU2hhcmVkT2JqZWN0LmgiIC8+CkBAIC0yMTMxMyw0ICsyMTI3NCw0IEBACiAg
IDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgICAgPEltcG9ydCBQcm9q
ZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAv
PgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1M2EwMzM0NWVkOWI0NjU3MmQ5ZjEwM2Rm
YzFiZjVmODY0MjMxYTJmLi4wMjEwYzk3OGZkNDhlYzVjNWM1MTM4YzQyMWVhMDQ2NmFmNDM3ZmFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qLmZpbHRlcnMKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUu
dmN4cHJvai5maWx0ZXJzCkBAIC0xMzgzLDYgKzEzODMsOSBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcUm91bmRlZFJlY3QuY3BwIj4KICAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cZ3JhcGhpY3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFNlZ21lbnRlZEZvbnREYXRhLmNw
cCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CisgICAgPC9DbENv
bXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFk
b3dCbHVyLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAg
ICAgPC9DbENvbXBpbGU+CkBAIC00ODQ4LDYgKzQ4NTEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmNwcCI+CiAgICAgICA8RmlsdGVy
PnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RGF0YS5jcHAiPgorICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERlc2NyaXB0aW9u
LmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CkBAIC02MzczLDYgKzYzNzksOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdlYkNv
cmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmJ1ZmZlci5jcHAiPgogICAgICAgPEZpbHRl
cj5EZXJpdmVkU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
Ij4KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGls
ZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmok
KFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0xTaGFk
ZXIuY3BwIj4KICAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KQEAgLTY0NzgsNiArNjQ4Nyw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxodG1sXGNhbnZhc1xXZWJHTFJlbmRlcmJ1ZmZlci5jcHAiPgogICAgICAgPEZpbHRlcj5odG1s
XGNhbnZhczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caHRtbFxjYW52YXNcV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCI+CisgICAgICA8Rmls
dGVyPmh0bWxcY2FudmFzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTFNoYWRlci5jcHAiPgogICAgICAgPEZpbHRl
cj5odG1sXGNhbnZhczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtNjU3MSw2ICs2NTgz
LDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEdy
YXBoaWNzQ29udGV4dDNEQ0cuY3BwIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cZ3JhcGhpY3Nc
Y2c8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJpbmRpbmdzXGpzXEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCI+CisgICAgICA8
RmlsdGVyPmJpbmRpbmdzXGpzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xjYWlyb1xHcmFwaGljc0NvbnRleHQz
RENhaXJvLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzXGNhaXJvPC9GaWx0
ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC03MTM1LDM0ICs3MTUwLDYgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXEVYVEJsZW5kTWluTWF4LmNwcCI+CiAgICAgICA8
RmlsdGVyPmh0bWxcY2FudmFzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250UmFuZ2VzLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXC4u
XC4uXC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqNjRcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xK
U1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJj
ZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XC4uXC4uXC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqNjRcV2ViQ29yZVxEZXJpdmVkU291cmNl
c1xKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZFNv
dXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXC4uXC4uXC4uXFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqNjRcV2ViQ29yZVxEZXJpdmVkU291
cmNlc1xKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+RGVy
aXZlZFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJpbmRpbmdzXGpzXEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAi
PgotICAgICAgPEZpbHRlcj5iaW5kaW5nc1xqczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGluZ3NcanNcSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcCI+Ci0gICAgICA8RmlsdGVyPmJpbmRpbmdzXGpzPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xqc1xK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ymlu
ZGluZ3NcanM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJ
dGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGdlb2xvY2F0aW9u
XENvb3JkaW5hdGVzLmgiPgpAQCAtODQyOCw2ICs4NDE1LDkgQEAKICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXFJvdW5kZWRSZWN0LmgiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcU2VnbWVudGVkRm9udERhdGEuaCI+
CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1
ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xTaGFkb3dC
bHVyLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgpAQCAtMTI3MTksNiArMTI3MDksOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udENhY2hlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0
Zm9ybVxncmFwaGljczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcRm9udERhdGEuaCI+CisgICAgICA8RmlsdGVy
PnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250RGVzY3JpcHRpb24uaCI+CiAg
ICAgICA8RmlsdGVyPnBsYXRmb3JtXGdyYXBoaWNzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
CkBAIC0xNDIyMyw2ICsxNDIxNiw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcV2ViQ29yZVxEZXJp
dmVkU291cmNlc1xKU1dlYkdMUmVuZGVyYnVmZmVyLmgiPgogICAgICAgPEZpbHRlcj5EZXJpdmVk
U291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXFdl
YkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCI+CisgICAgICA8
RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU1dlYkdMU2hhZGVyLmgiPgogICAg
ICAgPEZpbHRlcj5EZXJpdmVkU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAt
MTQzMzEsNiArMTQzMjcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52
YXNcV2ViR0xSZW5kZXJidWZmZXIuaCI+CiAgICAgICA8RmlsdGVyPmh0bWxcY2FudmFzPC9GaWx0
ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNh
bnZhc1xXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCI+CisgICAgICA8RmlsdGVyPmh0bWxcY2FudmFz
PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
dG1sXGNhbnZhc1xXZWJHTFNoYWRlci5oIj4KICAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8L0Zp
bHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTE1MDU0LDI1ICsxNTA1Myw2IEBACiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHdlYmRhdGFiYXNlXERhdGFiYXNlQmFja2VuZFN5
bmMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcd2ViZGF0YWJhc2Vc
U1FMU3RhdGVtZW50U3luYy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxl
c1x3ZWJkYXRhYmFzZVxTUUxUcmFuc2FjdGlvbkJhY2tlbmRTeW5jLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xGb250UmFuZ2VzLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXGNhbnZhc1xXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmgiPgotICAgICAgPEZpbHRlcj5odG1sXGNhbnZhczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxjYW52YXNcV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5oIj4KLSAgICAgIDxGaWx0ZXI+aHRtbFxjYW52YXM8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcY2FudmFzXFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmh0bWxcY2FudmFzPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlwuLlwuLlwuLlxX
ZWJLaXRCdWlsZFxSZWxlYXNlXG9iajY0XFdlYkNvcmVcRGVyaXZlZFNvdXJjZXNcSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkU291cmNlczwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cLi5cLi5cLi5c
V2ViS2l0QnVpbGRcUmVsZWFzZVxvYmo2NFxXZWJDb3JlXERlcml2ZWRTb3VyY2VzXEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZFNvdXJjZXM8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXC4uXC4uXC4u
XFdlYktpdEJ1aWxkXFJlbGVhc2Vcb2JqNjRcV2ViQ29yZVxEZXJpdmVkU291cmNlc1xKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWRTb3VyY2VzPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgog
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGNzc1xDU1NHcmFtbWFyLnkuaW4iPgpAQCAtMTUyODMsNCAr
MTUyNjMsNCBAQAogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVx3aW48L0ZpbHRlcj4KICAgICA8L01B
U00+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBmMDdiNGJjZmJmYTk4NDdhYzIyYThkYWY2NTVhYTBlZjc0YmJl
MjM2Li5hYTc2NTgwYjY4MGZhOWZiNTY2MjEwZWRlMjQzNDg2Mjc3NzNlNzRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzI1
LDggKzE3MjUsOCBAQAogCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJi
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oICovOyB9OwogCQk0
OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCQzEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5QzdC
OUREMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRDEwNDJEMzJGMDAw
OUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwotCQk0OUM3QjlERjEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcg
LyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07Ci0JCTQ5QzdCOUUwMTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcg
LyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmggKi87IH07CiAJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlD
MjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3BwICovOyB9OwogCQk0OUM3QjlFMzEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNo
YWRlci5oICovOyB9OwogCQk0OUM3QjlFNTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdC
OUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFRleHR1cmUuY3BwICovOyB9OwpAQCAtMTc2Niwx
MCArMTc2NiwxMCBAQAogCQk0OUVFRDE0MzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmggKi87IH07CiAJCTQ5RUVEMTQ0MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwICovOyB9OwogCQk0OUVFRDE0NTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oICovOyB9OwotCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmggKi87IH07CisJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovOyB9
OwogCQk0OUVFRDE0RTEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDlFRUQxNEYxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0wx
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUQxNEYxMDUxOTcxQTAwMDk5RkFC
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCTQ5RUVEMTUwMTA1MTk3
MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEQxMDUxOTcxQTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCTQ5
RkM3QTUwMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGQzdBNEYxNDQ0QUY1
RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi87IH07CiAJCTQ5RkZCRjFE
MTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkZCRjFDMTFDODU1MEUwMDZBNzEx
OCAvKiBHcmFwaGljc0NvbnRleHQzRE1hYy5tbSAqLzsgfTsKQEAgLTU4MzgsMTIgKzU4MzgsNiBA
QAogCQlEMzU5RDc5MzEyOUNBM0MwMDAwNkU1RDIgLyogRE9NSFRNTERldGFpbHNFbGVtZW50SW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
NTlENzkwMTI5Q0EzQzAwMDA2RTVEMiAvKiBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5o
ICovOyB9OwogCQlEMzU5RDhCRTEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM1
OUQ4QkMxMjlDQTU1QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmNwcCAqLzsgfTsK
IAkJRDM1OUQ4QkYxMjlDQTU1QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzU5RDhCRDEyOUNB
NTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLzsgfTsKLQkJRDM5QzcyRDcx
QTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRDUxQTVDOEIwQjAw
QUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovOyB9OwotCQlEMzlDNzJE
ODFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRDYxQTVDOEIwQjAw
QUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLzsgfTsKLQkJRDM5QzcyREQx
QTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyREIxQTVDOEM4RTAwQUVE
ODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OwotCQlEMzlDNzJERTFBNUM4
QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyREMxQTVDOEM4RTAwQUVEODlDIC8q
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKLQkJRDM5QzcyRTQxQTVDOTNBRjAwQUVE
ODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJFMzFBNUM5M0FGMDBBRUQ4OUMg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKLQkJRDM5QzcyRTYx
QTVDOTQwQjAwQUVEODlDIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJFNTFB
NUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCAq
LzsgfTsKIAkJRDNBOTRBMzgxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTMxMTIy
REFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgKi87IH07CiAJCUQzQTk0QTM5MTIy
REFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlh
UXVlcnlMaXN0LmggKi87IH07CiAJCUQzQTk0QTNCMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEM0E5NEEzNDEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci5oICovOyB9OwpAQCAtNTg1MywxMCArNTg0Nyw2IEBACiAJCUQzQUExMEY0MTIzQTk4QUEwMDky
MTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlN
YXRjaGVyLmggKi87IH07CiAJCUQzRDRFOTcyMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgKi87
IH07CiAJCUQzRDRFOTczMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRDRFOTcxMTMw
QzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLzsgfTsKLQkJRDNFMTRCQjUx
QTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCMzFBNURDRjRCMDA5
N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKLQkJRDNFMTRCQjYx
QTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjQxQTVEQ0Y0QjAwOTdB
NkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OwotCQlEM0UxNEJCOTFBNURD
RjdCMDA5N0E2RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkI3MUE1RENGN0IwMDk3
QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovOyB9OwotCQlEM0UxNEJC
QTFBNURDRjdCMDA5N0E2RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCODFBNURDRjdC
MDA5N0E2RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi87IH07CiAJCUQ2MTlB
MzA3MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA1MTQ0RTAwQkUw
MDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcCAqLzsgfTsKIAkJRDYxOUEzMDgx
NDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2MTlBMzA2MTQ0RTAwQkUwMDRCQzMw
MiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmggKi87IH07CiAJCUQ2NDg5RDI1MTY2RkZDRjEw
MDdDMDMxQiAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDY0ODlEMjMxNjZGRkNGMTAwN0MwMzFCIC8qIEpT
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgKi87IH07CkBAIC04ODAyLDkgKzg3OTIsOSBAQAogCQk0
OUM3QjlCQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QkQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QkUxMDQyRDMyRjAwMDlENDQ3
IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlCRjEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDsgcGF0aCA9IGNh
bnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRl
cmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMMVJlbmRlcmluZ0Nv
bnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QzAxMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlD
N0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9IGNhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlDMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xTaGFkZXIuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMU2hhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QzMx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMU2hhZGVyLmg7IHBhdGggPSBjYW52YXMvV2ViR0xTaGFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QzQxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMU2hhZGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFNoYWRlci5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0xTaGFkZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODg0NiwxMCArODgzNiwxMCBAQAogCQk0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUVFRDEzRTEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDEzRjEw
NTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUQxNDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MDEwNTE5
Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMVJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVF
RDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUVFRDE0RDEw
NTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RkM3QTRGMTQ0NEFG
NUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlGRkJGMUMxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNz
Q29udGV4dDNETWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
R3JhcGhpY3NDb250ZXh0M0RNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MzMyNiwxMiArMTMzMTYsNiBAQAogCQlEMzU5RDc5MDEyOUNBM0MwMDAwNkU1RDIgLyogRE9NSFRN
TERldGFpbHNFbGVtZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NSFRNTERldGFpbHNFbGVtZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRDM1OUQ4QkMxMjlDQTU1QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTERldGFpbHNF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDM1OUQ4QkQxMjlDQTU1
QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTSFRNTERldGFpbHNFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUQzOUM3MkQ1MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMzlDNzJENjFBNUM4QjBC
MDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHBhdGggPSBjYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlEMzlDNzJEQjFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDM5QzcyREMxQTVDOEM4RTAwQUVEODlDIC8qIFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDM5QzcyRTMxQTVDOTNBRjAw
QUVEODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEMzlDNzJFNTFBNUM5NDBCMDBBRUQ4
OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQTk0QTMxMTIyREFCQUMwMEEz
N0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUQzQTk0QTMyMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEM0E5NEEzMzEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3Qu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzQzLDEyICsxMzMyNyw2IEBACiAJCUQzQUExMEYyMTIz
QTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0Y2hlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZWRpYVF1ZXJ5TWF0Y2hlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxTdW1tYXJ5RWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcxMTMwQzdDRkUwMDdC
QTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTFN1bW1hcnlFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUQzRTE0QkIzMUE1RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDNFMTRCQjQxQTVEQ0Y0
QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJRDNFMTRCQjcxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlEM0UxNEJCODFBNURDRjdCMDA5N0E2RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlEM0UxNEJCQjFB
NURFOEY1MDA5N0E2RTkgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBuYW1lID0gV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBjYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUQz
RTE0QkJDMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbDsgcGF0
aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDYxOUEzMDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0
aW9uU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2hpbGRM
aXN0TXV0YXRpb25TY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ2MTlB
MzA2MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDY0ODlEMjMxNjZGRkNGMTAwN0MwMzFCIC8qIEpTSFRN
TFRlbXBsYXRlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTU4NTQsMTUgKzE1ODMyLDkgQEAKIAkJCQk0OUM3QjlCOTEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJidWZmZXIuY3BwICovLAogCQkJCTQ5QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmJ1ZmZlci5oICovLAogCQkJCTQ5QzdCOUJCMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmJ1ZmZlci5pZGwgKi8sCi0JCQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5QzdCOUMwMTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8sCi0JCQkJNDlDN0I5QzExMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsICovLAotCQkJCUQzOUM3
MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKLQkJ
CQlEMzlDNzJEQzFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICov
LAotCQkJCUQzRTE0QkJCMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmlkbCAqLywKLQkJCQlEMzlDNzJENTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAgKi8sCi0JCQkJRDM5QzcyRDYxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKLQkJCQlEM0UxNEJCQzFBNURFOEY1MDA5N0E2RTkg
LyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgKi8sCisJCQkJNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJNDlDN0I5QzAx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCTQ5QzdC
OUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsICovLAogCQkJ
CTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi8sCiAJCQkJNDlD
N0I5QzMxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggKi8sCiAJCQkJNDlDN0I5QzQx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmlkbCAqLywKQEAgLTE4OTMxLDEyICsxODkw
Myw4IEBACiAJCQkJNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmgg
Ki8sCiAJCQkJNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIu
Y3BwICovLAogCQkJCTQ5QzdCOThCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUmVuZGVyYnVm
ZmVyLmggKi8sCi0JCQkJRDNFMTRCQjcxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAgKi8sCi0JCQkJRDNFMTRCQjgxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAotCQkJCTQ5RUVEMTQwMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5RUVEMTQxMTA1
MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAqLywKLQkJCQlEM0Ux
NEJCMzFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywK
LQkJCQlEM0UxNEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0
LmggKi8sCisJCQkJNDlFRUQxNDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCAqLywKKwkJCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQk0OUM3Qjk4RjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFNoYWRlci5jcHAgKi8sCiAJCQkJNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xTaGFkZXIuaCAqLywKIAkJCQlBMDdEMzM1MzE1MkI2MzBFMDAxQjYzOTMgLyogSlNXZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5jcHAgKi8sCkBAIC0yMTAzMSw5ICsyMDk5OSw3IEBACiAJCQkJ
N0M3M0ZCMTcxOTFFRjgwODAwN0RFMDYxIC8qIEpTVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFj
ZUN1c3RvbS5jcHAgKi8sCiAJCQkJQkU2REY3MDgxNzFDQTJDNTAwREQ1MkI4IC8qIEpTVmlkZW9U
cmFja0N1c3RvbS5jcHAgKi8sCiAJCQkJQkU2REY3MEExNzFDQTJDNTAwREQ1MkI4IC8qIEpTVmlk
ZW9UcmFja0xpc3RDdXN0b20uY3BwICovLAotCQkJCUQzOUM3MkU1MUE1Qzk0MEIwMEFFRDg5QyAv
KiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICovLAotCQkJCTQ5RUVEMTRD
MTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICov
LAotCQkJCUQzOUM3MkUzMUE1QzkzQUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwICovLAorCQkJCTQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyNzVCNzgxMUM1RDFDMzAwQzky
MDZDIC8qIEpTV2ViS2l0UG9pbnRDdXN0b20uY3BwICovLAogCQkJCUUxQ0E1Q0JCMEU4Q0RDQUYw
MEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi8sCiAJCQkJRTE4MjU4QUIwRUYzQ0Q3MDAw
OTMzMjQyIC8qIEpTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwICovLApAQCAtMjUyNDUsNyAr
MjUyMTEsNyBAQAogCQkJCTkzRjFENUMxMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTlDMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5OUUxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVEMTQ3
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5QTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
V2ViR0xTaGFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwN0QzMzU2MTUyQjYzMEUwMDFCNjM5
MyAvKiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUM3QjlBNTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICov
LApAQCAtMjU0ODMsNyArMjU0NDksNiBAQAogCQkJCTE0MTE1QjUyMDlGODRCNzEwMENBNEZDMSAv
KiBOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczMTBBMjI5N0JFMDA1OEQ3QUQgLyog
Tm9kZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzMwQTIyOTdCRTAwNThEN0FE
IC8qIE5vZGVGaWx0ZXJDb25kaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUQzRTE0QkI2MUE1
RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg1NEZFNzM1MEEyMjk3QkUwMDU4RDdBRCAvKiBOb2RlSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4MTg3MjFCMDk3N0QzQzAwMDU4MjZEOSAvKiBOb2RlTGlzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjMxODlBRTMwRTgzQTMzMzAwMDEyRTQxIC8qIE5vZGVSYXJlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNTcxNCw3ICsyNTY3OSw2IEBACiAJCQkJRTQzQTAyM0IxN0VC
MzcwQTAwNENERDI1IC8qIFJlbmRlckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUI3
QTU1MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThFQTczQzQwQTE5MDBFMzAwQThFRjVGIC8qIFJlbmRlckZpZWxkc2V0LmggaW4g
SGVhZGVycyAqLywKLQkJCQlEM0UxNEJCQTFBNURDRjdCMDA5N0E2RTkgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjZDNzczMTBBQjYwM0ZEMDAy
MzhDQzQgLyogUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTUz
QzgyOThFMTNEOEQ5MjcwMERFMkRFQiAvKiBSZW5kZXJGbGV4aWJsZUJveC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTA4Q0NBNEYxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCBp
biBIZWFkZXJzICovLApAQCAtMjU5ODUsNyArMjU5NDksNiBAQAogCQkJCUFCNzE3MDg5MEIzMTE4
MDgwMDE3MTIzRSAvKiBTZWFyY2hQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjFF
MUVDMUE0MEZEREMwMDM0OEQxMyAvKiBOU1BvcG92ZXJTUEkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3NkYzNkVCMTQ2ODYyMjUwMDVFOTNCNCAvKiBTZWN1cml0eUNvbnRleHQuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUQzOUM3MkQ4MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QwRTBGQjBFOTcyQzM1MDAyNjVERUEgLyog
U2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDBFMEZDMEU5NzJDMzUwMDI2
NURFQSAvKiBTZWN1cml0eU9yaWdpbkhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NEQyREE1
MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjY2MSw3ICsyNjYyNCw3IEBACiAJCQkJNDlDN0I5RDUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlENzEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlEQTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOUUwMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwN0QzMzU4MTUyQjYzMkQwMDFCNjM5MyAvKiBXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDFEM0NGODcxNEJE
MEEzMDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI2
NzMwLDcgKzI2NjkzLDYgQEAKIAkJCQlBMTQ4MzJDMTE4N0Y2NTdBMDBEQTYzQTYgLyogV0tUeXBl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQzMxODdGNjVERjAwREE2M0E2IC8qIFdLVXRp
bGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDNDE4N0Y2NjNDMDBEQTYzQTYgLyog
V0tWaWV3LmggaW4gSGVhZGVycyAqLywKLQkJCQlEMzlDNzJERTFBNUM4QzhFMDBBRUQ4OUMgLyog
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQzYxODdG
NjY4RjAwREE2M0E2IC8qIFdLVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTkx
OTk3MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkU0MzQ2NDYwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNzcyNCw3ICsyNzY4Niw2IEBACiAJCQkJQkM1M0RBNDgxMTQzMTM0RDAwMEQ4MTdFIC8qIERP
TVdyYXBwZXJXb3JsZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTFEMTM4MTBBNTMyNTUyMDA2
NEJGNUYgLyogRE9NWFBhdGgubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBMjBBQjNBMEM3
MDAwNjlDRDAgLyogRE9NWFBhdGhFeHByZXNzaW9uLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRDM5
QzcyRDcxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODVFOUUwQTYwQUIzQTBDNzAwMDY5Q0QwIC8qIERPTVhQYXRoUmVz
dWx0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQxNzYyRTMxNzY2ODZFQTAwRDgzNkE4IC8qIERv
d25TYW1wbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Q0E1OTVFMEIyN0JEOUUwMEZBMDIx
RCAvKiBEcmFnQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4Nzc0LDcgKzI4NzM1
LDYgQEAKIAkJCQkyNjc3MjYwNDFBNURGNkYyMDAzQzI0REQgLyogVVJMRmlsdGVyUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGREE3QzE2MTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREE3QzE4MTg4MzIyRUIwMEM5NTRCNSAvKiBKU1Rv
dWNoRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRDM5QzcyRTYxQTVDOTQwQjAwQUVEODlD
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkRBN0MxQTE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3VjaExpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMDcwMzM0RTkxNDVBMUYzNjAwOEQ4RDQ1IC8qIEpTVHJhY2tDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDc4NDYzNDIxNDVCMTUxQTAwQTU4REYxIC8qIEpTVHJhY2tF
dmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI4ODE0LDggKzI4Nzc0LDggQEAKIAkJCQk5M0Yx
RDVDMDEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5QzdCOTlCMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0OUM3Qjk5RDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlG
QUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5
RUVEMTRGMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVEMTRGMTA1MTk3
MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OUM3QjlBMjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFNoYWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMDdEMzM1NTE1MkI2MzBFMDAxQjYzOTMgLyogSlNXZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlBNDEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODk3
Nyw3ICsyODkzNyw2IEBACiAJCQkJMDc4RTA5MDMxN0QxNENFRTAwNDIwQUExIC8qIE1lZGlhU3Ry
ZWFtVHJhY2tFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwN0ZGREU2ODE4MUFFRDQyMDA3
MkQ0MDkgLyogTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MDc2MzA2RDIxN0UxNDc4RDAwNUE3QzRFIC8qIE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlEM0UxNEJCNTFBNURDRjRCMDA5N0E2RTkgLyogSlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNENjQxRUJGMTgx
OUIzNjAwMEVFNEM0MSAvKiBNZWRpYVRpbWVBVkZvdW5kYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQ0Q2MEMwQzYxOTNFODdDNzAwM0M2NTZCIC8qIE1lZGlhVGltZVFUS2l0Lm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMDcwNTg1M0ExN0ZFMDc3MDAwNUYyQkNCIC8qIE1lZGlhVHJhY2tDb25z
dHJhaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk0NzIsNyArMjk0MzEsNiBAQAogCQkJCTRC
NkZBNkY3MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFNEFGRDAwQjBEQUYzMzU0MDBGNUY1NUMgLyogU01JTFRpbWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRTRBRkQwMEQwREFGMzM1NTAwRjVGNTVDIC8qIFNNSUxUaW1lQ29udGFpbmVy
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUQzOUM3MkU0MUE1QzkzQUYwMEFFRDg5QyAvKiBKU1dl
YkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRDRB
MzMxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUVycm9yQmFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTBENEEzNjEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxl
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUFCQUUxRjEwM0MxOTEzMDA4QzUyNjAgLyog
U29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc2MSw3ICsy
OTcxOSw2IEBACiAJCQkJNjU1MEI2QTUwOTlERjAyNzAwOTBENzgxIC8qIFRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQ0U3QjJEQjYxNTg2QUJBRDAwOThCM0ZBIC8qIFRleHRBbHRlcm5hdGl2
ZVdpdGhSYW5nZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGNTREQ0U1MTg4MTA1MUQwMDNFRURC
QiAvKiBUZXh0QXV0b1NpemluZy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlEM0UxNEJCOTFBNURD
RjdCMDA5N0E2RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTM3MkMwMEM0MTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM5NzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5k
YXJpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0Q4QTVGMDE1RjU2RjJDMDA5OEQwNzEgLyog
VGV4dEJyZWFrSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTk1NSw3ICsyOTkxMiw3
IEBACiAJCQkJNDlDN0I5RDQxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5QzdCOUQ2MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdM
UmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOURGMTA0MkQzMkYwMDA5
RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5
QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEwOENGMTU0MTUyQjc3QjMwMDlDNTc3NSAvKiBXZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwMUQzQ0Y4NjE0QkQw
QTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0z
MDAwNSw3ICsyOTk2Miw2IEBACiAJCQkJOTNFQzQ0QTExODhGNEJCODAwNjYxREYxIC8qIFdoZWVs
RXZlbnREZWx0YVRyYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM4MEY0NzMwOUExMUFC
NDAwMUZEQjM0IC8qIFdpZGdldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDUzOTA0RDBFQUZE
NjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJRDM5QzcyREQx
QTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM4MEY0NzgwOUExMUFDQzAwMUZEQjM0IC8qIFdpZGdldE1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzOUIwMkVFMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDODI0M0U4MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dG
ZWF0dXJlcy5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJbk9uZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCmluZGV4IGU3NjIxN2Y5NTZhYThiM2E4ZTUyOWRk
MjM1Yzc1NjQ3MTc2Yzg3YjEuLmY3ZDdiNmI1NDEwMWY5Nzk3ZmRjZTNiOTc2OGJkYzk0NWZlODRl
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQmluZGluZ3NBbGxJ
bk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbElu
T25lLmNwcApAQCAtMTMxLDkgKzEzMSw2IEBACiAjaW5jbHVkZSAiSlNUcmVlV2Fsa2VyQ3VzdG9t
LmNwcCIKICNpbmNsdWRlICJKU1ZpZGVvVHJhY2tDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTVmlk
ZW9UcmFja0xpc3RDdXN0b20uY3BwIgotI2luY2x1ZGUgIkpTV2ViR0wxUmVuZGVyaW5nQ29udGV4
dEN1c3RvbS5jcHAiCi0jaW5jbHVkZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cCIKLSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIgogI2lu
Y2x1ZGUgIkpTV2ViS2l0UG9pbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTV29ya2VyQ3VzdG9t
LmNwcCIKICNpbmNsdWRlICJKU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAppbmRleCA5YTg0Nzg2NGEyMDQ5NjQ0OWNjZGJlMWZlZGMxMTUyOWRkODQx
NGUxLi4zYmQyYWY0MjY1OGUzYjM0YzExNDExMDRiOTFlNzFlNjQ2NDE2OWJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMyLDEwICszMiw4IEBACiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CkBAIC01MywxMCArNTEs
OCBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbnZhc1JlbmRlcgogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAK
ICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKG9iamVjdC0+aXNXZWJHTDEoKSkKLSAgICAgICAg
cmV0dXJuIHdyYXA8SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMMVJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKLSAgICBpZiAob2JqZWN0
LT5pc1dlYkdMMigpKQotICAgICAgICByZXR1cm4gd3JhcDxKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dCo+KG9i
amVjdCkpOworICAgIGlmIChvYmplY3QtPmlzM2QoKSkKKyAgICAgICAgcmV0dXJuIHdyYXA8SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Kj4ob2JqZWN0KSk7CiAjZW5kaWYKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihvYmplY3QtPmlzMmQoKSk7CiAgICAgcmV0dXJuIHdyYXA8SlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKj4ob2JqZWN0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDgxY2I0MTFmN2U2OTU0Nzg0OTZhMzZmYjMxMTYy
ZTQyZGNiNTBjMDQuLjZiZjE2NzQ2ODgyZGViNjM2NTdiM2MzZTNiZjE3ZWNiNmRjNjE1YzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCkBA
IC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCiAjaWYgRU5BQkxFKFdF
QkdMKQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUg
IkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjZW5kaWYKIAogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCmluZGV4IDJmY2NjZmZiZjVlYjQwM2RkM2U4ZjE4NWMwODhl
NDQzM2Y2YzI1NzEuLjg5NDhhMzQyMGFkYmY3Mzc3ZjRhZWQ1MDlhNmJmZTU3ZDcxMmZhYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAj
aW5jbHVkZSAiSlNEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJHTENvbnRleHRBdHRyaWJ1dGVzLmgiCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljMzAwYzc2OTc3M2Q2YmIwMDFh
MzU3MzdiNTNiNGZiODNjMzc3ZGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgIkpTV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZv
aWQgSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
NjVjY2U4NTk2N2UzOTRiMGY0Njc0ZGRjZjBlMTRkOWNkOTYwZmYwLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgIkpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgCi12b2lkIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRB
ZGRpdGlvbmFsQ2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgdmlzaXRvci5h
ZGRPcGFxdWVSb290KCZpbXBsKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI3ZDk1MzU0Y2RkN2EyMDE3ODg1OWMzNDEwNjVl
ZTZkMDY4NGRhZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VD
dXN0b20uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQkdMKQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
IgotCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJFWFRCbGVu
ZE1pbk1heC5oIgotI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkVYVFNoYWRl
clRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIK
LSNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU0VYVEJsZW5k
TWluTWF4LmgiCi0jaW5jbHVkZSAiSlNFWFRGcmFnRGVwdGguaCIKLSNpbmNsdWRlICJKU0VYVFNo
YWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgotI2luY2x1ZGUgIkpTRVhUc1JHQi5oIgotI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0ltYWdl
RGF0YS5oIgotI2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgotI2luY2x1ZGUgIkpT
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0Lmgi
Ci0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1Rl
eHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIu
aCIKLSNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJH
TEJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2lu
Y2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJKU1dl
YkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJKU1dlYkdMUmVuZGVy
YnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xU
ZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUg
IkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgotI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0
cml4LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50
SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1
ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5o
IgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNp
bmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRl
ICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdSZW5k
ZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIldl
YkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgotI2luY2x1
ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIldlYkdMR2V0SW5mby5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmgiCi0jaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgotI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTFZp
ZGVvRWxlbWVudC5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8p
Ci17Ci0gICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZUJvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwot
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRB
cmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0g
aW5mby5nZXRCb29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZh
bHVlLnNpemUoKTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1
ZVtpaV0pKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9i
amVjdCwgbGlzdCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0Ogot
ICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdM
R2V0SW5mbzo6a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNO
dWxsKCk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihp
bmZvLmdldFVuc2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdM
QnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0
V2ViR0xCdWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xGbG9hdEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVi
dWZmZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRX
ZWJHTEZyYW1lYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50
QXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRX
ZWJHTEludEFycmF5KCkpOwotICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0
QXJyYXkKLSAgICAgICAgLy8gY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xPYmplY3RBcnJh
eToKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFByb2dyYW06Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFByb2dyYW0oKSk7Ci0g
ICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xSZW5kZXJidWZmZXI6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFRleHR1cmU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFRleHR1cmUoKSk7Ci0g
ICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZEJ5dGVBcnJheToKLSAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZElu
dEFycmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0
V2ViR0xVbnNpZ25lZEludEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaW5mby5nZXRXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKCkpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLX0KLQotZW51bSBPYmplY3RUeXBlIHsKLSAgICBrQnVmZmVyLCBrUmVuZGVy
YnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRleEF0dHJpYgotfTsKLQotc3RhdGljIEpTVmFsdWUgZ2V0
T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3Rh
dGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICAKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gb2JqLT5pbXBsKCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0
SW5mbyBpbmZvOwotICAgIHN3aXRjaCAob2JqZWN0VHlwZSkgewotICAgIGNhc2Uga0J1ZmZlcjoK
LSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUs
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrUmVuZGVyYnVmZmVyOgotICAgICAgICBp
bmZvID0gY29udGV4dC5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtUZXh0dXJlOgotICAgICAgICBpbmZvID0gY29u
dGV4dC5nZXRUZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI6Ci0gICAgICAgIC8vIHRhcmdldCA9PiBpbmRleAotICAg
ICAgICBpbmZvID0gY29udGV4dC5nZXRWZXJ0ZXhBdHRyaWIodGFyZ2V0LCBwbmFtZSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBvYmotPmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotZW51
bSBXaGljaFByb2dyYW1DYWxsIHsKLSAgICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KLX07
Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uKQotewotICAgIGlmICgh
ZXh0ZW5zaW9uKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgc3dpdGNoIChleHRlbnNp
b24tPmdldE5hbWUoKSkgewotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMTG9zZUNvbnRl
eHROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMTG9zZUNvbnRleHQqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpFWFRTaGFkZXJUZXh0dXJlTE9ETmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRTaGFkZXJUZXh0dXJlTE9EKj4oZXh0ZW5zaW9u
KSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpFWFRzUkdCTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRzUkdCKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6RVhURnJhZ0RlcHRoTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRGcmFnRGVwdGgqPihleHRlbnNpb24pKTsK
LSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRCbGVuZE1pbk1heE5hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUQmxlbmRNaW5NYXgq
PihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFyZERlcml2
YXRpdmVzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2YXRpdmVzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQqPihleHRlbnNp
b24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXJOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9F
U1RleHR1cmVGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1RleHR1cmVIYWxmRmxvYXROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXQqPihleHRlbnNpb24p
KTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0Kj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTRWxlbWVudEluZGV4VWludE5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
T0VTRWxlbWVudEluZGV4VWludCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246OldlYkdMRGVidWdSZW5kZXJlckluZm9OYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8qPihleHRl
bnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVyc05hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMqPihleHRlbnNpb24pKTsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWU6Ci0gICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpXZWJHTERlcHRoVGV4dHVyZU5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUqPihleHRlbnNpb24pKTsKLSAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERyYXdCdWZmZXJzTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERyYXdCdWZmZXJz
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6QU5HTEVJbnN0YW5jZWRB
cnJheXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc051bGwoKTsKLX0KLQotdm9pZCBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0K
LQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hhZGVy
cyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
LSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOwotICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFkZXJzOwot
ICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIHNo
YWRlcnMsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIH0KLSAgICBpZiAoIXN1Y2NlZWQp
Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lp
KQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJz
W2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxP
YmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgCi0gICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJp
bmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0Lmdl
dEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVj
dFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1
bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5m
byA9IGNvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0
YWNobWVudCwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQotICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFt
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBX
ZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICAK
LSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQ
cm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICgh
cHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRl
cmJ1ZmZlcik7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRT
aGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVu
dENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIAotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dl
YkdMU2hhZGVyOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7Ci0gICAg
aWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0Lmlz
Q29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxTdHJp
bmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFsdWUu
c2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShleGVj
LCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2Jq
ZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoIWxvY2F0aW9u
ICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZl
cnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgotYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0
b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAg
IGludDMyX3QgbGVuZ3RoID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7Ci0gICAgCi0gICAgaWYgKCF2ZWN0b3IudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2ZWN0b3Iu
cmVzaXplKGxlbmd0aCk7Ci0gICAgCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4ZWMp
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9u
VG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlmb3JtMnYsIGZfdW5pZm9ybTN2LCBmX3Vu
aWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBmX3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRl
eEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19OwotCi1lbnVtIERhdGFGdW5jdGlvbk1hdHJp
eFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZf
dW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJvb2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERh
dGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlm
b3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAg
IGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUg
ZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQpCi17Ci0gICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgCi0g
ICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKLSAgICBsb25nIGluZGV4ID0g
LTE7Ci0gICAgCi0gICAgaWYgKGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgewotICAgICAgICBsb2Nh
dGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKSk7Ci0gICAgICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICAKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIFJlZlB0
cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAgIGNh
c2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24s
IHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3
ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBm
X3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgd2Vi
R0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91
bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdM
QXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVy
dGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwg
d2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3Zl
cnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgs
IHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92
ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4
LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZf
dmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRl
eCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5
OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFy
cmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIAotICAgIHN3
aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9y
bTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlv
biwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihp
bmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGlu
ZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5k
ZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRl
eCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlv
blRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRv
SW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgCi0gICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChm
KSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZv
cm0xaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3Jt
Mml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYo
bG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0g
ICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkp
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgCi0gICAgc3dpdGNo
IChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMWl2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlv
biwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBh
cnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNW
YWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQotewot
ICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Io
ZXhlYykpOwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2Vi
R0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAg
IAotICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29s
ZWFuKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdM
QXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAg
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAg
ICAgc3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAg
ICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdM
QXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDNmdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwg
ZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIH0KLSAgICAKLSAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVj
dG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAKLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBj
YXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgotICAgICAgICBjb250
ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRy
aXg0ZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNw
b3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0z
diwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhlYywg
aW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uaShmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJm
diwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0
cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwot
fQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRy
aWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYo
Zl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMs
IGltcGwoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDRlYjBiN2I2YjA3
YTM0ZTZmMTk4ODNlMjE2ODAxMTYzYzM0YmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCkBAIC0w
LDAgKzEsNzY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUg
IkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFy
cmF5cy5oIgorI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiRVhURnJhZ0Rl
cHRoLmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5
cy5oIgorI2luY2x1ZGUgIkpTRVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJKU0VYVEZyYWdE
ZXB0aC5oIgorI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpT
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNFWFRzUkdCLmgiCisj
aW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxl
bWVudC5oIgorI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNPRVNFbGVtZW50
SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5j
bHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExp
bmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpT
T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlP
YmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5j
bHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVn
U2hhZGVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJK
U1dlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKKyNp
bmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hh
ZGVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgi
CisjaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFu
ZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVk
ZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9h
dC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJP
RVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVk
ZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgi
CisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVi
dWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJX
ZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKyNpbmNsdWRl
ICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNlbmRpZgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBX
ZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgeworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4o
aW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTog
eworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgICAgICBjb25zdCBWZWN0
b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAgICAgICAgIGxpc3QuYXBw
ZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5
KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6CisgICAgICAgIHJldHVybiBqc051
bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3Ry
aW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJp
bmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6CisgICAgICAg
IHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkpOworICAgIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgV2ViR0xPYmplY3RBcnJheQorICAgIC8vIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdM
T2JqZWN0QXJyYXk6CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9n
cmFtKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5k
ZXJidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0
dXJlKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJy
YXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdM
VW5zaWduZWRJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRBcnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9Cit9CisKK2VudW0gT2JqZWN0VHlwZSB7CisgICAga0J1ZmZl
ciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRyaWIKK307CisKK3N0YXRpYyBK
U1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBF
eGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKK3sKKyAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCA9IG9iai0+aW1wbCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbzsKKyAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKKyAgICBjYXNlIGtCdWZmZXI6Cisg
ICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKKyAgICAgICAgaW5m
byA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVGV4dHVyZToKKyAgICAgICAgaW5mbyA9IGNvbnRl
eHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBrVmVydGV4QXR0cmliOgorICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKKyAgICAg
ICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK2VudW0g
V2hpY2hQcm9ncmFtQ2FsbCB7CisgICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCit9Owor
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbikKK3sKKyAgICBpZiAoIWV4
dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIHN3aXRjaCAoZXh0ZW5zaW9u
LT5nZXROYW1lKCkpIHsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0
TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05h
bWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6RVhUc1JHQk5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUc1JHQio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVEZyYWdEZXB0aE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQmxlbmRNaW5NYXhOYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4o
ZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0
aXZlc05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9u
KSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpPRVNUZXh0dXJlSGFsZkZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7
CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246Ok9FU1ZlcnRleEFycmF5T2JqZWN0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1l
OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9F
U0VsZW1lbnRJbmRleFVpbnQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5z
aW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdM
RGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xEZXB0aFRleHR1cmVOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJy
YXlzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxBTkdMRUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ganNOdWxsKCk7Cit9CisKK3ZvaWQgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAg
cmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHBy
b2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKKyAgICBib29sIHN1Y2Nl
ZWQgPSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAg
IHJldHVybiBqc051bGwoKTsKKyAgICB9CisgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZv
ciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlz
dC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsK
KyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3Qp
OworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQorICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQgPSBpbXBsKCk7CisgICAgY29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEV4
dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7CisgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGV4dGVuc2lvbik7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVy
KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9
IGltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBwbmFt
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBX
ZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsK
K30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
ID0gaW1wbCgpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0
b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBl
Yyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKK30K
KworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisg
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoIWV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmluaGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVy
ID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
KyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIo
ZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFy
YW1ldGVyKHNoYWRlciwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
fQorICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1w
bCgpOworICAgIGlmIChjb250ZXh0LmlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRF
eHRlbnNpb25zKCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNp
emVfdCBpaSA9IDA7IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICBsaXN0LmFwcGVu
ZChqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB2YWx1ZVtpaV0pKTsKKyAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOwor
fQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQ
YXJhbWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYg
dmVjdG9yKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAg
IGludDMyX3QgbGVuZ3RoID0gb2JqZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpLnRvSW50MzIoZXhlYyk7CisKKyAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZlY3Rvci5yZXNp
emUobGVuZ3RoKTsKKworICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2VudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKKyAg
ICBmX3VuaWZvcm0xdiwgZl91bmlmb3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKKyAg
ICBmX3ZlcnRleEF0dHJpYjF2LCBmX3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBm
X3ZlcnRleEF0dHJpYjR2Cit9OworCitlbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7Cisg
ICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJp
eDRmdgorfTsKKworc3RhdGljIGJvb2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRv
Q2FsbCBmKQoreworICAgIHN3aXRjaCAoZikgeworICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAg
Y2FzZSBmX3VuaWZvcm0ydjoKKyAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgIGNhc2UgZl91bmlm
b3JtNHY6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9u
ZihEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSAwOworICAgIGxvbmcgaW5kZXggPSAtMTsKKyAgICAKKyAgICBp
ZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7CisgICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVu
aWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgaW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOworCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4g
d2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICAgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHdl
YkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAgIGNhc2UgZl91bmlmb3Jt
MXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoK
KyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Cisg
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCks
IGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6
CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5n
ZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2
OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXku
Z2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIz
djoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5
LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmli
NHY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJh
eS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1Zl
Y3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNl
IGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5
LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91
bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZv
cm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTR2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIx
djoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2
OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6
CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCksIGFy
cmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoK
KyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBK
U0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9j
YXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFs
b2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAKKyAgICBSZWZQdHI8
SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJh
eSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAg
ICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwg
ZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAg
ICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVj
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAg
ICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisKKyAgICBWZWN0b3I8aW50
LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisK
KyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0
LnVuaWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5p
Zm9ybTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3Jt
M2l2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYo
bG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0
aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0Nh
bGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpT
V2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNV
bmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwor
CisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xl
YW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdl
YkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Cisg
ICAgICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7
CisgICAgICAgIHN3aXRjaCAoZikgeworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoK
KyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgorICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKKyAgICBpZiAoIXRv
VmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCisgICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIHN3aXRjaCAoZikgeworICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAgICAgIGNvbnRl
eHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFy
cmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJp
eDRmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihm
X3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6
OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMs
IGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
aShmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4
ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChm
X3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRl
eEF0dHJpYjF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNm
dihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Zl
cnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCmluZGV4IDFiY2M1MDkxM2NjMGM4ZTRlMmQ2YWE2ZWJlNWI3MGQyM2M1ODAwZmUuLjM3MzEx
ZDZjYjc3ZWRmOTkzZTQ3NDEzODA2ZjkzZWE3NGI4OGJkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0yOTgzLDcgKzI5
ODMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKEdldEdl
bmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIkltcGwiKSB7CiAgICAgICAgICAgICAg
ICAgJHJvb3RTdHJpbmcgID0gIiAgICAke2ltcGxUeXBlfSogcm9vdCA9ICZqcyR7aW50ZXJmYWNl
TmFtZX0tPmltcGwoKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVh
Y2hhYmxlKCRpbnRlcmZhY2UpIGVxICJJbXBsV2ViR0xSZW5kZXJpbmdDb250ZXh0IikgewotICAg
ICAgICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpLmNvbnRleHQo
KSk7XG4iOworICAgICAgICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiByb290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCku
Y29udGV4dCgpKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVhY2hh
YmxlKCRpbnRlcmZhY2UpIGVxICJJbXBsRnJhbWUiKSB7CiAgICAgICAgICAgICAgICAgJHJvb3RT
dHJpbmcgID0gIiAgICBGcmFtZSogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1l
fS0+aW1wbCgpLmZyYW1lKCkpO1xuIjsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAuPSAi
ICAgIGlmICghcm9vdClcbiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCmluZGV4IGIxZmFlYjQ2OWY1ZDM2MWIwYTA1MWM1MDc1MDk2NTZjNDRhZjU1ZWEuLjY3ZGZk
NzkzMjZmZTBjM2U2ZDJmMmY5MzQxNGY3NGI2YjhlM2M3NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC01MiwxMCArNTIsOSBAQAogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAKLSNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpZiBFTkFCTEUoV0VCR0wpICAgIAogI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMTMsOCArMjEy
LDcgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRl
eHQoY29uc3QgU3RyaW5nJiB0eXBlLCBDYW52YXMKICAgICAgICAgICAgIGlmIChtX2NvbnRleHQg
JiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7Ci0gICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
dGhpcywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBOZWVk
IHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3Jl
YXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTI1Nyw3ICsyNTUsNyBAQCBib29sIEhUTUxD
YW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiBib29sIEhUTUxDYW52
YXNFbGVtZW50OjppczNkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gUmV0YWlu
IHN1cHBvcnQgZm9yIHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZS4KLSAgICByZXR1cm4gdHlw
ZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9PSAi
d2Via2l0LTNkIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIjsKKyAgICByZXR1cm4g
dHlwZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9
PSAid2Via2l0LTNkIjsKIH0KICNlbmRpZgogCkBAIC0zMjksNyArMzI3LDcgQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChpczNE
KCkgJiYgb2xkU2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCksIGhlaWdo
dCgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4obV9jb250
ZXh0LmdldCgpKS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGlm
IChhdXRvIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpAQCAtMzk2LDcgKzM5NCw3IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgciwgYm9vCiAKICNpZiBFTkFCTEUoV0VCR0wpICAgIAogICAgIGlm
IChpczNEKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
PihtX2NvbnRleHQuZ2V0KCkpLT5tYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAgICAgIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPm1hcmtMYXll
ckNvbXBvc2l0ZWQoKTsKICNlbmRpZgogfQogCkBAIC00NzcsNyArNDc1LDcgQEAgUmVmUHRyPElt
YWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6OmdldEltYWdlRGF0YSgpCiAgICAgaWYgKCFpczNE
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogY3R4ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+KG1fY29u
dGV4dC5nZXQoKSk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHggPSBzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJu
IGN0eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICNlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKaW5k
ZXggNTVjNzMyNjlmNGNmODIxYzI2ZDQ4ZjYzMzY2YmYwYjNjNWVkNWEyOC4uYzNjOGExZjBiMmJl
NjgyOTg5M2M5OWJiMjI5ZDU4NjVjMDQxZmU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmNwcApAQCAtMzQsNyArMzQsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUFOR0xFSW5zdGFuY2VkQXJyYXlzOjpBTkdMRUluc3Rh
bmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQorQU5HTEVJbnN0
YW5jZWRBcnJheXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkBAIC00OCw3ICs0
OCw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIEFOR0xFSW5zdGFuY2VkQXJyYXlz
OjpnZXROYW1lKCkgY29uc3QKICAgICByZXR1cm4gQU5HTEVJbnN0YW5jZWRBcnJheXNOYW1lOwog
fQogCi1ib29sIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRl
ZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAjaWYgUExBVEZPUk0oSU9TKSB8
fCBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5
MAogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJyYXlzLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCmluZGV4IDM5YmQyMzgzYzE5YTZiOGNkMTIw
YWY1NTIwNjMzNTFiODM2MTUwOWUuLjdkMDQwODY0MjVjOGMzYzVhNzczMjA0Yjg0NzQ1OTkyZThl
YjFlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFu
Y2VkQXJyYXlzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5j
ZWRBcnJheXMuaApAQCAtMzAsMTYgKzMwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDsKIAogY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXMgZmluYWwgOiBwdWJsaWMgV2ViR0xF
eHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IEFOR0xFSW5zdGFuY2VkQXJyYXlzKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBleHBsaWNpdCBBTkdMRUluc3RhbmNlZEFy
cmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5BTkdMRUluc3RhbmNl
ZEFycmF5cygpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdDsK
IAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAg
ICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKICAgICB2b2lkIGRy
YXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
LmgKaW5kZXggNTFhMjFmZTU2MGI2YzRlMzlkODhmYTYzOWNiY2I2ODQzMmFjMjliMi4uYjYyMzNl
MGE3YTI3OGQxYWRkZjNiYThiMWQ0MGNkMjA2YzAwZmQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaApAQCAtNTIsOSArNTIs
NyBAQCBwdWJsaWM6CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcygpIGNvbnN0IHsgcmV0
dXJuIG1fY2FudmFzOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzV2ViR0wxKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNXZWJHTDIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIGJvb2wgaXMzZCgpIGNvbnN0IHsgcmV0dXJuIGlzV2ViR0wxKCkgfHwgaXNXZWJHTDEo
KTsgfQorICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCmluZGV4IGY1ZWFk
YTY2ZmE1MmI1ZDZkNDljY2EzMGRhZDA4NGMzODgyYWVjMWEuLmFhNzkzYTU3YzkzODE4ZmE4ZDQ3
ZDJiNjYyMjhhZjJhZDhhM2Y2NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0VYVEJsZW5kTWluTWF4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9F
WFRCbGVuZE1pbk1heC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1FWFRCbGVuZE1pbk1heDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogY29udGV4dCkKK0VYVEJsZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXgu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgKaW5kZXggOGJk
OGM5MzNkN2ViZDAwN2NiN2M1OGEwNWRhYjc0MWY2NzIxMmVkMS4uNmFkYjkxMjRlNjM0YzcwOTVm
M2RkZmQyZjFkYjEzY2YyNGEyMTllOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRVhUQmxlbmRNaW5NYXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9F
WFRCbGVuZE1pbk1heC5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgRVhUQmxlbmRNaW5NYXggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIGV4cGxpY2l0IEVYVEJsZW5kTWluTWF4KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKTsKKyAgICBleHBsaWNpdCBFWFRCbGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKICAgICB2aXJ0dWFsIH5FWFRCbGVuZE1pbk1heCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRGcmFnRGVwdGguY3BwCmluZGV4IDg2NzA3MzZjY2MyYjhhNTY2MTQ2ZWU4NWY1OTE1
ZDFiZmZlNDMwNDkuLmM5MmNiN2I2MThhZGM3MmY1ZWY4ZjAyYTI4MWFmZDYwZDY2MWY4NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRoLmNwcApAQCAtMzAsNyAr
MzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEZyYWdEZXB0aDo6RVhURnJhZ0Rl
cHRoKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCitFWFRGcmFnRGVwdGg6OkVY
VEZyYWdEZXB0aChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFn
RGVwdGguaAppbmRleCAwYTM3MzU1MjZjNzlhZWM4ZDExYTVjYTdjYzU4ZDA2MWYzMmNiZjhiLi5l
Y2JkZjkxMTgzYjZiMjdjMTBkNTMzNzRkM2FjNmEzMjFlMzU5MjllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGguaApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEVYVEZyYWdEZXB0aCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVu
c2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRVhURnJhZ0RlcHRoKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAgICAgdmlydHVhbCB+RVhURnJhZ0RlcHRoKCk7CiAKICAgICB2aXJ0dWFsIEV4
dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAppbmRleCAwZGEzMjVkMDA4
MDk2ZmZkY2U4NzEzNGUxN2MyNjcwOGMzMzYyNDUyLi43YWU5OGJmNmIxMTZjNWNkNjc4MTZlZjY4
MjAxOWY4OTA0M2FiNDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9F
WFRTaGFkZXJUZXh0dXJlTE9ELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9F
WFRTaGFkZXJUZXh0dXJlTE9ELmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKK0VYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNo
YWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogICAgIDogV2Vi
R0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAppbmRleCAzMGJiMjM4YmZjNzMxYjU1ZGNiYzc1ZGQx
YWFlZDVhM2JjYzNhN2NhLi42Y2RjZmI1Yzg0NTZjMDI2M2NiMjJjZjEwN2ZhNGM4ZjQ2YWMwMDg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJl
TE9ELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxP
RC5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRVhUU2hh
ZGVyVGV4dHVyZUxPRCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0g
ICAgZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Kik7CisgICAgZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKICAgICB2aXJ0dWFsIH5FWFRTaGFkZXJUZXh0dXJlTE9EKCk7CiAKICAgICB2aXJ0dWFs
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5j
cHAKaW5kZXggZGE3NGM0YmUxMzg5NjNhMjk4NTZmM2Y1OTAwYTA1YTk4N2NhOTczZS4uYWI4ZjM2
MjdjNTc2MzFmYjUwMTk0OWZmNTM0YmVkNzU4Y2Q3ZjZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRVhUVGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSogY29udGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
ICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCmluZGV4
IGNlNjE1Zjk5ZmRmOWMwY2U1OTc5ZmMyNWVhYzNjMDgwYzBkMmViNGUuLmIwNDQ5MTA4OTQ4Mjgx
YjEwNDI5MzdlYTQ0YTkwNDU2MDVkOTM0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBs
aWNpdCBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOworICAgIGV4cGxpY2l0IEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMo
KTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVHNSR0IuY3BwCmluZGV4IDI0ZjUwODg4NjM1ZDRj
MTY5NDhkMGY2YjM2ZTUxYjcyMmI3ODNlZTUuLmRhODU4MWFjNDcwMWJjZmQ1M2YxN2Y1OTIxZjA2
NmI0Mjg0YzcwMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVHNS
R0IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVHNSR0IuY3BwCkBAIC0z
MCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRVhUc1JHQjo6RVhUc1JHQihX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQorRVhUc1JHQjo6RVhUc1JHQihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0
KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCmluZGV4IDA3MDE0YjNkNWM0
MGIxY2QyOGVlMjlhMDAyMzc0MWUxYWVkOWY5M2EuLjVhYWI1NDM5YWQ4YzI2OTZiZDQ5NjE0MmNi
OTFjNjdkM2NjM2UwNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VHNSR0IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgKQEAgLTMy
LDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRzUkdCIGZpbmFsIDog
cHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRzUkdCKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBleHBsaWNpdCBFWFRzUkdCKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwogICAgIHZpcnR1YWwgfkVYVHNSR0IoKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuY3BwCmluZGV4IDY1YjY4Mzhk
ZWI3ODk1MjQxNTQzMWMxMjRlNDgyZDNiNjE3YjU1ZGUuLjg3NWY5NzBiMDhmZGQ1MGE2NWM2MTM4
YWFkNGExNzI1ZjgzZDg2MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU0VsZW1lbnRJbmRleFVpbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU0VsZW1lbnRJbmRleFVpbnQuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotT0VTRWxlbWVudEluZGV4VWludDo6T0VTRWxlbWVudEluZGV4VWludChXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQorT0VTRWxlbWVudEluZGV4VWludDo6T0VT
RWxlbWVudEluZGV4VWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBX
ZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCmluZGV4IGI0Y2Y4YTRhZDJlYjcxY2E1NTcxODNi
NTBiMDk2ZTczNzZlODNkNmUuLjA4ZWUxNDQwYWQ5ZTk4ZTNlMjcwMzEwMmE2NjFlODMyZGMxZTk4
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRl
eFVpbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhV
aW50LmgKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNF
bGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKTsKKyAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVpbnQoKTsKIAogICAgIHZpcnR1
YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCmluZGV4
IGU3NTRhY2Y3M2M5ODg2ZjdjOWJjN2NmY2ZhMjZjOTYwYjdiNTJjOWEuLjc2MDNjNzc2MmM3NGFi
MDdiOWRlNTIxMGY2ZDcyOGMyZTIzYWRhNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VTU3RhbmRhcmREZXJpdmF0aXZlczo6T0VTU3Rh
bmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQorT0VT
U3RhbmRhcmREZXJpdmF0aXZlczo6T0VTU3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0
aXZlcy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oCmluZGV4IGZmMWQ0YWI1ZGYwYmFhYjNkODcyY2JlNGY4YTVkNDMyNGRlMmRjNTIuLjNiZWY4
Y2E5ODM1NTUxM2U0MWU4ZDFiMWJmM2QzMTk4ZGIwMzY1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgKQEAgLTMyLDcgKzMy
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVz
IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBP
RVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBl
eHBsaWNpdCBPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwog
ICAgIHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAppbmRleCBiOGZmZWM3ZDNjZTk3ODVhNDA1
MmVkMGEzOTAxNDFjYmRmNzM1ZTkxLi42ZDM0YmQzOGY2MTc5MzRjNWFjN2U0MmJjNjIyYWQxODJk
MDI4YjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJl
RmxvYXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9h
dC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0
dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250
ZXh0KQorT0VTVGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmgKaW5kZXggMjRhMDgxOTJi
ZmE3NDA0ZDRhNzhmODAxNDg0NTdjY2NkMmM0NThkOS4uZGM2ZmJlMjM5ZDdiNjZhNzcwYzFiMGNj
YWE5ZWJiNmVjYWQwZjAxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUZsb2F0LmgKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBPRVNUZXh0dXJlRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGlj
OgotICAgIE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAg
T0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogICAgIHZpcnR1YWwgfk9F
U1RleHR1cmVGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBj
b25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09F
U1RleHR1cmVGbG9hdExpbmVhci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlRmxvYXRMaW5lYXIuY3BwCmluZGV4IDJhMTBhNTBhZGVmYTA1YWRjYjU0MmNjYzRhOGM4
ZmYyOTMwYjQwZWUuLjhjZTQ4MzNiNTI3NzAyNWY5MmVmMmM3MDBjOWNkZmQ3MGY2NTFmMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVh
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1Rl
eHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIGNvbnRleHQpCitPRVNUZXh0dXJlRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVGbG9h
dExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVu
c2lvbihjb250ZXh0KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaAppbmRleCAwODhhZmM4YTA0NzcxZDI5NzM1MDlhN2Y0MjVh
YWYyNzNkMjI3MTQ5Li4xMDExN2UxMWJjNDMyMTMxNDNiNzI0MmY0YTYwY2VlNzM2NGJkYzUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1Rl
eHR1cmVGbG9hdExpbmVhciBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgT0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUZsb2F0TGluZWFyKCk7CiAKICAg
ICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAppbmRl
eCBiZGQxNjdjMDMyN2EzZjg1YWM3NGFjYzc4NjhhMDIzZTJjOGZkNDA3Li4yNDViMzk4Y2ZmODFl
ZGYxZjhjMDgyMzM0ZDIzZGMxZTUwNTE5NGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcApAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKK09FU1RleHR1cmVIYWxm
RmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAppbmRleCBjZTdlZTUyZGViYzQw
OTk0ZDgwMzUwZjI0Mzc4YzdkMDI0YmMxNTMwLi44NjQ5ZGFlMzE1MDdiZTQyNGM4MWYxOGZjNTUx
YmM4NDZiYzk4ODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUhhbGZGbG9hdC5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7
CiBwdWJsaWM6Ci0gICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
ICAgICB2aXJ0dWFsIH5PRVNUZXh0dXJlSGFsZkZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVu
c2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAppbmRleCA0
MjExYzgwNjI3MzMzYmJiZTQxYmE5NTVkZjQwYzlhNTM1NTEyZGI0Li4zMmRiNDk1NTJjODE2YjRm
NDVkNDEwMzBkYWRiNzI0OTJiZjA0NTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcApAQCAtMzAsNyArMzAs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6
Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKK09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24o
Y29udGV4dCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAppbmRleCBlNDY5NDQ4MDZkMGE4ODI3ZThiNjEzZGRj
N2FkMWM3MzQ4MTRjYTliLi45YjZmZTRhYjQxOGNjZTI2ZmZhNWU0NmQ1ZjE2NDNiZmE4ODZhM2Qy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0TGluZWFyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhh
bGZGbG9hdExpbmVhci5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhciBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVu
c2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmpl
Y3QuY3BwCmluZGV4IGY5MGRlZjhmZmFiNzdhMTY0ZGExMzk0NjRiODZhMzAwMjEwYzE3MTEuLmM4
Y2JmNDk0YTA5MTM3YzllZGE5Njk3Y2ViOTY3ZmUzMzQ3OWRjZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKQEAgLTMzLDcg
KzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNWZXJ0ZXhBcnJheU9iamVjdDo6
T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkK
K09FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJheU9iamVjdChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmpl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmgK
aW5kZXggNTFlOGEwNmExZmMyZWQzMzZkNGYzYjBlY2JiYTI1MWMzNGM0Mjk2Yy4uNjNlZTZhMWZh
YjY1YzI5NTc2NWMyM2EyOTkwYjg2MGQzZDVlZGFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCkBAIC0zMSwxNCArMzEsMTQgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OwogY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgT0VTVmVydGV4
QXJyYXlPYmplY3QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAg
IE9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBP
RVNWZXJ0ZXhBcnJheU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFs
IH5PRVNWZXJ0ZXhBcnJheU9iamVjdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdl
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ1MGM2YTQ5ZjE2NWVkMjkzMzAyZmI5Y2MzZjg2ZmZiYzI2NjYzMDUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJXZWJH
TDFSZW5kZXJpbmdDb250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotV2ViR0wxUmVu
ZGVyaW5nQ29udGV4dDo6V2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCog
cGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMp
Ci17Ci19Ci0KLVdlYkdMMVJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMVJlbmRlcmluZ0NvbnRleHQo
SFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKSA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBh
dHRyaWJ1dGVzKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TDFSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NTA5ZjA1
YWQxODExYTgzMTUxMTMwMjlhNzBhNDk1MzRkZGRkOGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wx
UmVuZGVyaW5nQ29udGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dF9oCi0jZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCi0KLSNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlIHsKLXB1YmxpYzoKLSAgICBXZWJHTDFSZW5kZXJpbmdDb250ZXh0KEhU
TUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwotICAgIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwotICAgIHZpcnR1
YWwgYm9vbCBpc1dlYkdMMSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0gICAgCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWE2YjIwOTAyZDRiMmVlYmRiZWU5YTUyMTUwMGY0Y2Q1ZDlkM2Y4ZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAorKysgL2Rldi9udWxsCkBA
IC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotWwotICAgIENvbmRpdGlvbmFsPVdFQkdMLAotICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9u
LAotICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi1dIGludGVyZmFjZSBXZWJHTDFSZW5kZXJpbmdD
b250ZXh0IDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSB7Ci19OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwNDA5MzUzY2VlNjI4ODY0ZTljZTFkOWM0YjRmNTQ0
Nzg0MzBmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoV0VCR0wp
Ci0jaW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMgYXR0cmlidXRlcykKLSAgICA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2Fu
dmFzLCBhdHRyaWJ1dGVzKQotewotfQotCi1XZWJHTDJSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENh
bnZhcywgY29udGV4dCwgYXR0cmlidXRlcykKLXsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmViMjE5NmRkYzNhMGI3Zjc5Njk1NDA4ZDE0OWNmM2UwMzc1Y2YyZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dF9oCi0KLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1
YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKLXB1YmxpYzoKLSAgICBXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMpOwotICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMpOwotICAgIHZpcnR1YWwgYm9vbCBpc1dlYkdMMigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTVjNDIwNzg4ODZmOGQ4OTdiYzgyOTVmNmE5M2U3NjI3
MTY1ZGQ5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsCisrKyAv
ZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLVsKLSAgICBDb25kaXRpb25hbD1XRUJHTCwKLSAgICBKU0N1c3RvbU1h
cmtGdW5jdGlvbiwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotXSBpbnRlcmZhY2UgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewotfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAppbmRleCAxMjE3NWExMzUzNDkw
ZjM3NGRjYjU3NDFmY2ZlYmNkNzdjOTBiNDJiLi4zYzU2MDZjZjRjNGI2NTM1ZGY5ZmI5OTMxMTYz
N2U0YmFmMzZiMzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIu
Y3BwCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogCiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xCdWZmZXI6OmNyZWF0
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogewogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xCdWZmZXIoY3R4KSk7CiB9CiAKLVdlYkdMQnVmZmVy
OjpXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCitXZWJHTEJ1ZmZl
cjo6V2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgOiBXZWJHTFNo
YXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3RhcmdldCgwKQogICAgICwgbV9ieXRlTGVuZ3RoKDAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAppbmRleCAyOGU2ODllODM2
ZTE4Mzk5MGU3NjVhMGU0MzYzMjE2ZmRhMWY5ZWJlLi5kOWJlODdjZGRmMWNlMjkzNjA5NzEwNDJk
ZjQ2MWVmZmViMTA1NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgV2ViR0xCdWZmZXIgZmluYWwgOiBwdWJsaWMgV2Vi
R0xTaGFyZWRPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMQnVmZmVyKCk7CiAK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRh
KEdDM0RzaXplaXB0ciBzaXplKTsKICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoSlNDOjpB
cnJheUJ1ZmZlciopOwpAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNFdmVy
QmVlbkJvdW5kKCkgY29uc3QgeyByZXR1cm4gb2JqZWN0KCkgJiYgbV90YXJnZXQ7IH0KIAogcHJv
dGVjdGVkOgotICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAg
ICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAKaW5kZXggNTBhZDY1NWFhODYzZWQ5MmNkNmI3MTVj
MTMxMzFkZjI2YmQ1ZDI5ZS4uN2E5MWMwM2ZkNDU0ZTQ1ZjEyMGY3ZTIyODhkNjcwZGMwZTY5NmRl
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCitXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4
dC0+YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FU
Q19SR0JfQU1EKTsKQEAgLTUwLDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5h
bWUgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6Z2V0TmFtZSgpIGNvbnN0CiAgICAgcmV0dXJu
IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOwogfQogCi1ib29sIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNv
bnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4g
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FNRF9jb21wcmVzc2VkX0FUQ190ZXh0dXJlIik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDLmgKaW5kZXggMGQ5ODE4YzNjZDU2YmZjNTAyYWE0NWU4NTU1ZjIyYmE4ZjI2ODQ4ZS4u
NmNmNjczMzY2ZTE2NjI5MmUyYzI0MWYxYmI1MzE5YzZiODU5YzlkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaApA
QCAtMzQsMTAgKzM0LDEwIEBAIGNsYXNzIFdlYkdMVGV4dHVyZTsKIAogY2xhc3MgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6
Ci0gICAgZXhwbGljaXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKik7CisgICAgZXhwbGljaXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyhXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSopOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKIAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKaW5kZXggOGNhYTRjNjg5ODU0OGZlZDYwMDcyNGRiZGRk
ODM0YjM2MjhhMDVjMy4uNjEyNmFlYzNmNzJiMmMzNGQwZmI0MGQ4Yjg4NGNhOGNhOGVmYzlmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQorV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250ZXh0LT5hZGRDb21wcmVz
c2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBW
MV9JTUcpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OmdldE5hbWUoKSBjb25zdAogICAgIHJldHVybiBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOwogfQogCi1ib29sIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0
dXJuIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0
YyIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMuaAppbmRleCAzNjFmMDllYmY1ZDU4Y2U0ZjZjMGZlMDRhNzIyMjI5
YjlkMGExNGM1Li45OWVkZjYwNTZhNWRhMDE5MTVlNzVjYzE0NTRlM2VmMjBmOGM0ODA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuaApAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0
ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5X
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRl
ZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXRO
YW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKaW5kZXggNDJiY2Qw
ODEwYzk0YzViYzU5YzFmN2FhNWVmZDkwZjJiZWFkMjRhYi4uYzVlMmNlZWY2NzQ4ZDY3M2YwMTAw
YWI1YjE3NjM3OTkzZmQ1YzczZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcApAQCAtMzAsMTEgKzMwLDEx
IEBACiAjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKIAogI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRl
eHQtPmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVCk7CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRl
bnNpb25OYW1lIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpnZXROYW1lKCkgY29uc3QKICAg
ICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOwogfQogCi1ib29sIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZChX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRl
bnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOwog
ICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfY29tcHJlc3Np
b25fczN0YyIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuaAppbmRleCA1NTkwZWY2N2RjODFmZGRiMzQ4OGZkNGE4YTI0
ZjcwMmY5OWM4NTk3Li5mNWY3Njc4NTUxOGM2YzU1MGQ3MDhlNDAwNzI0NGM3MWY3YWM5ZTU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmgKQEAgLTM0LDEwICszNCwxMCBAQCBjbGFzcyBXZWJHTFRleHR1cmU7CiAK
IGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0
ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
QyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAgZXhwbGljaXQgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB+V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5h
bWUoKSBjb25zdCBvdmVycmlkZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRHcm91cC5jcHAKaW5kZXggOTAxNjM1Yjg1YzQ2ZjZmODRmYTA2ZTllZGMz
NmU4N2Q2NjQ0MTk5MC4uZjg1ZTJmMTIyNjZhY2FiYzZhNzgxYjg0M2QxN2FjODg4NzI0ZDg4ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNw
cApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJHTFNoYXJlZE9iamVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MywxNiAr
NTMsMTYgQEAgV2ViR0xDb250ZXh0R3JvdXA6On5XZWJHTENvbnRleHRHcm91cCgpCiBHcmFwaGlj
c0NvbnRleHQzRCogV2ViR0xDb250ZXh0R3JvdXA6OmdldEFHcmFwaGljc0NvbnRleHQzRCgpCiB7
CiAgICAgQVNTRVJUKCFtX2NvbnRleHRzLmlzRW1wdHkoKSk7Ci0gICAgSGFzaFNldDxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOwor
ICAgIEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250
ZXh0cy5iZWdpbigpOwogICAgIHJldHVybiAoKml0KS0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIH0K
IAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBjb250ZXh0KQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6YWRkQ29udGV4dChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgbV9jb250ZXh0cy5hZGQoY29udGV4
dCk7CiB9CiAKLXZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OnJlbW92
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIFdlIG11
c3QgY2FsbCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzIGJlZm9yZSByZW1vdmluZyB0aGUgbGFz
dCBjb250ZXh0LgogICAgIGlmIChtX2NvbnRleHRzLnNpemUoKSA9PSAxICYmIG1fY29udGV4dHMu
Y29udGFpbnMoY29udGV4dCkpCkBAIC04OSw5ICs4OSw5IEBAIHZvaWQgV2ViR0xDb250ZXh0R3Jv
dXA6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQogICAgIH0KIH0KIAotdm9pZCBXZWJHTENv
bnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpM
b3N0Q29udGV4dE1vZGUgbW9kZSkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0
R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKIHsKLSAg
ICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+OjppdGVyYXRvciBpdCA9
IG1fY29udGV4dHMuYmVnaW4oKTsgaXQgIT0gbV9jb250ZXh0cy5lbmQoKTsgKytpdCkKKyAgICBm
b3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250
ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAgICAgICAoKml0
KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0
R3JvdXAuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmgK
aW5kZXggN2U1MDFjMjRhODhlNThlOGYyN2JhZGFiOTI2NTRhNGUwZmFjMDYxNi4uMmZlNDQzNzNm
N2Y4NjljYWU0ZDE0MzNiMzg5MTU1NTk3MjM1ODg3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVm
IFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3JvdXBfaAogCi0jaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgPFdlYkdMUmVuZGVy
aW5nQ29udGV4dC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdl
YkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFzcyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OwogCiB0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVibGljOgogICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKICAgICB+V2ViR0xD
b250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7Ci0gICAgdm9pZCByZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKTsKKyAgICB2b2lkIGFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
dm9pZCByZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdm9pZCBh
ZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZU9iamVjdChXZWJH
TFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0Nv
bnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6Okxvc3RDb250ZXh0TW9kZSk7CisgICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKIAogICBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBIYXNoU2V0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqPiBtX2NvbnRleHRzOworICAgIEhhc2hTZXQ8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Kj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdMU2hhcmVkT2JqZWN0
Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcAppbmRleCA0ZmYxMDc0YjE5MjZiYzNkNGExYjkwNWUy
YjgxZDg3ZjBlMTFhMjFiLi43ZDI1MTM5MTM3OTI2MWQxMjk4NGU2N2Y2ZjY4ODM2N2EzZmFiNTVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVj
dC5jcHAKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0T2JqZWN0
LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xD
b250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY29udGV4dCkKK1dlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0KGNvbnRleHQpCiAg
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgKaW5kZXggNDNmMDJlZGQ3OTdlMTQxZjk5MjlmNDA4ZjZk
Y2I4NmJiMDRiZmI1MC4uZThjMzkwMTJkZjIzMTlhYzhhZWE2Nzg1YjRhMDQ1MGI5YTc5ZjI3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmgK
QEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OwogCiAvLyBXZWJHTENvbnRleHRPYmplY3QgdGhlIGJhc2UgY2xhc3Mg
Zm9yIG9iamVjdHMgdGhhdCBhcmUgb3duZWQgYnkgYSBzcGVjaWZpYwogLy8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0LgpAQCAtMzksOSArMzksOSBAQCBjbGFzcyBXZWJHTENvbnRleHRPYmplY3QgOiBw
dWJsaWMgV2ViR0xPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMQ29udGV4dE9i
amVjdCgpOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCi0gICAgdmlydHVhbCBib29sIHZhbGlk
YXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUo
Y29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gY29udGV4dCA9PSBt
X2NvbnRleHQ7CiAgICAgfQpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRh
Y2hDb250ZXh0KCk7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTENvbnRleHRPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewpAQCAtNTksNyArNTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogZ2V0QUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250
ZXh0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcAppbmRleCAyMDNhNWMzNzdlMDA2YzgzMjk1ZWIxMWQw
MWM3NDJjMTM0MzMzYTc5Li5lOTVjMDg5ZGY2MDlmZTU0NWYxOWY4YjQ4NjcyNzVlOWQwODE1OGEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVy
ZXJJbmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmNwcApAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQorV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCmluZGV4IDA3YjhmNzI5M2Iy
MmNmNWIwZjQ1OGU2YjhkMGIwODNiYjMxYmQ2OTMuLjExMzZmNjRlNjQyMDllNzFjYzMyNTQ4MjVh
YjNkYzVlMzRkZjg4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRGVidWdSZW5kZXJlckluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgICAg
ICBVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTCA9IDB4OTI0NgogICAgIH07CiAKLSAgICBleHBsaWNp
dCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAg
ICBleHBsaWNpdCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwogICAgIHZpcnR1YWwgfldlYkdMRGVidWdSZW5kZXJlckluZm8oKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKaW5kZXggMmE5NmZlMjZhZDli
MDY2NDI3MjAxMWM0MmM3Njk2NjFiMzVkNGU4NS4uODI1MGVlMDY1NWYxNjIyMTc4ZDA1OTkyZmRm
NjYzZDRhNTAzZTVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEZWJ1Z1NoYWRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdTaGFkZXJzLmNwcApAQCAtMzAsMTIgKzMwLDEyIEBACiAjaW5jbHVkZSAiV2ViR0xEZWJ1
Z1NoYWRlcnMuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdl
YkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQorV2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQp
CiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVn
U2hhZGVycy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMu
aAppbmRleCA1YTllMzhiNGM0ZTc3NzIyNDc4ZWIzMzFjNjNkMmFhYzZmMjRjMTBlLi41YjAzZmJm
ZjcxMWFiZmM0Mjc0MmM5M2VlODVhMzE4OWU5YWU0YzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgKQEAgLTM2LDcgKzM2LDcgQEAgdHlwZWRl
ZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnMgZmluYWwgOiBw
dWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMRGVidWdT
aGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBleHBsaWNpdCBXZWJHTERl
YnVnU2hhZGVycyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICB2aXJ0dWFsIH5XZWJHTERl
YnVnU2hhZGVycygpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVwdGhUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhU
ZXh0dXJlLmNwcAppbmRleCA4ZmQ5MDc5MzVmM2IxMWNkMDA1MWIwMjAxMWNiNWZiMDUyYjIyZTIz
Li4zNzk1NTA2YTUyMGVmODViMjgyMDE4ZmQ5ZjBiMjQ2NjIxZWM0NGE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCkBAIC0zMyw3ICsz
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6OldlYkdM
RGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCitXZWJHTERl
cHRoVGV4dHVyZTo6V2ViR0xEZXB0aFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTERlcHRoVGV4dHVyZS5oCmluZGV4IDEzMGQwYzk4YTQyMjNh
ZjBmOTQwNmE1NzM2MDBkMjQwYzcxMjJlOGMuLmUyYWZmMzM0N2MxNTIxZjE0MjYwNDg5MWE3MDNl
MWViMjYwZWJlOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVwdGhUZXh0dXJlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0
aFRleHR1cmUuaApAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CisgICAgZXhwbGljaXQgV2ViR0xEZXB0aFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcAppbmRleCBiY2VhZWJmMjgwOWZjMTZkZTZj
ZmVjODBmNjUzZTFhNmRiMzZiOGRlLi5mNDVhOTEwM2ExZWQ2MGU1NGNlMWJhZmUyMTUwZTIwMWE1
Y2NiODc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdC
dWZmZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZm
ZXJzLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdM
RHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCkKK1dlYkdMRHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0K
QEAgLTQ4LDE0ICs0OCwxNCBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTERy
YXdCdWZmZXJzOjpnZXROYW1lKCkgY29uc3QKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDEwMDApCiAKLWJvb2wgV2ViR0xEcmF3QnVm
ZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKQorYm9vbCBXZWJHTERy
YXdCdWZmZXJzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KikKIHsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCitib29sIFdlYkdMRHJhd0J1ZmZl
cnM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRXh0
ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0
RXh0ZW5zaW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2Ry
YXdfYnVmZmVycyIpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJh
d0J1ZmZlcnNXRUJHTChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKQogfQogCiAvLyBz
dGF0aWMKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogd2ViZ2xDb250ZXh0KQorYm9vbCBXZWJHTERyYXdC
dWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IHdlYmdsQ29udGV4dCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IHdlYmds
Q29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCmluZGV4IGEzNmYyOTM3MjFhYThjMzk4YjQyNTQ1NWI5
YzIyMGU1MjFmNWU2ZDIuLmEyYmVkNDU1MjBlYmY2ZWVlMzU5ZDg1OTc3ZTFiNGVlN2Q5NTAyZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgKQEAg
LTMyLDE3ICszMiwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFdlYkdMRHJhd0J1
ZmZlcnMgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxp
Y2l0IFdlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIGV4
cGxpY2l0IFdlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmly
dHVhbCB+V2ViR0xEcmF3QnVmZmVycygpOwogCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFt
ZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3QnVmZmVyc1dFQkdMKGNvbnN0IFZl
Y3RvcjxHQzNEZW51bT4mIGJ1ZmZlcnMpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBib29sIHNh
dGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAg
ICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcAppbmRleCAwOWE2Mjg4MDFjMDI3MmEwOTI3
NmFkMDhhMzU3N2NjMDg0N2NmYmM0Li5iZjYyZWVjZWMxYWYwMTU5OGU2ZTM4ZWQyNGJjZTMwOTE5
OGE4ZjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVu
c2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xFeHRl
bnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CitXZWJHTEV4dGVuc2lvbjo6V2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAppbmRleCAwZWRiZTllY2E4NzE4OWZlYTRmNzlm
NzRlOWJkMTZkMGZjNDBlYTIzLi5lMjMxMDQ4NzJiZDllZjljYTc1M2U2MmIzNWMzNmYwNDIyNjlh
OGMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgKQEAg
LTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xFeHRlbnNpb25faAogI2RlZmluZSBXZWJHTEV4
dGVuc2lvbl9oCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNjAsMTQgKzYwLDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVmKCkgeyBtX2NvbnRleHQt
PnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgbV9jb250ZXh0LT5kZXJlZigpOyB9Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsg
fQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4
dDsgfQogCiAgICAgdmlydHVhbCB+V2ViR0xFeHRlbnNpb24oKTsKICAgICB2aXJ0dWFsIEV4dGVu
c2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMRXh0
ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKLSAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBtX2NvbnRleHQ7CisgICAgV2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuY3BwCmluZGV4IDA2YmJkNjhmNWI0N2ZkZmE3ZTcwODgzYWExMzQ0NmM1
MGU5ZDM5YzIuLmQwNDUwZTQzZDI5OWIxMjJhNjljNDFjZDhmOWIzZGJlMTNlZmZkNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCkBAIC0z
Miw3ICszMiw3IEBACiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTI2OSwxMiArMjY5LDEyIEBAIFdl
YkdMRnJhbWVidWZmZXI6OldlYkdMQXR0YWNobWVudDo6fldlYkdMQXR0YWNobWVudCgpCiB7CiB9
CiAKLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRl
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKK1Bhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xGcmFtZWJ1ZmZlcihjdHgpKTsKIH0K
IAotV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBjdHgpCitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAs
IG1faGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRnJhbWVidWZmZXIuaAppbmRleCA2MWEyMmY1OWRiN2FkODhiNjEzOTEyMjJiMjNj
ZWY1ZWU5MGVhNWE4Li5lNzUwMWVmY2NkYmE0YmY1YmRhYjIzZDkyM2RiZTUxNjM0YTJiYTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfldlYkdMRnJhbWVidWZmZXIoKTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdm9pZCBzZXRBdHRh
Y2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0
ZXhUYXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwpOwogICAgIHZvaWQgc2V0QXR0
YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0YWNobWVudCwgV2ViR0xSZW5k
ZXJidWZmZXIqKTsKQEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgR0MzRGVudW0gZ2V0
RHJhd0J1ZmZlcihHQzNEZW51bSk7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTEZyYW1lYnVmZmVy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwo
R3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcAppbmRleCBjNjVh
ZTkwODg4ODRiZmFlNzMwNjJjMzUyMTgyNmUwYzkxNTdhM2NiLi45MTMwNzc5N2ExODMwNWJlNGUx
NTBkNDViMjUxYjBjMWU1MDc4NzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTExvc2VDb250ZXh0LmNwcApAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJX
ZWJHTExvc2VDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3NlQ29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQorV2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3NlQ29udGV4
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihj
b250ZXh0KQogewogfQpAQCAtNDksNyArNDksNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9u
TmFtZSBXZWJHTExvc2VDb250ZXh0OjpnZXROYW1lKCkgY29uc3QKIAogdm9pZCBXZWJHTExvc2VD
b250ZXh0Ojpsb3NlQ29udGV4dCgpCiB7Ci0gICAgbV9jb250ZXh0LT5mb3JjZUxvc3RDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAgICBt
X2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpTeW50aGV0
aWNMb3N0Q29udGV4dCk7CiB9CiAKIHZvaWQgV2ViR0xMb3NlQ29udGV4dDo6cmVzdG9yZUNvbnRl
eHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5oCmlu
ZGV4IGU2Y2UxNTcxMWQ1YzBjZDAwMzMwMmJiNzkwOGQxYTIzODRhZWRjMjUuLjY1OTQwOWFkZWJi
ZWI3MDNhNWUzOGEyYTk5OWUyZWMxMjk3MGMxMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmgKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CitjbGFzcyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAKIGNsYXNzIFdlYkdMTG9zZUNvbnRleHQgZmluYWwgOiBw
dWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMTG9zZUNv
bnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIGV4cGxpY2l0IFdlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgdmlydHVhbCB+V2ViR0xMb3Nl
Q29udGV4dCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAppbmRl
eCBhY2RhYjk3OWI0ZWI5NTFkYjUyN2I2MGVmNjg3YTQ0ZDc1YjhiMzFjLi4xMzU4Yjc0OTAxNzVi
MTYzNjhhNDNkODNkYTBhMDlhZGEzZTEyMmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuY3BwCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKICNpbmNs
dWRlICJXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKikKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KQogICAgIDogbV9vYmplY3QoMCkKICAgICAsIG1fYXR0YWNobWVudENvdW50KDApCiAgICAgLCBt
X2RlbGV0ZWQoZmFsc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaApp
bmRleCBmOWYyNDEyMTEzMjM1Zjg5YWQ5ZDdmMGJhM2ZhYmVlYjMzYjY0ODE5Li4zMDMwYmQ2YWQ4
Y2ViMjAxZTYwZDU2ZGZkNWU4ZTkwNGQ2NWFmODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMT2JqZWN0LmgKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xh
c3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDsKIAogY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4g
ewogcHVibGljOgpAQCAtNTYsMTAgKzU2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzRGVsZXRl
ZCgpIHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCiAgICAgLy8gVHJ1ZSBpZiB0aGlzIG9iamVjdCBi
ZWxvbmdzIHRvIHRoZSBncm91cCBvciBjb250ZXh0LgotICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0
ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29u
dGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikgY29uc3QgPSAwOwogCiBw
cm90ZWN0ZWQ6Ci0gICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwor
ICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAgICAgLy8gc2V0T2Jq
ZWN0IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHJpZ2h0IGFmdGVyIGNyZWF0aW5nIGEgV2Vi
R0xPYmplY3QuCiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAppbmRleCA2NWQ1ZWRjNDFhZjY0
ODYxNWIxNTQxMzVkZjkxZTE1YjJjNWU4NDRkLi4wODQxNDIxZGY3NWEyMzgzNGFhM2RhZjcyNzkw
OWMzNjU1YjEzMTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogCiAj
aW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6
Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKK1Bhc3NSZWZQdHI8V2ViR0xQ
cm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMUHJvZ3JhbShjdHgpKTsKIH0KIAotV2Vi
R0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQor
V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAg
ICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2xpbmtTdGF0dXMoZmFsc2UpCiAg
ICAgLCBtX2xpbmtDb3VudCgwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xQcm9ncmFtLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uaAppbmRleCA3YmRiN2FmM2Q2MjAyYmMwMTA3YTNlYWNlZTBjOGU1OTc0ODAzZmFlLi45MGM1
MDgwNGM1MGY2Yjk0YTQ2ZmQzYjQ1MTgzNDhmNzhjMmU4NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHTFBy
b2dyYW0gZmluYWwgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMUHJvZ3JhbSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xQcm9n
cmFtPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAg
ICAgdW5zaWduZWQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CiAgICAgR0MzRGludCBnZXRB
Y3RpdmVBdHRyaWJMb2NhdGlvbihHQzNEdWludCBpbmRleCk7CkBAIC02Miw3ICs2Miw3IEBAIHB1
YmxpYzoKICAgICBib29sIGRldGFjaFNoYWRlcihXZWJHTFNoYWRlciopOwogCiBwcm90ZWN0ZWQ6
Ci0gICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJH
TFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5jcHAKaW5kZXggMGFmNTg1M2U0Mjg1M2FjNmNiYTlhZTA3NTI2NDQ5NGVmMmU3ODUxMi4uNmE3
M2U2YzgyOTkxYjMyODYwOTZiMzk2YjBlZDc1NWM1OTk1ZjhiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcApAQCAtMzAsMTEgKzMwLDEx
IEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQorUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1
ZmZlcj4gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCkpOwog
fQpAQCAtNDQsNyArNDQsNyBAQCBXZWJHTFJlbmRlcmJ1ZmZlcjo6fldlYkdMUmVuZGVyYnVmZmVy
KCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLVdlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJl
bmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCitXZWJHTFJlbmRlcmJ1
ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAg
OiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2ludGVybmFsRm9ybWF0KEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAppbmRleCBlZmZlMDFjMWU1
NmY1NDZhOWYxYjQ5MzU0NDkwMDBmYWE3NGI5MzNlLi5kODUwY2I2MTNhODhkNjQ2ZDgwMmI4M2U0
NmE0N2E0MTJmZGJmNWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyYnVmZmVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgV2ViR0xSZW5kZXJidWZmZXIg
ZmluYWwgOiBwdWJsaWMgV2ViR0xTaGFyZWRPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwg
fldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFJlbmRl
cmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogCiAgICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCkKICAgICB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0V2ZXJC
ZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBX
ZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVj
dCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhMDkyM2E1MTdjMWJjYTNkNzQ1NGQ0
YmRiOTA2MDdhMTQ0ZGNhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0wLDAgKzEsNjMzOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgi
CisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAi
RVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1
ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYWluRnJhbWUuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVp
bnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiT0VT
VGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5j
bHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisj
aW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDLmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKKyNpbmNs
dWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRl
cnMuaCIKKyNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgorI2luY2x1ZGUgIldlYkdMRHJh
d0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2Vi
R0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldl
YkdMUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKKyNpbmNsdWRlICJX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIgorI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgor
I2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisKKyNpbmNsdWRlIDxydW50aW1lL0pT
Q0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5j
bHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGRvdWJsZSBzZWNv
bmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyA9IDEuMDsKK2NvbnN0IGludCBtYXhHTEVycm9yc0Fs
bG93ZWRUb0NvbnNvbGUgPSAyNTY7CisKK25hbWVzcGFjZSB7CisKKyAgICBjbGFzcyBTY29wZWRE
cmF3aW5nQnVmZmVyQmluZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2ViR0xGcmFtZWJ1ZmZl
ciogZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgOiBtX2RyYXdpbmdCdWZmZXIoZHJh
d2luZ0J1ZmZlcikKKyAgICAgICAgICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZm
ZXJCaW5kaW5nKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZl
ciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQorICAgICAgICAgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIH5TY29wZWRE
cmF3aW5nQnVmZmVyQmluZGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVzdG9yZSBE
cmF3aW5nQnVmZmVyIGlmIG5lZWRlZAorICAgICAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIERyYXdpbmdCdWZm
ZXIqIG1fZHJhd2luZ0J1ZmZlcjsKKyAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1
ZmZlckJpbmRpbmc7CisgICAgfTsKKworICAgIFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0T3JaZXJv
KFdlYkdMT2JqZWN0KiBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gb2JqZWN0ID8gb2Jq
ZWN0LT5vYmplY3QoKSA6IDA7CisgICAgfQorCisgICAgdm9pZCBjbGlwMUQoR0MzRGludCBzdGFy
dCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdDM0RpbnQqIGNsaXBw
ZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCisgICAgeworICAgICAgICBBU1NFUlQo
Y2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7CisgICAgICAgIGlmIChzdGFydCA8IDApIHsK
KyAgICAgICAgICAgIHJhbmdlICs9IHN0YXJ0OworICAgICAgICAgICAgc3RhcnQgPSAwOworICAg
ICAgICB9CisgICAgICAgIEdDM0RpbnQgZW5kID0gc3RhcnQgKyByYW5nZTsKKyAgICAgICAgaWYg
KGVuZCA+IHNvdXJjZVJhbmdlKQorICAgICAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNlUmFu
Z2U7CisgICAgICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKKyAgICAgICAgKmNsaXBwZWRSYW5n
ZSA9IHJhbmdlOworICAgIH0KKworICAgIC8vIFJldHVybnMgZmFsc2UgaWYgbm8gY2xpcHBpbmcg
aXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkgdGhlIHNhbWUuCisg
ICAgYm9vbCBjbGlwMkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc291cmNlV2lkdGgsIEdD
M0RzaXplaSBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICAgICAgR0MzRGludCogY2xpcHBlZFgs
IEdDM0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwgR0MzRHNpemVpKmNs
aXBwZWRIZWlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkg
JiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOworICAgICAgICBjbGlwMUQoeCwgd2lk
dGgsIHNvdXJjZVdpZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKKyAgICAgICAgY2xpcDFE
KHksIGhlaWdodCwgc291cmNlSGVpZ2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhlaWdodCk7CisgICAg
ICAgIHJldHVybiAoKmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRX
aWR0aCAhPSB3aWR0aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOworICAgIH0KKworICAg
IEdDM0RpbnQgY2xhbXAoR0MzRGludCB2YWx1ZSwgR0MzRGludCBtaW4sIEdDM0RpbnQgbWF4KQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlIDwgbWluKQorICAgICAgICAgICAgdmFsdWUgPSBtaW47
CisgICAgICAgIGlmICh2YWx1ZSA+IG1heCkKKyAgICAgICAgICAgIHZhbHVlID0gbWF4OworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgYSBjaGFy
YWN0ZXIgYmVsb25ncyB0byB0aGUgQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4KKyAgICAvLyBH
TFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorICAgIGJvb2wgdmFsaWRhdGVDaGFyYWN0ZXIo
dW5zaWduZWQgY2hhciBjKQorICAgIHsKKyAgICAgICAgLy8gUHJpbnRpbmcgY2hhcmFjdGVycyBh
cmUgdmFsaWQgZXhjZXB0ICIgJCBgIEAgXCAnIERFTC4KKyAgICAgICAgaWYgKGMgPj0gMzIgJiYg
YyA8PSAxMjYKKyAgICAgICAgICAgICYmIGMgIT0gJyInICYmIGMgIT0gJyQnICYmIGMgIT0gJ2An
ICYmIGMgIT0gJ0AnICYmIGMgIT0gJ1xcJyAmJiBjICE9ICdcJycpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgLy8gSG9yaXpvbnRhbCB0YWIsIGxpbmUgZmVlZCwgdmVydGljYWwg
dGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJldHVybgorICAgICAgICAvLyBhcmUgYWxzbyB2YWxp
ZC4KKyAgICAgICAgaWYgKGMgPj0gOSAmJiBjIDw9IDEzKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGlzUHJlZml4UmVz
ZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgaWYgKG5hbWUuc3RhcnRz
V2l0aCgiZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKSB8fCBuYW1lLnN0YXJ0c1dp
dGgoIl93ZWJnbF8iKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQu
IFRoaXMgYWxsb3dzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgLy8gdG8gYmUgdXNlZCBpbiBj
b21tZW50cyB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAorICAgIC8vIGltcGxl
bWVudGF0aW9ucyBub3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBz
ZXQuCisgICAgY2xhc3MgU3RyaXBDb21tZW50cyB7CisgICAgcHVibGljOgorICAgICAgICBTdHJp
cENvbW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyKQorICAgICAgICAgICAgOiBtX3BhcnNlU3RhdGUo
QmVnaW5uaW5nT2ZMaW5lKQorICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCisgICAg
ICAgICAgICAsIG1fbGVuZ3RoKHN0ci5sZW5ndGgoKSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlv
bigwKQorICAgICAgICB7CisgICAgICAgICAgICBwYXJzZSgpOworICAgICAgICB9CisKKyAgICAg
ICAgU3RyaW5nIHJlc3VsdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgYm9vbCBo
YXNNb3JlQ2hhcmFjdGVycygpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAo
bV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcGFyc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJhY3RlcnMoKSkgewor
ICAgICAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKKyAgICAgICAgICAgICAgICAvLyBw
cm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCisgICAgICAgICAgICAgICAgaWYg
KGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7CisK
KyAgICAgICAgYm9vbCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChtX3Bvc2l0aW9uICsgMSA+PSBtX2xlbmd0aCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjaGFyYWN0ZXIgPSBtX3NvdXJjZVN0cmluZ1tt
X3Bvc2l0aW9uICsgMV07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOworICAg
ICAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBhZHZhbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgKyttX3Bvc2l0
aW9uOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc05ld2xpbmUoVUNoYXIgY2hhcmFjdGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIGNhbm9u
aWNhbGl6ZSBuZXdsaW5lIHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgICAgICAgIHJldHVybiAo
Y2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdccicpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBlbWl0KFVDaGFyIGNoYXJhY3RlcikKKyAgICAgICAgeworICAgICAgICAgICAg
bV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgZW51bSBQ
YXJzZVN0YXRlIHsKKyAgICAgICAgICAgIC8vIEhhdmUgbm90IHNlZW4gYW4gQVNDSUkgbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgorICAgICAgICAgICAgLy8gdGhpcyBsaW5lLiBQb3Nz
aWJsZSB0aGF0IHdlIG1pZ2h0IHNlZSBhIHByZXByb2Nlc3NvcgorICAgICAgICAgICAgLy8gZGly
ZWN0aXZlLgorICAgICAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAorCisgICAgICAgICAgICAvLyBI
YXZlIHNlZW4gYXQgbGVhc3Qgb25lIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcgorICAg
ICAgICAgICAgLy8gb24gdGhpcyBsaW5lLgorICAgICAgICAgICAgTWlkZGxlT2ZMaW5lLAorCisg
ICAgICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBhc3NlcyB0
aHJvdWdoIGFsbAorICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB1cCB0byB0aGUgZW5kIG9mIHRo
ZSBsaW5lLiBEaXNhYmxlcyBjb21tZW50CisgICAgICAgICAgICAvLyBwcm9jZXNzaW5nLgorICAg
ICAgICAgICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCisKKyAgICAgICAgICAgIC8vIEhhbmRs
aW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4gVGhlIGNvbW1lbnQgdGV4dCBpcworICAgICAgICAg
ICAgLy8gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgICAgIEluU2luZ2xl
TGluZUNvbW1lbnQsCisKKyAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21t
ZW50LiBOZXdsaW5lcyBhcmUgcGFzc2VkCisgICAgICAgICAgICAvLyB0aHJvdWdoIHRvIHByZXNl
cnZlIGxpbmUgbnVtYmVycy4KKyAgICAgICAgICAgIEluTXVsdGlMaW5lQ29tbWVudAorICAgICAg
ICB9OworCisgICAgICAgIFBhcnNlU3RhdGUgbV9wYXJzZVN0YXRlOworICAgICAgICBTdHJpbmcg
bV9zb3VyY2VTdHJpbmc7CisgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOworICAgICAgICB1bnNp
Z25lZCBtX3Bvc2l0aW9uOworICAgICAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKKyAgICB9
OworCisgICAgdm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFyIGMpCisgICAgeworICAg
ICAgICBpZiAoaXNOZXdsaW5lKGMpKSB7CisgICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCBz
dGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcworICAgICAgICAgICAgLy8gc28g
d2UgcHJlc2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgZW1pdChjKTsKKworICAgICAg
ICAgICAgaWYgKG1fcGFyc2VTdGF0ZSAhPSBJbk11bHRpTGluZUNvbW1lbnQpCisgICAgICAgICAg
ICAgICAgbV9wYXJzZVN0YXRlID0gQmVnaW5uaW5nT2ZMaW5lOworCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciB0ZW1wID0gMDsKKyAgICAgICAgc3dpdGNo
IChtX3BhcnNlU3RhdGUpIHsKKyAgICAgICAgY2FzZSBCZWdpbm5pbmdPZkxpbmU6CisgICAgICAg
ICAgICBpZiAoV1RGOjppc0FTQ0lJU3BhY2UoYykpIHsKKyAgICAgICAgICAgICAgICBlbWl0KGMp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYyA9PSAnIycpIHsKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJblByZXByb2Nl
c3NvckRpcmVjdGl2ZTsKKyAgICAgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIG5v
cm1hbCBzdGF0ZSBhbmQgcmUtaGFuZGxlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIG1fcGFyc2VT
dGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAgIHByb2Nlc3MoYyk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIE1pZGRsZU9mTGluZToKKyAgICAgICAgICAgIGlmIChj
ID09ICcvJyAmJiBwZWVrKHRlbXApKSB7CisgICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1l
bnQ7CisgICAgICAgICAgICAgICAgICAgIGVtaXQoJyAnKTsKKyAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9wYXJzZVN0YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgICAg
ICAvLyBFbWl0IHRoZSBjb21tZW50IHN0YXJ0IGluIGNhc2UgdGhlIHVzZXIgaGFzCisgICAgICAg
ICAgICAgICAgICAgIC8vIGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdhbnQgdG8gbGF0ZXIK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsIGFuIGVycm9yLgorICAgICAgICAgICAgICAg
ICAgICBlbWl0KCcvJyk7CisgICAgICAgICAgICAgICAgICAgIGVtaXQoJyonKTsKKyAgICAgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXQoYyk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOgor
ICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywganVzdCBwYXNz
IGl0CisgICAgICAgICAgICAvLyB0aHJvdWdoLiBEbyBub3QgcGFyc2UgY29tbWVudHMgaW4gdGhp
cyBzdGF0ZS4gVGhpcworICAgICAgICAgICAgLy8gbWlnaHQgbm90IGJlIHRoZSByaWdodCB0aGlu
ZyB0byBkbyBsb25nIHRlcm0sIGJ1dCBpdAorICAgICAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0
aGUgI2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCisgICAgICAgICAgICBlbWl0KGMpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJblNpbmdsZUxpbmVDb21tZW50Ogor
ICAgICAgICAgICAgLy8gVGhlIG5ld2xpbmUgY29kZSBhdCB0aGUgdG9wIG9mIHRoaXMgZnVuY3Rp
b24gdGFrZXMgY2FyZQorICAgICAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVu
IHdlIGdldCBvdXQgb2YgdGhlCisgICAgICAgICAgICAvLyBzaW5nbGUtbGluZSBjb21tZW50LiBT
d2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBJbk11bHRpTGluZUNvbW1lbnQ6CisgICAgICAgICAgICBpZiAoYyA9PSAnKicgJiYg
cGVlayh0ZW1wKSAmJiB0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAgIGVtaXQoJyonKTsK
KyAgICAgICAgICAgICAgICBlbWl0KCcvJyk7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRl
ID0gTWlkZGxlT2ZMaW5lOworICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3dhbGxvdyBhbGwg
b3RoZXIgY2hhcmFjdGVycy4gVW5jbGVhciB3aGV0aGVyIHdlIG1heQorICAgICAgICAgICAgLy8g
d2FudCBvciBuZWVkIHRvIGp1c3QgZW1pdCBhIHNwYWNlIHBlciBjaGFyYWN0ZXIgdG8gdHJ5Cisg
ICAgICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdnaW5nIHB1
cnBvc2VzLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9IC8vIG5hbWVz
cGFjZSBhbm9ueW1vdXMKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
IDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2Nv
bnRleHQoY2IpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3ZlcnJpZGUg
eyBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpSZWFs
TG9zdENvbnRleHQpOyB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENh
bGxiYWNrKCkge30KK3ByaXZhdGU6CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRl
eHQ7Cit9OworCitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFj
ayA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2sgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y2IpIDogbV9jb250ZXh0KGNiKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25FcnJvck1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKG1fY29udGV4dC0+bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+cHJpbnRHTEVycm9yVG9Db25zb2xlKG1lc3NhZ2UpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaygpIHsgfQor
cHJpdmF0ZToKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307CisKK3N0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXMqIGF0dHJzKQoreworICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZhcy0+ZG9jdW1lbnQo
KTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gVGhlIEZyYW1lTG9hZGVyQ2xpZW50
IG1pZ2h0IGJsb2NrIGNyZWF0aW9uIG9mIGEgbmV3IFdlYkdMIGNvbnRleHQgZGVzcGl0ZSB0aGUg
cGFnZSBzZXR0aW5nczsgaW4KKyAgICAvLyBwYXJ0aWN1bGFyLCBpZiBXZWJHTCBjb250ZXh0cyB3
ZXJlIGxvc3Qgb25lIG9yIG1vcmUgdGltZXMgdmlhIHRoZSBHTF9BUkJfcm9idXN0bmVzcyBleHRl
bnNpb24uCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpIHsKKyAgICAgICAgY2FudmFzLT5kaXNwYXRj
aEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4
dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJXZWIgcGFnZSB3YXMgbm90IGFsbG93
ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGJvb2wgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOwor
ICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CisgICAg
UGFnZSogcGFnZSA9IHRvcERvY3VtZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhdG9wRG9j
dW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkgeworICAgICAgICBXZWJHTExvYWRQb2xpY3kgcG9s
aWN5ID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JV
UkwodG9wRG9jdW1lbnQudXJsKCkpOworCisgICAgICAgIGlmIChwb2xpY3kgPT0gV2ViR0xCbG9j
a0NyZWF0aW9uKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJUaGUgcG9saWN5IGZvciB0aGlz
IFVSTCAoJXMpIGlzIHRvIGJsb2NrIFdlYkdMLiIsIHRvcERvY3VtZW50LnVybCgpLmhvc3QoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikgeworICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBuZWVkIHRvIGJlIHJl
c29sdmVkIGxhdGVyLiIpOworICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzID0gYXR0cnMgPyBhdHRycy0+YXR0cmlidXRlcygpIDogR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMoKTsKKworICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlhcykg
eworICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdFbmFi
bGVkKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAgIH0K
KworICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyAgICBhdHRyaWJ1dGVzLnNo
YXJlUmVzb3VyY2VzID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9
IHRydWU7CisKKyAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VTb2Z0d2FyZVdlYkdMUmVu
ZGVyaW5nKCkpCisgICAgICAgIGF0dHJpYnV0ZXMuZm9yY2VTb2Z0d2FyZVJlbmRlcmVyID0gdHJ1
ZTsKKworICAgIGlmIChwYWdlKQorICAgICAgICBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW8g
PSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworCisgICAgaWYgKGlzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEgV2ViR0wgY29udGV4dCB0
aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kgcmVzb2x1dGlvbiBpZiB1
c2VkLiIpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBy
ZW5kZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1
dGVzKSk7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5lZWRlZCgpOworICAg
ICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKKyAgICB9CisKKyAgICBIb3N0V2luZG93KiBo
b3N0V2luZG93ID0gZG9jdW1lbnQudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKTsKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVu
dChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVh
dGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGVidWdfbWFya2VyIikpCisgICAgICAgIGV4dGVu
c2lvbnMtPnB1c2hHcm91cE1hcmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0
KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKSk7
CisgICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7CisKKyAgICByZXR1cm4g
cmVuZGVyaW5nQ29udGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRv
Y3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQoMCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQor
ICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxs
b3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KQorICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hl
KDApCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQorICAgICwgbV9jb250ZXh0TG9zdE1vZGUo
U3ludGhldGljTG9zdENvbnRleHQpCisgICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAg
ICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKKyAgICAsIG1fbnVtR0xFcnJv
cnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKKyAgICAsIG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xp
Y3lSZXNvbHV0aW9uKGZhbHNlKQoreworfQorCitXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdM
UmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3Nl
ZENhbnZhcykKKyAgICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgp
KQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKKyAg
ICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93
ZWQoZmFsc2UpCisgICAgLCBtX3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0
KQorICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5
bnRoZXRpY0xvc3RDb250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAg
LCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGlj
eVJlc29sdXRpb24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250
ZXh0R3JvdXAgPSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3Jv
dXAtPmFkZENvbnRleHQodGhpcyk7CisKKyAgICBtX21heFZpZXdwb3J0RGltc1swXSA9IG1fbWF4
Vmlld3BvcnREaW1zWzFdID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3cG9ydERpbXMpOworCisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisK
KyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0KCkKK3sKKyAgICBB
U1NFUlQoIW1fY29udGV4dExvc3QpOworICAgIG1fbmVlZHNVcGRhdGUgPSB0cnVlOworICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gMDsK
KyAgICBtX3BhY2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gNDsKKyAg
ICBtX3VucGFja0ZsaXBZID0gZmFsc2U7CisgICAgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhID0g
ZmFsc2U7CisgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IEdyYXBoaWNzQ29udGV4
dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0w7CisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsK
KyAgICBtX2N1cnJlbnRQcm9ncmFtID0gMDsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7
CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX2RlcHRoTWFzayA9IHRydWU7
CisgICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOworICAgIG1fc3RlbmNpbE1hc2sgPSAweEZG
RkZGRkZGOworICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5j
aWxGdW5jUmVmID0gMDsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IDA7CisgICAgbV9zdGVu
Y2lsRnVuY01hc2sgPSAweEZGRkZGRkZGOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IDB4
RkZGRkZGRkY7CisgICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKKyAgICBtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCA9IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZTsKKyAgICAKKyAg
ICBtX2NsZWFyQ29sb3JbMF0gPSBtX2NsZWFyQ29sb3JbMV0gPSBtX2NsZWFyQ29sb3JbMl0gPSBt
X2NsZWFyQ29sb3JbM10gPSAwOworICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICBt
X2NsZWFyRGVwdGggPSAxOworICAgIG1fY2xlYXJTdGVuY2lsID0gMDsKKyAgICBtX2NvbG9yTWFz
a1swXSA9IG1fY29sb3JNYXNrWzFdID0gbV9jb2xvck1hc2tbMl0gPSBtX2NvbG9yTWFza1szXSA9
IHRydWU7CisKKyAgICBHQzNEaW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwor
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Cisg
ICAgbV90ZXh0dXJlVW5pdHMuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVVbml0cy5yZXNpemUobnVt
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisKKyAgICBHQzNEaW50IG51bVZlcnRleEF0dHJp
YnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAgIG1fbWF4VmVydGV4QXR0
cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhUZXh0dXJlU2l6ZSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRV
UkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4dHVyZUxldmVsID0gV2Vi
R0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXplLCBtX21heFRleHR1
cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlTGV2
ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3ViZU1hcFRleHR1cmVT
aXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhSZW5kZXJidWZmZXJTaXpl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
UkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOworCisgICAgLy8gVGhl
c2UgdHdvIHZhbHVlcyBmcm9tIEVYVF9kcmF3X2J1ZmZlcnMgYXJlIGxhemlseSBxdWVyaWVkLgor
ICAgIG1fbWF4RHJhd0J1ZmZlcnMgPSAwOworICAgIG1fbWF4Q29sb3JBdHRhY2htZW50cyA9IDA7
CisKKyAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s7CisgICAg
bV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNlOworICAgIG1fZHJh
d0J1ZmZlcnNTdXBwb3J0ZWQgPSBmYWxzZTsKKworICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2Jq
ZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1f
ZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICAKKyAgICBtX3ZlcnRleEF0
dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJpYnMpOworCisgICAgaWYgKCFpc0dMRVMy
TlBPVFN0cmljdCgpKQorICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsK
KyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgaW5pdFZlcnRleEF0dHJpYjAo
KTsKKworICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNsYW1wZWRDYW52YXNTaXplKCk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChjYW52
YXNTaXplKTsKKworICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNh
bnZhc1NpemUuaGVpZ2h0KCkpOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFz
U2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNz
b3IoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKworICAg
IG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
UmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaz4odGhpcykpOworICAgIG1fY29udGV4dC0+c2V0
RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRFcnJvck1lc3NhZ2VDYWxsYmFjaz4odGhpcykpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2V0dXBGbGFncygpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisKKyAgICBp
ZiAoUGFnZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9z
eW50aGVzaXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNU
b0NvbnNvbGVFbmFibGVkKCk7CisKKyAgICBtX2lzR0xFUzJDb21wbGlhbnQgPSBtX2NvbnRleHQt
PmlzR0xFUzJDb21wbGlhbnQoKTsKKyAgICBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJP
TUlVTV9zdHJpY3RfYXR0cmlicyIpOworICAgIG1faXNSZXNvdXJjZVNhZmUgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNvdXJjZV9zYWZlIik7
CisgICAgaWYgKG1faXNHTEVTMkNvbXBsaWFudCkgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3Ry
aWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX09FU190ZXh0
dXJlX25wb3QiKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQVJCX3RleHR1cmVfbm9uX3Bvd2Vy
X29mX3R3byIpOworICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2ls
Iik7CisgICAgfQorICAgIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3JvYnVzdG5lc3MiKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSBjb25z
dAoreworICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQor
ICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5wcml2aWxlZ2VkV2ViR0xFeHRlbnNpb25z
RW5hYmxlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAg
ICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkpCisgICAg
ICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQorCitXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKQoreworICAgIC8vIFJl
bW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9iamVjdHMgc28gaWYgdGhleSBhcmUgdGhlIGxh
c3QgcmVmZXJlbmNlCisgICAgLy8gdGhleSB3aWxsIGJlIGZyZWVkIGJlZm9yZSB0aGUgbGFzdCBj
b250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29udGV4dCBncm91cC4KKyAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBudWxscHRyOworICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gbnVs
bHB0cjsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOworICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IG51bGxw
dHI7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOworICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZyA9IG51bGxwdHI7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4
dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1
cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKworICAgIG1fYmxhY2tUZXh0dXJlMkQg
PSBudWxscHRyOworICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IG51bGxwdHI7CisKKyAgICBp
ZiAoIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBkZXRhY2hBbmRSZW1v
dmVBbGxPYmplY3RzKCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpOworICAg
ICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKQorewor
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIFRoZSBkcmF3aW5nIGJ1ZmZlciBob2xkcyBhIGNvbnRleHQgcmVmZXJlbmNlLiBJdCBt
dXN0IGFsc28gYmUgZGVzdHJveWVkCisgICAgLy8gaW4gb3JkZXIgZm9yIHRoZSBjb250ZXh0IHRv
IGJlIHJlbGVhc2VkLgorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci5jbGVhcigpOworCisgICAgaWYgKG1fY29udGV4dCkgeworICAgICAgICBtX2NvbnRl
eHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIG1fY29udGV4dC0+
c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIG1fY29udGV4dC5jbGVh
cigpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0
Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5tYXJrQ29udGVudHNDaGFu
Z2VkKCk7CisKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVu
ZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkg
JiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7
CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+
Y2xlYXJDb3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENh
bnZhc0NoYW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNE
aXJ0eSkgeworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAg
ICAgICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBl
ZENhbnZhc1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5ZXJDbGVhcmVkCisg
ICAgICAgIHx8IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgfHwgKG1hc2sgJiYg
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0
QXR0cmlidXRlcygpOworCisgICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9zc2libGUgdG8gY29t
YmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNsZWFyLgorICAgIGJv
b2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7CisKKyAgICBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYg
KGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVCkpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9yTWFza1swXSA/IG1f
Y2xlYXJDb2xvclswXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1sxXSA/IG1fY2xlYXJDb2xvclsxXSA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yTWFza1syXSA/IG1fY2xlYXJDb2xvclsyXSA6IDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1szXSA/IG1fY2xlYXJDb2xvclszXSA6IDApOwor
ICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAg
IG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICAgIEdDM0Ri
aXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsK
KyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkpIHsKKyAgICAgICAgaWYgKCFjb21i
aW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMS4w
Zik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVS
X0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlm
IChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7CisgICAgICAgIGlmIChjb21iaW5lZENs
ZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCAmIG1fc3Rl
bmNpbE1hc2spOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3Rl
bmNpbCgwKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFw
aGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOworICAgIH0KKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNsZWFyRnJhbWVidWZmZXJzKGNs
ZWFyTWFzayk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsK
KyAgICB9CisKKyAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgIG1fbGF5ZXJDbGVhcmVkID0gdHJ1ZTsKKworICAgIHJldHVybiBjb21i
aW5lZENsZWFyOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRl
QWZ0ZXJDbGVhcigpCit7CisgICAgLy8gUmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4
dCBzZXQuCisgICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1f
Y29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJT
dGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBtX3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRl
eHQtPmRlcHRoTWFzayhtX2RlcHRoTWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5tYXJrTGF5ZXJDb21wb3Np
dGVkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgpLnByaW50aW5nKCkp
CisgICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKworICAgIC8vIFVu
dGlsIHRoZSBjYW52YXMgaXMgd3JpdHRlbiB0byBieSB0aGUgYXBwbGljYXRpb24sIHRoZSBjbGVh
ciB0aGF0CisgICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2FzIGNvbXBvc2l0ZWQgc2hvdWxkIGJl
IGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCisgICAgaWYgKG1fY29udGV4dC0+bGF5ZXJDb21w
b3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1
ZmZlcigpKTsKKworICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisKKyAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkgJiYg
IW1fbGF5ZXJDbGVhcmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOworICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Cisg
ICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVm
ZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2Jq
ZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KK30KKworUGFzc1JlZlB0
cjxJbWFnZURhdGE+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKworICAg
IHJldHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRp
b24gYmVjYXVzZSBhdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKKyAgICAv
LyBrbm93IGlmIHRoZSB1bmRlcmx5aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZl
cnMuCisgICAgR0MzRGludCBtYXhTaXplID0gc3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKKyAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1ZmZlciBzaXplIHRv
IDRrIHRvIGF2b2lkIG1lbW9yeSBleGhhdXN0aW9uLgorICAgIGNvbnN0IGludCBzaXplVXBwZXJM
aW1pdCA9IDQwOTY7CisgICAgbWF4U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUsIHNpemVVcHBlckxp
bWl0KTsKKyAgICBHQzNEaW50IG1heFdpZHRoID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3
cG9ydERpbXNbMF0pOworICAgIEdDM0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwg
bV9tYXhWaWV3cG9ydERpbXNbMV0pOworICAgIHdpZHRoID0gY2xhbXAod2lkdGgsIDEsIG1heFdp
ZHRoKTsKKyAgICBoZWlnaHQgPSBjbGFtcChoZWlnaHQsIDEsIG1heEhlaWdodCk7CisKKyAgICBp
ZiAobV9uZWVkc1VwZGF0ZSkgeworICAgICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZh
cygpLT5yZW5kZXJCb3goKTsKKyAgICAgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhh
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKKyAgICAgICAgICAgIHJlbmRlckJveC0+Y29udGVu
dENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7CisgICAgICAgIG1fbmVlZHNVcGRhdGUgPSBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0
eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBzdGFydCBv
ZmYKKyAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2lsbCBkbyku
CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJl
c2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNs
ZWFyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVp
Z2h0KTsKKworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyhtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworfQorCitp
bnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAorewor
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIt
PnNpemUoKS53aWR0aCgpOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFt
ZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOwor
fQorCit1bnNpZ25lZCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyhHQzNE
ZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVybiBzaXplb2Yo
R0MzRHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEaW50
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAgIHJl
dHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImFjdGl2ZVRleHR1cmUi
LCAidGV4dHVyZSB1bml0IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkUwOworICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKKworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0QWN0aXZlVGV4
dHVyZVVuaXQodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIs
IHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBzaGFkZXIp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hTaGFkZXIoc2hhZGVy
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1lbnQgYWxyZWFkeSBo
YXMgc2hhZGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5hdHRh
Y2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8oc2hhZGVyKSk7Cisg
ICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImJpbmRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJiaW5kQXR0cmliTG9jYXRpb24i
LCBuYW1lKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImJpbmRB
dHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGlzUHJlZml4
UmVzZXJ2ZWQobmFtZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgInJlc2VydmVk
IHByZWZpeCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0cmliTG9jYXRpb24iLCAiaW5kZXggb3V0IG9m
IHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5kQXR0
cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFtZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGV0ZWQpCit7Cisg
ICAgZGVsZXRlZCA9IGZhbHNlOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICAgIGlmICghb2Jq
ZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZWQgPSAhb2JqZWN0LT5vYmplY3Qo
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0
ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwg
ZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVm
ZmVyID0gMDsKKyAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVy
LT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJz
IGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBlbHNlIGlmICh0
YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIp
OworICAgIGVsc2UgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgb2Jq
ZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGJ1ZmZlci0+c2V0
VGFyZ2V0KHRhcmdldCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJh
bWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVk
OworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRGcmFtZWJ1ZmZlciIsIGJ1ZmZl
ciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAg
YnVmZmVyID0gMDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1
ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Cisg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAg
ICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdpbmcgYnVmZmVyLgor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7Cisg
ICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cisg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5k
ZXJCdWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5k
ZXJidWZmZXIiLCByZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKGRlbGV0ZWQpCisgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7CisgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVy
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nID0gcmVuZGVyQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZFJlbmRl
cmJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsKKyAgICBpZiAocmVu
ZGVyQnVmZmVyKQorICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKEdDM0RlbnVtIHRh
cmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kVGV4dHVyZSIsIHRleHR1cmUsIGRlbGV0ZWQpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIHRleHR1cmUgPSAwOworICAgIGlmICh0ZXh0
dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdldFRhcmdldCgpICE9IHRh
cmdldCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4gbm90IGJlIHVzZWQg
d2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgR0Mz
RGludCBtYXhMZXZlbCA9IDA7CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCkgeworICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS50ZXh0dXJlMkRCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAgbWF4TGV2ZWwgPSBtX21heFRl
eHR1cmVMZXZlbDsKKworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYmICFtX2FjdGl2ZVRl
eHR1cmVVbml0KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5k
aW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisKKyAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAgICBtX3RleHR1cmVV
bml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSB0ZXh0dXJl
OworICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKKyAgICB9IGVs
c2UgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJv
KHRleHR1cmUpKTsKKyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0
KHRhcmdldCwgbWF4TGV2ZWwpOworCisgICAgLy8gTm90ZTogcHJldmlvdXNseSB3ZSB1c2VkIHRv
IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8vIHJlcGVhdCBtb2Rl
IHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNhdXNlIE9wZW5HTAor
ICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVnIGluIHRoZSBzcGVj
aWZpY2F0aW9uKSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0aW9uIGhhcyBubyBj
b250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNpb24uIEhvd2V2ZXIs
IGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24gYWxsCisgICAgLy8g
cGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEgSGFzaE1hcCBmcm9t
IHRleHR1cmUgSUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2ZSBub3QgaGFkIGFu
eSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiByZW1vdmVkLgorfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBH
QzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJi
bGVuZEVxdWF0aW9uIiwgbW9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVu
ZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVh
dGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKworCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdD
M0RlbnVtIGRmYWN0b3IpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9yLCBkZmFjdG9yKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0
b3IpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUo
R0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNE
ZW51bSBkc3RBbHBoYSkKK3sKKyAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5vdCBoYXZlIHRoZSBz
YW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzcmNSR0IsIGRzdFJH
QikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNy
Y1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1
ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgInNpemUgPT0gMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJv
ckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVy
LT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc3Rh
dGljX2Nhc3Q8R0MzRHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOworICAgIGlmIChtX2NvbnRleHQt
Pm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZm
ZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVC
dWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0
YXJnZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcygp
KSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhl
dGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+
Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5t
b3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVy
RGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhl
IGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVm
ZmVyRGF0YSgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVz
YWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1
ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIs
IHRhcmdldCwgdXNhZ2UpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCFkYXRhKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRh
LT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICBpZiAobV9j
b250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBU
aGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNz
b2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJh
eUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1
ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Cisg
ICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3Nv
Y2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRh
dGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVu
Z3RoKCksIGRhdGEtPmRhdGEoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciog
YnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0
YSIsICJvZmZzZXQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRh
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5k
c0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRh
dGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRp
Y19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFz
ZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFpbGVk
LiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBk
b2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9
CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOworICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBHQzNEZW51bSByZXN1bHQgPSBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Y2hlY2tTdGF0dXMoJnJlYXNvbik7CisgICAgaWYgKHJlc3VsdCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgcHJpbnRHTFdhcm5p
bmdUb0NvbnNvbGUoImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCByZWFzb24pOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICByZXN1bHQgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXModGFyZ2V0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtYXNrICYg
fihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJ
VCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25B
Y2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQorICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyKG1hc2spOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcs
IEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHN0ZDo6aXNuYW4ocikpCisgICAgICAg
IHIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGcpKQorICAgICAgICBnID0gMDsKKyAgICBpZiAo
c3RkOjppc25hbihiKSkKKyAgICAgICAgYiA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYSkpCisg
ICAgICAgIGEgPSAxOworICAgIG1fY2xlYXJDb2xvclswXSA9IHI7CisgICAgbV9jbGVhckNvbG9y
WzFdID0gZzsKKyAgICBtX2NsZWFyQ29sb3JbMl0gPSBiOworICAgIG1fY2xlYXJDb2xvclszXSA9
IGE7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVwdGgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xl
YXJEZXB0aCA9IGRlcHRoOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2NsZWFyU3RlbmNpbCA9IHM7CisgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBH
QzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29sb3JNYXNrWzBdID0gcmVkOworICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47CisgICAg
bV9jb2xvck1hc2tbMl0gPSBibHVlOworICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7CisgICAg
bV9jb250ZXh0LT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVy
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImNvbXBpbGVT
aGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5jb21waWxl
U2hhZGVyKG9iamVjdE9yWmVybyhzaGFkZXIpKTsKKyAgICBHQzNEaW50IHZhbHVlOworICAgIG1f
Y29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNzQ29udGV4
dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKKyAgICBzaGFkZXItPnNldFZhbGlkKHZhbHVl
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZhbGlk
YXRlQ29tcHJlc3NlZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRU
ZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYm9yZGVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiYm9y
ZGVyIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhJbWFnZTJE
Iiwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQorICAgICAgICByZXR1cm47
CisKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXBy
ZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgeworICAgICAgICBpZiAobGV2
ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29t
cHJlc3NlZFRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAg
ICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAg
aWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAg
ICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUg
V2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAg
ICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Cisg
ICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBs
ZXZlbCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZv
cm1hdChmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZv
cm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChmb3Jt
YXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBm
b3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdmFsaWRhdGVDb21w
cmVzc2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIHRleC0+c2V0
Q29tcHJlc3NlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1h
dCkKK3sKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0c0J5Rm9ybWF0KGZv
cm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZv
cm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5h
bGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIs
IGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3Vu
ZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAi
ZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1
cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVs
ID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0
IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGlj
c0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsK
KyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVy
LmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+
Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1
ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy5nZXQoKSk7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAg
ICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAoY2xp
cDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRC
b3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdp
ZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBh
Y2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBl
ZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBj
bGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQorICAg
IC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRo
ZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlU
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8
ICF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdl
LCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZpcnN0LgorICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQi
LCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsg
aGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3Vi
SW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29w
eVRleFN1YkltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJu
YWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJj
b3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291
cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBTY29wZWREcmF3
aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAg
R0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAy
RCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91
bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0
aCwgJmNsaXBwZWRIZWlnaHQpKSB7CisgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgR0MzRGVudW0g
dHlwZSA9IHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjx1bnNpZ25lZCBjaGFyW10+IHplcm87CisgICAgICAgICAgICBpZiAod2lkdGggJiYg
aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CisgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAw
KTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VS
Uk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29w
eVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjpt
YWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOworICAgICAgICAgICAgICAgIGlmICgh
emVybykgeworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1v
cnkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsK
KyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7
CisgICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3
aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVm
ZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCitQYXNzUmVmUHRy
PFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsK
KyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZy
YW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsK
KyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJlZE9iamVjdChv
LmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdl
YkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJl
ZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFJl
bmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVy
OjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVy
biBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpW
RVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2Vi
R0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQo
KSk7CisgICAgcmV0dXJuIG87Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxs
RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOworfQorCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0
byB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAo
b2JqZWN0LT5vYmplY3QoKSkKKyAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQg
aGVyZSBiZWNhdXNlIHdlIHdhbnQKKyAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1
bmJvdW5kLgorICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0
KGJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09
IGJ1ZmZlcikKKyAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKKworICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFt
ZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsK
KyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmlu
ZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVy
ZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgorICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSkKK3sKKyAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7CisgICAgLy8gV2UgZG9u
J3QgcmVzZXQgbV9jdXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24g
b2YgdGhlCisgICAgLy8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0
YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sK
KyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghZGVs
ZXRlT2JqZWN0KHRleHR1cmUpKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodGV4dHVy
ZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQorICAgICAgICAgICAgbV90
ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7CisgICAgICAgIGlmICh0
ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKKyAgICAg
ICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7
CisgICAgfQorICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJl
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBm
dW5jKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9
IGZsYWc7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpG
YXIpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICh6TmVhciA+IHpGYXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+
IHpGYXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRlcHRoUmFu
Z2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBw
cm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uRGV0YWNo
ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Cisg
ICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2lsVGVz
dCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7
CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPmRpc2FibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmli
cykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2Ui
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsK
KworICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBtX2Nv
bnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChvZmZzZXQgPCAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBt
dXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYg
KG9mZnNldCAlIDQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTWFr
ZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gNDsKKworICAg
ICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8g
NDsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0
IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNv
bnMuCisgICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zm
c2V0IC89IDI7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXIt
PmJ5dGVMZW5ndGgoKSAvIDI7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAt
IG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgR0MzRHNpemVp
cHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgaWYgKG9m
ZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUg
dmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgorICAgIC8vIHRoZSBnaXZl
biB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAorICAg
IC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1h
eGltdW0KKyAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0
ZXJhdGlvbiBpbgorICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCisgICAgCisgICAg
UmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworCisgICAgaWYgKCFlbGVtZW50QXJy
YXlCdWZmZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdDM0RzaXplaXB0ciBudW1F
bGVtZW50cyA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgIC8vIFRoZSBj
YXNlIGNvdW50PT0wIGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3Jl
IHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZS4KKyAgICBpZiAoIW51bUVsZW1lbnRzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgQVNTRVJUKGJ1ZmZl
cik7CisKKyAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1h
eEluZGV4KHR5cGUpOworICAgIGlmIChtYXhJbmRleCA8IDApIHsKKyAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5
cGUgb2YgaW5kZXguCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAgICAgICBjb25zdCBHQzNEdWJ5
dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Cisg
ICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKysp
CisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nh
c3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogeworICAgICAgICAgICAgbnVt
RWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVz
aG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7
CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBp
KyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGlj
X2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKKyAgICAgICAgICAgIGlm
ICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7CisgICAgICAgICAg
ICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVy
LT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1F
bGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5k
ZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1h
eEluZGV4KTsKKyAgICB9CisKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICAvLyBU
aGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGlt
dW0KKyAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgorICAgICAgICBudW1F
bGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQorewor
ICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKKyAgICB1bnNpZ25lZCBsYXN0
SW5kZXggPSAwOworICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVm
ZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsK
KworICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIWNvdW50KSB7CisgICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+
ZWxlbWVudEFycmF5QnVmZmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2ln
bmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKKyAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsK
KworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAg
ICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICB1b2Zmc2V0
IC89IHNpemVvZihHQzNEdWludCk7CisgICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1
ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKKyAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKKyAg
ICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXgg
PSAqcDsKKyAgICAgICAgICAgICsrcDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAgLy8gTWFrZSB1
b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNE
dXNob3J0KTsKKyAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEdDM0R1c2hvcnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5k
YXRhKCkpICsgdW9mZnNldDsKKyAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKKyAgICAgICAgICAg
IGlmICgqcCA+IGxhc3RJbmRleCkKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKKyAg
ICAgICAgICAgICsrcDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgeworICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1l
bnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKKyAgICAgICAgd2hpbGUgKG4tLSA+
IDApIHsKKyAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKKyAgICAgICAgICAgICAgICBs
YXN0SW5kZXggPSAqcDsKKyAgICAgICAgICAgICsrcDsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBz
dXJlIGl0IGlzIHZhbGlkLgorICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAx
OworICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50
Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmICghbV9jdXJyZW50UHJv
Z3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gTG9vayBpbiBlYWNoIGVuYWJs
ZWQgdmVydGV4IGF0dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVm
ZmVyLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsr
aSkgeworICAgICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaSkudmFsaWRhdGVCaW5kaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworCisgICAgLy8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRo
ZSBjdXJyZW50IHByb2dyYW0pLgorICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFs
c2U7CisgICAgYm9vbCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7CisgICAgaW50IG51bUFjdGl2
ZUF0dHJpYkxvY2F0aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25z
OyArK2kpIHsKKyAgICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0
dHJpYkxvY2F0aW9uKGkpOworICAgICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nh
c3Q8aW50PihtX21heFZlcnRleEF0dHJpYnMpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7CisgICAgICAgICAgICBp
ZiAoc3RhdGUuZW5hYmxlZCkgeworICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0
cnVlOworICAgICAgICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVs
ZW1lbnRzIGNvbXB1dGF0aW9uLgorICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVt
ZW50LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQorICAgICAgICAgICAgICAg
IC8vIGVsZW1lbnQgYW5kIG5vdGhpbmcgYmV5b25kIGl0LgorICAgICAgICAgICAgICAgIGludCBi
eXRlc1JlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0
ZUxlbmd0aCgpIC0gc3RhdGUub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1F
bGVtZW50cyA9IDA7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwor
ICAgICAgICAgICAgICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1l
bnQpCisgICAgICAgICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmlu
ZyAtIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7CisgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW5zdGFuY2VzUmVxdWlyZWQgPSAwOworICAgICAgICAgICAgICAgIGlmIChz
dGF0ZS5kaXZpc29yKSB7CisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlc1JlcXVpcmVkID0g
Y2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpbWl0aXZlQ291bnQpIC8gc3RhdGUuZGl2aXNvcik7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZXNSZXF1aXJlZCA+IG51bUVsZW1lbnRz
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXNhd05vbkluc3Rh
bmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCks
IHRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0
byB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0Fy
cmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25O
YW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qg
b3IgY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAg
ICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAgICAg
Q2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZEZpcnN0KGZpcnN0KTsKKyAg
ICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvdW50KGNvdW50
KTsKKyAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFN1bSA9
IGNoZWNrZWRGaXJzdCArIGNoZWNrZWRDb3VudDsKKyAgICAgICAgQ2hlY2tlZDxHQzNEaW50LCBS
ZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNvdW50KHByaW1pdGl2ZUNvdW50KTsKKyAg
ICAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltaXRpdmVD
b3VudC5oYXNPdmVyZmxvd2VkKCkgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhjaGVja2Vk
U3VtLnVuc2FmZUdldCgpLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5zYWZlR2V0KCkpKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMg
YXJyYXlzIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IGNoYXIq
IHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRl
eHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdB
cnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisgICAgaWYgKCF2YWxp
ZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworCisgICAgYm9vbCB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAo
Zmlyc3QgKyBjb3VudCAtIDEpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgdHJ1ZSk7CisKKyAgICBt
X2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKworICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3Rv
cmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMy
TlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJh
eXMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9u
ZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWl0aXZl
Q291bnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVE
cmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0lOVDoKKyAgICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvdW50IDwgMCB8fCBv
ZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAg
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHByaW1pdGl2ZUNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCisgICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJB
WV9CVUZGRVIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENoZWNr
ZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAg
IENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltaXRpdmVDb3VudChw
cmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkQ291bnQuaGFzT3ZlcmZsb3dlZCgp
IHx8IGNoZWNrZWRQcmltaXRpdmVDb3VudC5oYXNPdmVyZmxvd2VkKCkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRh
dGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5z
YWZlR2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uo
Y2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVt
ZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygw
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0
bHkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vzcyhn
cmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisKKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7CisgICAgaWYg
KCF2YWxpZGF0ZURyYXdFbGVtZW50cygiZHJhd0VsZW1lbnRzIiwgbW9kZSwgY291bnQsIHR5cGUs
IG9mZnNldCwgbnVtRWxlbWVudHMsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhcklm
Q29tcG9zaXRlZCgpOworCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7
CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1FbGVtZW50
cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAgICAgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7
CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0
dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+
ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpKTsKKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0
aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENo
YW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51
bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVD
YXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVu
YWJsZWQgPSB0cnVlOworICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSB7CisgICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxl
ZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZmluaXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT5maW5pc2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZsdXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdl
YkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRh
cmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVy
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwg
dGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9y
IGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVk
OyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFs
bHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1l
YnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3Qg
PSBvYmplY3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3Qp
OworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBi
dWZmZXJPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVy
YnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVy
KTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50
IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5j
UGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJl
MkQiLCAibGV2ZWwgbm90IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGV4
dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEb24ndCBh
bGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAor
ICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2Yg
dGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8
fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2JqZWN0T3JaZXJvKHRl
eHR1cmUpOworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwg
dGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwg
dGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwg
dGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgfQorICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNl
KTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4LT5jYW5HZW5l
cmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBw
b3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdlYkdM
IDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBt
YXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhG
b3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIDAp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBw
cm9wZXJseSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgorICAgIC8v
IG9uIE1hYy4gIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1ZyBpcyBmaXhlZC4K
KyNpZiBPUyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRlciA9IGZhbHNlOwor
ICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNU
X01JUE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVy
ID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRh
cmdldCk7CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKKyAg
ICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7CisjZW5kaWYKKyAgICB0
ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBBY3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQt
PmdldEFjdGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZl
IGF0dHJpYnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBp
bmZvLnNpemUpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVp
bnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0QWN0aXZlVW5pZm9ybSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBY3Rp
dmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBpZiAoaW5mby5zaXplID4gMSAm
JiAhaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBl
bmQoIlswXSIpOworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVk
OiAlcyIsIGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gV2Vi
R0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mIHNoYWRlck9iamVj
dHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgc2hh
ZGVyT2JqZWN0cy5jbGVhcigpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHByb2dyYW0pKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAorICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSCisgICAgfTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0RlbnVtKTsgKytpKSB7
CisgICAgICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRl
cihzaGFkZXJUeXBlW2ldKTsKKyAgICAgICAgaWYgKHNoYWRlcikKKyAgICAgICAgICAgIHNoYWRl
ck9iamVjdHMuYXBwZW5kKHNoYWRlcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitH
QzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9jYXRpb24i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlv
bkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAg
ICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1
cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9i
amVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIg
JiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJf
VVNBR0UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBHQzNEaW50
IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwg
cG5hbWUsICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZG
RVJfU0laRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0
dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCisgICAgLy8gcHJldmVu
dCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4KKworICAgIC8vIEFs
c28sIHdlIG5lZWQgdG8gZW5mb3JjZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRl
cHRoCisgICAgLy8gYW5kIHN0ZW5jaWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2Yg
dGhlIHVuZGVybHlpbmcKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVy
LgorICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xD
b250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KSk7CisgICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgIGF0dHJpYnV0ZXMtPnNl
dERlcHRoKGZhbHNlKTsKKyAgICBpZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBh
dHRyaWJ1dGVzLT5zZXRTdGVuY2lsKGZhbHNlKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7
CisgICAgICAgIC8vIFRoZSBEcmF3aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJv
bSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKKyAgICAgICAgLy8g
YnV0IGl0IG1ha2VzIGl0cyBvd24gZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxp
bmcgaXMgc3VwcG9ydGVkLgorICAgICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3
aW5nQnVmZmVyLT5tdWx0aXNhbXBsZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMu
cmVsZWFzZSgpOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9y
KCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIHJldHVybiBtX2NvbnRleHQtPmdl
dEVycm9yKCk7Cit9CisKK1dlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIkVYVF9ibGVuZF9taW5tYXgiKQorICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9ibGVuZF9taW5tYXgiKSkgeworICAg
ICAgICBpZiAoIW1fZXh0QmxlbmRNaW5NYXgpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfYmxlbmRfbWlubWF4Iik7CisgICAg
ICAgICAgICBtX2V4dEJsZW5kTWluTWF4ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRCbGVuZE1pbk1h
eD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0QmxlbmRNaW5NYXguZ2V0
KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX3NSR0IiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9z
UkdCIikpIHsKKyAgICAgICAgaWYgKCFtX2V4dHNSR0IpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfc1JHQiIpOworICAgICAg
ICAgICAgbV9leHRzUkdCID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRzUkdCPih0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbV9leHRzUkdCLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9mcmFnX2RlcHRoIikKKyAgICAgICAgJiYgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKSB7Cisg
ICAgICAgIGlmICghbV9leHRGcmFnRGVwdGgpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAg
ICAgICAgbV9leHRGcmFnRGVwdGggPSBzdGQ6Om1ha2VfdW5pcXVlPEVYVEZyYWdEZXB0aD4odGhp
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0RnJhZ0RlcHRoLmdldCgpOworICAg
IH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QiKQorICAgICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpKSB7CisgICAgICAgIGlmICgh
bV9leHRTaGFkZXJUZXh0dXJlTE9EKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAg
ICAgICAgICAgbV9leHRTaGFkZXJUZXh0dXJlTE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFk
ZXJUZXh0dXJlTE9EPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRTaGFk
ZXJUZXh0dXJlTE9ELmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQorICAgICAgICAmJiBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyIpKSB7CisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICAgICAgICAg
IG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICAm
JiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyIpKSB7CisgICAgICAgIGlmICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgi
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBtX29lc1N0YW5kYXJk
RGVyaXZhdGl2ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRo
aXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1
cmVfZmxvYXQiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVG
bG9hdCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVu
YWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVG
bG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0Pih0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKKyAg
ICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4
dHVyZV9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGlu
ZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgICAgICAgICBtX29lc1Rl
eHR1cmVGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFy
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5l
YXIuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKSB7CisgICAgICAgIGlmICgh
bV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAg
ICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0
dXJlSGFsZkZsb2F0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0
dXJlSGFsZkZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xp
bmVhciIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZG
bG9hdExpbmVhci5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29i
amVjdCIpOworICAgICAgICAgICAgbV9vZXNWZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91
bmlxdWU8T0VTVmVydGV4QXJyYXlPYmplY3Q+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX29lc1ZlcnRleEFycmF5T2JqZWN0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKQorICAgICAgICAmJiBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4
X3VpbnQiKSkgeworICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWludCkgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19l
bGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICAgICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9
IHN0ZDo6bWFrZV91bmlxdWU8T0VTRWxlbWVudEluZGV4VWludD4odGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1fb2VzRWxlbWVudEluZGV4VWludC5nZXQoKTsKKyAgICB9CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgeworICAg
ICAgICBpZiAoIW1fd2ViZ2xMb3NlQ29udGV4dCkKKyAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29u
dGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xMb3NlQ29udGV4dD4odGhpcyk7CisgICAgICAg
IHJldHVybiBtX3dlYmdsTG9zZUNvbnRleHQuZ2V0KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikp
CisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkg
eworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQykKKyAgICAgICAgICAg
IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuZ2V0KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSkKKyAgICAgICAgJiYg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAg
aWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQykKKyAgICAgICAgICAgIG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
V0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKQorICAgICAgICAmJiBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENv
bXByZXNzZWRUZXh0dXJlUzNUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVMzVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlz
KTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVy
ZSIpCisgICAgICAgICYmIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250
ZXh0M0QoKSkpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01J
VU1fZGVwdGhfdGV4dHVyZSIpOworICAgICAgICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xEZXB0aFRleHR1cmU+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX3dlYmdsRGVwdGhUZXh0dXJlLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJh
d0J1ZmZlcnMoKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xEcmF3QnVmZmVycykgeworICAgICAg
ICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9k
cmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgICAgIG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFr
ZV91bmlxdWU8V2ViR0xEcmF3QnVmZmVycz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1fd2ViZ2xEcmF3QnVmZmVycy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRB
cnJheXM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRB
cnJheXMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgICAgICAgICBtX2FuZ2xl
SW5zdGFuY2VkQXJyYXlzID0gc3RkOjptYWtlX3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4o
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIikpIHsKKyAgICAgICAgICAgIGlmICghbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAg
ICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4odGhpcyk7CisgICAgICAgICAgICByZXR1cm4gbV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvLmdldCgpOworICAgICAgICB9CisgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfc2hhZGVycyIpCisgICAgICAgICAgICAmJiBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKSB7CisgICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMp
CisgICAgICAgICAgICAgICAgbV93ZWJnbERlYnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViR0xEZWJ1Z1NoYWRlcnM+KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1
Z1NoYWRlcnMuZ2V0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwg
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1
ZmZlckZ1bmNQYXJhbWV0ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0
YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisKKyAg
ICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5v
IGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICB9CisKKyAgICBXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCk7CisgICAgaWYgKCFvYmplY3QpIHsK
KyAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVz
IElOVkFMSURfRU5VTSBpbiB0aGlzIGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKKyAgICAgICAgLy8g
c3BlY2lmaWVzIElOVkFMSURfT1BFUkFUSU9OLgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIH0KKworICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8
IG9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkp
IHsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJl
PihyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVM
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgICAgICBHQzNE
aW50IHZhbHVlID0gMDsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZl
cj4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJ
TkdfRVhUOiB7CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0g
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAg
ICBHQzNEZW51bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFs
Rm9ybWF0KCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6
U1JHQl9BTFBIQV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBF
eHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIH0KKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVt
IHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBjb25zdCBpbnQgaW50WmVybyA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdM
RmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFy
cmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQV9C
SVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZmZXIpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X0NPTE9SOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVB
VElPTl9BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6CisgICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgICAgICByZXR1cm4g
Z2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgor
ICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1
cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VM
TF9GQUNFX01PREU6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1cnJlbnRQ
cm9ncmFtKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKKyAgICAg
ICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQorICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VO
RVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoKKyAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElORV9XSURUSDoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJV
RkZFUl9TSVpFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYWx3YXlz
IHJldHVybiAwIGZvciB0aGlzPworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJ
TEw6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RURfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5kZXJidWZm
ZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgICAgIHJldHVybiBnZXRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9D
T1ZFUkFHRV9JTlZFUlQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6Cisg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgICAgIHJl
dHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdF
X1ZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wgRVMgMS4w
ICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFO
R1VBR0VfVkVSU0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQkFDS19GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5DOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoK
KyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQklUUzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KGludFplcm8pOworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVFX01B
U0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U1VCUElYRUxfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1
cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0
c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
RkxJUF9ZX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrRmxpcFkp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZF
UlNJT05fV0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldl
YkdMIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OKSArICIpIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVz
KQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMz
RDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBXZWJH
TERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKKyAgICAgICAgaWYg
KG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKSk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVu
ZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6
CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpW
RU5ET1IpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJH
TF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdf
T0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgICAgICBpZiAobV9vZXNWZXJ0ZXhB
cnJheU9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmlzRGVmYXVsdE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
UGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QpKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJy
YXlfb2JqZWN0IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAv
LyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAv
LyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMp
CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNobWVudHMo
KSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJh
d19idWZmZXJzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6CisgICAgICAgIGlm
IChtX3dlYmdsRHJhd0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdl
dE1heERyYXdCdWZmZXJzKCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVm
ZmVycworICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUCisgICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNp
b25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgeworICAgICAg
ICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICAg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOworICAgICAgICAgICAgZWxz
ZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtX2JhY2tE
cmF3QnVmZmVyOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9B
VFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoK
KyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyh2YWx1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xv
ZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bUluZm9Mb2ciLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJvKHByb2dy
YW0pKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAo
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIH0KKworICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwKKyAg
ICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7CisgICAgICAgIEFT
U0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CisgICAgICAgIGludCB2YWx1ZSA9IDA7
CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgICAgIHZhbHVl
ID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpF
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpF
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0la
RToKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICAgICAg
ICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgIHZhbHVl
ID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgfQorCisg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfSEVJR0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9SRURfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfQkxVRV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9BTFBIQV9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9E
RVBUSF9TSVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVO
Q0lMX1NJWkU6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmct
PmdldEludGVybmFsRm9ybWF0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyUGFyYW1ldGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwor
ICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHNoYWRlci0+aXNEZWxldGVkKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TVBJTEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVy
byhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNI
QURFUl9UWVBFOgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhz
aGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRTaGFkZXJJbmZvTG9nIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAg
IHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RP
clplcm8oc2hhZGVyKSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9y
bWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNE
ZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lz
aW9uVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SElHSF9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5U
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SElHSF9JTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHQzNEaW50IHJhbmdlWzJdID0g
ezAsIDB9OworICAgIEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnBy
ZWNpc2lvbik7CisgICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUo
cmFuZ2VbMF0sIHJhbmdlWzFdLCBwcmVjaXNpb24pOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm4g
IiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5z
aW9ucygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworCisgICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9ibGVuZF9taW5tYXgi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2JsZW5kX21pbm1heCIpOworICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zUkdCIikpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zUkdCIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkKKyAgICAgICAgcmVzdWx0
LmFwcGVuZCgiRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICBpZiAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsK
KyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVy
X3RleHR1cmVfbG9kIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworICAgIGlmIChtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7
CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2Vs
ZW1lbnRfaW5kZXhfdWludCIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9p
bmRleF91aW50Iik7CisgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Cisg
ICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsK
KyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZy
dGMiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlz
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMi
KTsKKyAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQz
RCgpKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOworICAg
IGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdM
X2RyYXdfYnVmZmVycyIpOworICAgIGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVk
KHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7
CisKKyAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBz
d2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRU
ZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYworICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKCF1bmlmb3JtTG9jYXRpb24g
fHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gcHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRV
bmlmb3JtIiwgIm5vIHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3Jh
bSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIEdDM0RpbnQg
bG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7CisKKyAgICBHQzNEZW51bSBi
YXNlVHlwZTsKKyAgICB1bnNpZ25lZCBsZW5ndGg7CisgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRp
b24tPnR5cGUoKSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDE7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAy
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMz
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAg
bGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gOTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUNDoKKyAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE2OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOworICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CisgICAgfQorICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogeworICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9
OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAg
IH0KKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKKyAgICAgICAgR0MzRGludCB2
YWx1ZVs0XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFs
dWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5n
dGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKKyAgICAgICAg
R0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlm
b3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNE
aW50KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVu
aWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAg
IGlmIChsZW5ndGggPiAxKSB7CisgICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCisgICAg
ICAgICAgICAgICAgYm9vbFZhbHVlW2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVswXSkpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKworICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBv
dXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25v
d24gZXJyb3IiKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cit9CisKK1Bhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlv
biIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXZhbGlkYXRl
TG9jYXRpb25MZW5ndGgoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24i
LCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghcHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5v
dCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIEdDM0RpbnQg
dW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKKyAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwor
ICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVu
aWZvcm1zKTsKKyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsr
KSB7CisgICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1l
IGlmIGl0J3MgYW4gYXJyYXkuCisgICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIp
KQorICAgICAgICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0
aCgpIC0gMyk7CisgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0
ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4K
KyAgICAgICAgZm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiAr
IFN0cmluZzo6bnVtYmVyKGluZGV4KSArICJdIjsKKworICAgICAgICAgICAgaWYgKG5hbWUgPT0g
dW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBp
bmZvLnR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitX
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVp
bnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworCisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworCisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKworICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgaWYg
KG1fYW5nbGVJbnN0YW5jZWRBcnJheXMgJiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0ZS5kaXZpc29yKTsKKworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAg
ICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3Zl
cnRleEF0dHJpYjBCdWZmZXIpCisgICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwor
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxlZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0ZS5zaXplKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX1NUUklERToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0
cmlkZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9U
WVBFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2lu
ZGV4XS52YWx1ZSwgNCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorfQorCitsb25nIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDM0RzaXplaXB0
ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9k
ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKKyAgICAgICAgaXNW
YWxpZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFH
TUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzCisgICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCisgICAgICAgICAgICBp
c1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghaXNWYWxpZCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQzNEYm9vbGVhbiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgeworICAg
ICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2
ZSB0aGUgcG9saWN5LiIpOworICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+
ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQu
cGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUo
KSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29s
dmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51cmwoKSk7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1
dGlvbi4gQSBtb3JlCisgICAgICAgIC8vIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRy
eSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQsIGV0YyBhbmQgcHJvY2VlZAorICAgICAgICAv
LyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKKyAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lS
ZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkp
CisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkKKyAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAgcmV0dXJu
IG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikK
K3sKKyAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5k
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYg
KCFwcm9ncmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwor
fQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIg
fHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlm
ICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmpl
Y3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+
aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAo
IXRleHR1cmUgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2NvbnRleHQtPmxpbmVXaWR0aCh3aWR0aCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Cisg
ICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgICAgIFdlYkdMU2hh
ZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8
fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVu
dFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RP
clplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1f
Y29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7CisgICAgICAgICAgICBwcm9ncmFtLT5z
ZXRMaW5rU3RhdHVzKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
KyAgICBwcm9ncmFtLT5pbmNyZWFzZUxpbmtDb3VudCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJ
UF9ZX1dFQkdMOgorICAgICAgICBtX3VucGFja0ZsaXBZID0gcGFyYW07CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTDoKKyAgICAgICAgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhID0gcGFyYW07CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NP
TlZFUlNJT05fV0VCR0w6CisgICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
KQorICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0
PEdDM0RlbnVtPihwYXJhbSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIs
ICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJH
TCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgIGlmIChwYXJhbSA9PSAxIHx8
IHBhcmFtID09IDIgfHwgcGFyYW0gPT0gNCB8fCBwYXJhbSA9PSA4KSB7CisgICAgICAgICAgICBp
ZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQorICAgICAgICAg
ICAgICAgIG1fcGFja0FsaWdubWVudCA9IHBhcmFtOworICAgICAgICAgICAgZWxzZSAvLyBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCA9IHBhcmFtOworICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShw
bmFtZSwgcGFyYW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJp
bnZhbGlkIHBhcmFtZXRlciBmb3IgYWxpZ25tZW50Iik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1
bml0cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMs
IGl0IGlzIG5vdCBwb3NzaWJsZSB0bworICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhl
IFdlYkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOworICAgIC8v
IFZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFk
UGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ogor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJ
R05FRF9CWVRFIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgYXJy
YXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEpTQzo6VHlwZVVpbnQ4KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBVaW50OEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hh
ciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNL
X0FMSUdOTUVOVC4KKyAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKKyAg
ICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDA7CisgICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1
cHBvcnRlZCkgeworICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1l
bnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZGltZW5zaW9ucyIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
KyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOworCisgICAgeworICAgICAg
ICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNz
RVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJl
YWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5i
eXRlTGVuZ3RoKCksIGRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQt
PnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAg
ICB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVk
KSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVkIHBhZGRpbmcKKyAgICAgICAgbV9jb250ZXh0LT5jb21w
dXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOworICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVT
IGRyaXZlciBidWcKKyAgICAvLyBvbiBRQyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBv
ZmYsIHJlYWRQaXhlbHMgc2hvdWxkCisgICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpOworICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeSA9IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7CisgICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKKyAgICAgICAgICAgICAgICBwaXhl
bHNbM10gPSAyNTU7CisgICAgICAgICAgICAgICAgcGl4ZWxzICs9IDQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5v
IGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
dmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9F
WFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0I4X0FM
UEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5z
ZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdl
KHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgfQorICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgs
IGhlaWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0Rl
cHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5z
ZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKCF2YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hh
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47
CisgICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5n
KS5yZXN1bHQoKTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJp
bmdXaXRob3V0Q29tbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZGVyLT5zZXRTb3Vy
Y2Uoc3RyaW5nKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hh
ZGVyKSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBt
YXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgIG1fc3RlbmNp
bEZ1bmNSZWZCYWNrID0gcmVmOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICBt
X3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMo
ZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5j
aWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYs
IEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNT
ZXBhcmF0ZSIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1fc3Rl
bmNpbEZ1bmNSZWYgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwor
ICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNN
YXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAgICBtX3N0
ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJBQ0s6CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOworICAg
ICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgIG1f
c3RlbmNpbE1hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2sp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAgICAgICAgbV9zdGVuY2lsTWFz
ayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNp
bE1hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBh
cmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5j
aWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51
bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+c3Rl
bmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhN
RTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZC4KKyAgICBlYyA9IDA7Cisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygi
dGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0
ZXgpOworICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICBpZiAoIXBpeGVscykgeworICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdz
IE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZl
KCkgaXMgdGhlcmVmb3JlIHRydWUuCisgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlv
bnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRl
eHR1cmVzCisgICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5k
IG11c3QgYmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZworICAgICAg
ICAvLyBjbGVhci4KKyAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgICAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJj
ZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlm
ICghc3VjY2VlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2Uy
RCIsIGludGVybmFsZm9ybWF0KSk7CisgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7CisgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgICAgICBpZiAo
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAg
ICAgLy8gVGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1
cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICAgICAg
dGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21T
b3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgZWMgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291
cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdy
YXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RT
dWNjZWVkZWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3Vy
Y2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VB
bHBoYU9wKCk7CisgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rv
ci5pbWFnZVBpeGVsRGF0YSgpOworCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Cisg
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNl
RGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0g
ZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRh
KGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291
cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBp
eGVsRGF0YSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBz
b3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0KQoreworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhm
dW5jdGlvbk5hbWUsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQp
IHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWln
aHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9yIFNv
dXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxk
IGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAgICAg
ICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90Lgor
ICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1h
dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwg
Zm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCF2YWxpZGF0
ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5n
ZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICAgICAgaWYgKHhvZmZzZXQg
KyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFu
Z2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRl
eHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBw
aXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJy
YXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgdm9p
ZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRlbXBEYXRhOworICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFs
c2U7CisgICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKSkgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAg
IGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBh
Y2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAg
ICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7CisgICAgaWYgKGNoYW5nZVVucGFja0Fs
aWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFn
ZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJv
bSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJz
aW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBV
U0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVp
cmVkLgorICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNl
OworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShw
aXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+
ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCitQYXNzUmVmUHRyPEltYWdlPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBJbnRTaXpl
IHNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7
CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZl
cihzaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9y
eSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChGbG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOworICAgIEZsb2F0UmVjdCBkZXN0UmVj
dChGbG9hdFBvaW50KCksIHNpemUpOworICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1h
Z2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKKyAgICByZXR1cm4g
YnVmLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
SW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxl
bWVudCgidGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VG
b3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5p
c1NWR0ltYWdlKCkpCisgICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZl
cihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwg
MSk7CisKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleElt
YWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9y
UmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBl
YyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1M
Q2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVu
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFz
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUg
Y2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKKyAgICAvLyB2aWEgdGhlIEdQ
VSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgorICAgIC8vCisgICAgLy8g
RklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQg
YmUgbGlmdGVkIHdoZW4KKyAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJl
IGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KKyAgICBpZiAoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0
dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYm
IHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgSW1h
Z2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CisgICAgICAgIGlmIChidWZmZXIg
JiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgdHlwZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAg
IGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CisgICAgZWxzZQor
ICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
K30KKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tp
bmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgSW50
U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKKyAg
ICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNp
emUpOworICAgIGlmICghYnVmKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBJbnRSZWN0IGRlc3RSZWN0KDAs
IDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgLy8gRklYTUU6IFR1cm4gdGhp
cyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCisg
ICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0
UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAw
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVv
RWxlbWVudCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1l
bnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2
aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0
ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3Np
YmxlLgorICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBT
VyBwYXRoLgorICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0
aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKKyAgICAvLyB0eXBlIHNob3VsZCBiZSBV
TlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0
aGUgZnV0dXJlLgorICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmIChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQorICAgICAgICAmJiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKQorICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFCisgICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwg
bGV2ZWwpKQorICAgICAgICAmJiAhbGV2ZWwpIHsKKyAgICAgICAgaWYgKHZpZGVvLT5jb3B5Vmlk
ZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmpl
Y3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8o
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVv
LT52aWRlb0hlaWdodCgpLCB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCisgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSwgZWMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRl
ciIsIHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAg
c3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JB
UF9TOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAg
ICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQorICAgICAgICAgICAgfHwgKCFpc0Zs
b2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJh
bWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6
IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYworICAgICAgICBpZiAoIW1fZXh0VGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaXNGbG9hdCkgeworICAgICAgICB0ZXgtPnNldFBh
cmFtZXRlcmYocG5hbWUsIHBhcmFtZik7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
Zih0YXJnZXQsIHBuYW1lLCBwYXJhbWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRleC0+c2V0
UGFyYW1ldGVyaShwbmFtZSwgcGFyYW1pKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtaSk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBh
cmFtLCAwLCB0cnVlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sK
KyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAw
OworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2
ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7CisgICAgQVNTRVJU
KHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKKyAgICBB
U1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkp
OworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3Vi
SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKCh4b2Zm
c2V0ICsgd2lkdGgpID49IDApOworICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7
CisgICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3
aWR0aCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9m
ZnNldCArIGhlaWdodCkpOworICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdl
dCwgbGV2ZWwpID09IGZvcm1hdCk7CisgICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKSA9PSB0eXBlKTsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSk7ICAKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
KworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcg
JiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
RXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwg
IG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOworICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVu
dCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmll
dyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKKyAg
ICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQs
IFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47
CisgICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsK
KyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEpKSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hh
bmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0Fs
aWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRh
LCBlYyk7CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBh
Y2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4
U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhl
bHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwor
ICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1h
Z2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBp
cyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05F
RF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4K
KyAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxz
LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
ZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdu
bWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4
dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0
KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+
ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JS
ZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7CisgICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NW
R0ltYWdlKCkpCisgICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihp
bWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7
CisKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxl
dmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVp
Z2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
ZWMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZh
cywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkK
KyAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4
U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwor
I2lmIEVOQUJMRShWSURFTykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwg
dmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9y
bWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKSwgZWMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVv
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKyNlbmRp
ZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwg
diwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRp
b24sIHYsIHNpemUsIDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKChsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4
dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5p
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWko
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQg
fHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVu
aXRzLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQg
c2l6ZT0lenUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0
cy5zaXplKCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYi
LCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2Nh
dGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9u
LT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1f
dGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxp
ZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0p
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFt
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAyLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gMiwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJp
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJ
bnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAyLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSAvIDIsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAz
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9u
LT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRp
b24sIHYsIHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwg
ImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwg
eSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
M2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlm
b3JtNGYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwg
c2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00
aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgsIHksIHosIHcpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0
LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRh
dGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIDQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4
MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+
ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgy
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIs
IGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
NCwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9j
YXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwg
dHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlm
b3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNp
emVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNp
emUsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9v
bCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBw
cm9ncmFtLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAg
ICAgICBwcm9ncmFtID0gMDsKKyAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0
YXR1cygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFt
KSB7CisgICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQorICAgICAgICAgICAgbV9jdXJyZW50
UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKKyAgICAgICAgbV9jdXJy
ZW50UHJvZ3JhbSA9IHByb2dyYW07CisgICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmpl
Y3RPclplcm8ocHJvZ3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAgICAgICAgIHBy
b2dyYW0tPm9uQXR0YWNoZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dy
YW0pKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCit7CisgICAgdmVydGV4
QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAx
LjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihH
QzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1w
bCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmli
MWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAy
LCB2MCwgdjEsIDAuMGYsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7CisgICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJ
bXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJm
SW1wbCgidmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5k
ZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0
dHJpYjNmdiIsIGluZGV4LCB2LCAzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4
LCB2LCBzaXplLCAzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5
KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgs
IHYsIDQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZl
cnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNE
dWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3Jt
YWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhB
dHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1
NSB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwg
c3RyaWRlIG9yIG9mZnNldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9i
b3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91
bmQgQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2
ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCisgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7CisgICAgaWYgKCF0eXBlU2l6ZSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVy
dGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
InN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsK
KworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5k
ZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOworICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXpl
ZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3
cG9ydCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT52
aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4
dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwor
ICAgIG1fY29udGV4dExvc3RNb2RlID0gbW9kZTsKKworICAgIGlmIChtb2RlID09IFJlYWxMb3N0
Q29udGV4dCkgeworICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNv
bnRleHQgd2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0CisgICAg
ICAgIC8vIGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3Ig
cGVybWlzc2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLmNsaWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7CisgICAgfQorCisgICAgZGV0YWNoQW5k
UmVtb3ZlQWxsT2JqZWN0cygpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICAvLyBNYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1k
ZWxldGVkIHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
c2V0VGV4dHVyZTJEQmluZGluZygwKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFt
ZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgfQorCisgICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdh
eSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAorICAgIC8vIGxv
b3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGlu
ZmluaXRlIGxvb3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRp
b24gaGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZSBudW1iZXIg
b2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RD
b250ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOworICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJs
b3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKKworICAgIC8vIERvbid0IGFs
bG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJl
ZW4KKyAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQu
CisgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOworCisgICAgLy8gQWx3YXlzIGRlZmVyIHRo
ZSBkaXNwYXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKKyAgICAv
LyB0aGUgc3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2suCisgICAgbV9kaXNwYXRjaENv
bnRleHRMb3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKK3sKKyAgICBpZiAoIWlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5v
dCBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9yZUFs
bG93ZWQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RD
b250ZXh0KQorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlv
biBub3QgYWxsb3dlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jl
c3RvcmVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNo
b3QoMCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAw
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdl
YkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9i
amVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVk
T2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5n
UG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc0NvbnRl
eHRMb3N0KCkpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2Vi
R0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkp
OworICAgIG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKK3sKKyAgICBpZiAobV9p
c1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAo
bV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2ViR0xDb250
ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOworICAg
ICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCit7CisgICAgaWYg
KCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgeworICAg
ICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAgICAgICAgZGVz
dHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQorewor
ICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBu
YW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4o
dmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChwbmFtZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7CisgICAgfQorICAgIEdD
M0Rib29sZWFuIHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5h
bWUsIHZhbHVlKTsKKyAgICBib29sIGJvb2xWYWx1ZVs0XTsKKyAgICBmb3IgKGludCBpaSA9IDA7
IGlpIDwgNDsgKytpaSkKKyAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+
KHZhbHVlW2lpXSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOworfQor
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8odmFs
dWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKK30K
KworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5
UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHsw
fTsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfUkFOR0U6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0K
KyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlWzRd
ID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAgICAgIGxlbmd0aCA9IDQ7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgfQorICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJh
dykKK3sKKyAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgIFdlYkdMVGV4dHVy
ZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4
dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdl
YkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1f
b2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lv
bkhhbGZGbG9hdExpbmVhckVuYWJsZWQgOiAwKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlpID0g
MDsgaWkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKKyAgICAgICAgaWYgKChtX3Rl
eHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4
dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAg
ICAgICAgfHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKGV4dGVuc2lvbnMpKSkgeworICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVy
ZVVuaXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwor
ICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHJlc2V0QWN0aXZlVW5pdCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0
aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOworICAgICAg
ICAgICAgV2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOworICAgICAgICAgICAgaWYgKHByZXBhcmVU
b0RyYXcpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3Vu
ZCB0byB0ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKKyAgICAgICAgICAgICAg
ICAgICAgKyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQg
aGF2ZSBpbmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNv
bXBsZXRlJywiCisgICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYt
ZmxvYXQgdHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50
IGZsb2F0L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOworICAgICAgICAg
ICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsK
KyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAgICAgICAgICAgIHRleEN1
YmVNYXAgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
MkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9V
c2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRl
eDJEKSk7CisgICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFw
QmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVk
VG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0
T3JaZXJvKHRleEN1YmVNYXApKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmVzZXRBY3Rp
dmVVbml0KQorICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJl
VW5pdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0Js
YWNrVGV4dHVyZXMxeDEoKQoreworICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAw
LCAyNTV9OworICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFj
a1RleHR1cmUyRC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIG1fYmxh
Y2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVy
ZUN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwor
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQLCAwKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50
ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJu
YWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkK
K3sKKyAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRz
QnlGb3JtYXQodGV4SW50ZXJuYWxGb3JtYXQpOworICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Cisg
ICAgcmV0dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKK30KKworR0MzRGVudW0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3Jt
YXQoKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQorICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9
CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgp
Cit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xv
ckJ1ZmZlcldpZHRoKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1
ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlckhlaWdodCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOworICAgIHJldHVybiBtX2RyYXdpbmdC
dWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKworV2ViR0xUZXh0dXJlKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFw
KQoreworICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0
YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAg
ICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4
RW51bXNGb3JDdWJlTWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUg
dGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAg
ICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJl
TWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0g
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
LmdldCgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwor
ICAgIHJldHVybiB0ZXh0dXJlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGgg
PSAyNTY7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCB4LCBHQzNEaW50IHkpCit7CisgICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJzaXplIDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVT
dHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCit7
CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBI
QToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xE
ZXB0aFRleHR1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGgg
dGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNS
R0JfQUxQSEFfRVhUOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICgoZm9ybWF0ID09IEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQgfHwgZm9ybWF0ID09IEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9F
WFQpCisgICAgICAgICAgICAmJiBtX2V4dHNSR0IpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
OgorICAgICAgICBpZiAobV9vZXNUZXh0dXJlRmxvYXQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOgorICAgICAg
ICBpZiAobV9vZXNUZXh0dXJlSGFsZkZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0Xzg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9mIGZvcm1hdCBhbmQgdHlwZSBp
cyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgorICAgICAgICBpZiAo
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKKyAgICAgICAgaWYgKHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81CisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6
CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisg
ICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80
XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBS
R0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoK
KyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVsID4gMCkgeworICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9y
bWF0Iik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CisgICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBm
b3JtYXQuIERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfSU5UXzI0XzgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
eXBlIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZl
bChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCkKK3sKKyAgICBpZiAobGV2ZWwgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKHRhcmdldCkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIGlmIChsZXZl
bCA+PSBtX21heFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91
dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVy
ZUxldmVsKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNv
IHdlIHJldHVybiB0cnVlIGFuZCBkb24ndAorICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBp
ZiB0YXJnZXQgaXMgaWxsZWdhbC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlKQoreworICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0
aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgorICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVu
dHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQorICAgIC8vIHRl
bXBvcmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVn
YWwuCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwg
Zm9ybWF0LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFt
ZSwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgR0MzRGludCBtYXhU
ZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2
ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8
fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoZnVuY3Rp
b25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVp
Z2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAgIC8vIEZvciB0
ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBo
ZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJh
bmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0
ICE9IGludGVybmFsZm9ybWF0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Ym9yZGVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQoreworICAg
IGlmICghcGl4ZWxzKSB7CisgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5j
dGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAg
ICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBu
b3QgVWludDhBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZl
clZpZXcgbm90IFVpbnQxNkFycmF5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IC8vIE9FU190ZXh0dXJlX2Zsb2F0CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBK
U0M6OlR5cGVGbG9hdDMyKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQg
YnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAg
ICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJl
IG51bGwgd2hlbgorICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQu
CisgICAgICAgIGlmIChwaXhlbHMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBI
QUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdW5zaWduZWQg
aW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKKyAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3Vu
cGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkg
PCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9
IDEpIHsKKyAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0
ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAw
KTsKKyAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVp
cmVkKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmln
IGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVu
dW0gZm9ybWF0KQoreworICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250
YWlucyhmb3JtYXQpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVD
b21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogcGl4ZWxzKQoreworICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod2lkdGgg
PCAwIHx8IGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8
IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBi
eXRlc1JlcXVpcmVkID0gMDsKKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGgg
PSA0OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAg
ICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9j
a1dpZHRoOworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2Nr
SGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0g
bnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9F
WFBMSUNJVF9BTFBIQV9BTUQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRD
X1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKKyAgICAgICAgeworICAgICAgICAgICAgY29u
c3QgaW50IGtCbG9ja1NpemUgPSAxNjsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0
aCA9IDQ7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAg
ICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Js
b2NrV2lkdGg7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxv
Y2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1BWUlRDXzRCUFBWMV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tTaXplID0gODsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAg
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVx
dWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwg
a0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBW
MV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQ
VjFfSU1HOgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7
CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKKyAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChz
dGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWln
aHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5
dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZp
ZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogeworICAg
ICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBHQzNE
c2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJl
U2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6
ZTsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhU
ZXh0dXJlU2l6ZSA+PiBsZXZlbDsKKyAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYm
IHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9j
a1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgYm9v
bCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdo
dCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21w
cmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxp
ZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0
IGJlIHBvd2VycyBvZiAyLgorICAgICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8ICho
ZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRo
IG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKK3sKKyAgICBpZiAoeG9mZnNldCA8IDAg
fHwgeW9mZnNldCA8IDApIHsKKyAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAw
Iik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogeworICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVp
Z2h0ID0gNDsKKyAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0
ICUga0Jsb2NrSGVpZ2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9y
IHlvZmZzZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0
YXJnZXQsIGxldmVsKQorICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0
SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVu
c2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rp
b25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7
CisgICAgICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0
aCh0YXJnZXQsIGxldmVsKQorICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMg
bXVzdCBtYXRjaCBleGlzdGluZyBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25z
KGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAg
ICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdM
RV9GQU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcg
bW9kZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQoreworICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8
IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVu
Y01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
ZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gZnVuYykKK3sKKyAgICBzd2l0Y2ggKGZ1bmMpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpORVZFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpHUkVBVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOT1RFUVVBTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgZnVuY3Rpb24iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKyAg
ICBwcmludFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7CisKKyAgICBpZiAoIW1fbnVtR0xFcnJv
cnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldlYkdM
OiB0b28gbWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhl
IGNvbnNvbGUgZm9yIHRoaXMgY29udGV4dC4iKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKCFjYW52YXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhbnZhcygpLT5kb2N1bWVu
dCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxl
dmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBpZiAodGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHN3
aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycworICAg
ICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMAorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0
YWNobWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9u
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKK3sKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUlO
X0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0VYVDoKKyAgICAgICAgaWYgKChtb2Rl
ID09IEV4dGVuc2lvbnMzRDo6TUlOX0VYVCB8fCBtb2RlID09IEV4dGVuc2lvbnMzRDo6TUFYX0VY
VCkgJiYgIW1fZXh0QmxlbmRNaW5NYXgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
bW9kZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQoreworICAgIGlm
ICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICAmJiAo
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8ICgoZHN0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgICAgICYmIChzcmMg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNh
cCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxM
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1p
blNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
R0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlv
biwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
K3sKKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGxvY2F0aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
YXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNE
c2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVu
dCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBu
b3QgRkFMU0UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8
IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVm
ZmVyID0gMDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1
ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAibm8gYnVmZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0
Y2ggKHVzYWdlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0K
KyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2Uo
KS51cmwoKTsKKyAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsK
KyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMg
fHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNh
bnZhcykpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVv
LT52aWRlb0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkg
eworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQg
djEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0
ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRl
eEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0
cmliMmYoaW5kZXgsIHYwLCB2MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAz
OgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2
Mik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJp
YlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUudmFs
dWVbMF0gPSB2MDsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOworICAgIGF0dHJpYlZh
bHVlLnZhbHVlWzJdID0gdjI7CisgICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rp
b25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUg
PCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2
YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBz
d2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5k
ZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRm
dihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBW
ZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4
XTsKKyAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlp
IDwgZXhwZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRyaWJWYWx1ZS52YWx1ZVtpaV0gPSB2
W2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIw
KCkKK3sKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDAp
OworICAgIAorICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOworICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBt
X3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRh
dGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRZTkFNSUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQs
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHN0YXRlLmJ1ZmZl
ckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZSA9IDA7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOworICAgIG1f
dmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10g
PSAxLjBmOworICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgbV92
ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCit7Cisg
ICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0
YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsK
KyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJp
YlZhbHVlWzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNV
c2luZ1ZlcnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwKQorICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGUuZW5hYmxl
ZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOwor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNEc2l6ZWlwdHIgYnVm
ZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdDM0RmbG9hdCk7Cisg
ICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgeworICAg
ICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwor
ICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7CisgICAg
ICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVz
aW5nVmVydGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwK
KyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVydGV4QXR0cmliMEJ1
ZmZlclZhbHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsxXSAhPSBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFs
dWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgICAgIHx8IGF0
dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSkgewor
ICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigo
bnVtVmVydGV4ICsgMSkgKiA0KTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBpaSA8
IG51bVZlcnRleCArIDE7ICsraWkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAx
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQg
KyAyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAq
IDQgKyAzXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICB9CisgICAgICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVbMF07CisgICAgICAg
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07Cisg
ICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVb
Ml07CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUu
dmFsdWVbM107CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7Cisg
ICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7CisgICAgfQorICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIDAsIDAsIDApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQor
eworICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRl
JiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
MCk7CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
KSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUu
dHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9mZnNl
dCk7CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQo
KQoreworICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0
cnVlLCAiIik7CisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVz
dG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRl
eHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAg
ICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4
dExvc3QpOworICAgIGlmICghbV9jb250ZXh0TG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1
bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJl
dmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0
b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNv
bnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9y
dC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0
IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGludCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5n
ZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVh
c29uKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6CisgICAgICAgIC8v
IFRoZSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVsbHkKKyAg
ICAgICAgLy8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3MgeWV0LiBBbHRlcm5h
dGl2ZWx5LCB0aGUKKyAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4dGVuc2lvbiBtaWdo
dCBoYXZlIGJlZW4gdXNlZCB0byBmb3JjZQorICAgICAgICAvLyBhIGxvc3QgY29udGV4dC4KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9DT05URVhUX1JFU0VU
X0FSQjoKKyAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCBp
ZiB0aGlzIGNvbnRleHQgd2FzCisgICAgICAgIC8vIGd1aWx0eSBvZiBjYXVzaW5nIHRoZSBncmFw
aGljcyByZXNldC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJH
TCBjb250ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldDsg
bm90IHJlc3RvcmluZyB0aGUgY29udGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBBbHdh
eXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAv
LyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wK
KyAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3Jh
cGhpY3MgY2FyZCB0bworICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5
IHdhbnQgdG8gY29udGludWUgcnVubmluZworICAgICAgICAvLyB0aGUgY29udGVudC4gT25seSBp
ZiB0aGV5IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKKyAgICAgICAgLy8gYXR0ZW1wdGluZyB0
byByZXN0b3JlIHRoZSBjb250ZXh0LgorICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldB
Uk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdy
YXBoaWNzIGNhcmQgdG8gcmVzZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRnJh
bWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5h
bGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybjsKKyAgICBTY3JvbGxWaWV3KiByb290ID0gdmlldy0+cm9vdCgp
OworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuOworICAgIEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cgPSByb290LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAo
IWNvbnRleHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29u
dGV4dCkKKyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0
d2VlblJlc3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMg
bGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQg
dG8gdGhlIFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRy
YXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNl
cygpOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZmZXIgcHJlc2Vy
dmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2luZ0J1ZmZlcjo6
UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAgICAgICBEcmF3aW5nQnVmZmVy
OjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8gRHJhd2luZ0J1
ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7CisgICAgICAgIG1fZHJhd2luZ0J1
ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZm
ZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7CisgICAgfQorCisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbnRleHRM
b3N0ID0gZmFsc2U7CisgICAgc2V0dXBGbGFncygpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0
KCk7CisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIi
KSk7Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuc3VyZU5vdE51bGwoY29u
c3QgU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQorCitXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2Fj
aGUoaW50IGNhcGFjaXR5KQorICAgIDogbV9idWZmZXJzKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkpCisgICAgLCBtX2NhcGFjaXR5KGNh
cGFjaXR5KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kpIHsKKyAgICAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFidWYp
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBz
aXplKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7Cisg
ICAgICAgIHJldHVybiBidWY7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKKyAgICBpZiAoIXRlbXAp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0g
MSwgaSk7CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOworCisgICAgSW1hZ2VC
dWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOwor
ICAgIHJldHVybiBidWY7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlOjpidWJibGVUb0Zyb250KGludCBpZHgpCit7CisgICAgZm9yIChpbnQgaSA9
IGlkeDsgaSA+IDA7IC0taSkKKyAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2kt
MV0pOworfQorCituYW1lc3BhY2UgeworCisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0Rl
bnVtIGVycm9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklO
VkFMSURfRU5VTSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUU6CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAi
SU5WQUxJRF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRf
T0ZfTUVNT1JZOgorICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046Cisg
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAg
ICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsK
KyAgICAgICAgfQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURp
c3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkpCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNU
b0NvbnNvbGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7CisgICAgICBTdHJpbmcg
c3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiAr
IFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAg
ICBwcmludEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50
aGVzaXplR0xFcnJvcihlcnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1
bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcHJpbnRH
TEVycm9yVG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YXBwbHlTdGVuY2lsVGVzdCgpCit7CisgICAgYm9vbCBoYXZlU3RlbmNpbEJ1ZmZlciA9
IGZhbHNlOworCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3Rl
bmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1
dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIg
PSBhdHRyaWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5j
aWxFbmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJs
ZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmls
aXR5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsK
K30KKworSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRDYW52YXNTaXplKCkK
K3sKKyAgICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+d2lkdGgoKSwgMSwgbV9tYXhW
aWV3cG9ydERpbXNbMF0pLAorICAgICAgICAgICAgICAgICAgIGNsYW1wKGNhbnZhcygpLT5oZWln
aHQoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJh
d0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJz
KQorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdf
QlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRh
Y2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1B
WF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8v
IFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFY
X0RSQVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9t
YXhDb2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldE1heENvbG9yQXR0YWNobWVudHMoKQoreworICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVy
cygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykK
KyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9B
VFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIHJldHVybiBtX21h
eENvbG9yQXR0YWNobWVudHM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRC
YWNrRHJhd0J1ZmZlcihHQzNEZW51bSBidWYpCit7CisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IGJ1
ZjsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50RnJhbWVi
dWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCks
IGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4
dHVyZTJEKCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd0J1ZmZl
cnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKKyAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdM
UmVxdWlyZW1lbnRzQ2hlY2tlZCA9IHRydWU7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0
ZWQgPSBXZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7CisgICAgfQorICAgIHJldHVy
biBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYgKCFwcmltY291bnQp
IHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0FycmF5cygiZHJhd0FycmF5c0luc3RhbmNlZCIsIG1v
ZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZh
bHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0FycmF5c0luc3RhbmNlZCIsIHRydWUpOworCisgICAgbV9jb250ZXh0LT5kcmF3
QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAgICAg
IHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYgKCFp
c0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRy
YXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAg
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMo
ImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVs
ZW1lbnRzLCBwcmltY291bnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAg
aWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAg
ICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19j
YXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAgICAgdmVydGV4QXR0
cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAg
fQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29t
cGxldGVuZXNzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4
dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOworCisgICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0Fm
dGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0
KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0Mz
RHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidmVydGV4QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4
QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjOTQyMGU0OTJkZTFk
NjM2MWE0NTViYmUyZDNkZDFlNTI5NTM3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMCwwICsxLDgxNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dF9oCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgorI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50
MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEFOR0xFSW5zdGFuY2VkQXJyYXlzOworY2xhc3MgRVhUQmxlbmRN
aW5NYXg7CitjbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7CitjbGFzcyBFWFRTaGFk
ZXJUZXh0dXJlTE9EOworY2xhc3MgRVhUc1JHQjsKK2NsYXNzIEVYVEZyYWdEZXB0aDsKK2NsYXNz
IEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3MgSW1hZ2VC
dWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CitjbGFzcyBJbnRTaXplOworY2xhc3MgT0VTU3RhbmRh
cmREZXJpdmF0aXZlczsKK2NsYXNzIE9FU1RleHR1cmVGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVG
bG9hdExpbmVhcjsKK2NsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyOworY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7CitjbGFzcyBPRVNF
bGVtZW50SW5kZXhVaW50OworY2xhc3MgV2ViR0xBY3RpdmVJbmZvOworY2xhc3MgV2ViR0xCdWZm
ZXI7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsKK2NsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsK
K2NsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7CitjbGFzcyBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKK2NsYXNzIFdl
YkdMQ29udGV4dEF0dHJpYnV0ZXM7CitjbGFzcyBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOworY2xh
c3MgV2ViR0xEZWJ1Z1NoYWRlcnM7CitjbGFzcyBXZWJHTERlcHRoVGV4dHVyZTsKK2NsYXNzIFdl
YkdMRHJhd0J1ZmZlcnM7CitjbGFzcyBXZWJHTEV4dGVuc2lvbjsKK2NsYXNzIFdlYkdMRnJhbWVi
dWZmZXI7CitjbGFzcyBXZWJHTExvc2VDb250ZXh0OworY2xhc3MgV2ViR0xPYmplY3Q7CitjbGFz
cyBXZWJHTFByb2dyYW07CitjbGFzcyBXZWJHTFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFdlYkdMU2hh
ZGVyOworY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7CitjbGFzcyBXZWJHTFNoYWRlclByZWNpc2lv
bkZvcm1hdDsKK2NsYXNzIFdlYkdMVGV4dHVyZTsKK2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9u
OworY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKKwordHlwZWRlZiBpbnQgRXhjZXB0
aW9uQ29kZTsKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUo
SFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKik7CisgICAgdmlydHVh
bCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyNpZiBQTEFURk9STShXSU4pCisgICAgLy8g
RklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52YXMgb24gV2luZG93cy4KKyAgICB2
aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNl
OyB9CisjZWxzZQorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisKKyAgICBpbnQgZHJhd2luZ0J1ZmZlcldpZHRo
KCkgY29uc3Q7CisgICAgaW50IGRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdDsKKworICAgIHZv
aWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVp
bnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1
ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4s
IEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlv
bihHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51
bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRGdW5jKEdDM0Rl
bnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJh
dGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBH
QzNEZW51bSBkc3RBbHBoYSk7CisKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVu
dW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0g
dGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25n
IG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1
ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZl
clZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKKyAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVs
ZCBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdy
ZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVw
dGgoR0MzRGZsb2F0KTsKKyAgICB2b2lkIGNsZWFyU3RlbmNpbChHQzNEaW50KTsKKyAgICB2b2lk
IGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVh
biBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdM
U2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKKyAgICB2
b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKKworICAgIHZvaWQgY29weVRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIpOworICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7
CisKKyAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKKyAgICBQYXNz
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgUGFzc1Jl
ZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdM
UmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdM
U2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGN1
bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworCisgICAgdm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgdm9pZCBkZWxldGVSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJH
TFNoYWRlciopOworICAgIHZvaWQgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKworICAg
IHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVh
bik7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIp
OworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOworICAgIHZvaWQg
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0Rz
aXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNl
dCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKKyAg
ICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCBm
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJl
KiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZnJvbnRGYWNlKEdD
M0RlbnVtIG1vZGUpOworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsK
KworICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQ
cm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdl
YkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0
cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdD
M0RlbnVtIGdldEVycm9yKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIFdlYkdMR2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UHJv
Z3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRp
b25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xH
ZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIq
LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0Rl
bnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+
IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMVW5pZm9y
bUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5n
JiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgbG9uZyBs
b25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUp
OworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSk7CisgICAg
R0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICBib29sIGlzQ29udGV4dExv
c3QoKSBjb25zdDsKKyAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKKyAg
ICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICBHQzNE
Ym9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgR0MzRGJvb2xlYW4gaXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihX
ZWJHTFNoYWRlciopOworICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsK
KworICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBwaXhlbFN0b3JlaShHQzNE
ZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7CisgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0Rm
bG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7CisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOworICAgIHZvaWQg
cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworICAgIHZvaWQgc2FtcGxl
Q292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpOworICAgIHZvaWQg
c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KTsKKyAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmlu
ZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMs
IEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1h
c2spOworICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQpOworICAgIHZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5j
aWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOworICAg
IHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdl
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCB0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgorCisgICAgdm9p
ZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9h
dCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKworICAgIHZv
aWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
aW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1
bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9y
bTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlm
b3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0
aW9uQ29kZSYpOworCisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMp
OworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopOworICAgIHZvaWQg
dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVz
LCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVy
KEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFu
IG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJp
ZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgdmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCk7CisKKyAgICAvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1cHBvcnQKKyAgICBlbnVtIExvc3RD
b250ZXh0TW9kZSB7CisgICAgICAgIC8vIExvc3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3Jh
cGhpY3Mgc3lzdGVtIGxldmVsLgorICAgICAgICBSZWFsTG9zdENvbnRleHQsCisKKyAgICAgICAg
Ly8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9sb3NlX2NvbnRleHQuCisgICAgICAg
IFN5bnRoZXRpY0xvc3RDb250ZXh0CisgICAgfTsKKyAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQo
TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGZvcmNlUmVzdG9yZUNvbnRleHQoKTsKKyAgICB2
b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUpOworCisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29udGV4dEdyb3VwLmdldCgpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpIG92ZXJyaWRlOworICAg
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
OworCisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKyAg
ICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7CisgICAgCisg
ICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVy
dGV4QXR0cmliczsgfQorCisgICAgLy8gQU5HTEVfaW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24g
ZnVuY3Rpb25zLgorICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOworICAg
IHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBk
aXZpc29yKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsK
KyAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgV2Vi
R0xPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OworICAgIGZy
aWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQzsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKKyAg
ICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKKyAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50
KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CisgICAgdm9pZCBzZXR1
cEZsYWdzKCk7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3Ao
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2ViR0xSZW5kZXJpbmdDb250ZXh0IjsgfQorCisg
ICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIGFk
ZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7CisgICAgdm9pZCBkZXRhY2hBbmRS
ZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgp
OworICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisKKyAgICAvLyBRdWVyeSB3aGV0aGVy
IGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCisg
ICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxpYW50OyB9
CisgICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0Lgor
ICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0
OyB9CisgICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRlcyBlcnJv
cnMgb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCisgICAgYm9vbCBpc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9CisgICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVu
dGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBib29s
IGlzUmVzb3VyY2VTYWZlKCkgeyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQorICAgIC8vIFF1
ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KKyAgICBib29sIGlzRGVw
dGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsg
fQorCisgICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wg
ZGF0YSB0eXBlcworICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgorICAgIHVuc2ln
bmVkIGludCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKKworICAgIC8vIEJhc2ljIHZhbGlk
YXRpb24gb2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50cyBpbiBl
bGVtZW50IGFycmF5IGJ1ZmZlcgorICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworCisgICAg
Ly8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRleCB2YWxpZGF0aW9uCisgICAgYm9vbCB2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzUmVxdWlyZWQpOworCisgICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0
aW9uIC0tIG9ubHkgZG9uZSBpZiBjb25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKKyAgICBib29sIHZh
bGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBH
QzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOworICAgIGJv
b2wgdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWdu
ZWQgcHJpbWl0aXZlQ291bnQgPSAwKTsKKworICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9iamVjdChj
b25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKKworICAgIGJvb2wgdmFsaWRhdGVEcmF3QXJyYXlz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKyAgICBib29sIHZhbGlkYXRl
RHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYg
bnVtRWxlbWVudHMsIEdDM0RzaXplaSBwcmltY291bnQpOworCisgICAgLy8gQWRkcyBhIGNvbXBy
ZXNzZWQgdGV4dHVyZSBmb3JtYXQuCisgICAgdm9pZCBhZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1h
dChHQzNEZW51bSk7CisKKyAgICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVy
KEltYWdlKiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOwor
CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAg
IFJlZlB0cjxXZWJHTENvbnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7CisKKyAgICAvLyBPcHRp
b25hbCBzdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQg
b2YgZGlyZWN0bHkKKyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAg
IFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisKKyAgICAvLyBEaXNwYXRj
aGVzIGEgY29udGV4dCBsb3N0IGV2ZW50IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBp
cyBuZWVkZWQuCisgICAgLy8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIHN5bnRoZXRpYyBhbmQgcmVh
bCBjb250ZXh0IGxvc3Nlcy4gRm9yIHJlYWwgb25lcywgaXQncworICAgIC8vIGxpa2VseSB0aGF0
IHRoZXJlJ3Mgbm8gSmF2YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0aGF0IG1pZ2h0IGJlIGRl
cGVuZGVudAorICAgIC8vIG9uIGhvdyBleGFjdGx5IHRoZSBwbGF0Zm9ybSBkaXNjb3ZlcnMgdGhh
dCB0aGUgY29udGV4dCB3YXMgbG9zdC4gRm9yIGJldHRlcgorICAgIC8vIHBvcnRhYmlsaXR5IHdl
IGFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgorICAgIFRpbWVyIG1fZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXI7CisgICAgYm9vbCBtX3Jlc3RvcmVBbGxvd2VkOwor
ICAgIFRpbWVyIG1fcmVzdG9yZVRpbWVyOworCisgICAgYm9vbCBtX25lZWRzVXBkYXRlOworICAg
IGJvb2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKKyAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVj
dCo+IG1fY29udGV4dE9iamVjdHM7CisKKyAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2Vk
IHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVk
IHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICAKKyAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgUmVmUHRyPFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICB2b2lkIHNl
dEJvdW5kVmVydGV4QXJyYXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0
T0VTPiBhcnJheU9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChhcnJheU9iamVjdCkKKyAgICAg
ICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0OworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0
ZXhBcnJheU9iamVjdDsKKyAgICB9CisgICAgCisgICAgY2xhc3MgVmVydGV4QXR0cmliVmFsdWUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbml0VmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBpbml0VmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZVswXSA9IDAuMGY7Cisg
ICAgICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7CisgICAgICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7
CisgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIEdDM0RmbG9hdCB2YWx1ZVs0XTsKKyAgICB9OworICAgIFZlY3RvcjxWZXJ0ZXhBdHRyaWJW
YWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsKKyAgICB1bnNpZ25lZCBtX21heFZlcnRleEF0dHJp
YnM7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAg
bG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworICAgIEdDM0RmbG9hdCBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVs0XTsKKyAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxs
OworICAgIGJvb2wgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKKworICAgIFJlZlB0cjxXZWJH
TFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CisgICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbV9y
ZW5kZXJidWZmZXJCaW5kaW5nOworICAgIHN0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKKyAgICAg
ICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4dHVyZTJEQmluZGluZzsKKyAgICAgICAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gdGV4dHVyZUN1YmVNYXBCaW5kaW5nOworICAgIH07CisgICAgVmVjdG9y
PFRleHR1cmVVbml0U3RhdGU+IG1fdGV4dHVyZVVuaXRzOworICAgIHVuc2lnbmVkIGxvbmcgbV9h
Y3RpdmVUZXh0dXJlVW5pdDsKKworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0
dXJlMkQ7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmVDdWJlTWFwOwor
CisgICAgVmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKKworICAg
IC8vIEZpeGVkLXNpemUgY2FjaGUgb2YgcmV1c2FibGUgaW1hZ2UgYnVmZmVycyBmb3IgdmlkZW8g
dGV4SW1hZ2UyRCBjYWxscy4KKyAgICBjbGFzcyBMUlVJbWFnZUJ1ZmZlckNhY2hlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KTsKKyAgICAg
ICAgLy8gVGhlIHBvaW50ZXIgcmV0dXJuZWQgaXMgb3duZWQgYnkgdGhlIGltYWdlIGJ1ZmZlciBt
YXAuCisgICAgICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXpl
KTsKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGJ1YmJsZVRvRnJvbnQoaW50IGlkeCk7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+W10+IG1f
YnVmZmVyczsKKyAgICAgICAgaW50IG1fY2FwYWNpdHk7CisgICAgfTsKKyAgICBMUlVJbWFnZUJ1
ZmZlckNhY2hlIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZTsKKworICAgIEdDM0RpbnQgbV9tYXhUZXh0
dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgIEdDM0Rp
bnQgbV9tYXhSZW5kZXJidWZmZXJTaXplOworICAgIEdDM0RpbnQgbV9tYXhWaWV3cG9ydERpbXNb
Ml07CisgICAgR0MzRGludCBtX21heFRleHR1cmVMZXZlbDsKKyAgICBHQzNEaW50IG1fbWF4Q3Vi
ZU1hcFRleHR1cmVMZXZlbDsKKworICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKKyAgICBH
QzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50czsKKyAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVm
ZmVyOworICAgIGJvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKKyAg
ICBib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7CisKKyAgICBHQzNEaW50IG1fcGFja0FsaWdu
bWVudDsKKyAgICBHQzNEaW50IG1fdW5wYWNrQWxpZ25tZW50OworICAgIGJvb2wgbV91bnBhY2tG
bGlwWTsKKyAgICBib29sIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKKyAgICBHQzNEZW51bSBt
X3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOworICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKKyAg
ICBMb3N0Q29udGV4dE1vZGUgbV9jb250ZXh0TG9zdE1vZGU7CisgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCisgICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsK
KyAgICBHQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOworICAgIGJvb2wgbV9zY2lzc29yRW5hYmxl
ZDsKKyAgICBHQzNEZmxvYXQgbV9jbGVhckRlcHRoOworICAgIEdDM0RpbnQgbV9jbGVhclN0ZW5j
aWw7CisgICAgR0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CisgICAgR0MzRGJvb2xlYW4gbV9k
ZXB0aE1hc2s7CisKKyAgICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAgR0MzRHVpbnQgbV9z
dGVuY2lsTWFzaywgbV9zdGVuY2lsTWFza0JhY2s7CisgICAgR0MzRGludCBtX3N0ZW5jaWxGdW5j
UmVmLCBtX3N0ZW5jaWxGdW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNl
ciBzcGVjaWZpZWQgdmFsdWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCisgICAg
R0MzRHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKKworICAg
IGJvb2wgbV9pc0dMRVMyQ29tcGxpYW50OworICAgIGJvb2wgbV9pc0dMRVMyTlBPVFN0cmljdDsK
KyAgICBib29sIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsKKyAgICBi
b29sIG1faXNSZXNvdXJjZVNhZmU7CisgICAgYm9vbCBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVk
OworICAgIGJvb2wgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQ7CisKKyAgICBib29sIG1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7CisgICAgaW50IG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVB
bGxvd2VkOworCisgICAgLy8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQg
aW4gYSBzdGF0ZSB3aGVyZSBpdCBhcHBlYXJzIGFzCisgICAgLy8gYSB2YWxpZCBhbmQgYWN0aXZl
IGNvbnRleHQsIGJ1dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucwor
ICAgIC8vIHVudGlsIGl0cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgorICAg
IGJvb2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgbV9oYXNSZXF1ZXN0
ZWRQb2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOwor
CisgICAgLy8gRW5hYmxlZCBleHRlbnNpb24gb2JqZWN0cy4KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RVhURnJhZ0RlcHRoPiBtX2V4dEZyYWdEZXB0aDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhUQmxl
bmRNaW5NYXg+IG1fZXh0QmxlbmRNaW5NYXg7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVHNSR0I+
IG1fZXh0c1JHQjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RVhUU2hhZGVyVGV4dHVyZUxPRD4gbV9leHRTaGFkZXJUZXh0dXJlTE9EOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4dHVyZUZsb2F0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBtX29lc1RleHR1cmVIYWxm
RmxvYXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+IG1f
b2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTU3RhbmRh
cmREZXJpdmF0aXZlcz4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxPRVNWZXJ0ZXhBcnJheU9iamVjdD4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWludD4gbV9vZXNFbGVtZW50SW5kZXhVaW50
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTExvc2VDb250ZXh0PiBtX3dlYmdsTG9zZUNvbnRl
eHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdSZW5kZXJlckluZm8+IG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mbzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1Z1NoYWRlcnM+
IG1fd2ViZ2xEZWJ1Z1NoYWRlcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQzsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM+
IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
RGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOworCisgICAgLy8g
SGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKKyAgICBXZWJHTEdldEluZm8gZ2V0
Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5B
cnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEZsb2F0UGFyYW1l
dGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVyKEdDM0RlbnVt
KTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOwor
ICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOwor
ICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKwor
ICAgIC8vIENsZWFyIHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVkIHNpbmNlIHRo
ZSBsYXN0IG9wZXJhdGlvbi4KKyAgICAvLyBjbGVhck1hc2sgaXMgc2V0IHRvIHRoZSBiaXRmaWVs
ZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMgdGltZQorICAg
IC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIgaXMgbm93IHVu
bmVjZXNzYXJ5LgorICAgIGJvb2wgY2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIGNsZWFy
TWFzayA9IDApOworCisgICAgLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhhdCBjbGVhcmlu
ZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCisgICAgdm9pZCByZXN0b3JlU3RhdGVBZnRl
ckNsZWFyKCk7CisKKyAgICB2b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJ
bWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwg
Ym9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisKKyAg
ICB2b2lkIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisKKyAg
ICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0aGUgaW50ZXJu
YWxmb3JtYXQKKyAgICAvLyBhbmQgdGhlIGNvbG9yIGJ1ZmZlciBmb3JtYXQgb2YgdGhlIGN1cnJl
bnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24KKyAgICAvLyBpcyB2YWxpZC4KKyAgICBi
b29sIGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVu
dW0gdGV4SW50ZXJuYWxGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgY29sb3Ig
YnVmZmVyIGZvcm1hdC4KKyAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3Jt
YXQoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVm
ZmVyJ3Mgd2lkdGguCisgICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBoZWlnaHQu
CisgICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKKworICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9ybSBhbmQgYXR0
cmlidXRlIGxvY2F0aW9ucy4KKyAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KKyAgICAvLyBHZW5lcmF0ZSBH
TCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90aGVyd2lzZSwg
cmV0dXJuIHRydWUuCisgICAgYm9vbCB2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8gdGhlCisgICAg
Ly8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMu
MS4KKyAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFu
ZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3Jz
IGFuZCByZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJvdW5kIGlzCisg
ICAgLy8gbnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0
YXJnZXQuCisgICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgZm9ybWF0L3R5
cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgorICAgIC8vIEdlbmVyYXRlcyBH
TCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorICAg
IGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1bmN0aW9ucyB7
Y29weX1UZXh7U3VifUltYWdlLgorICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJu
cyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgorICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jTGV2
ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwpOworCisgICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7CisgICAgICAg
IE5vdFRleFN1YkltYWdlMkQsCisgICAgICAgIFRleFN1YkltYWdlMkQsCisgICAgfTsKKworICAg
IGVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKKyAgICAgICAgU291cmNlQXJyYXlC
dWZmZXJWaWV3LAorICAgICAgICBTb3VyY2VJbWFnZURhdGEsCisgICAgICAgIFNvdXJjZUhUTUxJ
bWFnZUVsZW1lbnQsCisgICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgICAgICBT
b3VyY2VIVE1MVmlkZW9FbGVtZW50LAorICAgIH07CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0L3R5cGUvbGV2
ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFyZSB2YWxpZC4K
KyAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhvdXQgZG9pbmcg
b3RoZXIgd29yay4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNv
dXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNr
IGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgorICAg
IC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFy
ZSBpbnZhbGlkLgorICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1
bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOworCisgICAgZW51bSBOdWxsRGlzcG9zaXRpb24gewor
ICAgICAgICBOdWxsQWxsb3dlZCwKKyAgICAgICAgTnVsbE5vdEFsbG93ZWQKKyAgICB9OworCisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVuIEFycmF5QnVm
ZmVyVmlldworICAgIC8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3Vn
aCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZh
bGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJW
aWV3KiBwaXhlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxEaXNwb3NpdGlv
bik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBnaXZlbiB0ZXh0dXJl
IGZvcm1hdCBpcyBzZXR0YWJsZSBhcyBpbgorICAgIC8vIHlvdSBjYW4gc3VwcGx5IGRhdGEgdG8g
dGV4SW1hZ2UyRCwgb3IgY2FsbCB0ZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2UyRCBhbmQKKyAgICAv
LyBjb3B5VGV4U3ViSW1hZ2UyRC4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0dGFibGUuCisgICAgYm9vbCB2YWxpZGF0
ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9y
bWF0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRl
eHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKyAgICAvLyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBh
bmQgZGltZW5zaW9ucy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3
KiBwaXhlbHMpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nIGNvbXBy
ZXNzZWQgdGV4dHVyZSBmb3JtYXRzLgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgorICAgIC8vIHRo
ZSBnaXZlbiBmb3JtYXQuCisgICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25z
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCk7CisK
KyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRp
bWVuc2lvbnMgYXJlIHZhbGlkIGZvcgorICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCisgICAgYm9v
bCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdl
YkdMVGV4dHVyZSopOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIG1vZGUg
Zm9yIGRyYXd7QXJyYXlzL0VsZW1lbnRzfS4KKyAgICBib29sIHZhbGlkYXRlRHJhd01vZGUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3RlbmNpbEZ1bmMg
c2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCisgICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgorICAgIHZvaWQgdGV4UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdD
M0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgorICAgIHZvaWQgcHJpbnRHTEVycm9yVG9Db25z
b2xlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoY29u
c3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gcHJpbnQgd2FybmluZ3MgdG8gY29uc29sZS4gQ3VycmVudGx5CisgICAgLy8g
dXNlZCBvbmx5IHRvIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9ucy4KKyAgICB2
b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFtZWJ1ZmZlciBm
dW5jdGlvbnMuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVycyBhcmUgaWxs
ZWdhbC4KKyAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7
CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1YXRpb24gbW9k
ZS4KKyAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVu
ZCBmdW5jIGZhY3RvcnMuCisgICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7CisKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5LgorICAgIGJvb2wg
dmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwor
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9y
IHVuaWZvcm0gZnVuY3Rpb25zLgorICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgRmxv
YXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29sIHZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5KiwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXpl
aSBtb2QpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBhcmFtZXRlcnMg
Zm9yIGJ1ZmZlckRhdGEuCisgICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5kIGJ1ZmZlciB0
byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBXZWJHTEJ1ZmZl
ciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJlYWR5IGFuZCB3
b3VsZG4ndCB0YWludCBPcmlnaW4uCisgICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29k
ZSYpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFr
ZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJv
b2wgdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworCisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSB2
aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCisgICAgYm9vbCB2YWxpZGF0ZUhU
TUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlkZW9FbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZv
ciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KKyAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUs
IEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRl
eCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisgICAgdm9pZCB2ZXJ0
ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKKworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQcm9ncmFt
LCBldGMpIGZ1bmN0aW9ucy4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgYm9vbCBkZWxldGVPYmplY3Qo
V2ViR0xPYmplY3QqKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmluZCogKGJpbmRC
dWZmZXIsIGJpbmRUZXh0dXJlLCBldGMpIGFuZCB1c2VQcm9ncmFtLgorICAgIC8vIElmIHRoZSBv
YmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0cnVlIHVwb24g
cmV0dXJuLgorICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJldHVybiB3aXRo
b3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KKyAgICBib29sIGNoZWNrT2JqZWN0VG9CZUJvdW5kKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxldGVkKTsKKwor
ICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAorICAgIHZvaWQgaW5p
dFZlcnRleEF0dHJpYjAoKTsKKyAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6
ZWkgbnVtVmVydGV4KTsKKyAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBT
aW11bGF0aW9uKCk7CisKKyAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpOworICAg
IC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4dCBsb3N0LgorICAgIHZvaWQg
bWF5YmVSZXN0b3JlQ29udGV4dCgpOworCisgICAgLy8gRGV0ZXJtaW5lIGlmIHdlIGFyZSBydW5u
aW5nIHByaXZpbGVnZWQgY29kZSBpbiB0aGUgYnJvd3NlciwgZm9yIGV4YW1wbGUsCisgICAgLy8g
YSBTYWZhcmkgb3IgQ2hyb21lIGV4dGVuc2lvbi4KKyAgICBib29sIGFsbG93UHJpdmlsZWdlZEV4
dGVuc2lvbnMoKSBjb25zdDsKKworICAgIGVudW0gQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIHsK
KyAgICAgICAgRGlzcGxheUluQ29uc29sZSwKKyAgICAgICAgRG9udERpc3BsYXlJbkNvbnNvbGUK
KyAgICB9OworCisgICAgLy8gV3JhcHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNp
emVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNzYWdlCisgICAgLy8gdG8gdGhlIEphdmFTY3JpcHQg
Y29uc29sZS4KKyAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVBy
ZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xlKTsKKworICAgIFN0cmluZyBlbnN1cmVOb3ROdWxs
KGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgLy8gRW5hYmxlIG9yIGRpc2FibGUgc3RlbmNp
bCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKKyAgICAvLyB3aGV0aGVyIHRoZSBjdXJy
ZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZlci4KKyAgICB2b2lkIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKKworICAgIC8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2FwYWJpbGl0
eS4KKyAgICB2b2lkIGVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVu
YWJsZSk7CisKKyAgICAvLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBHTF9NQVhfVklF
V1BPUlRfRElNUy4KKyAgICBJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7CisKKyAgICAvLyBG
aXJzdCB0aW1lIGNhbGxlZCwgaWYgRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0ZWQsIHF1ZXJ5
IHRoZSB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgorICAgIC8vIExhdGVyLCByZXR1cm4gdGhl
IGNhY2hlZCB2YWx1ZS4KKyAgICBHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7CisgICAgR0Mz
RGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7CisKKyAgICB2b2lkIHNldEJhY2tEcmF3QnVm
ZmVyKEdDM0RlbnVtKTsKKworICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpOwor
ICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKTsKKworICAgIC8vIENoZWNrIGlmIEVY
VF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYgaXQgc2F0aXNmaWVz
IHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCisgICAgYm9vbCBzdXBwb3J0c0RyYXdCdWZmZXJzKCk7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDU1NWE1NzI3NDFlNmE4NzQxZTk4OWE2MDBjZjNlYWQyNTM1M2Q2MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwKQEAgLTAsMCArMSw2NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xl
YW4gICAgICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsK
K3R5cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQg
YmUgYSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9y
dDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAg
IEdMc2l6ZWk7Cit0eXBlZGVmIGxvbmcgbG9uZyAgICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25n
IGxvbmcgICAgICBHTHNpemVpcHRyOwordHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAg
ICAgICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5
cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdM
dWludDsKK3R5cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVz
dHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsKKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAg
IEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgIERvTm90Q2hlY2tDb25zdGFudHMsCitdIGludGVy
ZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKKwor
ICAgIC8qIENsZWFyQnVmZmVyTWFzayAqLworICAgIGNvbnN0IEdMZW51bSBERVBUSF9CVUZGRVJf
QklUICAgICAgICAgICAgICAgPSAweDAwMDAwMTAwOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JVRkZFUl9CSVQgICAgICAgICAgICAgPSAweDAwMDAwNDAwOworICAgIGNvbnN0IEdMZW51bSBD
T0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDA0MDAwOworCisgICAgLyogQmVn
aW5Nb2RlICovCisgICAgY29uc3QgR0xlbnVtIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDAwMDsKKyAgICBjb25zdCBHTGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMDAxOworICAgIGNvbnN0IEdMZW51bSBMSU5FX0xPT1AgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAwMDI7CisgICAgY29uc3QgR0xlbnVtIExJTkVfU1RSSVAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDAwMzsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwMDA0OworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRV9TVFJJUCAgICAg
ICAgICAgICAgICAgPSAweDAwMDU7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX0ZBTiAgICAg
ICAgICAgICAgICAgICA9IDB4MDAwNjsKKworICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBw
b3J0ZWQgaW4gRVMyMCkgKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisgICAgLyogICAgICBMRVNT
ICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVRVUFMICovCisgICAgLyog
ICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLworICAgIC8qICAgICAgR0VR
VUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVz
dCAqLworICAgIGNvbnN0IEdMZW51bSBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
OworICAgIGNvbnN0IEdMZW51bSBPTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwor
ICAgIGNvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7
CisgICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMw
MTsKKyAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MzAyOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAw
eDAzMDM7CisgICAgY29uc3QgR0xlbnVtIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDMwNDsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAg
ID0gMHgwMzA1OworCisgICAgLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKyAgICAvKiAgICAgIFpF
Uk8gKi8KKyAgICAvKiAgICAgIE9ORSAqLworICAgIGNvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAzMDY7CisgICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19E
U1RfQ09MT1IgICAgICAgICAgICA9IDB4MDMwNzsKKyAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhB
X1NBVFVSQVRFICAgICAgICAgICAgID0gMHgwMzA4OworICAgIC8qICAgICAgU1JDX0FMUEhBICov
CisgICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovCisgICAgLyogICAgICBEU1RfQUxQ
SEEgKi8KKyAgICAvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworICAgIC8qIEJsZW5k
RXF1YXRpb25TZXBhcmF0ZSAqLworICAgIGNvbnN0IEdMZW51bSBGVU5DX0FERCAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwMDY7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAg
ICAgICAgICAgICAgICA9IDB4ODAwOTsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05f
UkdCICAgICAgICAgICAgID0gMHg4MDA5OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8K
KyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgID0gMHg4ODNE
OworCisgICAgLyogQmxlbmRTdWJ0cmFjdCAqLworICAgIGNvbnN0IEdMZW51bSBGVU5DX1NVQlRS
QUNUICAgICAgICAgICAgICAgICAgPSAweDgwMEE7CisgICAgY29uc3QgR0xlbnVtIEZVTkNfUkVW
RVJTRV9TVUJUUkFDVCAgICAgICAgICA9IDB4ODAwQjsKKworICAgIC8qIFNlcGFyYXRlIEJsZW5k
IEZ1bmN0aW9ucyAqLworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfUkdCICAgICAgICAgICAg
ICAgICAgPSAweDgwQzg7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19SR0IgICAgICAgICAg
ICAgICAgICA9IDB4ODBDOTsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAg
ICAgICAgICAgID0gMHg4MENBOworICAgIGNvbnN0IEdMZW51bSBCTEVORF9TUkNfQUxQSEEgICAg
ICAgICAgICAgICAgPSAweDgwQ0I7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0NPTE9SICAg
ICAgICAgICAgICAgICA9IDB4ODAwMTsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNU
QU5UX0NPTE9SICAgICAgID0gMHg4MDAyOworICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9BTFBI
QSAgICAgICAgICAgICAgICAgPSAweDgwMDM7CisgICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSAgICAgICA9IDB4ODAwNDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfQ09M
T1IgICAgICAgICAgICAgICAgICAgID0gMHg4MDA1OworCisgICAgLyogQnVmZmVyIE9iamVjdHMg
Ki8KKyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4
ODkyOworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAw
eDg4OTM7CisgICAgY29uc3QgR0xlbnVtIEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9
IDB4ODg5NDsKKyAgICBjb25zdCBHTGVudW0gRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAg
ID0gMHg4ODk1OworCisgICAgY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAg
ICAgICA9IDB4ODhFMDsKKyAgICBjb25zdCBHTGVudW0gU1RBVElDX0RSQVcgICAgICAgICAgICAg
ICAgICAgID0gMHg4OEU0OworICAgIGNvbnN0IEdMZW51bSBEWU5BTUlDX0RSQVcgICAgICAgICAg
ICAgICAgICAgPSAweDg4RTg7CisKKyAgICBjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAg
ICAgICAgICAgICAgID0gMHg4NzY0OworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfVVNBR0UgICAg
ICAgICAgICAgICAgICAgPSAweDg3NjU7CisKKyAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9WRVJU
RVhfQVRUUklCICAgICAgICAgID0gMHg4NjI2OworCisgICAgLyogQ3VsbEZhY2VNb2RlICovCisg
ICAgY29uc3QgR0xlbnVtIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsK
KyAgICBjb25zdCBHTGVudW0gQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1
OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0
MDg7CisKKyAgICAvKiBEZXB0aEZ1bmN0aW9uICovCisgICAgLyogICAgICBORVZFUiAqLworICAg
IC8qICAgICAgTEVTUyAqLworICAgIC8qICAgICAgRVFVQUwgKi8KKyAgICAvKiAgICAgIExFUVVB
TCAqLworICAgIC8qICAgICAgR1JFQVRFUiAqLworICAgIC8qICAgICAgTk9URVFVQUwgKi8KKyAg
ICAvKiAgICAgIEdFUVVBTCAqLworICAgIC8qICAgICAgQUxXQVlTICovCisKKyAgICAvKiBFbmFi
bGVDYXAgKi8KKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwREUxOworICAgIGNvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNDQ7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEJFMjsKKyAgICBjb25zdCBHTGVudW0gRElUSEVSICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwQkQwOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAg
ICAgICAgICAgPSAweDBCOTA7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1RFU1QgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI3MTsKKyAgICBjb25zdCBHTGVudW0gU0NJU1NPUl9URVNUICAgICAg
ICAgICAgICAgICAgID0gMHgwQzExOworICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9G
SUxMICAgICAgICAgICAgPSAweDgwMzc7CisgICAgY29uc3QgR0xlbnVtIFNBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRSAgICAgICA9IDB4ODA5RTsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFICAgICAgICAgICAgICAgID0gMHg4MEEwOworCisgICAgLyogRXJyb3JDb2RlICovCisgICAg
Y29uc3QgR0xlbnVtIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAgY29u
c3QgR0xlbnVtIElOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKKyAgICBj
b25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOworICAg
IGNvbnN0IEdMZW51bSBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Cisg
ICAgY29uc3QgR0xlbnVtIE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICA9IDB4MDUwNTsK
KworICAgIC8qIEZyb250RmFjZURpcmVjdGlvbiAqLworICAgIGNvbnN0IEdMZW51bSBDVyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDA7CisgICAgY29uc3QgR0xlbnVtIENDVyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMTsKKworICAgIC8qIEdldFBOYW1lICov
CisgICAgY29uc3QgR0xlbnVtIExJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICA9IDB4MEIy
MTsKKyAgICBjb25zdCBHTGVudW0gQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgID0gMHg4
NDZEOworICAgIGNvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAw
eDg0NkU7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9
IDB4MEI0NTsKKyAgICBjb25zdCBHTGVudW0gRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAg
ID0gMHgwQjQ2OworICAgIGNvbnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNzA7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAg
ICAgICA9IDB4MEI3MjsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfQ0xFQVJfVkFMVUUgICAgICAg
ICAgICAgID0gMHgwQjczOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAg
ICAgICAgICAgPSAweDBCNzQ7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQ0xFQVJfVkFMVUUg
ICAgICAgICAgICA9IDB4MEI5MTsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9GVU5DICAgICAg
ICAgICAgICAgICAgID0gMHgwQjkyOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAg
ICAgICAgICAgICAgICAgPSAweDBCOTQ7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19E
RVBUSF9GQUlMICAgICAgICA9IDB4MEI5NTsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNT
X0RFUFRIX1BBU1MgICAgICAgID0gMHgwQjk2OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1JF
RiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxf
VkFMVUVfTUFTSyAgICAgICAgICAgICA9IDB4MEI5MzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJ
TF9XUklURU1BU0sgICAgICAgICAgICAgID0gMHgwQjk4OworICAgIGNvbnN0IEdMZW51bSBTVEVO
Q0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7CisgICAgY29uc3QgR0xlbnVtIFNU
RU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA9IDB4ODgwMTsKKyAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgID0gMHg4ODAyOworICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7CisgICAgY29uc3QgR0xl
bnVtIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA9IDB4OENBMzsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgID0gMHg4Q0E0OworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAweDhDQTU7CisgICAgY29u
c3QgR0xlbnVtIFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKKyAgICBj
b25zdCBHTGVudW0gU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgID0gMHgwQzEwOworICAg
IC8qICAgICAgU0NJU1NPUl9URVNUICovCisgICAgY29uc3QgR0xlbnVtIENPTE9SX0NMRUFSX1ZB
TFVFICAgICAgICAgICAgICA9IDB4MEMyMjsKKyAgICBjb25zdCBHTGVudW0gQ09MT1JfV1JJVEVN
QVNLICAgICAgICAgICAgICAgID0gMHgwQzIzOworICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7CisgICAgY29uc3QgR0xlbnVtIFBBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgICA9IDB4MEQwNTsKKyAgICBjb25zdCBHTGVudW0gTUFYX1RF
WFRVUkVfU0laRSAgICAgICAgICAgICAgID0gMHgwRDMzOworICAgIGNvbnN0IEdMZW51bSBNQVhf
VklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBEM0E7CisgICAgY29uc3QgR0xlbnVtIFNV
QlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA9IDB4MEQ1MDsKKyAgICBjb25zdCBHTGVudW0g
UkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUyOworICAgIGNvbnN0IEdMZW51
bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7CisgICAgY29uc3QgR0xl
bnVtIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NDsKKyAgICBjb25zdCBH
TGVudW0gQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU1OworICAgIGNvbnN0
IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTY7CisgICAgY29u
c3QgR0xlbnVtIFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsKKyAgICBj
b25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAgICAgICAgID0gMHgyQTAwOworICAg
IC8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqLworICAgIGNvbnN0IEdMZW51bSBQT0xZR09O
X09GRlNFVF9GQUNUT1IgICAgICAgICAgPSAweDgwMzg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkVfQklORElOR18yRCAgICAgICAgICAgICA9IDB4ODA2OTsKKyAgICBjb25zdCBHTGVudW0gU0FN
UExFX0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4OworICAgIGNvbnN0IEdMZW51bSBT
QU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwQTk7CisgICAgY29uc3QgR0xlbnVt
IFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAgICAgICAgICA9IDB4ODBBQTsKKyAgICBjb25zdCBHTGVu
dW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisgICAgLyogR2V0
VGV4dHVyZVBhcmFtZXRlciAqLworICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovCisg
ICAgLyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfV1JB
UF9TICovCisgICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqLworCisgICAgY29uc3QgR0xlbnVt
IENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsKKworICAgIC8qIEhpbnRN
b2RlICovCisgICAgY29uc3QgR0xlbnVtIERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTEwMDsKKyAgICBjb25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxMTAxOworICAgIGNvbnN0IEdMZW51bSBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDExMDI7CisKKyAgICAvKiBIaW50VGFyZ2V0ICovCisgICAgY29uc3QgR0xlbnVtIEdF
TkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7CisKKyAgICAvKiBEYXRhVHlw
ZSAqLworICAgIGNvbnN0IEdMZW51bSBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDE0MDA7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9
IDB4MTQwMTsKKyAgICBjb25zdCBHTGVudW0gU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxNDAyOworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAg
ICAgPSAweDE0MDM7CisgICAgY29uc3QgR0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTQwNDsKKyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfSU5UICAgICAgICAgICAg
ICAgICAgID0gMHgxNDA1OworICAgIGNvbnN0IEdMZW51bSBGTE9BVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDY7CisKKyAgICAvKiBQaXhlbEZvcm1hdCAqLworICAgIGNvbnN0IEdM
ZW51bSBERVBUSF9DT01QT05FTlQgICAgICAgICAgICAgICAgPSAweDE5MDI7CisgICAgY29uc3Qg
R0xlbnVtIEFMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwNjsKKyAgICBjb25z
dCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA3OworICAgIGNv
bnN0IEdMZW51bSBSR0JBICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDg7CisgICAg
Y29uc3QgR0xlbnVtIExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwOTsKKyAg
ICBjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOwor
CisgICAgLyogUGl4ZWxUeXBlICovCisgICAgLyogICAgICBVTlNJR05FRF9CWVRFICovCisgICAg
Y29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKKyAg
ICBjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0Owor
ICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgPSAweDgzNjM7
CisKKyAgICAvKiBTaGFkZXJzICovCisgICAgY29uc3QgR0xlbnVtIEZSQUdNRU5UX1NIQURFUiAg
ICAgICAgICAgICAgICAgID0gMHg4QjMwOworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfU0hBREVS
ICAgICAgICAgICAgICAgICAgICA9IDB4OEIzMTsKKyAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRF
WF9BVFRSSUJTICAgICAgICAgICAgICAgPSAweDg4Njk7CisgICAgY29uc3QgR0xlbnVtIE1BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgID0gMHg4REZCOworICAgIGNvbnN0IEdMZW51bSBN
QVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICA9IDB4OERGQzsKKyAgICBjb25zdCBHTGVu
dW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEQ7CisgICAgY29uc3Qg
R0xlbnVtIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOworICAgIGNv
bnN0IEdMZW51bSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICA9IDB4ODg3MjsKKyAg
ICBjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7
CisgICAgY29uc3QgR0xlbnVtIFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjRGOworICAgIGNvbnN0IEdMZW51bSBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9
IDB4OEI4MDsKKyAgICBjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCODI7CisgICAgY29uc3QgR0xlbnVtIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAg
ICAgICAgID0gMHg4QjgzOworICAgIGNvbnN0IEdMZW51bSBBVFRBQ0hFRF9TSEFERVJTICAgICAg
ICAgICAgICAgICA9IDB4OEI4NTsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAg
ICAgICAgICAgICAgICAgPSAweDhCODY7CisgICAgY29uc3QgR0xlbnVtIEFDVElWRV9BVFRSSUJV
VEVTICAgICAgICAgICAgICAgID0gMHg4Qjg5OworICAgIGNvbnN0IEdMZW51bSBTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT04gICAgICAgICA9IDB4OEI4QzsKKyAgICBjb25zdCBHTGVudW0gQ1VSUkVO
VF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKyAgICAvKiBTdGVuY2lsRnVu
Y3Rpb24gKi8KKyAgICBjb25zdCBHTGVudW0gTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMjAwOworICAgIGNvbnN0IEdMZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAyMDE7CisgICAgY29uc3QgR0xlbnVtIEVRVUFMICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDIwMjsKKyAgICBjb25zdCBHTGVudW0gTEVRVUFMICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwMjAzOworICAgIGNvbnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAyMDQ7CisgICAgY29uc3QgR0xlbnVtIE5PVEVRVUFMICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDIwNTsKKyAgICBjb25zdCBHTGVudW0gR0VRVUFMICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMjA2OworICAgIGNvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDc7CisKKyAgICAvKiBTdGVuY2lsT3AgKi8KKyAgICAvKiAg
ICAgIFpFUk8gKi8KKyAgICBjb25zdCBHTGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgxRTAwOworICAgIGNvbnN0IEdMZW51bSBSRVBMQUNFICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDFFMDE7CisgICAgY29uc3QgR0xlbnVtIElOQ1IgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MUUwMjsKKyAgICBjb25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxRTAzOworICAgIGNvbnN0IEdMZW51bSBJTlZFUlQgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE1MEE7CisgICAgY29uc3QgR0xlbnVtIElOQ1JfV1JBUCAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODUwNzsKKyAgICBjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NTA4OworCisgICAgLyogU3RyaW5nTmFtZSAqLworICAgIGNv
bnN0IEdMZW51bSBWRU5ET1IgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDA7CisgICAg
Y29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKKyAg
ICBjb25zdCBHTGVudW0gVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAyOwor
CisgICAgLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworICAgIGNvbnN0IEdMZW51bSBORUFSRVNUICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7CisgICAgY29uc3QgR0xlbnVtIExJTkVBUiAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMTsKKworICAgIC8qIFRleHR1cmVNaW5GaWx0
ZXIgKi8KKyAgICAvKiAgICAgIE5FQVJFU1QgKi8KKyAgICAvKiAgICAgIExJTkVBUiAqLworICAg
IGNvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgPSAweDI3MDA7Cisg
ICAgY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsK
KyAgICBjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgID0gMHgyNzAy
OworICAgIGNvbnN0IEdMZW51bSBMSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgPSAweDI3
MDM7CisKKyAgICAvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgPSAweDI4MDA7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMTsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAyOworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgPSAweDI4MDM7CisKKyAgICAvKiBU
ZXh0dXJlVGFyZ2V0ICovCisgICAgLyogICAgICBURVhUVVJFXzJEICovCisgICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTcwMjsKKworICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgPSAweDg1MTM7CisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgID0gMHg4NTE1OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggICAgPSAweDg1MTY7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgID0gMHg4NTE4
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgPSAweDg1
MTk7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4
ODUxQTsKKyAgICBjb25zdCBHTGVudW0gTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgID0g
MHg4NTFDOworCisgICAgLyogVGV4dHVyZVVuaXQgKi8KKyAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzE7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUyICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMjsKKyAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzQ7CisgICAgY29uc3QgR0xl
bnVtIFRFWFRVUkU1ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNTsKKyAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2OworICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFNyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzc7CisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkU4ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDODsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0E7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQjsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEND
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
Q0Q7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRDRTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NENGOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0RDA7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREMTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NEQyOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTkgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0RDM7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODRENDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ1OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjIgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDY7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMyAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ4OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjUgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDk7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREQTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI3
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MjggICAgICAgICAgICAgICAgICAgICAgPSAweDg0REM7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkUyOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERDsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFMzEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REY7CisgICAgY29uc3QgR0xlbnVt
IEFDVElWRV9URVhUVVJFICAgICAgICAgICAgICAgICA9IDB4ODRFMDsKKworICAgIC8qIFRleHR1
cmVXcmFwTW9kZSAqLworICAgIGNvbnN0IEdMZW51bSBSRVBFQVQgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDI5MDE7CisgICAgY29uc3QgR0xlbnVtIENMQU1QX1RPX0VER0UgICAgICAgICAg
ICAgICAgICA9IDB4ODEyRjsKKyAgICBjb25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAg
ICAgICAgICAgID0gMHg4MzcwOworCisgICAgLyogVW5pZm9ybSBUeXBlcyAqLworICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9WRUMyICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTA7CisgICAgY29u
c3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKKyAgICBj
b25zdCBHTGVudW0gRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUyOworICAg
IGNvbnN0IEdMZW51bSBJTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTM7Cisg
ICAgY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsK
KyAgICBjb25zdCBHTGVudW0gSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1
OworICAgIGNvbnN0IEdMZW51bSBCT09MICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhC
NTY7CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1NzsKKyAgICBjb25zdCBHTGVudW0gQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QjU4OworICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAg
PSAweDhCNTk7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1QTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjVCOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQ0ICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCNUM7CisgICAgY29uc3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1RTsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl9DVUJFICAgICAgICAg
ICAgICAgICAgID0gMHg4QjYwOworCisgICAgLyogVmVydGV4IEFycmF5cyAqLworICAgIGNvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOworICAg
IGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgID0gMHg4NjIz
OworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgID0g
MHg4NjI0OworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAg
ICAgID0gMHg4NjI1OworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQgICAgID0gMHg4ODZBOworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZ
X1BPSU5URVIgICAgICAgID0gMHg4NjQ1OworICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklC
X0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisgICAgLyogU2hhZGVyIFNvdXJjZSAq
LworICAgIGNvbnN0IEdMZW51bSBDT01QSUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgPSAweDhC
ODE7CisKKyAgICAvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworICAgIGNv
bnN0IEdMZW51bSBMT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjA7CisgICAg
Y29uc3QgR0xlbnVtIE1FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAgICA9IDB4OERGMTsKKyAg
ICBjb25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOwor
ICAgIGNvbnN0IEdMZW51bSBMT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjM7
CisgICAgY29uc3QgR0xlbnVtIE1FRElVTV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERG
NDsKKyAgICBjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
REY1OworCisgICAgLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqLworICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgPSAweDhENDA7CisgICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworICAgIGNvbnN0IEdM
ZW51bSBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTY7CisgICAgY29uc3Qg
R0xlbnVtIFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NzsKKyAgICBjb25z
dCBHTGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RDYyOworICAgIGNv
bnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgPSAweDgxQTU7CisgICAg
Y29uc3QgR0xlbnVtIFNURU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICA9IDB4MTkwMTsKKyAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4Owor
ICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgPSAweDg0Rjk7
CisKKyAgICBjb25zdCBHTGVudW0gU1JHQl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDhDNDA7CisgICAgY29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOworICAgIGNvbnN0IEdMZW51bSBTUkdC
OF9BTFBIQThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEM0MzsKKyAgICBj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgICAg
PSAweDgyMTA7CisKKyAgICBjb25zdCBHTGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4MDA3OworICAgIGNvbnN0IEdMZW51bSBNQVhfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDgwMDg7CisKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1dJRFRIICAg
ICAgICAgICAgID0gMHg4RDQyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hU
ICAgICAgICAgICAgPSAweDhENDM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9JTlRF
Uk5BTF9GT1JNQVQgICA9IDB4OEQ0NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1JF
RF9TSVpFICAgICAgICAgID0gMHg4RDUwOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJf
R1JFRU5fU0laRSAgICAgICAgPSAweDhENTE7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZF
Ul9CTFVFX1NJWkUgICAgICAgICA9IDB4OEQ1MjsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVG
RkVSX0FMUEhBX1NJWkUgICAgICAgID0gMHg4RDUzOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJC
VUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7CisgICAgY29uc3QgR0xlbnVtIFJFTkRF
UkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICA9IDB4OEQ1NTsKKworICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsKKyAg
ICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAg
ICAgPSAweDhDRDE7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9MRVZFTCAgICAgICAgID0gMHg4Q0QyOworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSA9IDB4OENEMzsKKworICAgIGNvbnN0
IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA9IDB4OEQwMDsKKyAgICBj
b25zdCBHTGVudW0gU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgID0gMHg4RDIwOworICAg
IGNvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7CisK
KyAgICBjb25zdCBHTGVudW0gTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKwor
ICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OENENTsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UICAgICAgICAgPSAweDhDRDY7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UID0gMHg4Q0Q3OworICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAgICA9IDB4OENEOTsKKyAgICBj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAw
eDhDREQ7CisKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAg
ID0gMHg4Q0E2OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAg
ICAgPSAweDhDQTc7CisgICAgY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAg
ICAgICA9IDB4ODRFODsKKworICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiAgPSAweDA1MDY7CisKKyAgICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqLworICAg
IGNvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQw
OworICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgICAgID0g
MHg5MjQxOworICAgIGNvbnN0IEdMZW51bSBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAg
ICAgID0gMHg5MjQyOworICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJT
SU9OX1dFQkdMID0gMHg5MjQzOworICAgIGNvbnN0IEdMZW51bSBCUk9XU0VSX0RFRkFVTFRfV0VC
R0wgICAgICAgICAgICAgID0gMHg5MjQ0OworCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6
ZWkgZHJhd2luZ0J1ZmZlcldpZHRoOworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRy
YXdpbmdCdWZmZXJIZWlnaHQ7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBhY3RpdmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhdHRhY2hT
aGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBu
YW1lKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBiaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyIGJ1ZmZlcik7CisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEZy
YW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVm
ZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBiaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUgdGV4dHVyZSk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kQ29sb3IoR0xjbGFtcGYg
cmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBt
b2RlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlv
blNlcGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVu
dW0gZGZhY3Rvcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5k
RnVuY1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBo
YSwgR0xlbnVtIGRzdEFscGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVy
PyBkYXRhLCBHTGVudW0gdXNhZ2UpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZm
ZXJWaWV3PyBkYXRhLCBHTGVudW0gdXNhZ2UpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xz
aXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwg
R0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlcj8gZGF0YSk7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSk7CisKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
TGVudW0gdGFyZ2V0KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xl
YXIoR0xiaXRmaWVsZCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY2xlYXJDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVl
LCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBjbGVhclN0ZW5jaWwoR0xpbnQgcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNvbG9yTWFzayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4s
IEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21w
cmVzc2VkVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVy
LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOworICAgIAor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4SW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQnVmZmVyIGNyZWF0ZUJ1ZmZlcigpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIFdlYkdMRnJhbWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZl
cigpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFk
ZXIgY3JlYXRlU2hhZGVyKEdMZW51bSB0eXBlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGN1bGxGYWNlKEdMZW51bSBtb2RlKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2Vi
R0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5k
ZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUp
OworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoRnVuYyhHTGVu
dW0gZnVuYyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFz
ayhHTGJvb2xlYW4gZmxhZyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBmIHpGYXIpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRldGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBlbmFibGUoR0xlbnVtIGNhcCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoR0x1aW50IGluZGV4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZmluaXNoKCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZsdXNo
KCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1l
bnQsIEdMZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1
ZmZlcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1l
bnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7
CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZyb250RmFjZShHTGVudW0g
bW9kZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGdlbmVyYXRlTWlw
bWFwKEdMZW51bSB0YXJnZXQpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMaW50ICAgICAgICBnZXRBdHRy
aWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0QnVmZmVyUGFyYW1ldGVyKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSBHTGVudW0gZ2V0RXJyb3IoKTsKKworICAgIC8vIG9iamVjdCBnZXRFeHRl
bnNpb24oRE9NU3RyaW5nIG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0g
YW55IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1l
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55
IGdldFBhcmFtZXRlcihHTGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dy
YW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVh
dFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGdl
dFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdM
U2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJp
bmcgICAgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciBzaGFkZXIpOworCisgICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1h
dCBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVj
aXNpb250eXBlKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxs
U3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b21dIHNlcXVlbmNlPERPTVN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworCisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRUZXhQ
YXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24pOworCisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIERPTVN0cmluZyBuYW1lKTsK
KworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkg
Z2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBoaW50KEdMZW51bSB0YXJnZXQsIEdMZW51bSBtb2RlKTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSBHTGJvb2xlYW4gICAgaXNCdWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0VuYWJsZWQoR0xlbnVtIGNhcCk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29s
ZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xib29sZWFuICAgIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJl
bmRlcmJ1ZmZlcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzU2hh
ZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29s
ZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGxpbmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBwb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9y
LCBHTGZsb2F0IHVuaXRzKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1
ZmZlclZpZXcgcGl4ZWxzKTsKKyAgICAKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVl
LCBHTGJvb2xlYW4gaW52ZXJ0KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgc2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlciwgRE9NU3RyaW5nIHN0cmluZyk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBm
dW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMs
IEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBzdGVuY2lsTWFzayhHTHVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBt
YXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wKEdM
ZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVu
dW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworCisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgdGV4UGFyYW1ldGVyaShHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBh
cmFtKTsKKworICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZl
clZpZXc/IHBpeGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVs
cyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBk
ZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlC
dWZmZXJWaWV3PyBwaXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVmaW5lZChFTkFCTEVf
VklERU8pICYmIEVOQUJMRV9WSURFTworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlv
biwgR0xpbnQgeCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50
MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTJmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5IHYpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50
IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm0yaXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkg
dik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0zZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5IHYpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtM2koV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHksIEdMaW50IHopOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IEludDMyQXJyYXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4
LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGZ2KFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00aShXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRp
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0g
cHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVy
dGV4QXR0cmliMWZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliMmYoR0x1aW50IGluZHgs
IEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21d
IHZvaWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2YoR0x1
aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZHgsIEZs
b2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeiwgR0xmbG9hdCB3KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQg
dmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2ZXJ0ZXhB
dHRyaWJQb2ludGVyKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29s
ZWFuIG5vcm1hbGl6ZWQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOworCisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZpZXdwb3J0KEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK307CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzU3NDg1NmM3MDYzOTViMGVjYzdmNTJl
ZTg5MmNhY2Q2MmQ3OGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShXRUJHTCkKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCi0K
LSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFWFRCbGVuZE1pbk1heC5oIgotI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1
ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAi
T0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJHTDFSZW5kZXJp
bmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1
ZGUgIldlYkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgi
Ci0jaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIK
LSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZl
cnMuaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3Nl
Q29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJHTFNo
YWRlclByZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgotI2luY2x1
ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0IGRvdWJsZSBzZWNvbmRzQmV0
d2VlblJlc3RvcmVBdHRlbXB0cyA9IDEuMDsKLWNvbnN0IGludCBtYXhHTEVycm9yc0FsbG93ZWRU
b0NvbnNvbGUgPSAyNTY7Ci0KLW5hbWVzcGFjZSB7Ci0gICAgCi1jbGFzcyBTY29wZWREcmF3aW5n
QnVmZmVyQmluZGVyIHsKLXB1YmxpYzoKLSAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERy
YXdpbmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgOiBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKLSAgICAg
ICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgewotICAg
ICAgICAvLyBDb21taXQgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNh
bXBsaW5nKQotICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1
ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgfQotICAg
IAotICAgIH5TY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKCkKLSAgICB7Ci0gICAgICAgIC8vIFJl
c3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKLSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmJpbmQoKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIERyYXdpbmdCdWZmZXIqIG1fZHJh
d2luZ0J1ZmZlcjsKLSAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsK
LX07Ci0KLVBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0T3JaZXJvKFdlYkdMT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotfQotCi12b2lk
IGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2UsIEdDM0RzaXplaSBzb3VyY2VS
YW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkqIGNsaXBwZWRSYW5nZSkKLXsK
LSAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICByYW5nZSArPSBzdGFydDsKLSAgICAgICAgc3RhcnQgPSAwOwotICAg
IH0KLSAgICBHQzNEaW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgaWYgKGVuZCA+IHNvdXJj
ZVJhbmdlKQotICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAqY2xpcHBl
ZFN0YXJ0ID0gc3RhcnQ7Ci0gICAgKmNsaXBwZWRSYW5nZSA9IHJhbmdlOwotfQotCi0vLyBSZXR1
cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwgeSwgd2lkdGgs
IGhlaWdodCBzdGF5IHRoZSBzYW1lLgotYm9vbCBjbGlwMkQoR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgIEdDM0RzaXpl
aSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgIEdDM0Rp
bnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0MzRHNpemVpKiBjbGlwcGVkV2lkdGgs
IEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotewotICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlw
cGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgY2xpcDFEKHgsIHdp
ZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBlZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgY2xpcDFEKHks
IGhlaWdodCwgc291cmNlSGVpZ2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhlaWdodCk7Ci0gICAgcmV0
dXJuICgqY2xpcHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9
IHdpZHRoIHx8ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci19Ci0KLUdDM0RpbnQgY2xhbXAo
R0MzRGludCB2YWx1ZSwgR0MzRGludCBtaW4sIEdDM0RpbnQgbWF4KQotewotICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgdmFsdWUgPSBtaW47Ci0gICAgaWYgKHZhbHVlID4gbWF4KQotICAg
ICAgICB2YWx1ZSA9IG1heDsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8vIFJldHVybiB0cnVl
IGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGlu
Ci0vLyBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgotYm9vbCB2YWxpZGF0ZUNoYXJhY3Rl
cih1bnNpZ25lZCBjaGFyIGMpCi17Ci0gICAgLy8gUHJpbnRpbmcgY2hhcmFjdGVycyBhcmUgdmFs
aWQgZXhjZXB0ICIgJCBgIEAgXCAnIERFTC4KLSAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgot
ICAgICAgICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAm
JiBjICE9ICdcXCcgJiYgYyAhPSAnXCcnKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAvLyBI
b3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwgY2Fycmlh
Z2UgcmV0dXJuCi0gICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgaWYgKGMgPj0gOSAmJiBjIDw9
IDEzKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
aXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKG5hbWUuc3Rh
cnRzV2l0aCgiZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKSB8fCBuYW1lLnN0YXJ0
c1dpdGgoIl93ZWJnbF8iKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi0vLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mg
bm9uLUFTQ0lJIGNoYXJhY3RlcnMKLS8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBw
b3RlbnRpYWxseSBicmVha2luZyBPcGVuR0wKLS8vIGltcGxlbWVudGF0aW9ucyBub3QgZXhwZWN0
aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBzZXQuCi1jbGFzcyBTdHJpcENvbW1l
bnRzIHsKLXB1YmxpYzoKLSAgICBTdHJpcENvbW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyKQotICAg
ICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUpCi0gICAgICAgICwgbV9zb3VyY2VT
dHJpbmcoc3RyKQotICAgICAgICAsIG1fbGVuZ3RoKHN0ci5sZW5ndGgoKSkKLSAgICAgICAgLCBt
X3Bvc2l0aW9uKDApCi0gICAgewotICAgICAgICBwYXJzZSgpOwotICAgIH0KLSAgICAKLSAgICBT
dHJpbmcgcmVzdWx0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHBhcnNlKCkKLSAgICB7Ci0gICAgICAgIHdoaWxlIChoYXNNb3Jl
Q2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICBwcm9jZXNzKGN1cnJlbnQoKSk7Ci0gICAgICAg
ICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCi0gICAgICAgICAg
ICBpZiAoaGFzTW9yZUNoYXJhY3RlcnMoKSkKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLSAgICAKLSAg
ICBib29sIHBlZWsoVUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICht
X3Bvc2l0aW9uICsgMSA+PSBtX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgVUNoYXIgY3VycmVudCgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX3Bvc2l0aW9u
IDwgbV9sZW5ndGgpOwotICAgICAgICByZXR1cm4gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07
Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWR2YW5jZSgpCi0gICAgewotICAgICAgICArK21fcG9z
aXRpb247Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3Rlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5l
d2xpbmUgcmVsYXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAn
XG4nIHx8IGNoYXJhY3RlciA9PSAnXHInKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0KFVD
aGFyIGNoYXJhY3RlcikKLSAgICB7Ci0gICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFjdGVy
KTsKLSAgICB9Ci0gICAgCi0gICAgZW51bSBQYXJzZVN0YXRlIHsKLSAgICAgICAgLy8gSGF2ZSBu
b3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCi0gICAgICAg
IC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUgYSBwcmVwcm9jZXNzb3IK
LSAgICAgICAgLy8gZGlyZWN0aXZlLgotICAgICAgICBCZWdpbm5pbmdPZkxpbmUsCi0gICAgICAg
IAotICAgICAgICAvLyBIYXZlIHNlZW4gYXQgbGVhc3Qgb25lIEFTQ0lJIG5vbi13aGl0ZXNwYWNl
IGNoYXJhY3RlcgotICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCi0gICAgICAgIE1pZGRsZU9mTGlu
ZSwKLSAgICAgICAgCi0gICAgICAgIC8vIEhhbmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAgICAgIC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVu
ZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVudAotICAgICAgICAvLyBwcm9jZXNzaW5nLgot
ICAgICAgICBJblByZXByb2Nlc3NvckRpcmVjdGl2ZSwKLSAgICAgICAgCi0gICAgICAgIC8vIEhh
bmRsaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4gVGhlIGNvbW1lbnQgdGV4dCBpcwotICAgICAg
ICAvLyByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgICAgICBJblNpbmdsZUxpbmVD
b21tZW50LAotICAgICAgICAKLSAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1l
bnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKLSAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBs
aW5lIG51bWJlcnMuCi0gICAgICAgIEluTXVsdGlMaW5lQ29tbWVudAotICAgIH07Ci0gICAgCi0g
ICAgUGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwot
ICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwotICAgIHVuc2lnbmVkIG1fcG9zaXRpb247Ci0gICAgU3Ry
aW5nQnVpbGRlciBtX2J1aWxkZXI7Ci19OwotCi12b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3Mo
VUNoYXIgYykKLXsKLSAgICBpZiAoaXNOZXdsaW5lKGMpKSB7Ci0gICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgIC8v
IHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVycy4KLSAgICAgICAgZW1pdChjKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChtX3BhcnNlU3RhdGUgIT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAg
ICAgICAgbV9wYXJzZVN0YXRlID0gQmVnaW5uaW5nT2ZMaW5lOwotICAgICAgICAKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBVQ2hhciB0ZW1wID0gMDsKLSAgICBzd2l0Y2ggKG1f
cGFyc2VTdGF0ZSkgewotICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICBpZiAoV1RG
Ojppc0FTQ0lJU3BhY2UoYykpIHsKLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAg
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZTsKLSAgICAgICAg
ICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRsZSBjaGFyYWN0
ZXIuCi0gICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAgICAgcHJvY2Vz
cyhjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgot
ICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkgewotICAgICAgICAgICAgaWYgKHRl
bXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5l
Q29tbWVudDsKLSAgICAgICAgICAgICAgICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgYWR2
YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICBtX3Bh
cnNlU3RhdGUgPSBJbk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgLy8gRW1pdCB0
aGUgY29tbWVudCBzdGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgIC8v
IGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdhbnQgdG8gbGF0ZXIKLSAgICAgICAgICAgICAg
ICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgIGVtaXQoJyonKTsKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGVtaXQoYyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBjYXNlIEluUHJlcHJv
Y2Vzc29yRGlyZWN0aXZlOgotICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVy
IGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgLy8gdGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1l
bnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAgLy8gbWlnaHQgbm90IGJlIHRoZSByaWdo
dCB0aGluZyB0byBkbyBsb25nIHRlcm0sIGJ1dCBpdAotICAgICAgICAvLyBzaG91bGQgaGFuZGxl
IHRoZSAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KLSAgICAgICAgZW1pdChjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAg
ICAgICAgLy8gVGhlIG5ld2xpbmUgY29kZSBhdCB0aGUgdG9wIG9mIHRoaXMgZnVuY3Rpb24gdGFr
ZXMgY2FyZQotICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91
dCBvZiB0aGUKLSAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3Ro
ZXIgY2hhcmFjdGVycy4KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgSW5NdWx0
aUxpbmVDb21tZW50OgotICAgICAgICBpZiAoYyA9PSAnKicgJiYgcGVlayh0ZW1wKSAmJiB0ZW1w
ID09ICcvJykgewotICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgZW1pdCgnLycp
OwotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOwotICAgICAgICAgICAg
YWR2YW5jZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xlYXIgd2hldGhlciB3ZSBt
YXkKLSAgICAgICAgLy8gd2FudCBvciBuZWVkIHRvIGp1c3QgZW1pdCBhIHNwYWNlIHBlciBjaGFy
YWN0ZXIgdG8gdHJ5Ci0gICAgICAgIC8vIHRvIHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBk
ZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLX0gLy8gbmFtZXNw
YWNlIGFub255bW91cwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVy
aW5nQ29udGV4dExvc3RDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikgCi0g
ICAgOiBtX2NvbnRleHQoY2IpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3Qo
KSBvdmVycmlkZSAKLSAgICB7IAotICAgICAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6UmVhbExvc3RDb250ZXh0KTsgCi0gICAgfQotICAg
IHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHsgfQotcHJpdmF0
ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBtX2NvbnRleHQ7Ci19OwotCi1jbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVy
cm9yTWVzc2FnZUNhbGxiYWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNiKSAKLSAgICA6
IG1fY29udGV4dChjYikgeyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgR0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGlmIChtX2NvbnRleHQtPm1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAg
ICBtX2NvbnRleHQtPnByaW50R0xFcnJvclRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAg
dmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0K
LXByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OwotfTsK
LQotc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzKiBhdHRycywgY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGNhbnZhcy0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC5mcmFtZSgpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIAotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlv
biBvZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0g
ICAgLy8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3Jl
IHRpbWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xF
bmFibGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRv
cERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9w
RG9jdW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51
cmwoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlv
bikgewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVz
KSBpcyB0byBibG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBuZWVkIHRvIGJlIHJl
c29sdmVkIGxhdGVyLiIpOwotICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9
IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0
dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7Ci0gICAgCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50
aWFsaWFzKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1w
bGluZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7
Ci0gICAgfQotICAgIAotICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKLSAgICBh
dHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5wcmVmZXJE
aXNjcmV0ZUdQVSA9IHRydWU7Ci0gICAgCi0gICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmZvcmNl
U29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRyaWJ1dGVzLmZvcmNlU29mdHdh
cmVSZW5kZXJlciA9IHRydWU7Ci0gICAgCi0gICAgaWYgKHBhZ2UpCi0gICAgICAgIGF0dHJpYnV0
ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7Ci0gICAgCi0g
ICAgaWYgKGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAi
Q3JlYXRlIGEgV2ViR0wgY29udGV4dCB0aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUg
YSBwb2xpY3kgcmVzb2x1dGlvbiBpZiB1c2VkLiIpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gcmVuZGVyaW5nQ29udGV4dCA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKLSAgICAgICAgICAgIHJl
bmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4o
bmV3IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
R0wxUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBh
dHRyaWJ1dGVzKSk7Ci0gICAgfQotICAgIAotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBk
b2N1bWVudC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMs
IGhvc3RXaW5kb3cpKTsKLSAgICAKLSAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENv
bnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9y
RXZlbnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgCi0gICAgRXh0ZW5zaW9uczNE
KiBleHRlbnNpb25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfRVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25z
LT5wdXNoR3JvdXBNYXJrZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotICAgIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250
ZXh0ID0gbnVsbHB0cjsKLSAgICBpZiAodHlwZSA9PSAiZXhwZXJpbWVudGFsLXdlYmdsMiIpCi0g
ICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5n
Q29udGV4dD4obmV3IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBhdHRy
aWJ1dGVzKSk7Ci0gICAgZWxzZQotICAgICAgICByZW5kZXJpbmdDb250ZXh0ID0gc3RkOjp1bmlx
dWVfcHRyPFdlYkdMMVJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0
KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1
c3BlbmRJZk5lZWRlZCgpOwotICAgIAotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OwotfQot
Ci1XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhU
TUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZh
cykKLSAgICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAg
ICwgbV9jb250ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNl
KQotICAgICwgbV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjptYXliZVJlc3RvcmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDApCi0g
ICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhl
dGljTG9zdENvbnRleHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1f
c3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0Nv
bnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNv
bHV0aW9uKGZhbHNlKQotewotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2Fu
dmFzKQotICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0g
ICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwg
bV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93
ZWQoZmFsc2UpCi0gICAgLCBtX3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6Om1heWJlUmVzdG9yZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2Fj
aGUoNCkKLSAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9k
ZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQot
ICAgICwgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVy
cm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwg
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQ
b2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1f
Y29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4
dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwotICAgIAotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBd
ID0gbV9tYXhWaWV3cG9ydERpbXNbMV0gPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7
Ci0gICAgCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgCi0gICAgc2V0dXBGbGFncygpOwotICAgIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdGlhbGl6ZU5l
d0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0TG9zdCk7Ci0gICAgbV9uZWVkc1Vw
ZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgIG1fYWN0
aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBh
Y2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKLSAgICBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJz
aW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTDsKLSAgICBtX2Jv
dW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3VycmVudFByb2dyYW0gPSAwOwotICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOwotICAg
IG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7Ci0gICAg
bV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsTWFza0JhY2sgPSAweEZG
RkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVu
Y2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKLSAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNl
OwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkID0gbWF4R0xFcnJvcnNBbGxvd2Vk
VG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9
IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9IDA7Ci0gICAgbV9zY2lzc29yRW5h
YmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0aCA9IDE7Ci0gICAgbV9jbGVhclN0ZW5jaWwg
PSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1sy
XSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLSAgICAKLSAgICBHQzNEaW50IG51bUNvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgbV90ZXh0dXJlVW5pdHMuY2xlYXIoKTsKLSAgICBt
X3RleHR1cmVVbml0cy5yZXNpemUobnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAg
Ci0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhB
dHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOwotICAg
IAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKTsK
LSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQo
bV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7
Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2
ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUp
OwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9tYXhSZW5k
ZXJidWZmZXJTaXplKTsKLSAgICAKLSAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZyb20gRVhUX2Ry
YXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7
Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLSAgICAKLSAgICBtX2JhY2tEcmF3QnVm
ZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s7Ci0gICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVx
dWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNlOwotICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBm
YWxzZTsKLSAgICAKLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
YW9UeXBlRGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0
VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUo
bV9tYXhWZXJ0ZXhBdHRyaWJzKTsKLSAgICAKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkp
Ci0gICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIAotICAg
IEludFNpemUgY2FudmFzU2l6ZSA9IGNsYW1wZWRDYW52YXNTaXplKCk7Ci0gICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChjYW52YXNTaXplKTsK
LSAgICAKLSAgICBtX2NvbnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNT
aXplLmhlaWdodCgpKTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUu
d2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAs
IDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0gICAgCi0gICAg
bV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRF
cnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4
dEVycm9yTWVzc2FnZUNhbGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c2V0dXBGbGFncygpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAg
Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAg
ICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdM
RXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotICAgIAotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9
IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFudCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291
cmNlX3NhZmUiKTsKLSAgICBpZiAobV9pc0dMRVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNH
TEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgi
R0xfT0VTX3RleHR1cmVfbnBvdCIpOwotICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVk
ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmlj
dCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVy
ZV9ub25fcG93ZXJfb2ZfdHdvIik7Ci0gICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQg
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2Rl
cHRoX3N0ZW5jaWwiKTsKLSAgICB9Ci0gICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIp
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFsbG93UHJpdmlsZWdlZEV4
dGVuc2lvbnMoKSBjb25zdAotewotICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3Vt
ZW50KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5wcml2aWxlZ2Vk
V2ViR0xFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNE
ZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250
YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5hcHBlbmQo
Zm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6fldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UoKQotewotICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9i
amVjdHMgc28gaWYgdGhleSBhcmUgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgLy8gdGhleSB3aWxs
IGJlIGZyZWVkIGJlZm9yZSB0aGUgbGFzdCBjb250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29u
dGV4dCBncm91cC4KLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRyOwotICAgIG1fZGVm
YXVsdFZlcnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QgPSBudWxscHRyOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IG51bGxwdHI7Ci0g
ICAgbV9jdXJyZW50UHJvZ3JhbSA9IG51bGxwdHI7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
PSBudWxscHRyOwotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKLSAg
ICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICB9Ci0gICAgCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7Ci0gICAgbV9ibGFj
a1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIW1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbikgewotICAgICAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0g
ICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpOwotICAgICAgICBtX2NvbnRleHRHcm91
cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhl
IGRyYXdpbmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBi
ZSBkZXN0cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFz
ZWQuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNs
ZWFyKCk7Ci0gICAgCi0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICBtX2NvbnRleHQtPnNl
dENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0RXJy
b3JNZXNzYWdlQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAgIG1fY29udGV4dC5jbGVhcigpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXJrQ29udGV4dENo
YW5nZWQoKQotewotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJu
OwotICAgIAotICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgCi0gICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5tYXJrQ29udGVu
dHNDaGFuZ2VkKCk7Ci0gICAgCi0gICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5k
ZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKLSAgICBpZiAoaXNBY2Nl
bGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAg
Y2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICAgICAgcmVuZGVyQm94LT5jb250ZW50
Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIW1fbWFy
a2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVl
OwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwg
MCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQg
bWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8
IG1fbGF5ZXJDbGVhcmVkCi0gICAgICAgIHx8IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdC
dWZmZXIgfHwgKG1hc2sgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmcpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGNvbnRleHRB
dHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICAvLyBEZXRlcm1p
bmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBm
b3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9z
Y2lzc29yRW5hYmxlZDsKLSAgICAKLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9yWzFd
IDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8gbV9j
bGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JN
YXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotICAgIAotICAgIHJlc3Rv
cmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAgbV9s
YXllckNsZWFyZWQgPSB0cnVlOwotICAgIAotICAgIHJldHVybiBjb21iaW5lZENsZWFyOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIo
KQotewotICAgIC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAg
IGlmIChtX3NjaXNzb3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9j
bGVhckNvbG9yWzBdLCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY2xlYXJDb2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9y
TWFzayhtX2NvbG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jb2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNs
ZWFyRGVwdGgobV9jbGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2Ns
ZWFyU3RlbmNpbCk7Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNz
Q29udGV4dDNEOjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1h
c2sobV9kZXB0aE1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1h
cmtMYXllckNvbXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygp
KQotICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgCi0gICAg
Ly8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhl
IGNsZWFyIHRoYXQKLSAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91
bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewot
ICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMo
KS0+YnVmZmVyKCkpOwotICAgICAgICAKLSAgICAgICAgY2FudmFzKCktPm1ha2VQcmVzZW50YXRp
b25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlv
bkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIAotICAgIGlmICghbV9tYXJr
ZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwotICAgIG1fbWFya2VkQ2FudmFzRGly
dHkgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCkpOwot
ICAgIAotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2lu
Z0J1ZmZlci5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1
c2UgYXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBp
ZiB0aGUgdW5kZXJseWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAg
IEdDM0RpbnQgbWF4U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVy
YnVmZmVyU2l6ZSk7Ci0gICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBh
dm9pZCBtZW1vcnkgZXhoYXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0
MDk2OwotICAgIG1heFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0g
ICAgR0MzRGludCBtYXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1z
WzBdKTsKLSAgICBHQzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmll
d3BvcnREaW1zWzFdKTsKLSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0g
ICAgaGVpZ2h0ID0gY2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotICAgIAotICAgIGlmICht
X25lZWRzVXBkYXRlKSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCkt
PnJlbmRlckJveCgpOwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hh
bmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAg
IH0KLSAgICAKLSAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0
eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwgYWxzbyBzdGFydCBv
ZmYKLSAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hhcGUgd2lsbCBkbyku
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJl
c2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgICAgICByZXN0b3JlU3RhdGVBZnRlckNs
ZWFyKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVp
Z2h0KTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBvYmplY3RPclplcm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9y
ZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwot
fQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkg
Y29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICByZXR1cm4gbV9kcmF3
aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLSAgICAKLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCku
aGVpZ2h0KCk7Ci0gICAgCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9m
KEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0KTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAgICAg
IHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEZmxvYXQp
OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRl
eHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh0
ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNp
emUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1
cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0gICAgbV9jb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKHRleHR1cmUpOwotICAgIAotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0QWN0aXZlVGV4dHVyZVVuaXQodGV4dHVyZSk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRBdHRyaWJMb2NhdGlv
bihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmluZEF0
dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFt
ZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RP
clplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGV0ZWQpCi17Ci0gICAgZGVsZXRlZCA9IGZh
bHNlOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShj
b250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0
IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGRlbGV0ZWQgPSAhb2JqZWN0LT5vYmplY3QoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlm
ICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0g
ICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0
KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJl
IHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAg
ICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclpl
cm8oYnVmZmVyKSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQo
dGFyZ2V0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kRnJhbWVi
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwot
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRGcmFtZWJ1ZmZlciIsIGJ1ZmZlciwg
ZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgYnVm
ZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7Ci0gICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZl
ckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAg
Ly8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdpbmcgYnVmZmVyLgotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7Ci0gICAg
aWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci0gICAg
YXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVu
ZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVyLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChkZWxldGVkKQotICAgICAgICByZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZyA9IHJlbmRlckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5k
ZXJidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJl
bmRlckJ1ZmZlcikKLSAgICAgICAgcmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFRleHR1cmUoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tP
YmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYg
KHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkg
IT0gdGFyZ2V0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUg
dXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBHQzNEaW50IG1heExldmVsID0gMDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVy
ZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1f
bWF4VGV4dHVyZUxldmVsOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAm
JiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0
VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVyZSkpOwotICAgICAgICAKLSAgICB9
IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRl
eHR1cmVMZXZlbDsKLSAgICB9IGVsc2UgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAg
ICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4TGV2ZWwpOwotICAgIAotICAgIC8vIE5v
dGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUgVEVYVFVSRV9X
UkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBjdWJlIG1hcCB0
ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBleHBvc2UgdGhp
cyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8gb3RoZXJ3aXNl
IHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBpbiB0aGlzCi0g
ICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9ydGluZyB0aGlz
IHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52b2x2ZWQgKHdp
bGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4gYWxsIHBvcnRz
KSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxvZ2ljIGhhcwot
ICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJs
dWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVu
ZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24i
LCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9k
ZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVu
Y0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNmYWN0b3IsIGRmYWN0b3IpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3Jj
UkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBo
YSkKLXsKLSAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0
aW9ucyBhcyBSR0IuCi0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzcmNSR0IsIGRzdFJHQikpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdM
QnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRh
IiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXpl
ID09IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0
ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2Np
YXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNf
Y2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRh
dGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBk
YXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZl
ckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVm
ZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0
YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nlcygp
KSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5
bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRh
dGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0Mz
RGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZm
ZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsK
LSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewot
ICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZl
ciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1
ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBs
b25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBp
ZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQg
b2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1f
Y29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpKTsKLSAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUg
YnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNz
b2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1l
dGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19E
UkFXKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvZmZzZXQg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0Vy
cm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZm
ZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0
KSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdl
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbV9j
b250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQt
PmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRl
eHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBi
dWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3Qg
aGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3Nv
Y2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgIGlmICh0YXJnZXQgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
IiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAo
IW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7
Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAg
IEdDM0RlbnVtIHJlc3VsdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5jaGVja1N0YXR1cygmcmVh
c29uKTsKLSAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9D
T01QTEVURSkgewotICAgICAgICBwcmludEdMV2FybmluZ1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IHJlc3VsdCA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xl
YXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJp
bnZhbGlkIG1hc2siKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiBy
ZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0
M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwg
ImNsZWFyIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWNsZWFy
SWZDb21wb3NpdGVkKG1hc2spKQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwotICAg
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0Mz
RGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0gMDsKLSAgICBpZiAo
c3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYikpCi0g
ICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAgICBhID0gMTsKLSAg
ICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7Ci0gICAgbV9j
bGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwotICAgIG1fY29udGV4
dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0aCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhckRlcHRoID0gZGVw
dGg7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRlcHRoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyU3Rl
bmNpbCA9IHM7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiY29tcGlsZVNo
YWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmNvbXBpbGVT
aGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIEdDM0RpbnQgdmFsdWU7Ci0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOwotICAgIHNoYWRlci0+c2V0VmFsaWQodmFsdWUp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5
QnVmZmVyVmlldyogZGF0YSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3Nl
ZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0KSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChib3JkZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJib3JkZXIgbm90IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
dGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3Nl
ZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZGF0YSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVy
ZUJpbmRpbmcoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAo
IXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewot
ICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBv
ZiAyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmNv
bXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBkYXRh
LT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQt
Pm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjb21w
cmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBp
dCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgIHRleC0+bWFy
a0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLSAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoZm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3Jt
YXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlm
IChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4
dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIXZh
bGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0ZXgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZ3JhcGhpY3NDb250ZXh0M0QoKS0+
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7
Ci0gICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OmdldENs
ZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZF
Ul9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlUZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZv
cm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhJ
bWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChp
bnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkg
JiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21w
bGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZy
ZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgcmVhc29uKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlm
IChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIg
YmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkp
OwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5n
ZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBHQzNEaW50IGNsaXBw
ZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhl
aWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZy
YW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgs
ICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmIChjbGlw
cGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNs
aXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5v
dCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgotICAgIHRl
eC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJl
QmluZGluZygiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFn
ZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdl
MkQiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEJlZm9yZSBjaGVj
a2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmly
c3QuCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDAp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRh
cmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQs
IGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFu
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVm
ZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVy
IGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBj
b25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3Jh
cGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2Fm
ZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2lu
Z0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdDM0RpbnQgY2xp
cHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5k
RnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVk
WCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKLSAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7Ci0gICAgICAgICAgICBHQzNEZW51bSB0eXBlID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2
ZWwpOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsK
LSAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzaXplOwotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5j
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5w
YWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVycm9yICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hhcltdPihzaXplKTsK
LSAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3Vi
SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAs
IHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgemVyby5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAm
JiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgIFNjb3BlZERyYXdpbmdCdWZm
ZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZ
IC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBw
ZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0
KCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBX
ZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0g
ICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2Vi
R0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwot
ICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7
Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNz
UmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVTaGFk
ZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURF
UiAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNy
ZWF0ZVNoYWRlciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRl
cjo6Y3JlYXRlKHRoaXMsIHR5cGUpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjdWxsRmFj
ZShHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2Jq
ZWN0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3Jv
dXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcg
dG8gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KG9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRl
eHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4
dCB1bmJvdW5kLgotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQz
RCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYg
KCFkZWxldGVPYmplY3QoYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX2JvdW5k
QXJyYXlCdWZmZXIgPT0gYnVmZmVyKQotICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwot
ICAgIAotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlRnJhbWVidWZmZXIo
V2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3Qo
ZnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1lYnVmZmVyID09IG1f
ZnJhbWVidWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsK
LSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgICAgICAgICAvLyBIYXZlIHRvIGNh
bGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVybmFsIGZiby4KLSAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgMCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGRlbGV0ZU9iamVj
dChwcm9ncmFtKTsKLSAgICAvLyBXZSBkb24ndCByZXNldCBtX2N1cnJlbnRQcm9ncmFtIHRvIDAg
aGVyZSBiZWNhdXNlIHRoZSBkZWxldGlvbiBvZiB0aGUKLSAgICAvLyBjdXJyZW50IHByb2dyYW0g
aXMgZGVsYXllZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVS
ZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAo
IWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJl
bmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVy
KHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVs
ZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgZGVsZXRlT2JqZWN0KHNoYWRl
cik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVu
aXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRz
W2ldLnRleHR1cmUyREJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJl
VW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5p
dHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHRleHR1cmUpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRl
eHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9kZXB0aE1hc2sgPSBmbGFnOwotICAg
IG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHpOZWFyID4gekZhcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVh
ciwgekZhcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hh
ZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9n
cmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8o
cHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGlzYWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewot
ICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGFwcGx5U3RlbmNpbFRl
c3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKLSAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNl
OwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5kaXNhYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhB
dHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQg
PSBmYWxzZTsKLSAgICAKLSAgICBpZiAoaW5kZXggPiAwIHx8IGlzR0xFUzJDb21wbGlhbnQoKSkK
LSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5U2l6
ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQotewot
ICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAKLSAgICBpZiAoIWVs
ZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChv
ZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBGb3IgYW4gdW5z
aWduZWQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQg
cmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQu
Ci0gICAgICAgIG9mZnNldCAvPSA0OwotICAgICAgICAKLSAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7Ci0gICAgICAgIGlmIChvZmZz
ZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
KSB7Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3Qg
YmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zm
c2V0ICUgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIC8v
IE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0g
ICAgICAgIAotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC8gMjsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zm
c2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBHQzNEc2l6ZWlwdHIg
biA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgICAgICBpZiAob2Zmc2V0
ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUg
dmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZl
biB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAg
IC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1h
eGltdW0KLSAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0
ZXJhdGlvbiBpbgotICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAg
UmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgIAotICAgIGlmICghZWxlbWVu
dEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgR0MzRHNpemVp
cHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAg
Ly8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50
cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgotICAgIGlmICghbnVtRWxl
bWVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVm
ZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICBBU1NF
UlQoYnVmZmVyKTsKLSAgICAKLSAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXIt
PmdldENhY2hlZE1heEluZGV4KHR5cGUpOwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3Ig
dGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBj
b25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXIt
PmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAg
ICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAg
Y29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZm
ZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51
bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJ
bmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAg
ICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7
Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1
aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3Rk
OjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heElu
ZGV4KHR5cGUsIG1heEluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1heEluZGV4ID49IDAp
IHsKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBlbGVtZW50cyBpcyBvbmUgbW9y
ZSB0aGFuIHRoZSBtYXhpbXVtCi0gICAgICAgIC8vIGluZGV4IHRoYXQgd2lsbCBiZSBhY2Nlc3Nl
ZC4KLSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heEluZGV4ICsgMTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0Rz
aXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBu
dW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+
PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwotICAgIAotICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAKLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmICghY291bnQpIHsKLSAgICAg
ICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQg
PSBvZmZzZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7Ci0gICAgCi0gICAgaWYgKHR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBNYWtl
IHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdD
M0R1aW50KTsKLSAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBH
QzNEdWludCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEo
KSkgKyB1b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYg
KCpwID4gbGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAg
ICAgICAgKytwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgewotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxl
bWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAg
ICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+
KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zm
c2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCpwID4gbGFz
dEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAgICAgICAgKytw
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVy
KCktPmRhdGEoKSkgKyB1b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAg
ICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpw
OwotICAgICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIFRoZW4g
c2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlz
IHZhbGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJl
dHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50
LCB1bnNpZ25lZCBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBMb29rIGluIGVhY2ggZW5hYmxl
ZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBpZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8gYSBidWZm
ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF4VmVydGV4QXR0cmliczsgKytp
KSB7Ci0gICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAKLSAgICAKLSAgICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQgdmVydGV4IGF0
dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSkuCi0gICAgYm9vbCBzYXdOb25JbnN0YW5jZWRB
dHRyaWIgPSBmYWxzZTsKLSAgICBib29sIHNhd0VuYWJsZWRBdHRyaWIgPSBmYWxzZTsKLSAgICBp
bnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50UHJvZ3JhbS0+bnVtQWN0aXZl
QXR0cmliTG9jYXRpb25zKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BY3RpdmVBdHRy
aWJMb2NhdGlvbnM7ICsraSkgewotICAgICAgICBpbnQgbG9jID0gbV9jdXJyZW50UHJvZ3JhbS0+
Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7Ci0gICAgICAgIGlmIChsb2MgPj0gMCAmJiBsb2Mg
PCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4QXR0cmlicykpIHsKLSAgICAgICAgICAgIGNv
bnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUobG9jKTsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgc2F3RW5hYmxl
ZEF0dHJpYiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5LW9uZSBlcnJv
cnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCi0gICAgICAgICAgICAgICAgLy8gRm9yIHRo
ZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3IgdGhlCi0gICAg
ICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCi0gICAgICAgICAg
ICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0ZS5idWZmZXJC
aW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQpOwotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdGUuc3Ry
aWRlID4gMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49IHN0YXRlLmJ5
dGVzUGVyRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMgPSAxICsgKGJ5
dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0cmlkZTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnN0YW5jZXNSZXF1aXJlZCA9IDA7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0YXRlLmRpdmlzb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vz
UmVxdWlyZWQgPSBjZWlsKHN0YXRpY19jYXN0PGZsb2F0PihwcmltaXRpdmVDb3VudCkgLyBzdGF0
ZS5kaXZpc29yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlc1JlcXVpcmVkID4g
bnVtRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2F3Tm9uSW5zdGFuY2Vk
QXR0cmliID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRDb3VudCA+IG51
bUVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBp
ZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFvYmplY3QgfHwgIW9iamVj
dC0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmplY3QgZGVs
ZXRlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghb2JqZWN0LT52
YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJv
YmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1l
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGlmIChmaXJzdCA8IDAgfHwgY291
bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJmaXJzdCBvciBjb3VudCA8IDAiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAg
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1j
b3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAo
IWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBF
bnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBDaGVja2VkPEdD
M0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwotICAgICAgICBDaGVj
a2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAg
ICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZp
cnN0ICsgY2hlY2tlZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwotICAgICAgICBpZiAo
Y2hlY2tlZFN1bS5oYXNPdmVyZmxvd2VkKCkgfHwgY2hlY2tlZFByaW1pdGl2ZUNvdW50Lmhhc092
ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZl
R2V0KCksIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGNvbnN0IGNoYXIqIHJlYXNv
biA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJh
d0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgCi0gICAgaWYg
KCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDAp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICAK
LSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0
cnVlKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50
KTsKLSAgICAKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2lt
dWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJl
Q29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdl
ZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0Vs
ZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxl
bWVudHMsIEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRp
bmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIGlm
IChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBpZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIGlmIChwcmlt
aXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIAotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5n
IHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBl
LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9C
VUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAg
Q2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZENvdW50KGNvdW50KTsKLSAg
ICAgICAgQ2hlY2tlZDxHQzNEaW50LCBSZWNvcmRPdmVyZmxvdz4gY2hlY2tlZFByaW1pdGl2ZUNv
dW50KHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgaWYgKGNoZWNrZWRDb3VudC5oYXNPdmVyZmxv
d2VkKCkgfHwgY2hlY2tlZFByaW1pdGl2ZUNvdW50Lmhhc092ZXJmbG93ZWQoKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5
cyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50
cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cywgY2hlY2tlZFByaW1p
dGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVDb3VudC51bnNhZmVHZXQoKSkpIHsK
LSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBi
b3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRl
eEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qg
c2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAm
cmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIAotICAgIHVuc2ln
bmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3
RWxlbWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgMCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIAotICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgdHJ1ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9k
ZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOwotICAgIAot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0g
ICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5l
c3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjplbmFibGUoR0MzRGVudW0gY2FwKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0
eSgiZW5hYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0g
dHJ1ZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAg
ICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lz
c29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJlbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpmaW5pc2goKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmZpbmlzaCgpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZsdXNoKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVy
YnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUo
Y29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
IiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZm
ZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNl
IGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgot
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1
ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChhdHRh
Y2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0gICAg
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0
dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsIHRh
cmdldCwgYXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobGV2ZWwpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJsZXZlbCBub3QgMCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmICh0ZXh0dXJlICYmICF0ZXh0dXJlLT52YWxpZGF0ZShjb250ZXh0R3Jv
dXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gdGV4dHVy
ZSBvciB0ZXh0dXJlIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHRvIGJlIG11
dGF0ZWQ7IGFsbCBjdXJyZW50Ci0gICAgLy8gaW1wbGVtZW50YXRpb25zIHVzZSBhbiBGQk8gaW50
ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAotICAgIC8vIEZCTy4KLSAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibm8gZnJhbWVidWZmZXIgYm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmVPYmpl
Y3QgPSBvYmplY3RPclplcm8odGV4dHVyZSk7Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwp
OwotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0
LCBsZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0
YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAg
ICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1l
YnVmZmVyKGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotICAgIGFwcGx5
U3RlbmNpbFRlc3QoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcm9u
dEZhY2UoR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0g
dGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdl
bmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2Vu
ZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1l
IHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJl
cyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29tcHJlc3Nl
ZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBt
YXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICAvLyBnZW5lcmF0ZU1pcG1hcCB3b24ndCB3b3JrIHByb3Blcmx5IGlmIG1pbkZpbHRlciBpcyBu
b3QgTkVBUkVTVF9NSVBNQVBfTElORUFSCi0gICAgLy8gb24gTWFjLiBSZW1vdmUgdGhlIGhhY2sg
b25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJvb2wg
bmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIp
OwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0g
ICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikKLSAg
ICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+
Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5m
bygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0
QWN0aXZlQXR0cmliIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEFj
dGl2ZUluZm8gaW5mbzsKLSAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlQXR0cmliKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZDogJXMi
LCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIAotICAgIHJldHVybiBXZWJH
TEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVV
bmlmb3JtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEFjdGl2ZUluZm8gaW5m
bzsKLSAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJv
Z3JhbSksIGluZGV4LCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8u
bmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0i
KTsKLSAgICB9Ci0gICAgCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3Jt
ICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgCi0gICAgcmV0
dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNp
emUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVkU2hh
ZGVycyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiYg
c2hhZGVyT2JqZWN0cywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBzaGFkZXJPYmplY3RzLmNsZWFyKCk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0YWNoZWRTaGFkZXJzIiwgcHJv
Z3JhbSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBjb25zdCBHQzNEZW51bSBz
aGFkZXJUeXBlW10gPSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
LAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSCi0gICAgfTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdD
M0RlbnVtKTsgKytpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5n
ZXRBdHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlW2ldKTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAg
ICAgICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKHNoYWRlcik7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1HQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtT
dGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5r
ZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiB0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0
YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICAKLSAg
ICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci0gICAgCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChw
bmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHZhbHVlKSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRl
cz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBh
bnkgY2FjaGVkIHZlcnNpb24uCi0gICAgCi0gICAgLy8gQWxzbywgd2UgbmVlZCB0byBlbmZvcmNl
IHJlcXVlc3RlZCB2YWx1ZXMgb2YgImZhbHNlIiBmb3IgZGVwdGgKLSAgICAvLyBhbmQgc3RlbmNp
bCwgcmVnYXJkbGVzcyBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgdW5kZXJseWluZwotICAgIC8v
IEdyYXBoaWNzQ29udGV4dDNEIG9yIERyYXdpbmdCdWZmZXIuCi0gICAgUmVmUHRyPFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXM+IGF0dHJpYnV0ZXMgPSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUobV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpKTsKLSAgICBpZiAoIW1fYXR0cmli
dXRlcy5kZXB0aCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0RGVwdGgoZmFsc2UpOwotICAgIGlm
ICghbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgIGF0dHJpYnV0ZXMtPnNldFN0ZW5jaWwo
ZmFsc2UpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgLy8gVGhlIERyYXdp
bmdCdWZmZXIgb2J0YWlucyBpdHMgcGFyYW1ldGVycyBmcm9tIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDb250ZXh0QXR0cmlidXRlcygpLAotICAgICAgICAvLyBidXQgaXQgbWFrZXMgaXRzIG93biBk
ZXRlcm1pbmF0aW9uIG9mIHdoZXRoZXIgbXVsdGlzYW1wbGluZyBpcyBzdXBwb3J0ZWQuCi0gICAg
ICAgIGF0dHJpYnV0ZXMtPnNldEFudGlhbGlhcyhtX2RyYXdpbmdCdWZmZXItPm11bHRpc2FtcGxl
KCkpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlcy5yZWxlYXNlKCk7Ci19Ci0KLUdDM0Rl
bnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9p
c1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9yKCk7Ci19Ci0KLVdl
YkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiRVhUX2JsZW5kX21pbm1heCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2JsZW5kX21pbm1heCIpKSB7Ci0gICAgICAgIGlmICgh
bV9leHRCbGVuZE1pbk1heCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9ibGVuZF9taW5tYXgiKTsKLSAgICAgICAgICAgIG1f
ZXh0QmxlbmRNaW5NYXggPSBzdGQ6Om1ha2VfdW5pcXVlPEVYVEJsZW5kTWluTWF4Pih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRCbGVuZE1pbk1heC5nZXQoKTsKLSAgICB9
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc1JHQiIpCi0gICAgICAgICYm
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkgewot
ICAgICAgICBpZiAoIW1fZXh0c1JHQikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zUkdCIik7Ci0gICAgICAgICAgICBtX2V4
dHNSR0IgPSBzdGQ6Om1ha2VfdW5pcXVlPEVYVHNSR0I+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX2V4dHNSR0IuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiRVhUX2ZyYWdfZGVwdGgiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9mcmFnX2RlcHRoIikpIHsKLSAgICAgICAgaWYg
KCFtX2V4dEZyYWdEZXB0aCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9mcmFnX2RlcHRoIik7Ci0gICAgICAgICAgICBtX2V4
dEZyYWdEZXB0aCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhURnJhZ0RlcHRoPih0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbV9leHRGcmFnRGVwdGguZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpCi0gICAg
ICAgICYmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKSB8fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QiKSkpIHsKLSAgICAgICAgaWYgKCFtX2V4dFNoYWRl
clRleHR1cmVMT0QpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Ci0gICAgICAgICAgICBt
X2V4dFNoYWRlclRleHR1cmVMT0QgPSBzdGQ6Om1ha2VfdW5pcXVlPEVYVFNoYWRlclRleHR1cmVM
T0Q+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dFNoYWRlclRleHR1cmVM
T0QuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCS0lU
X0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljIikpIHsKLSAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgICAgICAgICAgbV9leHRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWMgPSBzdGQ6Om1ha2VfdW5pcXVlPEVYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYz4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0VGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpCi0gICAgICAgICYmIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZl
cyA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4odGhpcyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcy5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9mbG9hdCIp
Ci0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0KSB7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUZsb2F0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlRmxvYXQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtX29lc1RleHR1cmVGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKQotICAgICAgICAmJiBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0
X2xpbmVhciIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIpIHsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUZsb2F0
TGluZWFyID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+KHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVGbG9hdExpbmVhci5nZXQoKTsK
LSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1
cmVIYWxmRmxvYXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7Ci0gICAgICAgICAgICBt
X29lc1RleHR1cmVIYWxmRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxv
YXQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxv
YXQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3Rl
eHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpIHsK
LSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIpIHsKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPih0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKSB7Ci0gICAgICAgIGlmICgh
bV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0g
ICAgICAgICAgICBtX29lc1ZlcnRleEFycmF5T2JqZWN0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNW
ZXJ0ZXhBcnJheU9iamVjdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2Vz
VmVydGV4QXJyYXlPYmplY3QuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKSB7
Ci0gICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX2VsZW1lbnRfaW5k
ZXhfdWludCIpOwotICAgICAgICAgICAgbV9vZXNFbGVtZW50SW5kZXhVaW50ID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNFbGVtZW50SW5kZXhVaW50Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gbV9vZXNFbGVtZW50SW5kZXhVaW50LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2xvc2VfY29udGV4dCIpKSB7Ci0gICAgICAgIGlmICgh
bV93ZWJnbExvc2VDb250ZXh0KQotICAgICAgICAgICAgbV93ZWJnbExvc2VDb250ZXh0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxXZWJHTExvc2VDb250ZXh0Pih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1f
d2ViZ2xMb3NlQ29udGV4dC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKSkKLSAgICAgICAg
JiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAg
IGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDKQotICAgICAgICAgICAgbV93ZWJnbENv
bXByZXNzZWRUZXh0dXJlQVRDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2Vi
Z2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKQotICAgICAgICAgICAgbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5n
ZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9jb21w
cmVzc2VkX3RleHR1cmVfczN0YyIpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVTM1RDKQotICAgICAgICAgICAgbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQyA9IHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM+KHRoaXMpOwotICAgICAg
ICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQy5nZXQoKTsKLSAgICB9Ci0gICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kZXB0aF90ZXh0dXJlIikKLSAgICAg
ICAgJiYgV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkg
ewotICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9kZXB0aF90
ZXh0dXJlIik7Ci0gICAgICAgICAgICBtX3dlYmdsRGVwdGhUZXh0dXJlID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJHTERlcHRoVGV4dHVyZT4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG1fd2ViZ2xEZXB0aFRleHR1cmUuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZHJhd19idWZmZXJzIikgJiYgc3VwcG9ydHNEcmF3QnVmZmVycygp
KSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERyYXdCdWZmZXJzKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX2RyYXdfYnVmZmVy
cyIpOwotICAgICAgICAgICAgbV93ZWJnbERyYXdCdWZmZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxX
ZWJHTERyYXdCdWZmZXJzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJn
bERyYXdCdWZmZXJzLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKSAmJiBBTkdMRUluc3RhbmNlZEFycmF5czo6c3Vw
cG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV9hbmdsZUluc3RhbmNlZEFycmF5cykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKLSAgICAgICAgICAgIG1fYW5nbGVJbnN0YW5jZWRB
cnJheXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFOR0xFSW5zdGFuY2VkQXJyYXlzPih0aGlzKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbV9hbmdsZUluc3RhbmNlZEFycmF5cy5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgewotICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iKSkgewot
ICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICAg
ICAgbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERlYnVn
UmVuZGVyZXJJbmZvPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdSZW5k
ZXJlckluZm8uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJXRUJHTF9kZWJ1Z19zaGFkZXJzIikKLSAgICAgICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291
cmNlIikpIHsKLSAgICAgICAgICAgIGlmICghbV93ZWJnbERlYnVnU2hhZGVycykKLSAgICAgICAg
ICAgICAgICBtX3dlYmdsRGVidWdTaGFkZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTERlYnVn
U2hhZGVycz4odGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnU2hhZGVycy5n
ZXQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
V2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIAot
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAi
bm8gZnJhbWVidWZmZXIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIH0KLSAgICAKLSAgICBXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCk7Ci0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7Ci0gICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3Bl
Y2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlzIGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAg
ICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BFUkFUSU9OLgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQob2JqZWN0LT5pc1Rl
eHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlz
VGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdl
YkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAg
ICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2
YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsK
LSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3Qp
KSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRl
ckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpOwot
ICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVmZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1h
dCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYmIHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRl
bnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJG
b3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUKQotICAgICAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCk7Ci0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAg
ICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2ht
ZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNvbnN0IGludCBpbnRaZXJvID0gMDsKLSAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1RFWFRVUkU6
Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgotICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6Ci0gICAgICAgIHJldHVybiBn
ZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMUEhBX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRB
cnJheUJ1ZmZlcikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgotICAgICAg
ICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfQ09MT1I6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9B
TFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfUkdCOgotICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0VRVUFUSU9OX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0VRVUFU
SU9OX1JHQjoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfQUxQSEE6Ci0gICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfU1JDX1JHQjoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTFVFX0JJVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9h
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFVpbnQzMkFycmF5OjpjcmVhdGUobV9j
b21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuZGF0YSgpLCBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0
cy5zaXplKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0VfTU9ERToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJSRU5UX1BS
T0dSQU06Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFByb2dy
YW0+KG1fY3VycmVudFByb2dyYW0pKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9CSVRTOgotICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0
ZXMuZGVwdGgpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGludFplcm8pOwotICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9GVU5DOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9h
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RElUSEVSOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzoKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQklORElORzoKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+KG1fZnJhbWVidWZmZXJCaW5k
aW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfRkFDRToKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVF
Tl9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1dJRFRIOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgotICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfUkVOREVSQlVGRkVSX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlO
R19WRUNUT1JTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICByZXR1
cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzoKLSAgICAgICAgLy8gRklYTUU6IHNo
b3VsZCB3ZSBhbHdheXMgcmV0dXJuIDAgZm9yIHRoaXM/Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05N
RU5UOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GQUNUT1I6Ci0gICAgICAgIHJldHVybiBn
ZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9M
WUdPTl9PRkZTRVRfRklMTDoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX1VOSVRTOgot
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFRF9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQklORElORzoK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PihtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJFUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCBXZWJH
TCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQlVGRkVSUzoKLSAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFX0NPVkVSQUdFX0lOVkVSVDoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5Q
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZF
UkFHRV9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVTOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JP
WDoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNI
QURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygiV2Vi
R0wgR0xTTCBFUyAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQz
RDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OKSArICIpIik7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CQUNLX0ZBSUw6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9C
QUNLX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJ
TDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19SRUY6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19XUklURU1BU0s6
Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CSVRTOgotICAgICAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQ0xFQVJfVkFMVUU6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZV
TkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9SRUY6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKLSAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVkFMVUVfTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVUJQSVhFTF9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJ
TkRJTkdfMkQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFRl
eHR1cmU+KG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVA6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+
KG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGlu
ZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
bV91bnBhY2tGbGlwWSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1V
TFRJUExZX0FMUEhBX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NP
TE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpWRU5ET1I6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQiKSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTjoKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygiV2ViR0wgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlNJT04pICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpW
SUVXUE9SVDoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5U
X09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29lc1N0YW5k
YXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIoRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUyk7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICBjYXNlIFdlYkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VEX1JFTkRFUkVSX1dFQkdM
OgotICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSRVIpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBX
RUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIFdlYkdMRGVidWdSZW5kZXJlckluZm86OlVOTUFTS0VE
X1ZFTkRPUl9XRUJHTDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFTkRPUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpWRVJURVhf
QVJSQVlfQklORElOR19PRVM6IC8vIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Ci0gICAgICAgIGlm
IChtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBpZiAoIW1fYm91bmRWZXJ0
ZXhBcnJheU9iamVjdC0+aXNEZWZhdWx0T2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+KG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdCkpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwg
T0VTX3ZlcnRleF9hcnJheV9vYmplY3Qgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5J
U09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBp
ZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpCi0gICAgICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIoRXh0ZW5zaW9uczNEOjpNQVhfVEVYVFVSRV9NQVhfQU5JU09U
Uk9QWV9FWFQpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQ6IC8vIEVYVF9kcmF3X2J1ZmZlcnMgQkVHSU4KLSAgICAgICAgaWYgKG1fd2Vi
Z2xEcmF3QnVmZmVycykKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oZ2V0TWF4Q29s
b3JBdHRhY2htZW50cygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfRFJBV19CVUZGRVJTX0VY
VDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycykKLSAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oZ2V0TWF4RHJhd0J1ZmZlcnMoKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAo
bV93ZWJnbERyYXdCdWZmZXJzCi0gICAgICAgICAgICAmJiBwbmFtZSA+PSBFeHRlbnNpb25zM0Q6
OkRSQVdfQlVGRkVSMF9FWFQKLSAgICAgICAgICAgICYmIHBuYW1lIDwgc3RhdGljX2Nhc3Q8R0Mz
RGVudW0+KEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVCArIGdldE1heERyYXdCdWZmZXJz
KCkpKSB7Ci0gICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
TkU7Ci0gICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICAg
ICAgdmFsdWUgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0RHJhd0J1ZmZlcihwbmFtZSk7Ci0g
ICAgICAgICAgICBlbHNlIC8vIGVtdWxhdGVkIGJhY2tidWZmZXIKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IG1fYmFja0RyYXdCdWZmZXI7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIo
V2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3Jh
bSkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAKLSAgICBHQzNEaW50IHZh
bHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5p
c0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVT
OgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICBt
X2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFs
dWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFj
dGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
cm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtSW5mb0xvZyIsIHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gIiI7Ci0gICAgcmV0dXJuIGVuc3VyZU5vdE51bGwobV9jb250ZXh0LT5nZXRQcm9ncmFt
SW5mb0xvZyhvYmplY3RPclplcm8ocHJvZ3JhbSkpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlk
IHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIGlm
ICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZm
ZXIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICAK
LSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoK
LSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9
IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBHQzNEaW50IHZhbHVlID0g
MDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSX1dJRFRIOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9IRUlHSFQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9T
SVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpF
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFs
dWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9
Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQ
YXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVyIiwg
c2hhZGVyKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIEdDM0RpbnQgdmFs
dWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERUxFVEVfU1RBVFVTOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHNoYWRlci0+aXNE
ZWxldGVkKCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTOgot
ICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFt
ZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29s
Pih2YWx1ZSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgotICAg
ICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFtZSwg
JnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odmFsdWUpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlckluZm9M
b2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJJ
bmZvTG9nIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVO
b3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVyKSkp
OwotfQotCi1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVy
VHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJ
R0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIAotICAgIEdDM0RpbnQgcmFuZ2VbMl0gPSB7MCwgMH07
Ci0gICAgR0MzRGludCBwcmVjaXNpb24gPSAwOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0KHNoYWRlclR5cGUsIHByZWNpc2lvblR5cGUsIHJhbmdlLCAmcHJlY2lzaW9u
KTsKLSAgICByZXR1cm4gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ6OmNyZWF0ZShyYW5nZVsw
XSwgcmFuZ2VbMV0sIHByZWNpc2lvbik7Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm4gIiI7
Ci0gICAgcmV0dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7Ci19Ci0KLVZl
Y3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVu
c2lvbnMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICAKLSAgICBpZiAobV9p
c1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAot
ICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9ibGVu
ZF9taW5tYXgiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2JsZW5kX21pbm1heCIpOwot
ICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zUkdC
IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zUkdCIik7Ci0gICAgaWYgKG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAg
ICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVy
ZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5k
KCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQot
ICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBp
ZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9B
UkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlf
b2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygi
R0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNf
ZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250
ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlz
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQo
dGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBv
cnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0
dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGlj
c0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVy
ZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAgIGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6
c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRf
YXJyYXlzIik7Ci0gICAgCi0gICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4dGVuc2lvbnMoKSkgewot
ICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdM
RV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
IldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVi
dWdfcmVuZGVyZXJfaW5mbyIpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7
Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNE
aW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAg
ICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1
ZSkpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDog
Ly8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKLSAgICAgICAgfQotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRl
cl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlm
b3JtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAo
IXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxp
ZCBmb3IgdGhpcyBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAg
ICB9Ci0gICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9jYXRpb24oKTsK
LSAgICAKLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAg
c3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7
Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAyOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAz
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAg
IGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FU
OwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0gICAgICAgIGJhc2VU
eXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgotICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3Ro
ID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRf
TUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAg
ICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VC
RToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBs
ZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBDYW4n
dCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3aXRjaCAoYmFzZVR5
cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewotICAgICAgICBHQzNE
ZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAqIHNpemVvZihHQzNE
ZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKLSAgICAg
ICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUo
dmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6
IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAq
IHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1
ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6
OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYg
KG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2Nh
dGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0
aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBib29s
IGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVlW2pdID0gc3RhdGljX2Nh
c3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29s
VmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICAKLSAgICAvLyBJZiB3ZSBnZXQgaGVyZSwg
c29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29tcGxleCBsb2dpYyBh
Ym92ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7Ci0gICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxv
Y2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghdmFsaWRh
dGVTdHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0
VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotICAgIGlm
ICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0gICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSAr
ICJdIjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUg
fHwgbmFtZSA9PSBpbmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9y
bUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICAKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICAKLSAgICBjb25zdCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLSAgICAK
LSAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOwotICAgIAotICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1f
Ym91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCkuYnVmZmVyQmlu
ZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0gICAgICAgICAgICB8fCAhc3RhdGUuYnVm
ZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgp
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxlZCk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJU
RVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FU
VFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0
dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhB
dHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJPZmZz
ZXQoaW5kZXgsIHBuYW1lKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihyZXN1
bHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmhpbnQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAgICBzd2l0
Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1B
UF9ISU5UOgotICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBP
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0
aXZlcykKLSAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7Ci19
Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQnVmZmVyKFdlYkdM
QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBpZiAoIWJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYm
ICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAi
Q29udGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsK
LSAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9j
dW1lbnQoKTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKLSAgICAgICAg
aWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBw
YWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JV
UkwoZG9jdW1lbnQudXJsKCkpOwotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5
IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQotICAg
ICAgICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEg
cmVhbCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKLSAgICAgICAgLy8gd2l0aCBub3JtYWwgb3Bl
cmF0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI5MTIyCi0gICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX2NvbnRleHRMb3N0IHx8IG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVT
VCkKLSAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4
dC0+aXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0g
ICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIGlmICghZnJhbWVidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewot
ICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIAotICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5v
YmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYg
KCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1
ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBp
ZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIAotICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0KCkp
OwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1RleHR1cmUo
V2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmICghdGV4dHVy
ZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
Y29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAg
IFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBm
cmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVy
dGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRl
ci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8o
dmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4
dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVj
dE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5r
U3RhdHVzKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0g
ICAgcHJvZ3JhbS0+aW5jcmVhc2VMaW5rQ291bnQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19G
TElQX1lfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhB
X1dFQkdMOgotICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBwYXJhbTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0Vf
Q09OVkVSU0lPTl9XRUJHTDoKLSAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNE
OjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
TkUpCi0gICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3RhdGljX2Nh
c3Q8R0MzRGVudW0+KHBhcmFtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVp
IiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dF
QkdMIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgaWYgKHBhcmFtID09IDEg
fHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKLSAgICAgICAgICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQpCi0gICAgICAg
ICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07Ci0gICAgICAgICAgICBlbHNlIC8vIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgotICAgICAgICAgICAgICAgIG1fdW5w
YWNrQWxpZ25tZW50ID0gcGFyYW07Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KHBuYW1lLCBwYXJhbSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwg
ImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxTdG9yZWki
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0
IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFj
dG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVhZFBp
eGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRHVlIHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVz
dHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8KLSAgICAvLyB0YWludCB0aGUgb3JpZ2lu
IHVzaW5nIHRoZSBXZWJHTCBBUEkuCi0gICAgQVNTRVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigp
KTsKLSAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgotICAgIGlmICghcGl4ZWxzKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVf
NV8xOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZh
bGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoZm9ybWF0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlw
ZSBub3QgVU5TSUdORURfQllURSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFZh
bGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0eXBlLgotICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5
QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vzcyhn
cmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZG
RVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRp
b24gb2YgUEFDS19BTElHTk1FTlQuCi0gICAgdW5zaWduZWQgdG90YWxCeXRlc1JlcXVpcmVkID0g
MDsKLSAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKLSAgICBpZiAoIW1faXNSb2J1c3RuZXNzRVhU
U3VwcG9ydGVkKSB7Ci0gICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRl
SW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdu
bWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOwotICAgICAgICBpZiAoZXJyb3Ig
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBkaW1lbnNpb25zIik7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0
aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgIkFy
cmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNpb25zIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotICAgIAotICAg
IHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVm
ZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIGlmIChtX2lz
Um9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
ZGF0YSk7Ci0gICAgfQotICAgIAotI2lmIE9TKERBUldJTikKLSAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGluZwotICAgICAgICBt
X2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhl
aWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7Ci0g
ICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1h
YyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZwotICAgIC8vIG9uIFFDIGlzIGZpeGVkLCBpLmUuLCB3
aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKLSAgICAvLyBzZXQgYWxwaGEgdG8g
MjU1IGluc3RlYWQgb2YgMC4KLSAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Nv
bnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKLSAgICAgICAgdW5zaWduZWQg
Y2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7Ci0g
ICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkpIHsKLSAgICAg
ICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgewotICAgICAg
ICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKLSAgICAgICAgICAgICAgICBwaXhlbHMgKz0gNDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpeGVscyArPSBwYWRkaW5nOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZW5kZXJidWZmZXJTdG9y
YWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgdGFy
Z2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVu
ZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVmZmVyU3RvcmFnZSIs
IHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgPT0g
RXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0IpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJy
ZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0
b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIG1f
cmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwot
ICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1ZSk7Ci0gICAgICAg
IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAg
ICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJ
TDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNp
emUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNW
YWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJu
YWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0
KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2Uo
R0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c2FtcGxl
Q292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWln
aHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFk
ZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9
IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5n
KCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47
Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3RyaW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNv
dXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5j
LCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5j
KCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdGVuY2lsRnVu
Y1JlZiA9IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICBtX3N0ZW5j
aWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKLSAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNl
LCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVuYykpCi0gICAgICAgIHJl
dHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0g
bWFzazsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNp
bEZ1bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9
IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFy
YXRlIiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2sp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsK
LSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVp
bnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBt
X3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZh
aWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zdGVuY2ls
T3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNE
ZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJh
dGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQuCi0gICAgZWMgPSAwOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdl
MkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodGV4KTsKLSAg
ICBBU1NFUlQoIWxldmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wg
aW1wbGVtZW50YXRpb24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRo
ZXJlZm9yZSB0cnVlLgotICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0
aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcwot
ICAgICAgICAvLyBjYW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJl
IGNsZWFyZWQgYnkgYmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKLSAgICAgICAgLy8gY2xl
YXIuCi0gICAgICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKQotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgYm9vbCBzdWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBtX3VucGFja0FsaWdubWVudCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2Nl
ZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRl
cm5hbGZvcm1hdCkpOwotICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgICAgIC8vIFRo
ZSB0ZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgICAgIHRleC0+bWFy
a0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1h
Z2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJj
ZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2Us
IHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2Nl
ZWRlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURh
dGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhh
T3AoKTsKLSAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmlt
YWdlUGl4ZWxEYXRhKCk7Ci0gICAgCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0g
ICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNl
RGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1h
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0g
ZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRh
KGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291
cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChtX3Vu
cGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1h
Z2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAg
ICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdO
TUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNW
YWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3Vy
Y2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQpCi17Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25UeXBlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBO
b3RUZXhTdWJJbWFnZTJEKSB7Ci0gICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6Omlz
TlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBu
b3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4
RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVU
ZXhGb3JtYXQKLSAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBp
cyBudWxsIG9yIG5vdC4KLSAgICAgICAgaWYgKHNvdXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZm
ZXJWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVu
Y3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1h
dChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBp
dCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCi0gICAg
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUt
PmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVu
c2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
ICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0
ZXh0dXJlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5j
RGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBp
eGVscywgTnVsbEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdl
MkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
MCwgMCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpIDogMDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAg
Ym9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91
bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxp
Z25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5w
YWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0g
dHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRh
dGEsIGVjKTsKLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1Yklt
YWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBp
eGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVl
ZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFs
d2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYg
ZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBu
byBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIW1f
dW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5
cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUs
IG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBl
Yyk7Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNr
QWxpZ25tZW50KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIEludFNpemUgc2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKLSAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBJbWFnZUJ1
ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAg
IGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9h
dFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBv
aW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5
SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJ
bWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVt
ZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1h
Z2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVy
LT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1
ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQo
KSwgMSk7Ci0gICAgCi0gICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdlMkQiLCBjYW52YXMsIGVj
KSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291
cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICAvLyBJZiBw
b3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVudCBkaXJlY3RseSB0byB0aGUgdGV4
dHVyZQotICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEgcmVhZC1iYWNrIHRvIHN5c3RlbSBt
ZW1vcnkuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBSR0JB
KS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgotICAgIC8vIEltYWdlQnVmZmVy
Ojpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRpb25zIGFyZSBmdWxseSBmdW5jdGlv
bmFsLgotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYg
dGV4dHVyZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkKLSAgICAg
ICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSkgewotICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIo
KTsKLSAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgq
bV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKLSAgICAgICAgICAgIHRleHR1
cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBj
YW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VE
YXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdl
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVBhc3NS
ZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpZGVvRnJhbWVUb0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9yZUNv
cHksIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9XaWR0
aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2Vu
ZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1ZikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwg
InRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVyZSBj
b3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgotICAgIHZpZGVvLT5wYWludEN1cnJlbnRGcmFt
ZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVybiBidWYtPmNv
cHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2
aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2Uy
RCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIs
IE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8v
IEdvIHRocm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3
aXRob3V0IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KLSAgICAvLyBP
dGhlcndpc2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KLSAgICAv
LyBGSVhNRTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hv
dWQgYmUgUkdCIG9yIFJHQkEsCi0gICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBh
bmQgbGV2ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KLSAg
ICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAg
ICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAm
JiAodGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKLSAgICAg
ICAgJiYgIWxldmVsKSB7Ci0gICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxh
dGZvcm1UZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0
eXBlLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Zs
aXBZKSkgewotICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBl
Yyk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAo
KGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYm
IHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1l
dGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0IHBhcmFtKQotewotICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJh
bSwgMCwgdHJ1ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQot
ewotICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRCYXNlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAg
ZWMgPSAwOwotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRh
dGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdl
dCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAg
QVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsK
LSAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZv
cm1hdCkpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygi
dGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJU
KCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZz
ZXQgKyB3aWR0aCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+
PSAoeW9mZnNldCArIGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJn
ZXQsIGxldmVsKSA9PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGlt
YWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUpOyAgCi0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVk
KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3Jt
YXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsK
LSAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4
ZWxEYXRhKCk7Ci0gICAgCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdl
LCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0
YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0
KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBp
eGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1
bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZz
ZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscy0+
YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAgYm9vbCBj
aGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tG
bGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YSA9
IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
LSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0g
ICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFj
a0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8
ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VJ
bWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxz
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5
cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVz
dGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBG
bGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgdHlw
ZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCks
IGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBh
Y2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJ
bWFnZTJEIiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0lt
YWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFn
ZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0g
ICAgCi0gICAgaWYgKCFpbWFnZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleFN1Yklt
YWdlMkQiLCBjYW52YXMsIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwg
bGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
UmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAg
ICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAg
ZWxzZQotICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAw
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVv
RWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRl
VGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0Vs
ZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRv
SW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7Ci0gICAg
aWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fY29udGV4dC0+
dW5pZm9ybTFmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYg
KChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxv
Y2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+
PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlk
IHRleHR1cmUgdW5pdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIDEpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl9DVUJFKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodi0+ZGF0YSgpW2ldID49IHN0
YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgewotICAgICAgICAgICAgICAg
IExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlslZF09JWQuIExvY2F0aW9uIHR5
cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwgdi0+ZGF0YSgpW2ldLCBsb2Nh
dGlvbi0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJl
IHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAxKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmICgoKEdDM0RpbnQqKXYpW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5p
dHMuc2l6ZSgpKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUg
dW5pdCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVu
aWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVu
dFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVu
dCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0
LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBs
b2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgsIHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZv
cm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8g
Miwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgc2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
bG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYi
LCBsb2NhdGlvbiwgdiwgMykpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0
YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBz
aXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwg
MykpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIs
IGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRp
b24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTRmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQs
IHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1f
Y3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3Ig
Y3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgNCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHQtPnVuaWZvcm00
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5z
cG9zZSwgdiwgNCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2
LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJp
eDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBz
aXplIC8gNCwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJp
eDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5n
dGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXpl
LCA5KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDksIHRyYW5zcG9zZSwgdik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2Nh
dGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAxNiwg
dHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1c2VQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHByb2dyYW0gPSAwOwotICAgIGlmIChwcm9n
cmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIs
ICJwcm9ncmFtIG5vdCB2YWxpZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICht
X2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKLSAgICAgICAgaWYgKG1fY3VycmVudFByb2dy
YW0pCi0gICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29u
dGV4dDNEKCkpOwotICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKLSAgICAgICAg
bV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0gICAgICAgIGlm
IChwcm9ncmFtKQotICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYi
LCBpbmRleCwgdiwgMSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYs
IHNpemUsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAg
ICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAw
LjBmLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBs
KCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIpCi17Ci0gICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjNmIiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIDMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNm
diIsIGluZGV4LCB2LCBzaXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxv
YXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIHZlcnRleEF0dHJpYmZJ
bXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2MCwgdjEsIHYyLCB2Myk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhB
dHRyaWI0ZnYiLCBpbmRleCwgdiwgNCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVu
dW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwg
c3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0
dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBi
b3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0
cmlkZQotICAgIHVuc2lnbmVkIHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYg
KCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAo
c3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBl
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVu
dCA9IHNpemUgKiB0eXBlU2l6ZTsKLSAgICAKLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNpemUsIHR5cGUs
IG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbV9i
b3VuZEFycmF5QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5k
ZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3Bv
cnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJj
b250ZXh0IGFscmVhZHkgbG9zdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Ci0gICAg
bV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOwotICAgIAotICAgIGlmIChtb2RlID09IFJlYWxMb3N0
Q29udGV4dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNv
bnRleHQgd2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAg
ICAgIC8vIGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3Ig
cGVybWlzc2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRl
cigpLmNsaWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAgfQotICAgIAotICAgIGRldGFj
aEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLSAgICAKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7
Ci0gICAgICAgIC8vIE1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGRvIG5vdCByZWZlciB0byBhbiBh
bHJlYWR5LWRlbGV0ZWQgdGV4dHVyZSBvciBmcmFtZWJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5kaW5nKDApOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhlcmUgaXMg
bm8gZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFu
ZAotICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0
IGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQg
aW1wbGVtZW50YXRpb24gaGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAgICAvLyBs
YXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdl
dEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUg
PT0gUmVhbExvc3RDb250ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25z
b2xlOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xP
U1RfV0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKLSAgICAK
LSAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBl
dmVudCBoYXMgYm90aCBiZWVuCi0gICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVo
YXZpb3IgcHJldmVudGVkLgotICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBmYWxzZTsKLSAgICAKLSAg
ICAvLyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQs
IHRvIGltcGxlbWVudAotICAgIC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFz
ay4KLSAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZVJlc3RvcmVDb250ZXh0
KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0
b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVD
b250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCi0g
ICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotUGxhdGZvcm1MYXll
ciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCog
b2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkU2hhcmVkT2JqZWN0KFdl
YkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEFTU0VSVCghaXNDb250ZXh0TG9z
dCgpKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRl
eHRPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2Jq
ZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2Jq
ZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7Ci0gICAgbV9jb250ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkK
LXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6ZSgpID4gMCkgewotICAgICAg
ICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dE9i
amVjdHMuYmVnaW4oKTsKLSAgICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKLSAgICB9Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRp
Y0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAg
fQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVh
blBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9XUklURU1BU0spIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygwLCAwKTsKLSAgICB9Ci0gICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7
MH07Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwotICAgIGJvb2wg
Ym9vbFZhbHVlWzRdOwotICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lpKQotICAgICAg
ICBib29sVmFsdWVbaWldID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsKLSAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgNCk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsK
LSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1l
LCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotfQotCi1XZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVt
IHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAg
ICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OwotICAgIG1f
Y29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0g
MDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFT
RURfTElORV9XSURUSF9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9S
QU5HRToKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVy
biBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotfQot
Ci1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9
OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcp
Ci17Ci0gICAgYm9vbCByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKLSAgICBXZWJHTFRleHR1cmU6
OlRleHR1cmVFeHRlbnNpb25GbGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1
cmU6OlRleHR1cmVFeHRlbnNpb25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJH
TFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29l
c1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25I
YWxmRmxvYXRMaW5lYXJFbmFibGVkIDogMCkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaWkg
PSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewotICAgICAgICBpZiAoKG1f
dGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50
ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAg
ICAgICAgICB8fCAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBt
X3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1Rl
eHR1cmUoZXh0ZW5zaW9ucykpKSB7Ci0gICAgICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0
dXJlVW5pdCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7
Ci0gICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0g
ZWxzZSBpZiAocmVzZXRBY3RpdmVVbml0KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKGlpKTsKLSAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4MkQ7Ci0gICAg
ICAgICAgICBXZWJHTFRleHR1cmUqIHRleEN1YmVNYXA7Ci0gICAgICAgICAgICBpZiAocHJlcGFy
ZVRvRHJhdykgewotICAgICAgICAgICAgICAgIFN0cmluZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJv
dW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6bnVtYmVyKGlpKQotICAgICAgICAgICAg
ICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0IG1heWJlIG5vbi1wb3dlci1vZi0yIGFu
ZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRlcmluZyBvciBpcyBub3QgJ3RleHR1cmUg
Y29tcGxldGUnLCIKLSAgICAgICAgICAgICAgICAgICAgKyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFs
Zi1mbG9hdCB0eXBlIHdpdGggbGluZWFyIGZpbHRlcmluZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZh
bnQgZmxvYXQvaGFsZi1mbG9hdCBsaW5lYXIgZXh0ZW5zaW9uIGVuYWJsZWQuIik7Ci0gICAgICAg
ICAgICAgICAgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICAgICAgdGV4MkQgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgp
OwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBtX2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRleDJEID0gbV90ZXh0
dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4
Q3ViZU1hcCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
dGV4MkQpKTsKLSAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVN
YXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5l
ZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmpl
Y3RPclplcm8odGV4Q3ViZU1hcCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXNldEFj
dGl2ZVVuaXQpCi0gICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1
cmVVbml0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHsw
LCAwLCAwLCAyNTV9OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
bV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAg
IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUs
IGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVt
IHRleEludGVybmFsRm9ybWF0LCBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAgICB1
bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQo
dGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0dXJu
IChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKLXsKLSAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAg
ICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7
Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5hbHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBOwotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotfQotCi1p
bnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkK
LXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9y
QnVmZmVyV2lkdGgoKTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNp
emUoKS53aWR0aCgpOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdp
bmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+
Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJl
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9y
Q3ViZU1hcCkKLXsKLSAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSBudWxscHRyOwotICAgIHN3
aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoK
LSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRl
eHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAo
IXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0K
LSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRl
eHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgaWYgKHVzZVNpeEVudW1z
Rm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4
dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFw
QmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICB9Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1
cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgbWF4V2ViR0xMb2Nh
dGlvbkxlbmd0aCA9IDI1NjsKLSAgICBpZiAoc3RyaW5nLmxlbmd0aCgpID4gbWF4V2ViR0xMb2Nh
dGlvbkxlbmd0aCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlQ2hhcmFjdGVyKHN0cmluZ1tpXSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5k
VHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5U
OgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VYVDoKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6U1JHQl9BTFBIQV9FWFQ6Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgaWYgKChmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCX0VYVCB8fCBmb3JtYXQgPT0gRXh0
ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVCkKLSAgICAgICAgICAgICYmIG1fZXh0c1JHQikKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoICh0eXBl
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAgICBpZiAobV9vZXNUZXh0dXJlRmxv
YXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVRfT0VTOgotICAgICAgICBpZiAobV9vZXNUZXh0dXJlSGFsZkZsb2F0KQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9JTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0
Xzg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAg
IGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBj
b21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZM
T0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhB
TEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBm
b3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICBpZiAodHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAotICAgICAgICAgICAgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQotICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRo
VGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRIX0NP
TVBPTkVOVCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5U
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfQ09N
UE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
bXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJl
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfU1RFTkNJTCBu
b3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRIX1NURU5DSUwg
Zm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGxldmVsID4gMCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQotewotICAg
IGlmIChsZXZlbCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKGxldmVsID49IG1fbWF4
VGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdl
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8g
VGhpcyBmdW5jdGlvbiBvbmx5IGNoZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJu
IHRydWUgYW5kIGRvbid0Ci0gICAgLy8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBp
cyBpbGxlZ2FsLgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCi17Ci0gICAgLy8gV2UgYWJzb2x1dGVseSBoYXZl
IHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24uCi0gICAgLy8gVGhl
IHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9k
dWNlCi0gICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28g
aXQgbXVzdCBiZSBsZWdhbC4KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUo
ZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2
ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIAotICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBvdygyLjAsIG1fbWF4
VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmICh3aWR0aCA+IG1h
eFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZTJEICYmIHdpZHRoICE9
IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhlaWdodCBmb3IgY3Vi
ZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAv
LyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ugd2lkdGggPT0gaGVp
Z2h0LgotICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJlIGNoZWNrZWQgd2hl
biBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgotICAgICAgICBpZiAod2lk
dGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lk
dGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIAotICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlm
ICghcGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1
bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVu
Y3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfQllURSBidXQgQXJyYXlCdWZmZXJW
aWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRf
NF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVf
NV8xOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5
QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgp
ICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBG
TE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAot
ICAgICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24sIEFycmF5QnVmZmVyVmlldyBzaG91
bGQgYmUgbnVsbCB3aGVuCi0gICAgICAgIC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgZW5h
YmxlZC4KLSAgICAgICAgaWYgKHBpeGVscykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0
eXBlIEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IE5VTEwiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgCi0gICAg
dW5zaWduZWQgdG90YWxCeXRlc1JlcXVpcmVkOwotICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250
ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICBpZiAoZXJy
b3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZGltZW5zaW9ucyIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5n
dGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkgewotICAgICAgICAgICAgZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1
aXJlZCwgMCk7Ci0gICAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxC
eXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZl
clZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0aCBVTlBBQ0tfQUxJR05NRU5UID4g
MSIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3Vn
aCBmb3IgcmVxdWVzdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29t
cHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgcmV0dXJuIG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCi17Ci0gICAg
aWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIGJ5dGVzUmVxdWlyZWQgPSAwOwotICAg
IAotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FU
Q19SR0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsK
LSAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBr
QmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAgICAgIGludCBudW1CbG9ja3NEb3du
ID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVpZ2h0OwotICAgICAgICBi
eXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1Np
emU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAgewot
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2OwotICAgICAgICBjb25zdCBpbnQga0Js
b2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAg
ICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxv
Y2tXaWR0aDsKLSAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVp
Z2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9j
a3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwotICAgICAgICBjb25zdCBpbnQga0Js
b2NrSGVpZ2h0ID0gODsKLSAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwg
a0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogNCArIDcpIC8g
a0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAg
ICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lk
dGggPSAxNjsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDg7Ci0gICAgICAgIGJ5
dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhl
aWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3Jt
YXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBpZiAocGl4ZWxz
LT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGVu
Z3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29ycmVjdCBmb3IgZGltZW5zaW9ucyIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleERp
bWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9y
bWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja1dp
ZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAg
ICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21heFRleHR1cmVT
aXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAgICAgIGNvbnN0IEdDM0RzaXplaSBt
YXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7Ci0gICAgICAg
IGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2ZWwgJiYgd2lk
dGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0gbWF4Q29tcHJl
c3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2ZWwgJiYgaGVp
Z2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0ICUga0Jsb2Nr
SGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGlm
ICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAg
ICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KLSAgICAgICAgaWYg
KCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwi
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1i
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRp
bWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRl
eHR1cmUqIHRleCkKLXsKLSAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDApIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Ci0gICAgICAgIGNvbnN0IGludCBr
QmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAg
ICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxvY2tIZWln
aHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3Qg
bXVsdGlwbGUgb2YgNCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwp
Ci0gICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0
LCBsZXZlbCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKLSAgICAgICAgaWYg
KHhvZmZzZXQgfHwgeW9mZnNldCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0
IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2
ZWwpCi0gICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZl
bCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4
aXN0aW5nIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1NU
UklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSkKLXsKLSAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0
ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNr
ICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250
IGFuZCBiYWNrIHN0ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBmdW5jKQotewotICAgIHN3aXRjaCAoZnVuYykgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdSRUFURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PVEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCBmdW5jdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQ7Ci0gICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKG1lc3NhZ2UpOwotICAgIAotICAgIGlmICgh
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29u
c29sZSgiV2ViR0w6IHRvbyBtYW55IGVycm9ycywgbm8gbW9yZSBlcnJvcnMgd2lsbCBiZSByZXBv
cnRlZCB0byB0aGUgY29uc29sZSBmb3IgdGhpcyBjb250ZXh0LiIpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNh
bnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRl
cmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dl
YmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgPiBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQgPCBzdGF0
aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwICsg
Z2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZVTkNfQUREOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpNSU5fRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhf
RVhUOgotICAgICAgICBpZiAoKG1vZGUgPT0gRXh0ZW5zaW9uczNEOjpNSU5fRVhUIHx8IG1vZGUg
PT0gRXh0ZW5zaW9uczNEOjpNQVhfRVhUKSAmJiAhbV9leHRCbGVuZE1pbk1heCkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgbW9kZSIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNy
YywgR0MzRGVudW0gZHN0KQotewotICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IpCi0gICAgICAgICYmIChkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNU
QU5UX0FMUEhBIHx8IGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBKSkKLSAgICAgICAgfHwgKChkc3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQotICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBI
QSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gY2FwKQotewotICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q1VMTF9GQUNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGNhcGFiaWxp
dHkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMy
QXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFt
ZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNp
emUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIHZvaWQqIHYsIEdDM0Rz
aXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIHJldHVybiB2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNl
LCB2LCBzaXplLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXpl
KQotewotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwg
di0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVp
cmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBp
ZiAodHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1p
blNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSAw
OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgIGJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUjoKLSAgICAgICAgYnVmZmVyID0g
bV9ib3VuZEFycmF5QnVmZmVyLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgaWYgKCFidWZmZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBi
dWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHN3aXRjaCAodXNh
Z2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVFJFQU1fRFJBVzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpEWU5BTUlDX0RSQVc6Ci0gICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgfQotICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdXNhZ2UiKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51
cmwoKTsKLSAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKLSAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFz
IHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihj
YW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAh
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHZpZGVvIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4odmlk
ZW8pKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBH
QzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0g
bV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0
aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSAzOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwg
djAsIHYxLCB2Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAg
ICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFs
dWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmli
VmFsdWUudmFsdWVbMF0gPSB2MDsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOwotICAg
IGF0dHJpYlZhbHVlLnZhbHVlWzJdID0gdjI7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2
MzsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdklt
cGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5
KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmVydGV4QXR0cmli
ZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVj
dGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0
cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoc2l6ZSA8IGV4cGVjdGVkU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBzaXplIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdl
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGlu
ZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFu
dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjJmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSAzOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHYpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliNGZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4
QXR0cmliVmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLmluaXRWYWx1ZSgpOwotICAgIGZv
ciAoaW50IGlpID0gMDsgaWkgPCBleHBlY3RlZFNpemU7ICsraWkpCi0gICAgICAgIGF0dHJpYlZh
bHVlLnZhbHVlW2lpXSA9IHZbaWldOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKLXsKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIAotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9
IGNyZWF0ZUJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAg
ICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOwotICAgIHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0g
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIs
IDApOwotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7Ci0gICAgbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMF0gPSAwLjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsK
LSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBmOwotICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVm
aWxsID0gZmFsc2U7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpbXVsYXRlVmVydGV4QXR0cmliMChH
QzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmliVmFsdWUmIGF0
dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1fY3VycmVudFBy
b2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVydGV4QXR0cmli
MCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0gICAgaWYgKHVz
aW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRy
dWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIwKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYgIW1fdmVydGV4
QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3ZlcnRleEF0
dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3Qo
KSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICog
NCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4
QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9
IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAgICAgJiYgKG1f
Zm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KLSAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgICAgIGF1dG8gYnVmZmVyRGF0YSA9IHN0
ZDo6bWFrZV91bmlxdWU8R0MzRGZsb2F0W10+KChudW1WZXJ0ZXggKyAxKSAqIDQpOwotICAgICAg
ICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsK
LSAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsw
XTsKLSAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDFdID0gYXR0cmliVmFsdWUu
dmFsdWVbMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzJdOwotICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10g
PSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVbMF07Ci0gICAgICAg
ICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFd
OwotICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSBhdHRyaWJWYWx1
ZS52YWx1ZVsyXTsKLSAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0g
YXR0cmliVmFsdWUudmFsdWVbM107Ci0gICAgICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJl
ZmlsbCA9IGZhbHNlOwotICAgICAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIGJ1ZmZlckRhdGFTaXplLCBidWZmZXJEYXRh
LmdldCgpKTsKLSAgICAgICAgfQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigw
LCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZmZXJCaW5k
aW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRl
LmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRl
Lm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1f
Ym91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCgpCi17Ci0gICAgUmVmUHRyPFdlYkdMQ29u
dGV4dEV2ZW50PiBldmVudCA9IFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGxvc3RFdmVudCwgZmFsc2UsIHRydWUsICIiKTsKLSAgICBjYW52YXMoKS0+
ZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgbV9yZXN0b3JlQWxsb3dlZCA9IGV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCk7Ci0gICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29u
dGV4dCAmJiBtX3Jlc3RvcmVBbGxvd2VkKQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9u
ZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0
b3JlQ29udGV4dCgpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dExvc3QpOwotICAgIGlmICghbV9j
b250ZXh0TG9zdCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIFRoZSByZW5kZXJpbmcg
Y29udGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRo
ZQotICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgot
ICAgIC8vCi0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1
cCBmb3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2Ug
ZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAg
IC8vIHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYg
KCFtX3Jlc3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaW50IGNvbnRl
eHRMb3N0UmVhc29uID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKTsKLSAgICAKLSAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVhc29uKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6Ci0gICAgICAgIC8vIFRoZSBHcmFw
aGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVsbHkKLSAgICAgICAgLy8g
c3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3MgeWV0LiBBbHRlcm5hdGl2ZWx5LCB0
aGUKLSAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4dGVuc2lvbiBtaWdodCBoYXZlIGJl
ZW4gdXNlZCB0byBmb3JjZQotICAgICAgICAvLyBhIGxvc3QgY29udGV4dC4KLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9DT05URVhUX1JFU0VUX0FSQjoKLSAg
ICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCBpZiB0aGlzIGNv
bnRleHQgd2FzCi0gICAgICAgIC8vIGd1aWx0eSBvZiBjYXVzaW5nIHRoZSBncmFwaGljcyByZXNl
dC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50
IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldDsgbm90IHJlc3Rv
cmluZyB0aGUgY29udGV4dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgotICAgICAgICAvLyBBbHdheXMgYWxsb3cg
dGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgotICAgICAgICAvLyBXYXJuLiBJ
ZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wKLSAgICAgICAg
Ly8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2Fy
ZCB0bwotICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5IHdhbnQgdG8g
Y29udGludWUgcnVubmluZwotICAgICAgICAvLyB0aGUgY29udGVudC4gT25seSBpZiB0aGV5IHNh
eSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKLSAgICAgICAgLy8gYXR0ZW1wdGluZyB0byByZXN0b3Jl
IHRoZSBjb250ZXh0LgotICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6IFdl
YkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNh
cmQgdG8gcmVzZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEZyYW1lKiBm
cmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmICghZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmFs
bG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAo
IXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBTY3JvbGxWaWV3KiByb290ID0gdmlldy0+cm9v
dCgpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cgPSByb290LT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2luZG93KQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0g
ICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFs
TG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vj
b25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAv
LyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVw
b3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5n
IGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICAvLyBDb25zdHJ1
Y3QgYSBuZXcgZHJhd2luZyBidWZmZXIgd2l0aCB0aGUgbmV3IEdyYXBoaWNzQ29udGV4dDNELgot
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5kaXNj
YXJkUmVzb3VyY2VzKCk7Ci0gICAgICAgIERyYXdpbmdCdWZmZXI6OlByZXNlcnZlRHJhd2luZ0J1
ZmZlciBwcmVzZXJ2ZSA9IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIgPyBEcmF3
aW5nQnVmZmVyOjpQcmVzZXJ2ZSA6IERyYXdpbmdCdWZmZXI6OkRpc2NhcmQ7Ci0gICAgICAgIERy
YXdpbmdCdWZmZXI6OkFscGhhUmVxdWlyZW1lbnQgYWxwaGEgPSBtX2F0dHJpYnV0ZXMuYWxwaGEg
PyBEcmF3aW5nQnVmZmVyOjpBbHBoYSA6IERyYXdpbmdCdWZmZXI6Ok9wYXF1ZTsKLSAgICAgICAg
bV9kcmF3aW5nQnVmZmVyID0gRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCksIG1f
ZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLCBwcmVzZXJ2ZSwgYWxwaGEpOwotICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0gICAgCi0gICAgbV9jb250ZXh0ID0gY29udGV4dDsK
LSAgICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgc2V0dXBGbGFncygpOwotICAgIGluaXRp
YWxpemVOZXdDb250ZXh0KCk7Ci0gICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwg
ZmFsc2UsIHRydWUsICIiKSk7Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QKLXsKLSAgICBpZiAodGV4
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJD
YWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpCi0gICAgOiBtX2J1ZmZlcnMo
c3RkOjptYWtlX3VuaXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+W10+KGNhcGFjaXR5
KSkKLSAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCi17Ci19Ci0KLUltYWdlQnVmZmVyKiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihj
b25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBt
X2NhcGFjaXR5OyArK2kpIHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tp
XS5nZXQoKTsKLSAgICAgICAgaWYgKCFidWYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
aWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBzaXplKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0gICAgfQotICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tpXSA9
IFdURjo6bW92ZSh0ZW1wKTsKLSAgICAKLSAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJz
W2ldLmdldCgpOwotICAgIGJ1YmJsZVRvRnJvbnQoaSk7Ci0gICAgcmV0dXJuIGJ1ZjsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJi
bGVUb0Zyb250KGludCBpZHgpCi17Ci0gICAgZm9yIChpbnQgaSA9IGlkeDsgaSA+IDA7IC0taSkK
LSAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwotfQotCi1uYW1lc3Bh
Y2UgewotICAgIAotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAg
ICAgcmV0dXJuICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAg
ICAgICAgICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09O
VEVYVF9MT1NUX1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQ
cmVmZXJlbmNlIGRpc3BsYXkpCi17Ci0gICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdHIg
PSBTdHJpbmcoIldlYkdMOiAiKSArIEdldEVycm9yU3RyaW5nKGVycm9yKSArICAiOiAiICsgU3Ry
aW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAgICAgICAg
cHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoZXJyb3IpOwotfQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6cHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBkZXNjcmlwdGlvbikKLXsKLSAgICBpZiAobV9zeW50aGVzaXplZEVycm9yc1RvQ29u
c29sZSkgewotICAgICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBTdHJpbmco
ZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgICBwcmlu
dEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6YXBwbHlTdGVuY2lsVGVzdCgpCi17Ci0gICAgYm9vbCBoYXZlU3RlbmNpbEJ1
ZmZlciA9IGZhbHNlOwotICAgIAotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1
ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRl
cz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVu
Y2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgpOwotICAgIH0KLSAgICBlbmFibGVPckRp
c2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwKLSAgICAgICAgICAgICAgICAg
ICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxp
dHksIGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFibGUpCi0gICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKGNhcGFiaWxpdHkpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxl
KGNhcGFiaWxpdHkpOwotfQotCi1JbnRTaXplIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNs
YW1wZWRDYW52YXNTaXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+
d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAotICAgICAgICAgICAgICAgICAgIGNs
YW1wKGNhbnZhcygpLT5oZWlnaHQoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKLX0KLQot
R0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhEcmF3QnVmZmVycygpCi17
Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihF
eHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7Ci0g
ICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xv
ckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVxdWlyZXMgTUFYX0NP
TE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0dXJuIHN0ZDo6bWlu
KG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19Ci0KLUdDM0RpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cygpCi17Ci0g
ICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
ICghbV9tYXhDb2xvckF0dGFjaG1lbnRzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2
KEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVCwgJm1fbWF4Q29sb3JBdHRh
Y2htZW50cyk7Ci0gICAgcmV0dXJuIG1fbWF4Q29sb3JBdHRhY2htZW50czsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSBidWYp
Ci17Ci0gICAgbV9iYWNrRHJhd0J1ZmZlciA9IGJ1ZjsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKQotewotICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcuZ2V0KCksIGVjKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdXBw
b3J0c0RyYXdCdWZmZXJzKCkKLXsKLSAgICBpZiAoIW1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQpIHsKLSAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hl
Y2tlZCA9IHRydWU7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBXZWJHTERyYXdC
dWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7Ci0gICAgfQotICAgIHJldHVybiBtX2RyYXdCdWZmZXJz
U3VwcG9ydGVkOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdBcnJh
eXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAg
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAg
IGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwgZmly
c3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgY2xlYXJJ
ZkNvbXBvc2l0ZWQoKTsKLSAgICAKLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBm
YWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmli
MFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCB0cnVlKTsKLSAgICAKLSAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOwotICAg
IAotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQp
Ci0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFu
Z2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW1lbnRz
SW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwg
bG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoIXByaW1j
b3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgaWYgKCF2YWxp
ZGF0ZURyYXdFbGVtZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9kZSwgY291bnQsIHR5
cGUsIG9mZnNldCwgbnVtRWxlbWVudHMsIHByaW1jb3VudCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIAotICAgIGJvb2wgdmVydGV4QXR0cmli
MFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAg
ICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVt
ZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0
dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkp
Ci0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
IiwgdHJ1ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHNJbnN0YW5jZWQobW9k
ZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIHByaW1jb3Vu
dCk7Ci0gICAgCi0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRp
b24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOwotICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJE
aXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIAotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2aXNv
cihpbmRleCwgZGl2aXNvcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29yKGlu
ZGV4LCBkaXZpc29yKTsKLX0KLQotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MGE0ZDE2ZDczNjMzODA1MWFhNDBmYTM4MjhjNjQ5YjcwMGZhYzk1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDgx
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZV9oCi0jZGVmaW5lIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2VfaAotCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKLSNpbmNsdWRl
IDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsKLWNsYXNz
IEVYVEJsZW5kTWluTWF4OwotY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotY2xh
c3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKLWNsYXNzIEVYVHNSR0I7Ci1jbGFzcyBFWFRGcmFnRGVw
dGg7Ci1jbGFzcyBIVE1MSW1hZ2VFbGVtZW50OwotY2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNs
YXNzIEltYWdlQnVmZmVyOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50U2l6ZTsKLWNsYXNz
IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7Ci1jbGFzcyBPRVNUZXh0dXJlRmxvYXQ7Ci1jbGFzcyBP
RVNUZXh0dXJlRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0OwotY2xhc3Mg
T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKLWNsYXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0Owot
Y2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKLWNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKLWNsYXNz
IFdlYkdMQnVmZmVyOwotY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTENvbnRl
eHRPYmplY3Q7Ci1jbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOwotY2xhc3MgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7
Ci1jbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOwotY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mbzsKLWNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOwotY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7
Ci1jbGFzcyBXZWJHTERyYXdCdWZmZXJzOwotY2xhc3MgV2ViR0xFeHRlbnNpb247Ci1jbGFzcyBX
ZWJHTEZyYW1lYnVmZmVyOwotY2xhc3MgV2ViR0xMb3NlQ29udGV4dDsKLWNsYXNzIFdlYkdMT2Jq
ZWN0OwotY2xhc3MgV2ViR0xQcm9ncmFtOwotY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7Ci1jbGFz
cyBXZWJHTFNoYWRlcjsKLWNsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OwotY2xhc3MgV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQ7Ci1jbGFzcyBXZWJHTFRleHR1cmU7Ci1jbGFzcyBXZWJHTFVuaWZv
cm1Mb2NhdGlvbjsKLWNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7Ci0KLXR5cGVkZWYg
aW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgOiBw
dWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlPiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiwg
Y29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
OwotCi0jaWYgUExBVEZPUk0oV0lOKQotLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAz
ZCBjYW52YXMgb24gV2luZG93cy4KLXZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbHNlCi12aXJ0dWFsIGJvb2wgaXNBY2NlbGVy
YXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNlbmRpZgotCi1pbnQgZHJh
d2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci1pbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0
OwotCi12b2lkIGFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYp
Owotdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRp
b25Db2RlJik7Ci12b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBHQzNEdWlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIGJpbmRC
dWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLXZv
aWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4
Y2VwdGlvbkNvZGUmKTsKLXZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdl
YkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCBiaW5kVGV4dHVyZShHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgYmxlbmRD
b2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNE
ZmxvYXQgYWxwaGEpOwotdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpOwotdm9pZCBi
bGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhh
KTsKLXZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwot
dm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwg
R0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKTsKLQotdm9pZCBidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJik7Ci12b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciog
ZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgYnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmKTsKLXZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIGJ1
ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZl
clZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7
Ci12b2lkIGNsZWFyQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKLXZvaWQgY2xlYXJEZXB0aChHQzNEZmxvYXQpOwot
dm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7Ci12b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiBy
ZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBo
YSk7Ci12b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0K
LXZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhKTsKLXZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7Ci0KLXZvaWQgY29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7Ci1QYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci1QYXNzUmVmUHRyPFdl
YkdMUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZl
cj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVT
aGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotUGFzc1JlZlB0cjxXZWJHTFRl
eHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2RlKTsK
LQotdm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLXZvaWQgZGVsZXRlRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotdm9pZCBkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSop
Owotdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLXZvaWQgZGVs
ZXRlU2hhZGVyKFdlYkdMU2hhZGVyKik7Ci12b2lkIGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJl
Kik7Ci0KLXZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKLXZvaWQgZGVwdGhNYXNrKEdDM0Rib29s
ZWFuKTsKLXZvaWQgZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKTsK
LXZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOwotdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci12b2lkIGRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCBkcmF3QXJy
YXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0
aW9uQ29kZSYpOwotdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNv
dW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0K
LXZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7Ci12b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIGZpbmlzaCgpOwotdm9pZCBm
bHVzaCgpOwotdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBX
ZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIGZyb250
RmFjZShHQzNEZW51bSBtb2RlKTsKLXZvaWQgZ2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0
KTsKLQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihXZWJHTFBy
b2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotUGFzc1JlZlB0cjxXZWJH
TEFjdGl2ZUluZm8+IGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLWJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3Jh
bSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLUdDM0Rp
bnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
LVdlYkdMR2V0SW5mbyBnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1
dGVzPiBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotR0MzRGVudW0gZ2V0RXJyb3IoKTsKLVdlYkdM
RXh0ZW5zaW9uKiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKLVdlYkdMR2V0SW5m
byBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotV2ViR0xH
ZXRJbmZvIGdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotV2Vi
R0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKLVN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qLCBFeGNlcHRpb25Db2RlJik7Ci1XZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLVdl
YkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwotU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIq
LCBFeGNlcHRpb25Db2RlJik7Ci1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0
PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0g
cHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotU3RyaW5nIGdldFNoYWRlclNvdXJjZShX
ZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLVZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRl
ZEV4dGVuc2lvbnMoKTsKLVdlYkdMR2V0SW5mbyBnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotV2ViR0xHZXRJbmZvIGdldFVu
aWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRp
b25Db2RlJik7Ci1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9j
YXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotV2Vi
R0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLWxvbmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVp
bnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKLQotdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gbW9kZSk7Ci1HQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotYm9v
bCBpc0NvbnRleHRMb3N0KCkgY29uc3Q7Ci1HQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKTsKLUdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotR0Mz
RGJvb2xlYW4gaXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwotR0MzRGJvb2xlYW4gaXNSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLUdDM0Rib29sZWFuIGlzU2hhZGVyKFdlYkdMU2hh
ZGVyKik7Ci1HQzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7Ci0KLXZvaWQgbGlu
ZVdpZHRoKEdDM0RmbG9hdCk7Ci12b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2Vw
dGlvbkNvZGUmKTsKLXZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFy
YW0pOwotdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0
cyk7Ci12b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJh
eUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCByZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKLXZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Owotdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVy
dCk7Ci12b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCk7Ci12b2lkIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KTsKLXZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQpOwotdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0g
ZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLXZvaWQgc3RlbmNpbE9wU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0Rl
bnVtIHpwYXNzKTsKLQotdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2Vw
dGlvbkNvZGUmKTsKLXZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFz
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIHRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotdm9pZCB0ZXhQYXJh
bWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7
Ci12b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCBwYXJhbSk7Ci0KLXZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4
Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0
aW9uQ29kZSYpOwotdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotdm9pZCB1
bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci12b2lk
IHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm0xaShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0aW9u
Q29kZSYpOwotdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3JtMWl2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25D
b2RlJik7Ci12b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNp
emVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNv
ZGUmKTsKLXZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybTJpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1
bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3JtM2koY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
Ci12b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3Jt
NGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYpOwotdm9p
ZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywg
RXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlm
b3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybU1hdHJpeDJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB1bmlmb3JtTWF0
cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNl
cHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHVuaWZvcm1NYXRyaXg0ZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLXZvaWQgdW5pZm9ybU1h
dHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFu
IHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsK
LXZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLQot
dm9pZCB2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLXZv
aWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0Mz
RHNpemVpIHNpemUpOwotdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5KTsKLXZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci12b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLXZvaWQgdmVydGV4QXR0
cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHopOwotdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSog
dmFsdWVzKTsKLXZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotdm9pZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcp
Owotdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFs
dWVzKTsKLXZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcywgR0MzRHNpemVpIHNpemUpOwotdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50
IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6
ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBsb25n
IG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi12b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotCi0vLyBXRUJLSVRf
bG9zZV9jb250ZXh0IHN1cHBvcnQKLWVudW0gTG9zdENvbnRleHRNb2RlIHsKLSAgICAvLyBMb3N0
IGNvbnRleHQgb2NjdXJyZWQgYXQgdGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4KLSAgICBSZWFs
TG9zdENvbnRleHQsCi0gICAgCi0gICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJ
VF9sb3NlX2NvbnRleHQuCi0gICAgU3ludGhldGljTG9zdENvbnRleHQKLX07Ci12b2lkIGZvcmNl
TG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLXZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgp
Owotdm9pZCBsb3NlQ29udGV4dEltcGwoTG9zdENvbnRleHRNb2RlKTsKLQotR3JhcGhpY3NDb250
ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9Ci1XZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0R3JvdXAuZ2V0KCk7IH0KLXZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IG92ZXJyaWRlOwotCi12b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLQotdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci12aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKSBvdmVycmlkZTsKLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi12b2lkIHJlbW92ZVNoYXJlZE9i
amVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotdm9pZCByZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOwotCi11bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhWZXJ0ZXhBdHRyaWJzOyB9Ci0KLS8vIEFOR0xFX2luc3RhbmNlZF9hcnJh
eXMgZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KLXZvaWQgZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291
bnQpOwotdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKLXZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQg
ZGl2aXNvcik7Ci0KLXByb3RlY3RlZDoKLVdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENh
bnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci1XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLQotcHJpdmF0ZToKLWZy
aWVuZCBjbGFzcyBXZWJHTERyYXdCdWZmZXJzOwotZnJpZW5kIGNsYXNzIFdlYkdMRnJhbWVidWZm
ZXI7Ci1mcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci1mcmllbmQgY2xhc3MgT0VTVmVydGV4QXJy
YXlPYmplY3Q7Ci1mcmllbmQgY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7Ci1mcmllbmQgY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7Ci1mcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci1m
cmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci1m
cmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotdm9pZCBpbml0aWFsaXpl
TmV3Q29udGV4dCgpOwotdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLS8vIEFjdGl2ZURPTU9iamVjdAot
dmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOwotdmlydHVh
bCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLXZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXZWJHTFJlbmRlcmluZ0NvbnRleHQi
OyB9Ci0KLXZvaWQgYWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci12b2lkIGFk
ZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Ci12b2lkIGRldGFjaEFuZFJlbW92
ZUFsbE9iamVjdHMoKTsKLQotdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLXZvaWQg
bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLS8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24g
dG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KLWJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotLy8gUXVlcnkgaWYgdGhlIEdM
IGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3RyaWN0LgotYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgp
IHsgcmV0dXJuIG1faXNHTEVTMk5QT1RTdHJpY3Q7IH0KLS8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBs
ZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMgYnVmZmVyIGFjY2Vz
c2VzLgotYm9vbCBpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1
cm4gbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9Ci0vLyBRdWVyeSBp
ZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVy
cyB0byAwLgotYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7
IH0KLS8vIFF1ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KLWJvb2wg
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9y
dGVkOyB9Ci0KLS8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdM
IGRhdGEgdHlwZXMKLS8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgotdW5zaWduZWQgc2l6
ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSk7Ci0KLS8vIEJhc2ljIHZhbGlkYXRpb24gb2YgY291bnQg
YW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50cyBpbiBlbGVtZW50IGFycmF5IGJ1
ZmZlcgotYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0KLS8vIENvbnNlcnZhdGl2ZSBidXQgcXVp
Y2sgaW5kZXggdmFsaWRhdGlvbgotYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUo
R0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOwotCi0vLyBQcmVj
aXNlIGJ1dCBzbG93IGluZGV4IHZhbGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2
ZSBjaGVja3MgZmFpbAotYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVt
ZW50c1JlcXVpcmVkKTsKLWJvb2wgdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVs
ZW1lbnRDb3VudCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQgPSAwKTsKLQotYm9vbCB2YWxpZGF0
ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwotCi1ib29sIHZhbGlkYXRl
RHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0Rp
bnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci1ib29sIHZh
bGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNp
Z25lZCYgbnVtRWxlbWVudHMsIEdDM0RzaXplaSBwcmltY291bnQpOwotCi0vLyBBZGRzIGEgY29t
cHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4KLXZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQo
R0MzRGVudW0pOwotCi1QYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdl
KiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0jaWYg
RU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxJbWFnZT4gdmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZp
ZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgot
Ci1SZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLVJlZlB0cjxXZWJHTENvbnRl
eHRHcm91cD4gbV9jb250ZXh0R3JvdXA7Ci0KLS8vIE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVu
ZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5zdGVhZCBvZiBkaXJlY3RseQotLy8gdG8gdGhl
IGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KLVJlZlB0cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdp
bmdCdWZmZXI7Ci0KLS8vIERpc3BhdGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBp
cyBkZXRlcm1pbmVkIHRoYXQgb25lIGlzIG5lZWRlZC4KLS8vIFRoaXMgaXMgdXNlZCBib3RoIGZv
ciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MK
LS8vIGxpa2VseSB0aGF0IHRoZXJlJ3Mgbm8gSmF2YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0
aGF0IG1pZ2h0IGJlIGRlcGVuZGVudAotLy8gb24gaG93IGV4YWN0bHkgdGhlIHBsYXRmb3JtIGRp
c2NvdmVycyB0aGF0IHRoZSBjb250ZXh0IHdhcyBsb3N0LiBGb3IgYmV0dGVyCi0vLyBwb3J0YWJp
bGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KLVRpbWVyIG1f
ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXI7Ci1ib29sIG1fcmVzdG9yZUFsbG93ZWQ7Ci1U
aW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotYm9vbCBtX25lZWRzVXBkYXRlOwotYm9vbCBtX21hcmtl
ZENhbnZhc0RpcnR5OwotSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmpl
Y3RzOwotCi0vLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJv
dXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9B
UlJBWV9CVUZGRVIKLVJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV9ib3VuZEFycmF5QnVmZmVyOwotCi1S
ZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmpl
Y3Q7Ci1SZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0Owotdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi17Ci0gICAgaWYgKGFycmF5T2JqZWN0
KQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBhcnJheU9iamVjdDsKLSAgICBl
bHNlCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVsdFZlcnRleEFy
cmF5T2JqZWN0OwotfQotCi1jbGFzcyBWZXJ0ZXhBdHRyaWJWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAg
VmVydGV4QXR0cmliVmFsdWUoKQotICAgIHsKLSAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHZhbHVlWzBdID0gMC4w
ZjsKLSAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7Ci0g
ICAgICAgIHZhbHVlWzNdID0gMS4wZjsKLSAgICB9Ci0gICAgCi0gICAgR0MzRGZsb2F0IHZhbHVl
WzRdOwotfTsKLVZlY3RvcjxWZXJ0ZXhBdHRyaWJWYWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsK
LXVuc2lnbmVkIG1fbWF4VmVydGV4QXR0cmliczsKLVJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyOwotbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOwotR0MzRGZs
b2F0IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzRdOwotYm9vbCBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbDsKLWJvb2wgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKLQotUmVmUHRyPFdl
YkdMUHJvZ3JhbT4gbV9jdXJyZW50UHJvZ3JhbTsKLVJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBt
X2ZyYW1lYnVmZmVyQmluZGluZzsKLVJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbV9yZW5kZXJi
dWZmZXJCaW5kaW5nOwotc3RydWN0IFRleHR1cmVVbml0U3RhdGUgewotICAgIFJlZlB0cjxXZWJH
TFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4
dHVyZUN1YmVNYXBCaW5kaW5nOwotfTsKLVZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1
cmVVbml0czsKLXVuc2lnbmVkIGxvbmcgbV9hY3RpdmVUZXh0dXJlVW5pdDsKLQotUmVmUHRyPFdl
YkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKLVJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxh
Y2tUZXh0dXJlQ3ViZU1hcDsKLQotVmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0czsKLQotLy8gRml4ZWQtc2l6ZSBjYWNoZSBvZiByZXVzYWJsZSBpbWFnZSBidWZmZXJz
IGZvciB2aWRlbyB0ZXhJbWFnZTJEIGNhbGxzLgotY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7
Ci1wdWJsaWM6Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpOwotICAgIC8v
IFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgot
ICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKTsKLXByaXZh
dGU6Ci0gICAgdm9pZCBidWJibGVUb0Zyb250KGludCBpZHgpOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+W10+IG1fYnVmZmVyczsKLSAgICBpbnQgbV9j
YXBhY2l0eTsKLX07Ci1MUlVJbWFnZUJ1ZmZlckNhY2hlIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZTsK
LQotR0MzRGludCBtX21heFRleHR1cmVTaXplOwotR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZTsKLUdDM0RpbnQgbV9tYXhSZW5kZXJidWZmZXJTaXplOwotR0MzRGludCBtX21heFZpZXdw
b3J0RGltc1syXTsKLUdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Ci1HQzNEaW50IG1fbWF4Q3Vi
ZU1hcFRleHR1cmVMZXZlbDsKLQotR0MzRGludCBtX21heERyYXdCdWZmZXJzOwotR0MzRGludCBt
X21heENvbG9yQXR0YWNobWVudHM7Ci1HQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOwotYm9vbCBt
X2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkOwotYm9vbCBtX2RyYXdCdWZmZXJz
U3VwcG9ydGVkOwotCi1HQzNEaW50IG1fcGFja0FsaWdubWVudDsKLUdDM0RpbnQgbV91bnBhY2tB
bGlnbm1lbnQ7Ci1ib29sIG1fdW5wYWNrRmxpcFk7Ci1ib29sIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYTsKLUdDM0RlbnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Ci1ib29sIG1fY29u
dGV4dExvc3Q7Ci1Mb3N0Q29udGV4dE1vZGUgbV9jb250ZXh0TG9zdE1vZGU7Ci1HcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLWJvb2wgbV9sYXllckNsZWFyZWQ7
Ci1HQzNEZmxvYXQgbV9jbGVhckNvbG9yWzRdOwotYm9vbCBtX3NjaXNzb3JFbmFibGVkOwotR0Mz
RGZsb2F0IG1fY2xlYXJEZXB0aDsKLUdDM0RpbnQgbV9jbGVhclN0ZW5jaWw7Ci1HQzNEYm9vbGVh
biBtX2NvbG9yTWFza1s0XTsKLUdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi1ib29sIG1fc3Rl
bmNpbEVuYWJsZWQ7Ci1HQzNEdWludCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNrQmFjazsK
LUdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUg
dGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5h
bCBjbGFtcGVkIHZhbHVlLgotR0MzRHVpbnQgbV9zdGVuY2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1
bmNNYXNrQmFjazsKLQotYm9vbCBtX2lzR0xFUzJDb21wbGlhbnQ7Ci1ib29sIG1faXNHTEVTMk5Q
T1RTdHJpY3Q7Ci1ib29sIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsK
LWJvb2wgbV9pc1Jlc291cmNlU2FmZTsKLWJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsK
LWJvb2wgbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQ7Ci0KLWJvb2wgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZTsKLWludCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotLy8g
QSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQgaW4gYSBzdGF0ZSB3aGVyZSBp
dCBhcHBlYXJzIGFzCi0vLyBhIHZhbGlkIGFuZCBhY3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90
IGV4ZWN1dGUgYW55IGltcG9ydGFudCBvcGVyYXRpb25zCi0vLyB1bnRpbCBpdHMgbG9hZCBwb2xp
Y3kgaXMgY29tcGxldGVseSByZXNvbHZlZC4KLWJvb2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uOwotYm9vbCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb247Ci1ib29sIGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKTsKLQotLy8gRW5hYmxlZCBleHRlbnNpb24gb2JqZWN0cy4KLXN0ZDo6
dW5pcXVlX3B0cjxFWFRGcmFnRGVwdGg+IG1fZXh0RnJhZ0RlcHRoOwotc3RkOjp1bmlxdWVfcHRy
PEVYVEJsZW5kTWluTWF4PiBtX2V4dEJsZW5kTWluTWF4Owotc3RkOjp1bmlxdWVfcHRyPEVYVHNS
R0I+IG1fZXh0c1JHQjsKLXN0ZDo6dW5pcXVlX3B0cjxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWM+IG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotc3RkOjp1bmlxdWVfcHRyPEVYVFNo
YWRlclRleHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLXN0ZDo6dW5pcXVlX3B0cjxP
RVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4dHVyZUZsb2F0Owotc3RkOjp1bmlxdWVfcHRyPE9FU1Rl
eHR1cmVGbG9hdExpbmVhcj4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXI7Ci1zdGQ6OnVuaXF1ZV9w
dHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0Owotc3RkOjp1bmlx
dWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdExp
bmVhcjsKLXN0ZDo6dW5pcXVlX3B0cjxPRVNTdGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5k
YXJkRGVyaXZhdGl2ZXM7Ci1zdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlPYmplY3Q+IG1f
b2VzVmVydGV4QXJyYXlPYmplY3Q7Ci1zdGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWlu
dD4gbV9vZXNFbGVtZW50SW5kZXhVaW50Owotc3RkOjp1bmlxdWVfcHRyPFdlYkdMTG9zZUNvbnRl
eHQ+IG1fd2ViZ2xMb3NlQ29udGV4dDsKLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xE
ZWJ1Z1NoYWRlcnM+IG1fd2ViZ2xEZWJ1Z1NoYWRlcnM7Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xD
b21wcmVzc2VkVGV4dHVyZUFUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDOwotc3RkOjp1
bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM+
IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZXB0
aFRleHR1cmU+IG1fd2ViZ2xEZXB0aFRleHR1cmU7Ci1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3
QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwotc3RkOjp1bmlxdWVfcHRyPEFOR0xFSW5zdGFu
Y2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwotCi0vLyBIZWxwZXJzIGZvciBnZXRQ
YXJhbWV0ZXIgYW5kIG90aGVycwotV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0Mz
RGVudW0pOwotV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSk7
Ci1XZWJHTEdldEluZm8gZ2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0pOwotV2ViR0xHZXRJbmZv
IGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci1XZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIoR0MzRGVudW0pOwotV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFt
ZXRlcihHQzNEZW51bSk7Ci1XZWJHTEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihH
QzNEZW51bSk7Ci0KLS8vIENsZWFyIHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVk
IHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KLS8vIGNsZWFyTWFzayBpcyBzZXQgdG8gdGhlIGJp
dGZpZWxkIG9mIGFueSBjbGVhciB0aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkgYXQgdGhpcyB0aW1l
Ci0vLyBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1
bm5lY2Vzc2FyeS4KLWJvb2wgY2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIGNsZWFyTWFz
ayA9IDApOwotCi0vLyBIZWxwZXIgdG8gcmVzdG9yZSBzdGF0ZSB0aGF0IGNsZWFyaW5nIHRoZSBm
cmFtZWJ1ZmZlciBtYXkgZGVzdHJveS4KLXZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwot
Ci12b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci12b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VI
dG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlv
bkNvZGUmKTsKLXZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0KLXZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqLCBib29sKTsKLQotdm9pZCBjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMx
eDEoKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sg
d2hldGhlciB0aGUgaW50ZXJuYWxmb3JtYXQKLS8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1h
dCBvZiB0aGUgY3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgotLy8gaXMgdmFs
aWQuCi1ib29sIGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
R0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwot
Ci0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9y
IGJ1ZmZlciBmb3JtYXQuCi1HQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQo
KTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyB3
aWR0aC4KLWludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBoZWlnaHQuCi1pbnQgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckhlaWdodCgpOwotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxpbWl0
cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCi1ib29s
IHZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBT
dHJpbmcmKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHNpemUgaXMgbm9uLW5l
Z2F0aXZlLgotLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRp
dmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotYm9vbCB2YWxpZGF0ZVNpemUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7Ci0KLS8vIEhlbHBl
ciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9u
ZyB0byB0aGUKLS8vIEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMg
c2VjdGlvbiAzLjEuCi1ib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0YXJnZXQg
YW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KLS8vIEdlbmVyYXRlIEdMIGVycm9ycyBh
bmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotLy8g
bnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQu
Ci1XZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKTsKLQot
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlv
bnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLS8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJu
cyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotYm9vbCB2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNo
ZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLS8vIEdl
bmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgot
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCk7Ci0KLWVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5j
dGlvblR5cGUgewotICAgIE5vdFRleFN1YkltYWdlMkQsCi0gICAgVGV4U3ViSW1hZ2UyRCwKLX07
Ci0KLWVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKLSAgICBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcsCi0gICAgU291cmNlSW1hZ2VEYXRhLAotICAgIFNvdXJjZUhUTUxJbWFnZUVsZW1l
bnQsCi0gICAgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsCi0gICAgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwKLX07Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIGNo
ZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlwZS9sZXZlbC90YXJnZXQvd2lkdGgvaGVpZ2h0L2Jv
cmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZhbGlkLgotLy8gT3RoZXJ3aXNlLCBpdCB3b3VsZCBy
ZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCi1ib29sIHZhbGlkYXRlVGV4
RnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25U
eXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
KTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1
bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCBy
ZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi1ib29sIHZhbGlkYXRlVGV4
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7Ci0KLWVudW0gTnVsbERpc3Bvc2l0aW9uIHsK
LSAgICBOdWxsQWxsb3dlZCwKLSAgICBOdWxsTm90QWxsb3dlZAotfTsKLQotLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVuIEFycmF5QnVmZmVyVmlldwotLy8gaXMg
b2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMgZW5vdWdoIGRhdGEgZm9yIHRoZSB0ZXhJ
bWFnZSBjYWxsLgotLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBh
cmFtZXRlcnMgYXJlIGludmFsaWQuCi1ib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
TnVsbERpc3Bvc2l0aW9uKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2
ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUgYXMgaW4KLS8vIHlvdSBjYW4gc3VwcGx5IGRh
dGEgdG8gdGV4SW1hZ2UyRCwgb3IgY2FsbCB0ZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2UyRCBhbmQK
LS8vIGNvcHlUZXhTdWJJbWFnZTJELgotLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5z
IGZhbHNlIGlmIHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgotYm9vbCB2YWxpZGF0ZVNldHRh
YmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0KTsK
LQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkYXRh
IGlzIGNvcnJlY3Qgc2l6ZQotLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMu
Ci1ib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKLQotLy8gSGVscGVyIGZ1
bmN0aW9uIGZvciB2YWxpZGF0aW5nIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLgotYm9vbCB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKLQotLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2
YWxpZCBmb3IKLS8vIHRoZSBnaXZlbiBmb3JtYXQuCi1ib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRl
eERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0KTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4
dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLS8vIHRoZSBnaXZlbiBmb3JtYXQuCi1ib29s
IHZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRl
eHR1cmUqKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIG1vZGUgZm9yIGRyYXd7
QXJyYXlzL0VsZW1lbnRzfS4KLWJvb2wgdmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlm
IGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUg
c2FtZS4KLWJvb2wgdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lKTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHN0ZW5jaWwgZnVuYy4KLWJv
b2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
KTsKLQotLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0
ZXJpLgotdm9pZCB0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0IHBhcmFtaSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7Ci0KLS8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMgdG8gY29uc29sZS4KLXZvaWQgcHJpbnRH
TEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotdm9pZCBwcmludEdMV2FybmluZ1RvQ29u
c29sZShjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogcmVhc29uKTsKLQotLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotLy8g
dXNlZCBvbmx5IHRvIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9ucy4KLXZvaWQg
cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotCi0vLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25z
LgotLy8gR2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVycyBhcmUgaWxsZWdhbC4KLWJvb2wg
dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KTsKLQotLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi1ib29sIHZhbGlkYXRlQmxl
bmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGZ1bmMgZmFjdG9ycy4KLWJvb2wgdmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3Jj
LCBHQzNEZW51bSBkc3QpOwotCi0vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBj
YXBhYmlsaXR5LgotYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSk7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBw
YXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4KLWJvb2wgdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci1ib29sIHZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEludDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLWJvb2wgdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiwgdm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci1ib29sIHZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiwgR0MzRHNpemVpIG1vZCk7Ci1ib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbios
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7
Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJE
YXRhLgotLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5kIGJ1ZmZlciB0byB0YXJnZXQsIG9yIDAg
aWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLVdlYkdMQnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSB1c2FnZSk7Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJE
IHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgot
Ym9vbCB2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBI
VE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0vLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgY2FudmFzIGlzIHJlYWR5IGFuZCB3b3Vs
ZG4ndCB0YWludCBPcmlnaW4uCi1ib29sIHZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
LQotI2lmIEVOQUJMRShWSURFTykKLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIG1ha2Ugc3VyZSB2aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi1i
b29sIHZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotLy8gSGVscGVyIGZ1
bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0uCi12b2lkIHZlcnRleEF0dHJpYmZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3Rl
ZFNpemUsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7Ci12b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLXZvaWQgdmVydGV4
QXR0cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCosIEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLS8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQcm9ncmFtLCBldGMp
IGZ1bmN0aW9ucy4KLS8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJldHVybiB3aXRo
b3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLWJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7
Ci0KLS8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmluZCogKGJpbmRCdWZmZXIsIGJpbmRUZXh0dXJl
LCBldGMpIGFuZCB1c2VQcm9ncmFtLgotLy8gSWYgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVu
IGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUgdXBvbiByZXR1cm4uCi0vLyBSZXR1cm4gZmFs
c2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCi1i
b29sIGNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xP
YmplY3QqLCBib29sJiBkZWxldGVkKTsKLQotLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0
ZXhBdHRyaWIwCi12b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci1ib29sIHNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KTsKLXZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVy
dGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLQotdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQo
KTsKLS8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4dCBsb3N0Lgotdm9pZCBt
YXliZVJlc3RvcmVDb250ZXh0KCk7Ci0KLS8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBw
cml2aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotLy8gYSBTYWZhcmkg
b3IgQ2hyb21lIGV4dGVuc2lvbi4KLWJvb2wgYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNv
bnN0OwotCi1lbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgRGlzcGxheUluQ29u
c29sZSwKLSAgICBEb250RGlzcGxheUluQ29uc29sZQotfTsKLQotLy8gV3JhcHBlciBmb3IgR3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNzYWdlCi0v
LyB0byB0aGUgSmF2YVNjcmlwdCBjb25zb2xlLgotdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNE
ZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwg
Q29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUluQ29uc29sZSk7Ci0KLVN0cmluZyBl
bnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0vLyBFbmFibGUgb3IgZGlzYWJs
ZSBzdGVuY2lsIHRlc3QgYmFzZWQgb24gdXNlciBzZXR0aW5nIGFuZAotLy8gd2hldGhlciB0aGUg
Y3VycmVudCBGQk8gaGFzIGEgc3RlbmNpbCBidWZmZXIuCi12b2lkIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKLQotLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjYXBhYmlsaXR5Lgot
dm9pZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwot
Ci0vLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBHTF9NQVhfVklFV1BPUlRfRElNUy4K
LUludFNpemUgY2xhbXBlZENhbnZhc1NpemUoKTsKLQotLy8gRmlyc3QgdGltZSBjYWxsZWQsIGlm
IEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVyd2lz
ZSByZXR1cm4gMC4KLS8vIExhdGVyLCByZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZS4KLUdDM0RpbnQg
Z2V0TWF4RHJhd0J1ZmZlcnMoKTsKLUdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpOwot
Ci12b2lkIHNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtKTsKLQotdm9pZCByZXN0b3JlQ3VycmVu
dEZyYW1lYnVmZmVyKCk7Ci12b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7Ci0KLS8vIENo
ZWNrIGlmIEVYVF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYgaXQg
c2F0aXNmaWVzIHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCi1ib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTJlZTEyMzgyNWQwNTNiZDI4NGNj
YTJmMmM2ZWNhMDYxZmYyZTY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsCisrKyAvZGV2L251bGwKQEAgLTEsNjc3ICswLDAgQEAKLS8qCi0qIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qCi0qIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0qIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSovCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xlbnVtOwotdHlwZWRlZiBib29sZWFu
ICAgICAgICBHTGJvb2xlYW47Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMYml0ZmllbGQ7Ci10
eXBlZGVmIGJ5dGUgICAgICAgICAgIEdMYnl0ZTsgICAgICAgICAvKiAnYnl0ZScgc2hvdWxkIGJl
IGEgc2lnbmVkIDggYml0IHR5cGUuICovCi10eXBlZGVmIHNob3J0ICAgICAgICAgIEdMc2hvcnQ7
Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIEdMaW50OwotdHlwZWRlZiBsb25nICAgICAgICAgICBH
THNpemVpOwotdHlwZWRlZiBsb25nIGxvbmcgICAgICBHTGludHB0cjsKLXR5cGVkZWYgbG9uZyBs
b25nICAgICAgR0xzaXplaXB0cjsKLXR5cGVkZWYgb2N0ZXQgICAgICAgICAgR0x1Ynl0ZTsgICAg
ICAgIC8qICdvY3RldCcgc2hvdWxkIGJlIGFuIHVuc2lnbmVkIDggYml0IHR5cGUuICovCi10eXBl
ZGVmIHVuc2lnbmVkIHNob3J0IEdMdXNob3J0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTHVp
bnQ7Ci10eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGZsb2F0OwotdHlwZWRlZiB1bnJlc3Ry
aWN0ZWQgZmxvYXQgR0xjbGFtcGY7Ci0KLVsKLUNvbmRpdGlvbmFsPVdFQkdMLAotSlNDdXN0b21N
YXJrRnVuY3Rpb24sCi1Eb05vdENoZWNrQ29uc3RhbnRzLAotXSBpbnRlcmZhY2UgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0vKiBDbGVhckJ1
ZmZlck1hc2sgKi8KLWNvbnN0IEdMZW51bSBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAg
PSAweDAwMDAwMTAwOwotY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVSX0JJVCAgICAgICAgICAg
ICA9IDB4MDAwMDA0MDA7Ci1jb25zdCBHTGVudW0gQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAg
ICAgID0gMHgwMDAwNDAwMDsKLQotLyogQmVnaW5Nb2RlICovCi1jb25zdCBHTGVudW0gUE9JTlRT
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwOwotY29uc3QgR0xlbnVtIExJTkVTICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTsKLWNvbnN0IEdMZW51bSBMSU5FX0xPT1Ag
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci1jb25zdCBHTGVudW0gTElORV9TVFJJUCAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMDAzOwotY29uc3QgR0xlbnVtIFRSSUFOR0xFUyAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwNDsKLWNvbnN0IEdMZW51bSBUUklBTkdMRV9TVFJJUCAg
ICAgICAgICAgICAgICAgPSAweDAwMDU7Ci1jb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAg
ICAgICAgICAgICAgID0gMHgwMDA2OwotCi0vKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVk
IGluIEVTMjApICovCi0vKiAgICAgIE5FVkVSICovCi0vKiAgICAgIExFU1MgKi8KLS8qICAgICAg
RVFVQUwgKi8KLS8qICAgICAgTEVRVUFMICovCi0vKiAgICAgIEdSRUFURVIgKi8KLS8qICAgICAg
Tk9URVFVQUwgKi8KLS8qICAgICAgR0VRVUFMICovCi0vKiAgICAgIEFMV0FZUyAqLwotCi0vKiBC
bGVuZGluZ0ZhY3RvckRlc3QgKi8KLWNvbnN0IEdMZW51bSBaRVJPICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAwOwotY29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDE7Ci1jb25zdCBHTGVudW0gU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MzAwOwotY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMw
MTsKLWNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7
Ci1jb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgID0gMHgwMzAzOwot
Y29uc3QgR0xlbnVtIERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNDsKLWNv
bnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAzMDU7Ci0KLS8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCi0vKiAgICAgIFpFUk8gKi8KLS8qICAgICAgT05FICovCi1j
b25zdCBHTGVudW0gRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA2OwotY29u
c3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4MDMwNzsKLWNvbnN0
IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJBVEUgICAgICAgICAgICAgPSAweDAzMDg7Ci0vKiAgICAg
IFNSQ19BTFBIQSAqLwotLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovCi0vKiAgICAgIERT
VF9BTFBIQSAqLwotLyogICAgICBPTkVfTUlOVVNfRFNUX0FMUEhBICovCi0KLS8qIEJsZW5kRXF1
YXRpb25TZXBhcmF0ZSAqLwotY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKLWNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAg
ICAgPSAweDgwMDk7Ci1jb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAg
ID0gMHg4MDA5OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KLWNvbnN0IEdMZW51bSBC
TEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLS8qIEJsZW5kU3VidHJh
Y3QgKi8KLWNvbnN0IEdMZW51bSBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAweDgw
MEE7Ci1jb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgID0gMHg4MDBC
OwotCi0vKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KLWNvbnN0IEdMZW51bSBCTEVORF9E
U1RfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci1jb25zdCBHTGVudW0gQkxFTkRfU1JD
X1JHQiAgICAgICAgICAgICAgICAgID0gMHg4MEM5OwotY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9B
TFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQTsKLWNvbnN0IEdMZW51bSBCTEVORF9TUkNfQUxQ
SEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci1jb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1Ig
ICAgICAgICAgICAgICAgID0gMHg4MDAxOwotY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFO
VF9DT0xPUiAgICAgICA9IDB4ODAwMjsKLWNvbnN0IEdMZW51bSBDT05TVEFOVF9BTFBIQSAgICAg
ICAgICAgICAgICAgPSAweDgwMDM7Ci1jb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0FM
UEhBICAgICAgID0gMHg4MDA0OwotY29uc3QgR0xlbnVtIEJMRU5EX0NPTE9SICAgICAgICAgICAg
ICAgICAgICA9IDB4ODAwNTsKLQotLyogQnVmZmVyIE9iamVjdHMgKi8KLWNvbnN0IEdMZW51bSBB
UlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci1jb25zdCBHTGVudW0gRUxF
TUVOVF9BUlJBWV9CVUZGRVIgICAgICAgICAgID0gMHg4ODkzOwotY29uc3QgR0xlbnVtIEFSUkFZ
X0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKLWNvbnN0IEdMZW51bSBFTEVNRU5U
X0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4OTU7Ci0KLWNvbnN0IEdMZW51bSBTVFJFQU1f
RFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTA7Ci1jb25zdCBHTGVudW0gU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OwotY29uc3QgR0xlbnVtIERZTkFNSUNfRFJB
VyAgICAgICAgICAgICAgICAgICA9IDB4ODhFODsKLQotY29uc3QgR0xlbnVtIEJVRkZFUl9TSVpF
ICAgICAgICAgICAgICAgICAgICA9IDB4ODc2NDsKLWNvbnN0IEdMZW51bSBCVUZGRVJfVVNBR0Ug
ICAgICAgICAgICAgICAgICAgPSAweDg3NjU7Ci0KLWNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRF
WF9BVFRSSUIgICAgICAgICAgPSAweDg2MjY7Ci0KLS8qIEN1bGxGYWNlTW9kZSAqLwotY29uc3Qg
R0xlbnVtIEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsKLWNvbnN0IEdM
ZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci1jb25zdCBHTGVu
dW0gRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgID0gMHgwNDA4OwotCi0vKiBEZXB0aEZ1
bmN0aW9uICovCi0vKiAgICAgIE5FVkVSICovCi0vKiAgICAgIExFU1MgKi8KLS8qICAgICAgRVFV
QUwgKi8KLS8qICAgICAgTEVRVUFMICovCi0vKiAgICAgIEdSRUFURVIgKi8KLS8qICAgICAgTk9U
RVFVQUwgKi8KLS8qICAgICAgR0VRVUFMICovCi0vKiAgICAgIEFMV0FZUyAqLwotCi0vKiBFbmFi
bGVDYXAgKi8KLWNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAw
eDBERTE7Ci1jb25zdCBHTGVudW0gQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjQ0OwotY29uc3QgR0xlbnVtIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJF
MjsKLWNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDBCRDA7
Ci1jb25zdCBHTGVudW0gU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQjkwOwot
Y29uc3QgR0xlbnVtIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLWNv
bnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBDMTE7Ci1jb25z
dCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgID0gMHg4MDM3OwotY29uc3Qg
R0xlbnVtIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5RTsKLWNvbnN0IEdM
ZW51bSBTQU1QTEVfQ09WRVJBR0UgICAgICAgICAgICAgICAgPSAweDgwQTA7Ci0KLS8qIEVycm9y
Q29kZSAqLwotY29uc3QgR0xlbnVtIE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA9IDA7
Ci1jb25zdCBHTGVudW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwot
Y29uc3QgR0xlbnVtIElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA9IDB4MDUwMTsKLWNv
bnN0IEdMZW51bSBJTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Ci1jb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0vKiBG
cm9udEZhY2VEaXJlY3Rpb24gKi8KLWNvbnN0IEdMZW51bSBDVyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDA5MDA7Ci1jb25zdCBHTGVudW0gQ0NXICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwOTAxOwotCi0vKiBHZXRQTmFtZSAqLwotY29uc3QgR0xlbnVtIExJTkVfV0lE
VEggICAgICAgICAgICAgICAgICAgICA9IDB4MEIyMTsKLWNvbnN0IEdMZW51bSBBTElBU0VEX1BP
SU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci1jb25zdCBHTGVudW0gQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFICAgICAgID0gMHg4NDZFOwotY29uc3QgR0xlbnVtIENVTExfRkFDRV9NT0RF
ICAgICAgICAgICAgICAgICA9IDB4MEI0NTsKLWNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAg
ICAgICAgICAgICAgICAgPSAweDBCNDY7Ci1jb25zdCBHTGVudW0gREVQVEhfUkFOR0UgICAgICAg
ICAgICAgICAgICAgID0gMHgwQjcwOwotY29uc3QgR0xlbnVtIERFUFRIX1dSSVRFTUFTSyAgICAg
ICAgICAgICAgICA9IDB4MEI3MjsKLWNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAg
ICAgICAgICAgPSAweDBCNzM7Ci1jb25zdCBHTGVudW0gREVQVEhfRlVOQyAgICAgICAgICAgICAg
ICAgICAgID0gMHgwQjc0OwotY29uc3QgR0xlbnVtIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAg
ICAgICA9IDB4MEI5MTsKLWNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAgICAg
ICAgPSAweDBCOTI7Ci1jb25zdCBHTGVudW0gU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAg
ID0gMHgwQjk0OwotY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9
IDB4MEI5NTsKLWNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyAgICAgICAgPSAw
eDBCOTY7Ci1jb25zdCBHTGVudW0gU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgID0gMHgw
Qjk3OwotY29uc3QgR0xlbnVtIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9IDB4MEI5
MzsKLWNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7
Ci1jb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgID0gMHg4ODAwOwot
Y29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICA9IDB4ODgwMTsKLWNv
bnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci1jb25z
dCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgID0gMHg4ODAzOwotY29uc3Qg
R0xlbnVtIFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA9IDB4OENBMzsKLWNvbnN0IEdM
ZW51bSBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci1jb25zdCBHTGVu
dW0gU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgID0gMHg4Q0E1OwotY29uc3QgR0xlbnVt
IFZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKLWNvbnN0IEdMZW51bSBT
Q0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0vKiAgICAgIFNDSVNTT1Jf
VEVTVCAqLwotY29uc3QgR0xlbnVtIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4
MEMyMjsKLWNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgPSAweDBD
MjM7Ci1jb25zdCBHTGVudW0gVU5QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAgID0gMHgwQ0Y1
OwotY29uc3QgR0xlbnVtIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9IDB4MEQwNTsK
LWNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgPSAweDBEMzM7Ci1j
b25zdCBHTGVudW0gTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAgICAgICAgID0gMHgwRDNBOwotY29u
c3QgR0xlbnVtIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA9IDB4MEQ1MDsKLWNvbnN0
IEdMZW51bSBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci1jb25zdCBH
TGVudW0gR1JFRU5fQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUzOwotY29uc3QgR0xl
bnVtIEJMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NDsKLWNvbnN0IEdMZW51
bSBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci1jb25zdCBHTGVudW0g
REVQVEhfQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU2OwotY29uc3QgR0xlbnVtIFNU
RU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsKLWNvbnN0IEdMZW51bSBQT0xZ
R09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0vKiAgICAgIFBPTFlHT05fT0ZG
U0VUX0ZJTEwgKi8KLWNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAg
PSAweDgwMzg7Ci1jb25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgID0g
MHg4MDY5OwotY29uc3QgR0xlbnVtIFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA9IDB4
ODBBODsKLWNvbnN0IEdMZW51bSBTQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgw
QTk7Ci1jb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFB
OwotY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA9IDB4ODBBQjsK
LQotLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotLyogICAgICBURVhUVVJFX01BR19GSUxURVIg
Ki8KLS8qICAgICAgVEVYVFVSRV9NSU5fRklMVEVSICovCi0vKiAgICAgIFRFWFRVUkVfV1JBUF9T
ICovCi0vKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLWNvbnN0IEdMZW51bSBDT01QUkVTU0VE
X1RFWFRVUkVfRk9STUFUUyAgICAgPSAweDg2QTM7Ci0KLS8qIEhpbnRNb2RlICovCi1jb25zdCBH
TGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAwOwotY29uc3QgR0xl
bnVtIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMTsKLWNvbnN0IEdMZW51
bSBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7Ci0KLS8qIEhpbnRUYXJn
ZXQgKi8KLWNvbnN0IEdMZW51bSBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAgICAgID0gMHg4
MTkyOwotCi0vKiBEYXRhVHlwZSAqLwotY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTQwMDsKLWNvbnN0IEdMZW51bSBVTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICAgPSAweDE0MDE7Ci1jb25zdCBHTGVudW0gU0hPUlQgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDAyOwotY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAg
ICAgICA9IDB4MTQwMzsKLWNvbnN0IEdMZW51bSBJTlQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MDQ7Ci1jb25zdCBHTGVudW0gVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAg
ID0gMHgxNDA1OwotY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTQwNjsKLQotLyogUGl4ZWxGb3JtYXQgKi8KLWNvbnN0IEdMZW51bSBERVBUSF9DT01QT05F
TlQgICAgICAgICAgICAgICAgPSAweDE5MDI7Ci1jb25zdCBHTGVudW0gQUxQSEEgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxOTA2OwotY29uc3QgR0xlbnVtIFJHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTkwNzsKLWNvbnN0IEdMZW51bSBSR0JBICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE5MDg7Ci1jb25zdCBHTGVudW0gTFVNSU5BTkNFICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxOTA5OwotY29uc3QgR0xlbnVtIExVTUlOQU5DRV9BTFBIQSAgICAgICAg
ICAgICAgICA9IDB4MTkwQTsKLQotLyogUGl4ZWxUeXBlICovCi0vKiAgICAgIFVOU0lHTkVEX0JZ
VEUgKi8KLWNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAgPSAweDgw
MzM7Ci1jb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0
OwotY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsK
LQotLyogU2hhZGVycyAqLwotY29uc3QgR0xlbnVtIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAg
ICAgICAgID0gMHg4QjMwOwotY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjMxOwotY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAg
ICAgICAgID0gMHg4ODY5OwotY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JT
ICAgICAgID0gMHg4REZCOwotY29uc3QgR0xlbnVtIE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAg
ICAgICAgID0gMHg4REZDOwotY29uc3QgR0xlbnVtIE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTID0gMHg4QjREOwotY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUyAgID0gMHg4QjRDOwotY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAg
ICAgICAgID0gMHg4ODcyOwotY29uc3QgR0xlbnVtIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RP
UlMgICAgID0gMHg4REZEOwotY29uc3QgR0xlbnVtIFNIQURFUl9UWVBFICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjRGOwotY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjgwOwotY29uc3QgR0xlbnVtIExJTktfU1RBVFVTICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjgyOwotY29uc3QgR0xlbnVtIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAg
ICAgICAgID0gMHg4QjgzOwotY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAg
ICAgICAgID0gMHg4Qjg1OwotY29uc3QgR0xlbnVtIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAg
ICAgICAgID0gMHg4Qjg2OwotY29uc3QgR0xlbnVtIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAg
ICAgICAgID0gMHg4Qjg5OwotY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTiAg
ICAgICAgID0gMHg4QjhDOwotY29uc3QgR0xlbnVtIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAg
ICAgICAgID0gMHg4QjhEOwotCi0vKiBTdGVuY2lsRnVuY3Rpb24gKi8KLWNvbnN0IEdMZW51bSBO
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDA7Ci1jb25zdCBHTGVudW0gTEVT
UyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAxOwotY29uc3QgR0xlbnVtIEVRVUFM
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsKLWNvbnN0IEdMZW51bSBMRVFVQUwg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDM7Ci1jb25zdCBHTGVudW0gR1JFQVRFUiAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA0OwotY29uc3QgR0xlbnVtIE5PVEVRVUFMICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKLWNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDY7Ci1jb25zdCBHTGVudW0gQUxXQVlTICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMjA3OwotCi0vKiBTdGVuY2lsT3AgKi8KLS8qICAgICAgWkVS
TyAqLwotY29uc3QgR0xlbnVtIEtFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUw
MDsKLWNvbnN0IEdMZW51bSBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7
Ci1jb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAyOwot
Y29uc3QgR0xlbnVtIERFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMzsKLWNv
bnN0IEdMZW51bSBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7Ci1jb25z
dCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA3OwotY29uc3Qg
R0xlbnVtIERFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODUwODsKLQotLyogU3Ry
aW5nTmFtZSAqLwotY29uc3QgR0xlbnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUYwMDsKLWNvbnN0IEdMZW51bSBSRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFGMDE7Ci1jb25zdCBHTGVudW0gVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RjAyOwotCi0vKiBUZXh0dXJlTWFnRmlsdGVyICovCi1jb25zdCBHTGVudW0gTkVBUkVTVCAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgyNjAwOwotY29uc3QgR0xlbnVtIExJTkVBUiAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjYwMTsKLQotLyogVGV4dHVyZU1pbkZpbHRlciAqLwotLyog
ICAgICBORUFSRVNUICovCi0vKiAgICAgIExJTkVBUiAqLwotY29uc3QgR0xlbnVtIE5FQVJFU1Rf
TUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLWNvbnN0IEdMZW51bSBMSU5FQVJfTUlQ
TUFQX05FQVJFU1QgICAgICAgICAgPSAweDI3MDE7Ci1jb25zdCBHTGVudW0gTkVBUkVTVF9NSVBN
QVBfTElORUFSICAgICAgICAgID0gMHgyNzAyOwotY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBf
TElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQotLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi8K
LWNvbnN0IEdMZW51bSBURVhUVVJFX01BR19GSUxURVIgICAgICAgICAgICAgPSAweDI4MDA7Ci1j
b25zdCBHTGVudW0gVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotY29u
c3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICA9IDB4MjgwMjsKLWNvbnN0
IEdMZW51bSBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgPSAweDI4MDM7Ci0KLS8qIFRl
eHR1cmVUYXJnZXQgKi8KLS8qICAgICAgVEVYVFVSRV8yRCAqLwotY29uc3QgR0xlbnVtIFRFWFRV
UkUgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTcwMjsKLQotY29uc3QgR0xlbnVtIFRFWFRV
UkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLWNvbnN0IEdMZW51bSBURVhUVVJF
X0JJTkRJTkdfQ1VCRV9NQVAgICAgICAgPSAweDg1MTQ7Ci1jb25zdCBHTGVudW0gVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YICAgID0gMHg4NTE1OwotY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLWNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1kgICAgPSAweDg1MTc7Ci1jb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZICAgID0gMHg4NTE4OwotY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLWNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ogICAgPSAweDg1MUE7Ci1jb25zdCBHTGVudW0gTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRSAgICAgID0gMHg4NTFDOwotCi0vKiBUZXh0dXJlVW5pdCAqLwotY29uc3QgR0xlbnVtIFRF
WFRVUkUwICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMDsKLWNvbnN0IEdMZW51bSBURVhU
VVJFMSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzE7Ci1jb25zdCBHTGVudW0gVEVYVFVS
RTIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwotY29uc3QgR0xlbnVtIFRFWFRVUkUz
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMzsKLWNvbnN0IEdMZW51bSBURVhUVVJFNCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzQ7Ci1jb25zdCBHTGVudW0gVEVYVFVSRTUgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotY29uc3QgR0xlbnVtIFRFWFRVUkU2ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDNjsKLWNvbnN0IEdMZW51bSBURVhUVVJFNyAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Qzc7Ci1jb25zdCBHTGVudW0gVEVYVFVSRTggICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM4OwotY29uc3QgR0xlbnVtIFRFWFRVUkU5ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDOTsKLWNvbnN0IEdMZW51bSBURVhUVVJFMTAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0Q0E7Ci1jb25zdCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NENCOwotY29uc3QgR0xlbnVtIFRFWFRVUkUxMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDQzsKLWNvbnN0IEdMZW51bSBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0Q7Ci1jb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NENFOwotY29uc3QgR0xlbnVtIFRFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDRjsKLWNvbnN0IEdMZW51bSBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDA7Ci1jb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOwotY29uc3QgR0xlbnVtIFRFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MjsKLWNvbnN0IEdMZW51bSBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7
Ci1jb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ0Owot
Y29uc3QgR0xlbnVtIFRFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENTsKLWNv
bnN0IEdMZW51bSBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7Ci1jb25z
dCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ3OwotY29uc3Qg
R0xlbnVtIFRFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREODsKLWNvbnN0IEdM
ZW51bSBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDk7Ci1jb25zdCBHTGVu
dW0gVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERBOwotY29uc3QgR0xlbnVt
IFRFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQjsKLWNvbnN0IEdMZW51bSBU
RVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgPSAweDg0REM7Ci1jb25zdCBHTGVudW0gVEVY
VFVSRTI5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotY29uc3QgR0xlbnVtIFRFWFRV
UkUzMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERTsKLWNvbnN0IEdMZW51bSBURVhUVVJF
MzEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REY7Ci1jb25zdCBHTGVudW0gQUNUSVZFX1RF
WFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0vKiBUZXh0dXJlV3JhcE1vZGUgKi8K
LWNvbnN0IEdMZW51bSBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7Ci1j
b25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgID0gMHg4MTJGOwotY29u
c3QgR0xlbnVtIE1JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICA9IDB4ODM3MDsKLQotLyog
VW5pZm9ybSBUeXBlcyAqLwotY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI1MDsKLWNvbnN0IEdMZW51bSBGTE9BVF9WRUMzICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNTE7Ci1jb25zdCBHTGVudW0gRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUyOwotY29uc3QgR0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1MzsKLWNvbnN0IEdMZW51bSBJTlRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNTQ7Ci1jb25zdCBHTGVudW0gSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjU1OwotY29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
NjsKLWNvbnN0IEdMZW51bSBCT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTc7
Ci1jb25zdCBHTGVudW0gQk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU4Owot
Y29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1OTsKLWNv
bnN0IEdMZW51bSBGTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUE7Ci1jb25z
dCBHTGVudW0gRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVCOwotY29uc3Qg
R0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QzsKLWNvbnN0IEdM
ZW51bSBTQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUU7Ci1jb25zdCBHTGVu
dW0gU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOwotCi0vKiBWZXJ0ZXgg
QXJyYXlzICovCi1jb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEICAgICAg
ICA9IDB4ODYyMjsKLWNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAg
ICAgID0gMHg4NjIzOwotY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAg
ICAgICAgPSAweDg2MjQ7Ci1jb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAg
ICAgICAgICA9IDB4ODYyNTsKLWNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQgICAgID0gMHg4ODZBOwotY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9J
TlRFUiAgICAgICAgPSAweDg2NDU7Ci1jb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9C
VUZGRVJfQklORElORyA9IDB4ODg5RjsKLQotLyogU2hhZGVyIFNvdXJjZSAqLwotY29uc3QgR0xl
bnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQotLyogU2hhZGVy
IFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KLWNvbnN0IEdMZW51bSBMT1dfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhERjA7Ci1jb25zdCBHTGVudW0gTUVESVVNX0ZMT0FUICAg
ICAgICAgICAgICAgICAgID0gMHg4REYxOwotY29uc3QgR0xlbnVtIEhJR0hfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICA9IDB4OERGMjsKLWNvbnN0IEdMZW51bSBMT1dfSU5UICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDhERjM7Ci1jb25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4REY0OwotY29uc3QgR0xlbnVtIEhJR0hfSU5UICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4OERGNTsKLQotLyogRnJhbWVidWZmZXIgT2JqZWN0LiAqLwotY29uc3QgR0xl
bnVtIEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLWNvbnN0IEdMZW51
bSBSRU5ERVJCVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDhENDE7Ci0KLWNvbnN0IEdMZW51
bSBSR0JBNCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTY7Ci1jb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotY29uc3QgR0xlbnVtIFJH
QjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEQ2MjsKLWNvbnN0IEdMZW51bSBERVBU
SF9DT01QT05FTlQxNiAgICAgICAgICAgICAgPSAweDgxQTU7Ci1jb25zdCBHTGVudW0gU1RFTkNJ
TF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotY29uc3QgR0xlbnVtIFNURU5DSUxf
SU5ERVg4ICAgICAgICAgICAgICAgICA9IDB4OEQ0ODsKLWNvbnN0IEdMZW51bSBERVBUSF9TVEVO
Q0lMICAgICAgICAgICAgICAgICAgPSAweDg0Rjk7Ci0KLWNvbnN0IEdMZW51bSBTUkdCX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEM0MDsKLWNvbnN0IEdMZW51
bSBTUkdCX0FMUEhBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEM0MjsK
LWNvbnN0IEdMZW51bSBTUkdCOF9BTFBIQThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEM0MzsKLWNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VO
Q09ESU5HX0VYVCAgICA9IDB4ODIxMDsKLQotY29uc3QgR0xlbnVtIE1JTl9FWFQgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODAwNzsKLWNvbnN0IEdMZW51bSBNQVhfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwMDg7Ci0KLWNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEgg
ICAgICAgICAgICAgPSAweDhENDI7Ci1jb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0hFSUdIVCAg
ICAgICAgICAgID0gMHg4RDQzOwotY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9G
T1JNQVQgICA9IDB4OEQ0NDsKLWNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAg
ICAgICAgPSAweDhENTA7Ci1jb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAg
ICAgID0gMHg4RDUxOwotY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAg
ICA9IDB4OEQ1MjsKLWNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
PSAweDhENTM7Ci1jb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgID0g
MHg4RDU0OwotY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICA9IDB4
OEQ1NTsKLQotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUg
ICAgICAgICAgID0gMHg4Q0QwOwotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX05BTUUgICAgICAgICAgID0gMHg4Q0QxOwotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgID0gMHg4Q0QyOwotY29uc3QgR0xlbnVt
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOwot
Ci1jb25zdCBHTGVudW0gQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgID0gMHg4Q0UwOwot
Y29uc3QgR0xlbnVtIERFUFRIX0FUVEFDSE1FTlQgICAgICAgICAgICAgICA9IDB4OEQwMDsKLWNv
bnN0IEdMZW51bSBTVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7Ci1jb25z
dCBHTGVudW0gREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgID0gMHg4MjFBOwotCi1jb25z
dCBHTGVudW0gTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLQotY29uc3QgR0xl
bnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1Owot
Y29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgID0g
MHg4Q0Q2OwotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRB
Q0hNRU5UID0gMHg4Q0Q3OwotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElN
RU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OwotY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX1VOU1VQ
UE9SVEVEICAgICAgICAgICAgICAgICAgID0gMHg4Q0REOwotCi1jb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQklORElORyAgICAgICAgICAgID0gMHg4Q0E2OwotY29uc3QgR0xlbnVtIFJFTkRFUkJV
RkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLWNvbnN0IEdMZW51bSBNQVhfUkVOREVS
QlVGRkVSX1NJWkUgICAgICAgICAgPSAweDg0RTg7Ci0KLWNvbnN0IEdMZW51bSBJTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTiAgPSAweDA1MDY7Ci0KLS8qIFdlYkdMLXNwZWNpZmljIGVudW1z
ICovCi1jb25zdCBHTGVudW0gVU5QQUNLX0ZMSVBfWV9XRUJHTCAgICAgICAgICAgICAgICA9IDB4
OTI0MDsKLWNvbnN0IEdMZW51bSBVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgICAgID0g
MHg5MjQxOwotY29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAg
PSAweDkyNDI7Ci1jb25zdCBHTGVudW0gVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJH
TCA9IDB4OTI0MzsKLWNvbnN0IEdMZW51bSBCUk9XU0VSX0RFRkFVTFRfV0VCR0wgICAgICAgICAg
ICAgID0gMHg5MjQ0OwotCi1yZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVy
V2lkdGg7Ci1yZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVySGVpZ2h0Owot
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhY3Rp
dmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwg
V2ViR0xTaGFkZXIgc2hhZGVyKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwg
R0x1aW50IGluZGV4LCBET01TdHJpbmcgbmFtZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdM
QnVmZmVyIGJ1ZmZlcik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZl
ciBmcmFtZWJ1ZmZlcik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVm
ZmVyIHJlbmRlcmJ1ZmZlcik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShHTGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUgdGV4
dHVyZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNs
YW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvbihHTGVudW0g
bW9kZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNl
cGFyYXRlKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKLVtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFj
dG9yKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmNTZXBhcmF0
ZShHTGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBk
c3RBbHBoYSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyPyBkYXRhLCBHTGVudW0g
dXNhZ2UpOwotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51
bSB1c2FnZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVz
YWdlKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZl
cj8gZGF0YSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJyYXlC
dWZmZXJWaWV3PyBkYXRhKTsKLQotW1N0cmljdFR5cGVDaGVja2luZ10gR0xlbnVtICAgICAgIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4s
IEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBjbGVhckRlcHRoKEdMY2xhbXBmIGRlcHRoKTsKLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBjbGVhclN0ZW5jaWwoR0xpbnQgcyk7Ci1bU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVl
biwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVy
IHNoYWRlcik7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2Vk
VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LAotR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgQXJyYXlC
dWZmZXJWaWV3IGRhdGEpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXBy
ZXNzZWRUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LAotR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyBkYXRhKTsKLQotW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGNvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQnVmZmVyIGNy
ZWF0ZUJ1ZmZlcigpOwotW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVh
dGVGcmFtZWJ1ZmZlcigpOwotW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xQcm9ncmFtIGNyZWF0
ZVByb2dyYW0oKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMUmVuZGVyYnVmZmVyIGNyZWF0
ZVJlbmRlcmJ1ZmZlcigpOwotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBX
ZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUpOwotW1N0cmljdFR5cGVDaGVja2lu
Z10gV2ViR0xUZXh0dXJlIGNyZWF0ZVRleHR1cmUoKTsKLQotW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGN1bGxGYWNlKEdMZW51bSBtb2RlKTsKLQotW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVi
dWZmZXIgZnJhbWVidWZmZXIpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJi
dWZmZXIpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVNoYWRlcihX
ZWJHTFNoYWRlciBzaGFkZXIpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUpOwotCi1bU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBkZXB0aE1hc2soR0xib29sZWFuIGZsYWcpOwotW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5lYXIsIEdMY2xhbXBm
IHpGYXIpOwotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIp
OwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRpc2FibGUoR0xlbnVtIGNhcCk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xlbnVtIHR5cGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBlbmFibGUoR0xlbnVtIGNhcCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZpbmlzaCgp
OwotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZsdXNoKCk7Ci1bU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLVtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBX
ZWJHTFRleHR1cmUgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOwotW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGZyb250RmFjZShHTGVudW0gbW9kZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0KLVtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZUF0
dHJpYihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKLVtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0o
V2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhXZWJH
TFByb2dyYW0gcHJvZ3JhbSk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMaW50ICAgICAgICBn
ZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwot
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKLQotW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xD
b250ZXh0QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotCi1bU3RyaWN0VHlwZUNo
ZWNraW5nXSBHTGVudW0gZ2V0RXJyb3IoKTsKLQotLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01T
dHJpbmcgbmFtZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRFeHRlbnNp
b24oRE9NU3RyaW5nIG5hbWUpOwotCi1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gYW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHTGVudW0g
dGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lKTsKLVtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBw
bmFtZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55
IGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMZW51bSBwbmFtZSk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJh
aXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBh
bnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFNo
YWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciBzaGFkZXIsIEdMZW51bSBwbmFtZSk7Ci0KLVtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhj
ZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciBzaGFkZXIp
OwotCi1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwg
R0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi1bU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVy
bmVkTnVsbFN0cmluZ0FzPU51bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nICAgIGdldFNo
YWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIpOwotCi1bU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b21dIHNlcXVlbmNlPERPTVN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotCi1b
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBh
cmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwotCi1bU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFVuaWZvcm0oV2ViR0xQcm9ncmFt
IHByb2dyYW0sIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uKTsKLQotW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3Jt
TG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIERPTVN0cmluZyBuYW1lKTsKLQotW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi1bU3RyaWN0VHlwZUNoZWNraW5nXSBH
THNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBtb2RlKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0J1
ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzQ29udGV4dExvc3QoKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBp
c0VuYWJsZWQoR0xlbnVtIGNhcCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKLVtTdHJpY3RUeXBl
Q2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwot
W1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4g
ICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
Ym9vbGVhbiAgICBpc1RleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUpOwotW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGxpbmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKLVtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdl
YkdMUHJvZ3JhbSBwcm9ncmFtKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBw
aXhlbFN0b3JlaShHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBwb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVu
aXRzKTsKLQotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMp
OwotCi1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNvbXBp
bGVyKCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3Rv
cmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzYW1w
bGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7Ci1bU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgc2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01T
dHJpbmcgc3RyaW5nKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2ls
RnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci1bU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xl
bnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwotW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKTsKLVtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFza1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTHVpbnQg
bWFzayk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wKEdMZW51
bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWls
LCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7Ci0KLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICB0ZXhQYXJhbWV0ZXJmKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCBwYXJhbSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1l
dGVyaShHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLQotLy8gU3Vw
cG9ydGVkIGZvcm1zOgotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCi1HTGludCBib3Jk
ZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
Ci1HTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLVtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLUdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKLSNpZiBkZWZp
bmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi1bU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi1HTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8pOwotI2VuZGlmCi0KLVtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIAotR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi1HTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLUdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmlu
ZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi1HTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8pOwotI2VuZGlmCi0KLVtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWZ2KFdlYkdMVW5pZm9ybUxvY2F0
aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGludCB4KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm0xaXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJy
YXkgdik7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTJmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7
Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci1b
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpKFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsKLVtTdHJpY3RUeXBl
Q2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaXYoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci1bU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLVtTdHJpY3RUeXBl
Q2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZnYoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLVtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2koV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7Ci1bU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGZ2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci1bU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsK
LVtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm00aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0KLVtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1h
dHJpeDRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLQotW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci1b
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0
ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi1bU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgdmVydGV4QXR0cmliMWYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCk7Ci1bU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmR4
LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5k
eCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgdmVydGV4QXR0cmliM2YoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZs
b2F0IHopOwotW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNm
dihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci1bU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7Ci1bU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b21dIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVz
KTsKLVtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZl
cnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBH
TGJvb2xlYW4gbm9ybWFsaXplZCwgCi1HTHNpemVpIHN0cmlkZSwgR0xpbnRwdHIgb2Zmc2V0KTsK
LQotW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZpZXdwb3J0KEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLX07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAKaW5kZXggOTI0ZmNiNDM3ZGI1ZDA3NmZmYmU0
MzhmYmY4M2M1OTQwYTY1OWI4Yy4uY2JkNmYyZDkxYzIwMjg2NGY1NWExOWQ5OGRkMDFhMzA1YWYz
NGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcApAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKIAogI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5o
IgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBHQzNEZW51bSB0eXBlKQorUGFzc1JlZlB0cjxXZWJH
TFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwg
R0MzRGVudW0gdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hhZGVyKGN0
eCwgdHlwZSkpOwogfQogCi1XZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY3R4LCBHQzNEZW51bSB0eXBlKQorV2ViR0xTaGFkZXI6OldlYkdMU2hhZGVy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBHQzNEZW51bSB0eXBlKQogICAgIDogV2ViR0xT
aGFyZWRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZSgiIikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCmluZGV4IGZlYjU1OWU2NzU3
YjExOTc0MzE4MTAxMDVlMTU1MDFjZmQyNTQwZjUuLmRkZjViMTdhODMzZmRiYTE3ZDJmOWYyOTli
NWM5NDAwMGE0MjA3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2hhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIu
aApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBXZWJHTFNoYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJH
TFNoYXJlZE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsKIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSosIEdDM0RlbnVtKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRl
cj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdDM0RlbnVtKTsKIAogICAgIEdDM0Rl
bnVtIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcm
IGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlOyB9CkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFZhbGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0gdmFs
aWQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiwgR0MzRGVudW0pOworICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCos
IEdDM0RlbnVtKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNz
Q29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAppbmRleCAzNGY3Y2VlYTUy
ZjY4NWMwZTFjNjZmODU5MmJjMTE3NTE2NWY5ZGRjLi4wZmVmYmFhMzEwZmZkNzZjYmNlYjgxNTlj
NTJlZTI5YmNiOGE1ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFNoYXJlZE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaGFyZWRPYmplY3QuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJHTFNo
YXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xTaGFyZWRPYmplY3Q6Oldl
YkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCitXZWJH
TFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogICAgIDogV2ViR0xPYmplY3QoY29udGV4dCksCiAgICAgICBtX2NvbnRleHRHcm91
cChjb250ZXh0LT5jb250ZXh0R3JvdXAoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFNoYXJlZE9iamVjdC5oCmluZGV4IGRiNzk4NTYzODRhMjg4OGViN2NhZWM3YjFh
YWY1MjlkMzdmMWRlYzMuLjk3ZWRmYjE4MDNkZWI3NzliMWEzY2ExNGI1YTVkYTE3NmNkNjI0MDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaApA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OwogCiAvLyBXZWJHTFNoYXJl
ZE9iamVjdCB0aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBzaGFyZWQgYnkg
bXVsdGlwbGUKIC8vIFdlYkdMUmVuZGVyaW5nQ29udGV4dHMuCkBAIC00OCw3ICs0OCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQog
Ci0gICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiBjb250
ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKSBjb25zdCBvdmVycmlk
ZQorICAgIHZpcnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29u
dGV4dEdyb3VwLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHRHcm91cCA9PSBtX2NvbnRleHRHcm91cDsKICAg
ICB9CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaENvbnRleHRHcm91
cCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOworICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogCiAgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRl
eHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcApp
bmRleCA5NmI2ZTQxMmRkYjE1ZTEzMjMwNzg0YzhiZWQ2Y2U1MTU5MzZmYTQwLi4xZmI0YjNiNTNl
ODE4NjQ0YTdmNWY3YTJiN2Y2MjI5NWFlZTA5M2UwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKQEAgLTMxLDE2ICszMSwxNiBAQAogCiAjaW5jbHVkZSAi
V2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xU
ZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
dHgpCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFRl
eHR1cmUoY3R4KSk7CiB9CiAKLVdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqIGN0eCkKK1dlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAgICwg
bV90YXJnZXQoMCkKICAgICAsIG1fbWluRmlsdGVyKEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNU
X01JUE1BUF9MSU5FQVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
CmluZGV4IDc4Y2RmNGE4ZThhYjRmYTQzOTQzMWQxZWZjNDhhMGUzZDljMjcwYmQuLjY0YTM3OTJh
N2I1ZWE2YmM2ZDk4ODY3Mjg0ZGRmYmMyYjU3MmFjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5oCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgfldlYkdMVGV4dHVyZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0
dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCiAg
ICAgdm9pZCBzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKTsKICAg
ICB2b2lkIHNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwpAQCAt
ODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291
bnQoR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBX
ZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIFdlYkdMVGV4dHVy
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUy5jcHAKaW5kZXggNzk3YzM2MjRhYzhlZTQ0MjU4MDMxNjE0OGRkZGU4YzA2Mzcx
OTlkNy4uNTNjNWZhMzQzYzk3NWVhODAwMmUxNmExNzVlNDcyYTk2OGU4ODU2YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHAKQEAgLTMwLDE2ICszMCwxNiBAQAogI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuaCIKIAogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM+IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjdHgsIFZhb1R5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4LCBWYW9UeXBlIHR5cGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKGN0eCwgdHlwZSkpOwogfQogCi1XZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqIGN0eCwgVmFvVHlwZSB0eXBlKQorV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCwgVmFvVHlwZSB0eXBlKQogICAgIDogV2ViR0xDb250ZXh0T2JqZWN0KGN0eCkKICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCmlu
ZGV4IDU5YjExYzhhNzkzOGQxN2FhODNlZWQ4OTc0MjE0NjVjNDM4YmE1MWIuLmIwMWU5ZjMyZjJi
YzVkYjBkM2Y5Y2I4NGY1ZmRmYWVkMTcxNzBhOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKQEAgLTQyLDcgKzQy
LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVMoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+
IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgVmFvVHlwZSk7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gY3JlYXRlKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCosIFZhb1R5cGUpOwogICAgIAogICAgIC8vIENhY2hlZCB2YWx1ZXMgZm9yIHZl
cnRleCBhdHRyaWIgcmFuZ2UgY2hlY2tzCiAgICAgc3RydWN0IFZlcnRleEF0dHJpYlN0YXRlIHsK
QEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNv
cihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CiAKIHByaXZhdGU6Ci0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgVmFvVHlw
ZSk7CisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQq
LCBWYW9UeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNz
Q29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWUw
NWEyNjhhMjI1MDM2ZDNjZThjMTc3MTQwYjQ0NmRlNjJhYTdkOC4uYzU4YmJjZjNlZmUxNDZkYWVk
NWRmNGUxMjdkZDQyMDhmMjYyNGY4NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE1LTAxLTE0
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByMTc4MzkwLCByMTc4MzkyLCByMTc4Mzk4LCByMTc4NDAwLAor
ICAgICAgICByMTc4NDAyLCBhbmQgcjE3ODQxMC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MDQzMQorCisgICAgICAgIFdheSB0b28gbWFueSBmYWls
dXJlcyB0byBza2lwIChSZXF1ZXN0ZWQgYnkgYXBfIG9uICN3ZWJraXQpLgorCisgICAgICAgIFJl
dmVydGVkIGNoYW5nZXNldHM6CisKKyAgICAgICAgIldlYkdMMjogU3VwcG9ydCB3ZWJnbDIgY29u
dGV4dCBjcmVhdGlvbi4iCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjY0MDgKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MTc4MzkwCisKKyAgICAgICAgIlVucmV2aWV3ZWQgaU9TIGJ1aWxkIGZpeCBhZnRlciByMTc4Mzkw
LiIKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4MzkyCisKKyAg
ICAgICAgIltVbnJldmlld2VkXSBXaW5kb3dzIGJ1aWxkIGZpeCBhZnRlciByMTc4MzkwLiIKKyAg
ICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4Mzk4CisKKyAgICAgICAg
IltVbnJldmlld2VkXSBTcGVjdWxhdGl2ZSB0ZXN0IGZpeCBhZnRlciByMTc4MzkwLiIKKyAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4NDAwCisKKyAgICAgICAgIltV
bnJldmlld2VkXSBTa2lwIHdlYmdsIHRlc3RzIGZvciB0ZW1wb3JhcmlseS4iCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA0MjMKKyAgICAgICAgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc4NDAyCisKKyAgICAgICAgIltFRkxdIEZp
eCBidWlsZCBhZnRlciByMTc4MzkwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQwNDI0CisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hh
bmdlc2V0LzE3ODQxMAorCiAyMDE1LTAxLTEzICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXaW5dIFVucmV2aWV3ZWQgdGVzdCBnYXJkZW5pbmcuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGIyYWZjZjM4ZjhlMjUx
NzdlMThlZTViZDY0ZTNlYzE4NmZjOGM1ODcuLmQ3ZmVjY2IwYzFhNDU1YTc5NDU0ZjY0MjExNGQ4
N2JkOTNhMTE1NzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CkBAIC0xNTE4LDcgKzE1MTgsMyBAQCB3ZWJraXQub3JnL2IvMTM5OTY4IFsgTWF2ZXJpY2tzKyBd
IHN2Zy90ZXh0L3RleHQtaW50cm8tMDUtdC5zdmcgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9y
Zy9iLzEzOTk2OCBbIE1hdmVyaWNrcysgXSB0YWJsZXMvbW96aWxsYS9idWdzL2J1ZzI0NzktMi5o
dG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xMzk5NjggWyBNYXZlcmlja3MrIF0g
bWVkaWEvY29udHJvbHMtYWZ0ZXItcmVsb2FkLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzEzOTk2OCBbIE1hdmVyaWNrcysgXSBtZWRpYS9jb250cm9scy13aXRob3V0LXByZWxv
YWQuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCi0KLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MDQyMwotd2ViZ2wgWyBTa2lwIF0KLWZhc3QvY2FudmFzL3dlYmdsIFsg
U2tpcCBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>