<?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>44554</bug_id>
          
          <creation_ts>2010-08-24 14:49:26 -0700</creation_ts>
          <short_desc>Delete LegacyHTMLTreeBuilder</short_desc>
          <delta_ts>2010-08-24 15:27:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>268817</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-24 14:49:26 -0700</bug_when>
    <thetext>Delete LegacyHTMLTreeBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268824</commentid>
    <comment_count>1</comment_count>
      <attachid>65329</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-24 14:50:59 -0700</bug_when>
    <thetext>Created attachment 65329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268831</commentid>
    <comment_count>2</comment_count>
      <attachid>65329</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-24 14:59:58 -0700</bug_when>
    <thetext>Comment on attachment 65329
Patch

WebCore/WebCore.xcodeproj/project.pbxproj: 
 +  		512DD8F50D91E6AF000F89EE /* LegacyWebArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 512DD8EB0D91E6AF000F89EE /* LegacyWebArchive.h */; settings = {ATTRIBUTES = (Private, ); }; };
Looks unintentional.

WebCore/WebCore.xcodeproj/project.pbxproj: 
 +  				512DD8F50D91E6AF000F89EE /* LegacyWebArchive.h in Headers */,
Looks unintentional.

WebCore/dom/Document.cpp:1925
 +  #ifdef BUILDING_ON_LEOPARD
These need a FIXME before them, since the new treebuilder does not support these hacks and (currently) we have no plan to.

WebCore/html/HTMLTreeBuilder.cpp:52
 +  #include &lt;wtf/dtoa.h&gt;
You should mark this with a FIXME, no?

Otherwise looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268852</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-24 15:27:50 -0700</bug_when>
    <thetext>Committed r65941: &lt;http://trac.webkit.org/changeset/65941&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65329</attachid>
            <date>2010-08-24 14:50:59 -0700</date>
            <delta_ts>2010-08-24 14:59:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44554-20100824145058.patch</filename>
            <type>text/plain</type>
            <size>106041</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5kcm9pZC5tawppbmRl
eCA4NDk0MzQ2MTI1MDZlMWY0OGUwNTkwNDkwNDZkZTBiMzgwMDZhMWE5Li43YmZhMWI4NjAyYjgw
OTRmNGIzNzI5Njc1MzNlMjY0YzQ2YzRiMTFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQu
bWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBAIC0yODEsNyArMjgxLDYgQEAgTE9DQUxfU1JD
X0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3Bw
IFwKIAlodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAgXAogCWh0bWwvSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmNwcCBcCi0JaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwKIAlodG1sL0hU
TUxQYXJzZXJFcnJvckNvZGVzLmNwcCBcCiAJaHRtbC9IVE1MUGFyc2VyU2NoZWR1bGVyLmNwcCBc
CiAJaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYTlmZDNhNzQw
NjhlMTZmNzgzNjZjYzdkOTVjYjZlOTdkMWU0MTFjMi4uOTNiMTNhMmFlN2QxYjA0MjBiMzkxNjM3
ODUwN2IwYTQyOWU0ZGE4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysg
Yi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDI1LDcgKzEwMjUsNiBAQCBTRVQoV2ViQ29y
ZV9TT1VSQ0VTCiAgICAgaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwCiAgICAgaHRtbC9I
VE1MUGFyYWdyYXBoRWxlbWVudC5jcHAKICAgICBodG1sL0hUTUxQYXJhbUVsZW1lbnQuY3BwCi0g
ICAgaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwCiAgICAgaHRtbC9IVE1MUGFyc2VyRXJy
b3JDb2Rlcy5jcHAKICAgICBodG1sL0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwCiAgICAgaHRtbC9I
VE1MUGx1Z0luRWxlbWVudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYzMwNzk4OTYyZDZiMWEyN2IxNjU0ODA3M2VmZTc3ODVmYTJj
OWE1My4uZWQyNzc4MTY1ODk1NWUyZjIwMWIzMTRjOTBmMGExZTI0ZGY0MDQyMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0
NSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIERl
bGV0ZSBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ0NTU0CisKKyAgICAgICAgVGhlcmUgd2VyZSBzb21lIGZyZWUg
ZnVuY3Rpb25zIGluIExlZ2FjeUhUTUxUcmVlQnVpbGRlciB0aGF0IG5lZWRlZCBhCisgICAgICAg
IG5ldyBob21lLiAgSSd2ZSBwdXQgdGhlbSBpbiBIVE1MVHJlZUJ1aWxkZXIsIGJ1dCB0aGV5J2xs
IHByb2JhYmx5IG5lZWQKKyAgICAgICAgYSBiZXR0ZXIgaG9tZSBldmVudHVhbGx5LgorCisgICAg
ICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQpOgor
ICAgICAgICAqIGRvbS9Eb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGRvbS9TY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNw
cDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAqIGh0bWwvSFRNTE1ldGVy
RWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcDoKKyAg
ICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXJp
YWxpemVGb3JOdW1iZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVG9Eb3VibGVGb3JO
dW1iZXJUeXBlKToKKyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAgICAq
IGh0bWwvSFRNTFZpZXdTb3VyY2VQYXJzZXIuaDoKKyAgICAgICAgKiBodG1sL0xlZ2FjeUhUTUxU
cmVlQnVpbGRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9MZWdhY3lIVE1MVHJlZUJ1
aWxkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL1N0ZXBSYW5nZS5jcHA6CisgICAgICAg
ICogaHRtbC9WYWxpZGl0eVN0YXRlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xp
ZGVyLmNwcDoKKworMjAxMC0wOC0yNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIFJlbW92ZSB1
bm5lZWRlZCBpbmNsdWRlIGluIEhUTUxQcmVsb2FkU2Nhbm5lcgogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQ1NTIKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNWUyZjJiZWQx
MGU0MGM3ZjkyZWQ1YzYxMTlhNjdlNmY2OWMxOTFmYS4uYzFjM2IwYzY4OGNiNWM1ZWM2MGE1N2Zj
Njg3ZmRiYzBmNjRmYmY1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNTA5LDggKzE1MDksNiBAQCB3ZWJjb3JlX3Nv
dXJjZXMgKz0gXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oIFwKIAlXZWJD
b3JlL2h0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyYW1F
bGVtZW50LmggXAotCVdlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwIFwKLQlX
ZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggXAogCVdlYkNvcmUvaHRtbC9IVE1M
UGFyc2VyRXJyb3JDb2Rlcy5jcHAgXAogCVdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyRXJyb3JDb2Rl
cy5oIFwKIAlXZWJDb3JlL2h0bWwvSFRNTFBhcnNlclF1aXJrcy5oIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWZkOGNlNmEx
YzQyNTY3NjU1Yjc4ZWQ5NzQyMDE3Mjk5MGVmYzMxOC4uYWQxYTdkNWY2OTgyM2Q1YWQyOWRiZmYy
MmQ1YTE1NzBjYTAxOTRkMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE2NzUsOCArMTY3NSw2IEBACiAgICAgICAgICAgICAn
aHRtbC9IVE1MUGFyYWdyYXBoRWxlbWVudC5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxQYXJh
bUVsZW1lbnQuY3BwJywKICAgICAgICAgICAgICdodG1sL0hUTUxQYXJhbUVsZW1lbnQuaCcsCi0g
ICAgICAgICAgICAnaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3BwJywKLSAgICAgICAgICAg
ICdodG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxQ
YXJzZXJFcnJvckNvZGVzLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9IVE1MUGFyc2VyRXJyb3JD
b2Rlcy5oJywKICAgICAgICAgICAgICdodG1sL0hUTUxQYXJzZXJTY2hlZHVsZXIuY3BwJywKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDdiNWE2OWEyZGNiNWM2OTUyOGNhZDViNGRkNDkxODk4OGNjOTYxYzMuLjg0OGU5OTEzYmE0MTBm
YzIyM2E1ZGVmNzVmN2E3ZjhlZDFjOTAwNjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5w
cm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNzE5LDcgKzcxOSw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGh0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcCBcCiAgICAgaHRtbC9IVE1M
UGFyYWdyYXBoRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTFBhcmFtRWxlbWVudC5jcHAgXAot
ICAgIGh0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCBcCiAgICAgaHRtbC9IVE1MUGFyc2Vy
RXJyb3JDb2Rlcy5jcHAgXAogICAgIGh0bWwvSFRNTFBhcnNlclNjaGVkdWxlci5jcHAgXAogICAg
IGh0bWwvSFRNTFBsdWdJbkVsZW1lbnQuY3BwIFwKQEAgLTE0OTMsNyArMTQ5Miw2IEBAIEhFQURF
UlMgKz0gXAogICAgIGh0bWwvSFRNTFBhcmFncmFwaEVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1M
UGFyYW1FbGVtZW50LmggXAogICAgIGh0bWwvSFRNTFBhcnNlckVycm9yQ29kZXMuaCBcCi0gICAg
aHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCBcCiAgICAgaHRtbC9IVE1MUGx1Z0luRWxlbWVu
dC5oIFwKICAgICBodG1sL0hUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBcCiAgICAgaHRtbC9IVE1M
UHJlRWxlbWVudC5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGU1
M2VkMDMxZTVlOWYzMWFkYjc0MTg2NGVmZTRlYWU3Yzg3YWM5ZDYuLmU5M2JmYjM0MGNlNmJlYWUx
MWYxNDUxZTQyYWZiZmE3MGJjZDYzYzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagpAQCAtNDE3MjEsMTQgKzQxNzIxLDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxG
aWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuY3Bw
Ig0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFxMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8
RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcTWVkaWFFcnJvci5oIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZTk3OGRiOGQyMmYwOTk1ZTdiN2U2Yjg2NWE2NmZlZDA4ODZiYTRjNi4uMzQzMmMxYzllMmMz
NWMzNWYwZjVmODI4OTI5NGQ2NDZmZGMyNjdhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTExMDAsNyArMTEwMCw2IEBACiAJCTUxMjZFNkJDMEEyRTNC
MTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjZFNkJBMEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTJERDhFMzBEOTFFMkI0MDAwRjg5RUUgLyogU2hhcmVkQnVmZmVyQ0YuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyREQ4RTIwRDkxRTJCNDAwMEY4
OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCAqLzsgfTsKIAkJNTEyREQ4RjQwRDkxRTZBRjAwMEY4
OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEyREQ4RUEwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFy
Y2hpdmUuY3BwICovOyB9OwotCQk1MTJERDhGNTBEOTFFNkFGMDAwRjg5RUUgLyogTGVnYWN5V2Vi
QXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEyREQ4RUIwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTJERDhGNjBEOTFFNkFG
MDAwRjg5RUUgLyogQXJjaGl2ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEyREQ4RUMwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTJERDhGNzBEOTFF
NkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhFRDBEOTFFNkFGMDAwRjg5
RUUgLyogQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTUxMkREOEY4MEQ5
MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTJERDhFRTBEOTFFNkFGMDAwRjg5
RUUgLyogQXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oICovOyB9OwpAQCAtMjY1Niw3ICsyNjU1
LDYgQEAKIAkJOTNFQjM1NUYwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVz
dFJlc3VsdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTNFQjM1NUUwOUUzN0ZENjAwRjQzNzk5IC8qIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMuY3BwICovOyB9OwogCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIz
QzAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTERvY3VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOThFRjA4MjQ1RTU5
MDAxRTlBQkMgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVn
YWN5SFRNTFRyZWVCdWlsZGVyLmggKi87IH07CiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVj
b2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8qIFJh
bmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
OTNGMTk5MjEwODI0NUU1OTAwMUU5QUJDIC8qIFhNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDMwQTAyREU0NDc2MDE4
NjM1Q0EgLyogWE1MRG9jdW1lbnRQYXJzZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjY4NSw3ICsyNjgzLDYgQEAKIAkJOTNGMTlBNUYwODI0
NUU1OTAwMUU5QUJDIC8qIFdlYkNvcmVWaWV3RmFjdG9yeS5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg1NTUwMkRFMzc1OTAxRUE0MTIyIC8qIFdl
YkNvcmVWaWV3RmFjdG9yeS5tICovOyB9OwogCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNEMjNCMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuY3BwICovOyB9
OwogCQk5M0YxOUE5MjA4MjQ1RTU5MDAxRTlBQkMgLyogSFRNTEVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyM0UwMkRFNDM5NjAx
ODYzNUNBIC8qIEhUTUxFbGVtZW50LmNwcCAqLzsgfTsKLQkJOTNGMTlBOUIwODI0NUU1OTAwMUU5
QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5
SFRNTFRyZWVCdWlsZGVyLmNwcCAqLzsgfTsKIAkJOTNGMTlBOUQwODI0NUU1OTAwMUU5QUJDIC8q
IFRleHRSZXNvdXJjZURlY29kZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjUyM0QyNzgwMkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURl
Y29kZXIuY3BwICovOyB9OwogCQk5M0YxOUFCOTA4MjQ1RTU5MDAxRTlBQkMgLyogUmFuZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDMw
MkRFNDQ3NjAxODYzNUNBIC8qIFJhbmdlLmNwcCAqLzsgfTsKIAkJOTNGMTlBQkMwODI0NUU1OTAw
MUU5QUJDIC8qIFhNTERvY3VtZW50UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSAvKiBYTUxEb2N1
bWVudFBhcnNlci5jcHAgKi87IH07CkBAIC0xMTE1NSw4ICsxMTE1Miw2IEBACiAJCUY1MjNEMjND
MDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRG9jdW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTERvY3VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzRTAy
REU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0Qy
M0YwMkRFNDM5NjAxODYzNUNBIC8qIEhUTUxFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDI1MDAy
REU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUhUTUxUcmVl
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwotCQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRNTFRyZWVC
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNzgwMkRFNDNENzAxODYzNUNBIC8q
IFRleHRSZXNvdXJjZURlY29kZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFJlc291cmNlRGVjb2Rlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI3
OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNlRGVjb2Rlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0UmVzb3VyY2VEZWNvZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlGNTIzRDMwMzAyREU0NDc2MDE4NjM1Q0EgLyogUmFuZ2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTE0
MzM1LDggKzE0MzMwLDYgQEAKIAkJCQlCMDE0OUU3QzExQTRCMjE1MDAxOTZBN0IgLyogSW1hZ2VS
ZXNpemVyVGhyZWFkLmggKi8sCiAJCQkJQTQ1NkZBMjQxMUFENEE4MzAwMjBCNDIwIC8qIExhYmVs
c05vZGVMaXN0LmNwcCAqLywKIAkJCQlBNDU2RkEyNTExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxz
Tm9kZUxpc3QuaCAqLywKLQkJCQlGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogTGVnYWN5SFRN
TFRyZWVCdWlsZGVyLmNwcCAqLywKLQkJCQlGNTIzRDI1MTAyREU0Mzk2MDE4NjM1Q0EgLyogTGVn
YWN5SFRNTFRyZWVCdWlsZGVyLmggKi8sCiAJCQkJRTQ0NjEzOUIwQ0Q2MzMxMDAwRkFEQTc1IC8q
IE1lZGlhRXJyb3IuaCAqLywKIAkJCQlFNDQ2MTM5QzBDRDYzMzEwMDBGQURBNzUgLyogTWVkaWFF
cnJvci5pZGwgKi8sCiAJCQkJQTVBRkIzNEQxMTUxNTFBNzAwQjA0NUNCIC8qIFN0ZXBSYW5nZS5j
cHAgKi8sCkBAIC0xOTQ1Miw4ICsxOTQ0NSw2IEBACiAJCQkJQTQ1NkZBMjcxMUFENEE4MzAwMjBC
NDIwIC8qIExhYmVsc05vZGVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUVDOUFGQjBBNzFB
MkM2MDBFRUVBRUQgLyogTGFuZ3VhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEOTA2NjA3MEJF
MTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk4
RUYwODI0NUU1OTAwMUU5QUJDIC8qIExlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTEyREQ4RjUwRDkxRTZBRjAwMEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRTY1QkVCMEVBQ0RGMTYwMDdFNDUzMyAvKiBMZW5ndGguaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkxMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhCb3gu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDRkY2NDkyMEVBRDE1QzIwMEMxRDZGNyAvKiBMZW5ndGhT
aXplLmggaW4gSGVhZGVycyAqLywKQEAgLTIyMDMwLDcgKzIyMDIxLDYgQEAKIAkJCQlBNDU2RkEy
NjExQUQ0QTgzMDAyMEI0MjAgLyogTGFiZWxzTm9kZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTM1MjA4NDUwOUJENDNCOTAwRjIwMzhEIC8qIExhbmd1YWdlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTkzRjE5QTlCMDgyNDVFNTkwMDFFOUFCQyAvKiBMZWdhY3lIVE1MVHJlZUJ1
aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RjQwRDkxRTZBRjAwMEY4OUVFIC8q
IExlZ2FjeVdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMjQxN0IwRDkzMUYz
RjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlC
Q0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDAxNWIxOGRiYjA5OWE5OGFhMjYyODMxYWFlYThjMTY5NjgyN2ZjMmUuLmMyMGI4
MjU1Y2E5YzY0MmI5NTkwNjFiZmU4MTBjMTBjNTI1MTAyZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTg5LDcg
Kzg5LDYgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKLSNpbmNs
dWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgpAQCAtMTkyMyw2
ICsxOTIyLDI0IEBAIHZvaWQgRG9jdW1lbnQ6OmNsb3NlKCkKICAgICB9CiB9CiAKKyNpZmRlZiBC
VUlMRElOR19PTl9MRU9QQVJECitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQo
RG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCktPnNldHRp
bmdzKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncyA/ICFzZXR0aW5ncy0+bmVlZHNMZW9wYXJk
TWFpbFF1aXJrcygpIDogdHJ1ZTsKK30KKyNlbGlmIGRlZmluZWQoQlVJTERJTkdfT05fVElHRVIp
CitzdGF0aWMgYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqIGRvY3VtZW50
KQoreworICAgIEFTU0VSVChkb2N1bWVudCk7CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9j
dW1lbnQtPnBhZ2UoKSA/IGRvY3VtZW50LT5wYWdlKCktPnNldHRpbmdzKCkgOiAwOworICAgIHJl
dHVybiBzZXR0aW5ncyA/ICFzZXR0aW5ncy0+bmVlZHNUaWdlck1haWxRdWlya3MoKSA6IHRydWU7
Cit9CisjZWxzZQoraW5saW5lIGJvb2wgc2hvdWxkQ3JlYXRlSW1wbGljaXRIZWFkKERvY3VtZW50
KikgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisKIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xv
c2UoKQogewogICAgIC8vIElmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgcmVjYWxjU3R5bGUsIHdl
IG5lZWQgdG8gZGVmZXIgdGhlIGNsb3NlIHVudGlsIHRoZSBzdHlsZSBpbmZvcm1hdGlvbiBpcyBh
Y2N1cmF0ZSBhbmQgYWxsIGVsZW1lbnRzIGFyZSByZS1hdHRhY2hlZC4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL0RvY3VtZW50UGFyc2VyLmggYi9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5o
CmluZGV4IGU1MWNmOTRmNDk1ODRjMGFiODIwOWEyNjJhYmFjOTFhMmJlNTU4OWMuLjZiNzljYWNj
YmNkMjhkNDIxODZiMzU2YTFkZjQyMTJlMGM2ZWZkMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L0RvY3VtZW50UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9kb20vRG9jdW1lbnRQYXJzZXIuaApAQCAt
MzAsNyArMzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERvY3VtZW50OwogY2xh
c3MgRG9jdW1lbnRXcml0ZXI7Ci1jbGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBT
ZWdtZW50ZWRTdHJpbmc7CiBjbGFzcyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI7CiAKQEAgLTYx
LDEwICs2MCw2IEBAIHB1YmxpYzoKICAgICAvLyB1c2VkIHRvIGltcGxlbWVudHMgaXQuCiAgICAg
dmlydHVhbCBib29sIHByb2Nlc3NpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAot
ICAgIC8vIEZJWE1FOiBFeHBvc2VkIGZvciBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZW1vdmVk
RnJvbVRyZWUuICBIVE1MIERPTQotICAgIC8vIGNvZGUgc2hvdWxkIG5vdCBuZWVkIHRvIHJlYWNo
IGludG8gaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcGFyc2VyLgotICAgIHZpcnR1YWwg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyKiBodG1sVHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0KICAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50
OyB9CiAKICAgICAvLyBEb2N1bWVudCBpcyBleHBlY3RlZCB0byBkZXRhY2ggdGhlIHBhcnNlciBi
ZWZvcmUgcmVsZWFzaW5nIGl0cyByZWYuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9TY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNl
ci5oCmluZGV4IGY1ZjJlNDJjMTdhYzkxYzQ2OTUzNWM5Mzc1MTM3OTNjMTNhMDEyZTguLmUyYjNm
MDk4YzA4MGJiNDIxODJiYzYzZTIyNTVmN2M1NDZlMTk3OTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL1NjcmlwdGFi
bGVEb2N1bWVudFBhcnNlci5oCkBAIC01Miw5ICs1Miw2IEBAIHB1YmxpYzoKICAgICBYU1NBdWRp
dG9yKiB4c3NBdWRpdG9yKCkgY29uc3QgeyByZXR1cm4gbV94c3NBdWRpdG9yOyB9CiAgICAgdm9p
ZCBzZXRYU1NBdWRpdG9yKFhTU0F1ZGl0b3IqIGF1ZGl0b3IpIHsgbV94c3NBdWRpdG9yID0gYXVk
aXRvcjsgfQogCi0gICAgLy8gRXhwb3NlZCBmb3IgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpyZXBv
cnRFcnJvclRvQ29uc29sZQotICAgIHZpcnR1YWwgYm9vbCBwcm9jZXNzaW5nQ29udGVudFdyaXR0
ZW5CeVNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KIHByb3RlY3RlZDoKICAgICBT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqLCBib29sIHZpZXdTb3VyY2VNb2RlID0g
ZmFsc2UpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwIGIvV2ViQ29yZS9odG1sL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAppbmRleCAwYWFmMDg3
YzA4MTJjYjJiOGIzYWU3NTFkMTJlNGE1N2NjYWY3YzFkLi44NzM1Y2QyMWRiOWUxMzJmOTUxMzlh
ZmJjYjkzY2UxYjdkYzQyMTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTENvbnN0cnVj
dGlvblNpdGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAK
QEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxUb2tlbi5oIgogI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKLSNpbmNsdWRlICJM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAj
aWYgRU5BQkxFKE1BVEhNTCkKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGFlMWFjNjJlNWRkZWNhNDA1OThhZWJkZWZj
ZGQwODA3NDRmYTA2YTIuLjIwODBkOTFjM2NhN2ZmNTkxZDQ0MDVjZTYxMGQ4ZWI5YThkNDc3ZWMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTM5LDcgKzM5LDYg
QEAKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVC
dWlsZGVyLmgiCiAjaW5jbHVkZSAiTGFiZWxzTm9kZUxpc3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBAIC0xNzMsMTEgKzE3Miw3IEBAIHZvaWQgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKICAgICAvLyBJ
ZiB0aGUgZm9ybSBhbmQgZWxlbWVudCBhcmUgYm90aCBpbiB0aGUgc2FtZSB0cmVlLCBwcmVzZXJ2
ZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgZm9ybS4KICAgICAvLyBPdGhlcndpc2UsIG51bGwgb3V0
IG91ciBmb3JtIGFuZCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGZvcm0ncyBsaXN0IG9mIGVs
ZW1lbnRzLgotICAgIExlZ2FjeUhUTUxUcmVlQnVpbGRlciogdHJlZUJ1aWxkZXIgPSAwOwotICAg
IGlmIChEb2N1bWVudFBhcnNlciogcGFyc2VyID0gZG9jdW1lbnQoKS0+cGFyc2VyKCkpCi0gICAg
ICAgIHRyZWVCdWlsZGVyID0gcGFyc2VyLT5odG1sVHJlZUJ1aWxkZXIoKTsKLQotICAgIGlmICht
X2Zvcm0gJiYgISh0cmVlQnVpbGRlciAmJiB0cmVlQnVpbGRlci0+aXNIYW5kbGluZ1Jlc2lkdWFs
U3R5bGVBY3Jvc3NCbG9ja3MoKSkgJiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3Jt
KSkgeworICAgIGlmIChtX2Zvcm0gJiYgZmluZFJvb3QodGhpcykgIT0gZmluZFJvb3QobV9mb3Jt
KSkgewogICAgICAgICBtX2Zvcm0tPnJlbW92ZUZvcm1FbGVtZW50KHRoaXMpOwogICAgICAgICBt
X2Zvcm0gPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAwNzFmOTA3
ZDZjODNmZjU5YmMzODA0OTRjMzMyYzgzNjdhMTcwNTZlLi42MjllMDdiOTczODZjYWI1MmQ1NzVm
MWY5NGJiMzM5YmY5MjcwOTk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC01MCw3
ICs1MCw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJMZWdhY3lI
VE1MVHJlZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJIVE1MVHJlZUJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1
ZGUgIk1vdXNlRXZlbnQuaCIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAppbmRleCA3YzAyNWY3
ZjY4MDkzYzljYmUwNjY2N2NiMWZjNjg0MzRkMWRmZjBiLi5hYWJhMTI1MjQ3ZjYxMDFmNDIzZDI4
MTQzNGMzNzk4MjljM2UxODhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTE1ldGVyRWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1F
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRy
ZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiSFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTWV0ZXIuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCA1Y2Y3NzE0MmQyNjIyYjZiMTlkYzdhMGUyZTA5Yzdk
NTdkNjhkNjNhLi5kZTY1ZmNiYTE5ZTIwYzQzMzRlOWVmZmVjZjVmY2Y4MzdiZWI5Y2VhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVk
ZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCisjaW5j
bHVkZSAiSFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAKaW5k
ZXggYzg1M2NiZmUyMDk1ZTM1OTllOWM3OGIwOGYzMTZiNTkyM2NjZTBhZS4uN2U5OTk2YWI2NzQ3
Mjg4YTBkZTRmYzA3ZWFlZjViNjdmMjQxZTE4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hU
TUxUcmVlQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5jcHAK
QEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCiAjaW5jbHVkZSAiWE1M
TlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL2R0b2EuaD4K
ICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
Mjg0Miw0ICsyODQzLDQyIEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwbHVnaW5zRW5hYmxlZChG
cmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+c3ViZnJhbWVMb2FkZXIo
KS0+YWxsb3dQbHVnaW5zKE5vdEFib3V0VG9JbnN0YW50aWF0ZVBsdWdpbik7CiB9CiAKKy8vIEZJ
WE1FOiBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gYSBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlLgorU3Ry
aW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlIG51bWJlcikKK3sKKyAgICAvLyBBY2Nv
cmRpbmcgdG8gSFRNTDUsICJ0aGUgYmVzdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyIG4g
YXMgYSBmbG9hdGluZworICAgIC8vIHBvaW50IG51bWJlciIgaXMgYSBzdHJpbmcgcHJvZHVjZWQg
YnkgYXBwbHlpbmcgVG9TdHJpbmcoKSB0byBuLgorICAgIER0b2FCdWZmZXIgYnVmZmVyOworICAg
IHVuc2lnbmVkIGxlbmd0aDsKKyAgICBkb3VibGVUb1N0cmluZ0luSmF2YVNjcmlwdEZvcm1hdChu
dW1iZXIsIGJ1ZmZlciwgJmxlbmd0aCk7CisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIsIGxlbmd0
aCk7Cit9CisKKy8vIEZJWE1FOiBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gYSBtb3JlIGFwcHJvcHJp
YXRlIHBsYWNlLgorYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdHJpbmcm
IHNyYywgZG91YmxlKiBvdXQpCit7CisgICAgLy8gU2VlIEhUTUw1IDIuNC40LjMgYFJlYWwgbnVt
YmVycy4nCisKKyAgICBpZiAoc3JjLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIC8vIFN0cmluZzo6dG9Eb3VibGUoKSBhY2NlcHRzIGxlYWRpbmcgKyBcdCBcbiBcdiBcZiBc
ciBhbmQgU1BBQ0UsIHdoaWNoIGFyZSBpbnZhbGlkIGluIEhUTUw1LgorICAgIC8vIFNvLCBjaGVj
ayB0aGUgZmlyc3QgY2hhcmFjdGVyLgorICAgIGlmIChzcmNbMF0gIT0gJy0nICYmIChzcmNbMF0g
PCAnMCcgfHwgc3JjWzBdID4gJzknKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9v
bCB2YWxpZCA9IGZhbHNlOworICAgIGRvdWJsZSB2YWx1ZSA9IHNyYy50b0RvdWJsZSgmdmFsaWQp
OworICAgIGlmICghdmFsaWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBOYU4gYW5k
IEluZmluaXR5IGFyZSBub3QgdmFsaWQgbnVtYmVycyBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJk
LgorICAgIGlmICghaXNmaW5pdGUodmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gLTAgLT4gMAorICAgIGlmICghdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBpZiAo
b3V0KQorICAgICAgICAqb3V0ID0gdmFsdWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaCBiL1dlYkNvcmUvaHRtbC9I
VE1MVHJlZUJ1aWxkZXIuaAppbmRleCA5OWQ2YTU4YzFhNjhjMTgxZGZjOTkxMzU3OTFmOGY3ZWJk
YTc4YTliLi5jMzBlNmI4ZGM4OTk4ZjI4YzBkYWI2NWVlZTI1NDMyMGJiZThiY2U1IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hU
TUxUcmVlQnVpbGRlci5oCkBAIC0yNTUsNiArMjU1LDE4IEBAIHByaXZhdGU6CiAgICAgaW50IG1f
bGFzdFNjcmlwdEVsZW1lbnRTdGFydExpbmU7CiB9OwogCisvLyBGSVhNRTogTW92ZSB0aGVzZSBm
dW5jdGlvbnMgdG8gYSBtb3JlIGFwcHJvcHJpYXRlIHBsYWNlLgorCisvLyBDb252ZXJ0cyB0aGUg
c3BlY2lmaWVkIHN0cmluZyB0byBhIGZsb2F0aW5nIG51bWJlci4KKy8vIElmIHRoZSBjb252ZXJz
aW9uIGZhaWxzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGZhbHNlLiBUYWtlIGNhcmUgdGhhdCBsZWFk
aW5nCisvLyBvciB0cmFpbGluZyB1bm5lY2Vzc2FyeSBjaGFyYWN0ZXJzIG1ha2UgZmFpbHVyZXMu
ICBUaGlzIHJldHVybnMgZmFsc2UgZm9yIGFuCisvLyBlbXB0eSBzdHJpbmcgaW5wdXQuCisvLyBU
aGUgZG91YmxlKiBwYXJhbWV0ZXIgbWF5IGJlIDAuCitib29sIHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGNvbnN0IFN0cmluZyYsIGRvdWJsZSopOworLy8gQ29udmVydHMgdGhlIHNwZWNpZmll
ZCBudW1iZXIgdG8gYSBzdHJpbmcuIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YKKy8vIEhU
TUw1J3MgImFsZ29yaXRobSB0byBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgc3RyaW5nIiBmb3IgTlVN
QkVSL1JBTkdFIHR5cGVzLgorU3RyaW5nIHNlcmlhbGl6ZUZvck51bWJlclR5cGUoZG91YmxlKTsK
KwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZVBh
cnNlci5oIGIvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmgKaW5kZXggMGZjM2Q0
YWJiMzA3YWZlZDU3MzE2MTE0ZWFkMGM2YmYwMDYyMzk1Ny4uNzYzZDdkMzNiNDFlMmQ1ZmYxMDdl
ZWQxMDkyODVmMjM4NmVjNzljYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291
cmNlUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlUGFyc2VyLmgKQEAg
LTM5LDcgKzM5LDYgQEAgY2xhc3MgSFRNTFRva2VuaXplcjsKIGNsYXNzIEhUTUxTY3JpcHRSdW5u
ZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBIVE1MUHJlbG9hZFNjYW5uZXI7Ci1j
bGFzcyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI7CiBjbGFzcyBTY3JpcHRDb250cm9sbGVyOwogY2xh
c3MgU2NyaXB0U291cmNlQ29kZTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhU
TUxUcmVlQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM5NTc5YzlmMGY3NGQ5YjE2NTM1ODNi
Y2Y3MzhiOGJhMDk4YjJhOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDE3ODYgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGlu
IEpvbmVzIChtam9uZXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTcgVG9yYmVuIFdl
aXMgKHdlaXNAa2RlLm9yZykKLSAgICAgICAgICAgICAgKEMpIDE5OTksMjAwMSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMjAwMCwyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIgotCi0jaW5jbHVkZSAiQ2hhcmFjdGVyTmFt
ZXMuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgotI2luY2x1ZGUgIkNvbW1lbnQuaCIKLSNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAi
RE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50VHlwZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTEJvZHlFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0jaW5jbHVkZSAiSFRNTERpdkVsZW1l
bnQuaCIKLSNpbmNsdWRlICJIVE1MRExpc3RFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1l
bnRGYWN0b3J5LmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRN
TEhlYWRFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEhSRWxlbWVudC5oIgotI2luY2x1ZGUgIkhU
TUxIdG1sRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudC5oIgotI2luY2x1
ZGUgIkhUTUxNYXBFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAi
SFRNTFBhcnNlclF1aXJrcy5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUcmVlRGVwdGhMaW1pdC5o
IgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvZHRvYS5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLXN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjTWF4UmVkdW5kYW50VGFnRGVwdGggPSAyMDsKLXN0YXRpYyBj
b25zdCB1bnNpZ25lZCBjUmVzaWR1YWxTdHlsZU1heERlcHRoID0gMjAwOwotc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNSZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQgPSAxMDsKLQotCi1zdGF0aWMg
Y29uc3QgaW50IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSA9IDM7Ci0KLS8vIEEgY2FwIG9uIHRo
ZSBudW1iZXIgb2YgdGFncyB3aXRoIHByaW9yaXR5IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSBv
ciBoaWdoZXIKLS8vIGFsbG93ZWQgaW4gbV9ibG9ja1N0YWNrLiBUaGUgY2FwIGlzIGVuZm9yY2Vk
IGJ5IGFkZGluZyBzdWNoIG5ldyBlbGVtZW50cyBhcwotLy8gc2libGluZ3MgaW5zdGVhZCBvZiBj
aGlsZHJlbiBvbmNlIGl0IGlzIHJlYWNoZWQuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGNNYXhCbG9j
a0RlcHRoID0gNDA5NjsKLQotCi10eXBlZGVmIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IFRh
Z05hbWVTZXQ7Ci0KLXRlbXBsYXRlPCBzaXplX3QgQXJyYXlTaXplID4KLXN0YXRpYyB2b2lkIGFk
ZFRhZ3MoVGFnTmFtZVNldCYgc2V0LCBRdWFsaWZpZWROYW1lICgmbmFtZXMpW0FycmF5U2l6ZV0p
Ci17Ci0gICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBBcnJheVNpemU7IHgrKykgewotICAgICAg
ICBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lID0gbmFtZXNbeF07Ci0gICAgICAgIHNldC5hZGQo
bmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgIH0KLX0KLQotc3RydWN0IEhUTUxTdGFja0Vs
ZW0gOiBOb25jb3B5YWJsZSB7Ci0gICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcm
IHQsIGludCBsdmwsIE5vZGUqIG4sIGJvb2wgciwgSFRNTFN0YWNrRWxlbSogbngpCi0gICAgICAg
IDogdGFnTmFtZSh0KQotICAgICAgICAsIGxldmVsKGx2bCkKLSAgICAgICAgLCBzdHJheVRhYmxl
Q29udGVudChmYWxzZSkKLSAgICAgICAgLCBub2RlKG4pCi0gICAgICAgICwgZGlkUmVmTm9kZShy
KQotICAgICAgICAsIG5leHQobngpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZGVyZWZOb2Rl
KCkKLSAgICB7Ci0gICAgICAgIGlmIChkaWRSZWZOb2RlKQotICAgICAgICAgICAgbm9kZS0+ZGVy
ZWYoKTsKLSAgICB9Ci0KLSAgICBBdG9taWNTdHJpbmcgdGFnTmFtZTsKLSAgICBpbnQgbGV2ZWw7
Ci0gICAgYm9vbCBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlKiBub2RlOwotICAgIGJvb2wg
ZGlkUmVmTm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtKiBuZXh0OwotfTsKLQotLyoqCi0gKiBUaGUg
cGFyc2VyIHBhcnNlcyB0b2tlbml6ZWQgaW5wdXQgaW50byB0aGUgZG9jdW1lbnQsIGJ1aWxkaW5n
IHVwIHRoZQotICogZG9jdW1lbnQgdHJlZS4gSWYgdGhlIGRvY3VtZW50IGlzIHdlbGwtZm9ybWVk
LCBwYXJzaW5nIGl0IGlzIHN0cmFpZ2h0Zm9yd2FyZC4KLSAqCi0gKiBVbmZvcnR1bmF0ZWx5LCB3
ZSBoYXZlIHRvIGhhbmRsZSBtYW55IEhUTUwgZG9jdW1lbnRzIHRoYXQgYXJlIG5vdCB3ZWxsLWZv
cm1lZCwKLSAqIHNvIHRoZSBwYXJzZXIgaGFzIHRvIGJlIHRvbGVyYW50IGFib3V0IGVycm9ycy4K
LSAqCi0gKiBXZSBoYXZlIHRvIHRha2UgY2FyZSBvZiBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGVy
cm9yIGNvbmRpdGlvbnM6Ci0gKgotICogMS4gVGhlIGVsZW1lbnQgYmVpbmcgYWRkZWQgaXMgZXhw
bGljaXRseSBmb3JiaWRkZW4gaW5zaWRlIHNvbWUgb3V0ZXIgdGFnLgotICogICAgSW4gdGhpcyBj
YXNlIHdlIHNob3VsZCBjbG9zZSBhbGwgdGFncyB1cCB0byB0aGUgb25lLCB3aGljaCBmb3JiaWRz
Ci0gKiAgICB0aGUgZWxlbWVudCwgYW5kIGFkZCBpdCBhZnRlcndhcmRzLgotICoKLSAqIDIuIFdl
IGFyZSBub3QgYWxsb3dlZCB0byBhZGQgdGhlIGVsZW1lbnQgZGlyZWN0bHkuIEl0IGNvdWxkIGJl
IHRoYXQKLSAqICAgIHRoZSBwZXJzb24gd3JpdGluZyB0aGUgZG9jdW1lbnQgZm9yZ290IHNvbWUg
dGFnIGluIGJldHdlZW4gKG9yIHRoYXQgdGhlCi0gKiAgICB0YWcgaW4gYmV0d2VlbiBpcyBvcHRp
b25hbCkuIFRoaXMgY291bGQgYmUgdGhlIGNhc2Ugd2l0aCB0aGUgZm9sbG93aW5nCi0gKiAgICB0
YWdzOiBIVE1MIEhFQUQgQk9EWSBUQk9EWSBUUiBURCBMSSAoZGlkIEkgZm9yZ2V0IGFueT8pLgot
ICoKLSAqIDMuIFdlIHdhbnQgdG8gYWRkIGEgYmxvY2sgZWxlbWVudCBpbnNpZGUgdG8gYW4gaW5s
aW5lIGVsZW1lbnQuIENsb3NlIGFsbAotICogICAgaW5saW5lIGVsZW1lbnRzIHVwIHRvIHRoZSBu
ZXh0IGhpZ2hlciBibG9jayBlbGVtZW50LgotICoKLSAqIDQuIElmIHRoaXMgZG9lc24ndCBoZWxw
LCBjbG9zZSBlbGVtZW50cyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgdGhlCi0gKiAgICBl
bGVtZW50IG9yIGlnbm9yZSB0aGUgdGFnLgotICoKLSAqLwotCi1MZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6OkxlZ2FjeUhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcnRF
cnJvcnMpCi0gICAgOiBtX2RvY3VtZW50KGRvYykKLSAgICAsIG1fY3VycmVudChkb2MpCi0gICAg
LCBtX2RpZFJlZkN1cnJlbnQoZmFsc2UpCi0gICAgLCBtX2Jsb2NrU3RhY2soMCkKLSAgICAsIG1f
YmxvY2tzSW5TdGFjaygwKQotICAgICwgbV90cmVlRGVwdGgoMCkKLSAgICAsIG1faGFzUEVsZW1l
bnRJblNjb3BlKE5vdEluU2NvcGUpCi0gICAgLCBtX2luQm9keShmYWxzZSkKLSAgICAsIG1faGF2
ZUNvbnRlbnQoZmFsc2UpCi0gICAgLCBtX2hhdmVGcmFtZVNldChmYWxzZSkKLSAgICAsIG1faXNQ
YXJzaW5nRnJhZ21lbnQoZmFsc2UpCi0gICAgLCBtX3JlcG9ydEVycm9ycyhyZXBvcnRFcnJvcnMp
Ci0gICAgLCBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKLSAgICAs
IG1faW5TdHJheVRhYmxlQ29udGVudCgwKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEZy
YWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKLSAgICAsIG1fcGFyc2VyUXVpcmtzKG1fZG9jdW1lbnQt
PnBhZ2UoKSA/IG1fZG9jdW1lbnQtPnBhZ2UoKS0+Y2hyb21lKCktPmNsaWVudCgpLT5jcmVhdGVI
VE1MUGFyc2VyUXVpcmtzKCkgOiAwKQotewotfQotCi1MZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Okxl
Z2FjeUhUTUxUcmVlQnVpbGRlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IG1fZG9jdW1lbnQoZnJh
Zy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY3VycmVudChmcmFnKQotICAgICwgbV9kaWRSZWZDdXJy
ZW50KHRydWUpCi0gICAgLCBtX2Jsb2NrU3RhY2soMCkKLSAgICAsIG1fYmxvY2tzSW5TdGFjaygw
KQotICAgICwgbV90cmVlRGVwdGgoMCkKLSAgICAsIG1faGFzUEVsZW1lbnRJblNjb3BlKE5vdElu
U2NvcGUpCi0gICAgLCBtX2luQm9keSh0cnVlKQotICAgICwgbV9oYXZlQ29udGVudChmYWxzZSkK
LSAgICAsIG1faGF2ZUZyYW1lU2V0KGZhbHNlKQotICAgICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0
cnVlKQotICAgICwgbV9yZXBvcnRFcnJvcnMoZmFsc2UpCi0gICAgLCBtX2hhbmRsaW5nUmVzaWR1
YWxTdHlsZUFjcm9zc0Jsb2NrcyhmYWxzZSkKLSAgICAsIG1faW5TdHJheVRhYmxlQ29udGVudCgw
KQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAg
LCBtX3BhcnNlclF1aXJrcyhtX2RvY3VtZW50LT5wYWdlKCkgPyBtX2RvY3VtZW50LT5wYWdlKCkt
PmNocm9tZSgpLT5jbGllbnQoKS0+Y3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIDogMCkKLXsKLSAg
ICBpZiAoZnJhZykKLSAgICAgICAgZnJhZy0+cmVmKCk7Ci19Ci0KLUxlZ2FjeUhUTUxUcmVlQnVp
bGRlcjo6fkxlZ2FjeUhUTUxUcmVlQnVpbGRlcigpCi17Ci0gICAgZnJlZUJsb2NrKCk7Ci0gICAg
aWYgKG1fZGlkUmVmQ3VycmVudCkKLSAgICAgICAgbV9jdXJyZW50LT5kZXJlZigpOwotfQotCi12
b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cmVzZXQoKQotewotICAgIEFTU0VSVCghbV9pc1Bh
cnNpbmdGcmFnbWVudCk7Ci0KLSAgICBzZXRDdXJyZW50KG1fZG9jdW1lbnQpOwotCi0gICAgZnJl
ZUJsb2NrKCk7Ci0KLSAgICBtX3RyZWVEZXB0aCA9IDA7Ci0gICAgbV9pbkJvZHkgPSBmYWxzZTsK
LSAgICBtX2hhdmVGcmFtZVNldCA9IGZhbHNlOwotICAgIG1faGF2ZUNvbnRlbnQgPSBmYWxzZTsK
LSAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQgPSAwOwotCi0gICAgbV9jdXJyZW50Rm9ybUVsZW1l
bnQgPSAwOwotICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOwotICAgIG1faGVhZCA9IDA7Ci0g
ICAgbV9pc2luZGV4RWxlbWVudCA9IDA7Ci0KLSAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207
Ci0gICAgCi0gICAgaWYgKG1fcGFyc2VyUXVpcmtzKQotICAgICAgICBtX3BhcnNlclF1aXJrcy0+
cmVzZXQoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnNldEN1cnJlbnQoTm9k
ZSogbmV3Q3VycmVudCkgCi17Ci0gICAgYm9vbCBkaWRSZWZOZXdDdXJyZW50ID0gbmV3Q3VycmVu
dCAmJiBuZXdDdXJyZW50ICE9IG1fZG9jdW1lbnQ7Ci0gICAgaWYgKGRpZFJlZk5ld0N1cnJlbnQp
IAotICAgICAgICBuZXdDdXJyZW50LT5yZWYoKTsgCi0gICAgaWYgKG1fZGlkUmVmQ3VycmVudCkg
Ci0gICAgICAgIG1fY3VycmVudC0+ZGVyZWYoKTsKLSAgICBtX2N1cnJlbnQgPSBuZXdDdXJyZW50
OwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGRpZFJlZk5ld0N1cnJlbnQ7Ci19Ci0KLWlubGluZSBz
dGF0aWMgaW50IHRhZ1ByaW9yaXR5T2ZOb2RlKE5vZGUqIG4pCi17Ci0gICAgcmV0dXJuIG4tPmlz
SFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4obiktPnRhZ1ByaW9yaXR5
KCkgOiAwOwotfQotCi1pbmxpbmUgdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmxpbWl0RGVw
dGgoaW50IHRhZ1ByaW9yaXR5KQotewotICAgIHdoaWxlIChtX3RyZWVEZXB0aCA+PSBtYXhET01U
cmVlRGVwdGgpCi0gICAgICAgIHBvcEJsb2NrKG1fYmxvY2tTdGFjay0+dGFnTmFtZSk7Ci0gICAg
aWYgKHRhZ1ByaW9yaXR5ID49IG1pbkJsb2NrTGV2ZWxUYWdQcmlvcml0eSkgewotICAgICAgICB3
aGlsZSAobV9ibG9ja3NJblN0YWNrID49IGNNYXhCbG9ja0RlcHRoKQotICAgICAgICAgICAgcG9w
QmxvY2sobV9ibG9ja1N0YWNrLT50YWdOYW1lKTsKLSAgICB9Ci19Ci0KLWlubGluZSBib29sIExl
Z2FjeUhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0Tm9kZUFmdGVyTGltaXREZXB0aChOb2RlKiBuLCBi
b29sIGZsYXQpCi17Ci0gICAgbGltaXREZXB0aCh0YWdQcmlvcml0eU9mTm9kZShuKSk7Ci0gICAg
cmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Ci19Ci0KLVBhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpwYXJzZVRva2VuKFRva2VuKiB0KQotewotICAgIGlmICghbV9za2lw
TW9kZVRhZy5pc051bGwoKSkgewotICAgICAgICBpZiAoIXQtPmJlZ2luVGFnICYmIHQtPnRhZ05h
bWUgPT0gbV9za2lwTW9kZVRhZykKLSAgICAgICAgICAgIC8vIEZvdW5kIHRoZSBlbmQgdGFnIGZv
ciB0aGUgY3VycmVudCBza2lwIG1vZGUsIHNvIHdlJ3JlIGRvbmUgc2tpcHBpbmcuCi0gICAgICAg
ICAgICBtX3NraXBNb2RlVGFnID0gbnVsbEF0b207Ci0gICAgICAgIGVsc2UgaWYgKG1fY3VycmVu
dC0+bG9jYWxOYW1lKCkgPT0gdC0+dGFnTmFtZSkKLSAgICAgICAgICAgIC8vIERvIG5vdCBza2lw
IDwvaWZyYW1lPi4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGRvZXMgdGhhdCBjb21tZW50
IG1lYW4/IEhvdyBjYW4gaXQgYmUgcmlnaHQgdG8gcGFyc2UgYSB0b2tlbiB3aXRob3V0IGNsZWFy
aW5nIG1fc2tpcE1vZGVUYWc/Ci0gICAgICAgICAgICA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIEFwcGFyZW50bHkgc29tZSBzaXRlcyB1c2Ug
PC9icj4gaW5zdGVhZCBvZiA8YnI+LiBCZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIEZpcmVmb3gg
YW5kIHRyZWF0IHRoaXMgbGlrZSA8YnI+LgotICAgIGlmICh0LT5pc0Nsb3NlVGFnKGJyVGFnKSAm
JiBtX2RvY3VtZW50LT5pbkNvbXBhdE1vZGUoKSkgewotICAgICAgICByZXBvcnRFcnJvcihNYWxm
b3JtZWRCUkVycm9yKTsKLSAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwotICAgIH0KLQotICAg
IGlmICghdC0+YmVnaW5UYWcpIHsKLSAgICAgICAgcHJvY2Vzc0Nsb3NlVGFnKHQpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3Qg
aW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlLgotICAgIC8vIERvIG5vdCBh
bHRlciB0aGUgdGV4dCBpZiBpdCBpcyBwYXJ0IG9mIGEgc2NyaXB0VGFnLgotICAgIGlmICh0LT50
YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQgJiYgbV9jdXJyZW50LT5sb2NhbE5hbWUoKSAh
PSBzY3JpcHRUYWcpIHsKLSAgICAgICAgaWYgKG1faW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIG1f
Y3VycmVudC0+bG9jYWxOYW1lKCkgIT0gc3R5bGVUYWcgJiYKLSAgICAgICAgICAgIG1fY3VycmVu
dC0+bG9jYWxOYW1lKCkgIT0gdGl0bGVUYWcgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkKLSAgICAgICAgICAgIG1faGF2ZUNvbnRlbnQgPSB0cnVlOwotCi0gICAgICAgIC8v
IEhUTUw1IHJlcXVpcmVzIHRleHQgbm9kZSBjb2FsZXNjaW5nLgotICAgICAgICAvLyBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90b2tl
bml6YXRpb24uaHRtbCNpbnNlcnQtYS1jaGFyYWN0ZXIKLSAgICAgICAgTm9kZSogcHJldmlvdXND
aGlsZCA9IG1fY3VycmVudC0+bGFzdENoaWxkKCk7Ci0gICAgICAgIGlmIChwcmV2aW91c0NoaWxk
ICYmIHByZXZpb3VzQ2hpbGQtPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAgLy8gT25seSBj
b2FsZXNjZSB0ZXh0IG5vZGVzIGlmIHRoZSB0ZXh0IG5vZGUgd291bGRuJ3QgYmUgZm9zdGVyIHBh
cmVudGVkLgotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykK
LSAgICAgICAgICAgICAgICAmJiAhbV9jdXJyZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKQotICAg
ICAgICAgICAgICAgICYmICFtX2N1cnJlbnQtPmhhc1RhZ05hbWUodHJUYWcpCi0gICAgICAgICAg
ICAgICAgJiYgIW1fY3VycmVudC0+aGFzVGFnTmFtZSh0aGVhZFRhZykKLSAgICAgICAgICAgICAg
ICAmJiAhbV9jdXJyZW50LT5oYXNUYWdOYW1lKHRib2R5VGFnKQotICAgICAgICAgICAgICAgICYm
ICFtX2N1cnJlbnQtPmhhc1RhZ05hbWUodGZvb3RUYWcpCi0gICAgICAgICAgICAgICAgJiYgIW1f
Y3VycmVudC0+aGFzVGFnTmFtZSh0aXRsZVRhZykpIHsKLSAgICAgICAgICAgICAgICAvLyBUZWNo
bmljYWxseSB3ZSdyZSBvbmx5IHN1cHBvc2VkIHRvIG1lcmdlIGludG8gdGhlIHByZXZpb3VzCi0g
ICAgICAgICAgICAgICAgLy8gdGV4dCBub2RlIGlmIGl0IHdhcyB0aGUgbGFzdCBub2RlIGluc2Vy
dGVkIGJ5IHRoZSBwYXJzZXIuCi0gICAgICAgICAgICAgICAgLy8gKFRoaXMgd2FzIGEgc3BlYyBt
b2RpZmljYXRpb24gbWFkZSB0byBtYWtlIGl0IGVhc2llciBmb3IKLSAgICAgICAgICAgICAgICAv
LyBtb3ppbGxhIHRvIHJ1biB0aGVpciBwYXJzZXIgaW4gYSB0aHJlYWQuKQotICAgICAgICAgICAg
ICAgIC8vIEluIHByYWN0aWNlIGl0IGRvZXMgbm90IHNlZW0gdG8gbWF0dGVyLgotICAgICAgICAg
ICAgICAgIENoYXJhY3RlckRhdGEqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0
YSo+KHByZXZpb3VzQ2hpbGQpOwotICAgICAgICAgICAgICAgIHRleHROb2RlLT5wYXJzZXJBcHBl
bmREYXRhKHQtPnRleHQpOwotICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Tm9kZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxOb2RlPiBuOwotICAgICAgICBT
dHJpbmcgdGV4dCA9IHQtPnRleHQuZ2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXJzTGVmdCA9
IHRleHQubGVuZ3RoKCk7Ci0gICAgICAgIHdoaWxlIChjaGFyc0xlZnQpIHsKLSAgICAgICAgICAg
IC8vIHNwbGl0IGxhcmdlIGJsb2NrcyBvZiB0ZXh0IHRvIG5vZGVzIG9mIG1hbmFnZWFibGUgc2l6
ZQotICAgICAgICAgICAgbiA9IFRleHQ6OmNyZWF0ZVdpdGhMZW5ndGhMaW1pdChtX2RvY3VtZW50
LCB0ZXh0LCBjaGFyc0xlZnQpOwotICAgICAgICAgICAgaWYgKCFpbnNlcnROb2RlQWZ0ZXJMaW1p
dERlcHRoKG4uZ2V0KCksIHQtPnNlbGZDbG9zaW5nVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8
Tm9kZT4gbiA9IGdldE5vZGUodCk7Ci0gICAgLy8ganVzdCB0byBiZSBzdXJlLCBhbmQgdG8gY2F0
Y2ggY3VycmVudGx5IHVuaW1wbGVtZW50ZWQgc3R1ZmYKLSAgICBpZiAoIW4pCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihuLmdldCgpKTsKLSAgICAgICAgaWYgKG1fc2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVu
dFNjcmlwdGluZ0FsbG93ZWQgfHwgdC0+dGFnTmFtZSAhPSBzY3JpcHRUYWcpCi0gICAgICAgICAg
ICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMuZ2V0KCksIG1fc2NyaXB0aW5nUGVybWlzc2lv
bik7Ci0KLSAgICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAg
ICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzT3B0aW9uYWwpCi0gICAg
ICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKLSAgICAgICAgICAgIAotICAgICAgICAvLyBJ
ZiB0aGUgbm9kZSBkb2VzIG5vdCBoYXZlIGEgZm9yYmlkZGVuIGVuZCB0YWcgcmVxdWlyZW1lbnQs
IGFuZCBpZiB0aGUgYnJva2VuIFhNTCBzZWxmLWNsb3NpbmcKLSAgICAgICAgLy8gc3ludGF4IHdh
cyB1c2VkLCByZXBvcnQgYW4gZXJyb3IuCi0gICAgICAgIGlmICh0LT5icm9rZW5YTUxTdHlsZSAm
JiBlLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikgewotICAgICAg
ICAgICAgaWYgKHQtPnRhZ05hbWUgPT0gc2NyaXB0VGFnKQotICAgICAgICAgICAgICAgIHJlcG9y
dEVycm9yKEluY29ycmVjdFhNTENsb3NlU2NyaXB0V2FybmluZyk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoSW5jb3JyZWN0WE1MU2VsZkNsb3NlRXJyb3Is
ICZ0LT50YWdOYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZUFm
dGVyTGltaXREZXB0aChuLmdldCgpLCB0LT5zZWxmQ2xvc2luZ1RhZykpIHsKLSAgICAgICAgLy8g
d2UgY291bGRuJ3QgaW5zZXJ0IHRoZSBub2RlCi0KLSAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5v
ZGUoKSkgewotICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
LmdldCgpKTsKLSAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtX2N1cnJlbnRNYXBFbGVtZW50ID09IG4pCi0gICAgICAgICAgICBtX2N1
cnJlbnRNYXBFbGVtZW50ID0gMDsKLQotICAgICAgICBpZiAobV9jdXJyZW50Rm9ybUVsZW1lbnQg
PT0gbikKLSAgICAgICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsKLQotICAgICAgICBp
ZiAobV9oZWFkID09IG4pCi0gICAgICAgICAgICBtX2hlYWQgPSAwOwotCi0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICByZXR1cm4gbjsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6OnBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiogdCkKLXsKLSAgICAvLyBJZ25vcmUg
YW55IGRvY3R5cGUgYWZ0ZXIgdGhlIGZpcnN0LiAgSWdub3JlIGRvY3R5cGVzIGluIGZyYWdtZW50
cy4KLSAgICBpZiAobV9kb2N1bWVudC0+ZG9jdHlwZSgpIHx8IG1faXNQYXJzaW5nRnJhZ21lbnQg
fHwgbV9jdXJyZW50ICE9IG1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1h
a2UgYSBuZXcgZG9jdHlwZSBub2RlIGFuZCBzZXQgaXQgYXMgb3VyIGRvY3R5cGUuCi0gICAgbV9k
b2N1bWVudC0+bGVnYWN5UGFyc2VyQWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2N1
bWVudCwgU3RyaW5nOjphZG9wdCh0LT5tX25hbWUpLCBTdHJpbmc6OmFkb3B0KHQtPm1fcHVibGlj
SUQpLCBTdHJpbmc6OmFkb3B0KHQtPm1fc3lzdGVtSUQpKSk7Ci0gICAgaWYgKHQtPm1fZm9yY2VR
dWlya3MpCi0gICAgICAgIG1fZG9jdW1lbnQtPnNldFBhcnNlTW9kZShEb2N1bWVudDo6Q29tcGF0
KTsKLX0KLQotc3RhdGljIGJvb2wgaXNUYWJsZVNlY3Rpb24oY29uc3QgTm9kZSogbikKLXsKLSAg
ICByZXR1cm4gbi0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgbi0+aGFzVGFnTmFtZSh0Zm9vdFRh
ZykgfHwgbi0+aGFzVGFnTmFtZSh0aGVhZFRhZyk7Ci19Ci0KLXN0YXRpYyBib29sIGlzVGFibGVQ
YXJ0KGNvbnN0IE5vZGUqIG4pCi17Ci0gICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUodHJUYWcpIHx8
IG4tPmhhc1RhZ05hbWUodGRUYWcpIHx8IG4tPmhhc1RhZ05hbWUodGhUYWcpCi0gICAgICAgIHx8
IGlzVGFibGVTZWN0aW9uKG4pOwotfQotCi1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZChjb25z
dCBOb2RlKiBuKQotewotICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fCBpc1Rh
YmxlUGFydChuKTsKLX0KLQotc3RhdGljIGJvb2wgaXNTY29waW5nVGFnKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSkKLXsKLSAgICByZXR1cm4gdGFnTmFtZSA9PSBhcHBsZXRUYWcgfHwgdGFn
TmFtZSA9PSBjYXB0aW9uVGFnIHx8IHRhZ05hbWUgPT0gdGRUYWcKLSAgICAgICAgfHwgdGFnTmFt
ZSA9PSB0aFRhZyB8fCB0YWdOYW1lID09IGJ1dHRvblRhZyB8fCB0YWdOYW1lID09IG1hcnF1ZWVU
YWcKLSAgICAgICAgfHwgdGFnTmFtZSA9PSBvYmplY3RUYWcgfHwgdGFnTmFtZSA9PSB0YWJsZVRh
ZyB8fCB0YWdOYW1lID09IGh0bWxUYWc7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVy
OjppbnNlcnROb2RlKE5vZGUqIG4sIGJvb2wgZmxhdCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gcHJv
dGVjdE5vZGUobik7Ci0KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4tPmxv
Y2FsTmFtZSgpOwotICAgIAotICAgIC8vIDx0YWJsZT4gaXMgbmV2ZXIgYWxsb3dlZCBpbnNpZGUg
c3RyYXkgdGFibGUgY29udGVudC4gIEFsd2F5cyBwb3Agb3V0IG9mIHRoZSBzdHJheSB0YWJsZSBj
b250ZW50Ci0gICAgLy8gYW5kIGNsb3NlIHVwIHRoZSBmaXJzdCB0YWJsZSwgYW5kIHRoZW4gc3Rh
cnQgdGhlIHNlY29uZCB0YWJsZSBhcyBhIHNpYmxpbmcuCi0gICAgaWYgKG1faW5TdHJheVRhYmxl
Q29udGVudCAmJiBsb2NhbE5hbWUgPT0gdGFibGVUYWcpCi0gICAgICAgIHBvcEJsb2NrKHRhYmxl
VGFnKTsKLQotICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiAhbV9wYXJzZXJRdWlya3MtPnNob3Vs
ZEluc2VydE5vZGUobV9jdXJyZW50LCBuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aW50IHRhZ1ByaW9yaXR5ID0gdGFnUHJpb3JpdHlPZk5vZGUobik7Ci0KLSAgICAvLyBsZXQncyBi
ZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KLSAgICAvLyB0aGlzIHNob3VsZCB3
b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAotICAgIE5vZGUqIG5ld05vZGUgPSBt
X2N1cnJlbnQtPmxlZ2FjeVBhcnNlckFkZENoaWxkKG4pOwotICAgIGlmICghbmV3Tm9kZSkKLSAg
ICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkp
OyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KLQotICAgIC8vIGRvbid0IHB1c2ggZWxlbWVu
dHMgd2l0aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjawotICAgIGJvb2wg
cGFyZW50QXR0YWNoZWQgPSBtX2N1cnJlbnQtPmF0dGFjaGVkKCk7Ci0gICAgaWYgKHRhZ1ByaW9y
aXR5ID4gMCAmJiAhZmxhdCkgewotICAgICAgICBpZiAobmV3Tm9kZSA9PSBtX2N1cnJlbnQpIHsK
LSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBzaG91bGQgb25seSBiZSBoaXQgd2hlbiBhIGRlbW90
ZWQgPGZvcm0+IGlzIHBsYWNlZCBpbnNpZGUgYSB0YWJsZS4KLSAgICAgICAgICAgIEFTU0VSVChs
b2NhbE5hbWUgPT0gZm9ybVRhZyk7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcihGb3JtSW5zaWRl
VGFibGVQYXJ0RXJyb3IsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAgICAgIEhU
TUxGb3JtRWxlbWVudCogZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudCo+KG4pOwot
ICAgICAgICAgICAgZm9ybS0+c2V0RGVtb3RlZCh0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIFRoZSBwdXNoQmxvY2sgZnVuY3Rpb24gdHJhbnNmZXJzIG93bmVyc2hpcCBv
ZiBjdXJyZW50IHRvIHRoZSBibG9jayBzdGFjawotICAgICAgICAgICAgLy8gc28gd2UncmUgZ3Vh
cmFudGVlZCB0aGF0IG1fZGlkUmVmQ3VycmVudCBpcyBmYWxzZS4gVGhlIGNvZGUgYmVsb3cgaXMg
YW4KLSAgICAgICAgICAgIC8vIG9wdGltaXplZCB2ZXJzaW9uIG9mIHNldEN1cnJlbnQgdGhhdCB0
YWtlcyBhZHZhbnRhZ2Ugb2YgdGhhdCBmYWN0IGFuZCBhbHNvCi0gICAgICAgICAgICAvLyBhc3N1
bWVzIHRoYXQgbmV3Tm9kZSBpcyBuZWl0aGVyIDAgbm9yIGEgcG9pbnRlciB0byB0aGUgZG9jdW1l
bnQuCi0gICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7Ci0gICAg
ICAgICAgICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgQVNT
RVJUKCFtX2RpZFJlZkN1cnJlbnQpOwotICAgICAgICAgICAgbmV3Tm9kZS0+cmVmKCk7IAotICAg
ICAgICAgICAgbV9jdXJyZW50ID0gbmV3Tm9kZTsKLSAgICAgICAgICAgIG1fZGlkUmVmQ3VycmVu
dCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5h
dHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICAgICAgbi0+YXR0YWNo
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHBhcmVudEF0dGFjaGVkICYmICFuLT5hdHRh
Y2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICAgICAgbi0+YXR0YWNoKCk7
Ci0gICAgICAgIG4tPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotICAgIH0KLQotICAgIGlmIChs
b2NhbE5hbWUgPT0gaHRtbFRhZyAmJiBtX2RvY3VtZW50LT5mcmFtZSgpICYmICFtX2lzUGFyc2lu
Z0ZyYWdtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+ZGlzcGF0
Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm9vbCBmbGF0
LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQotewotICAg
IC8vIEVycm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9m
IHNwZWNpZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCi0gICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7Ci0KLSAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBk
ZWNpZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCi0gICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSkgewotICAgICAgICBIVE1MRWxlbWVudCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50Kj4o
bik7Ci0gICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUodHJUYWcpIHx8IGgtPmhhc0xvY2FsTmFt
ZSh0aFRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHRkVGFnKSkgewotICAgICAgICAgICAgaWYgKG1f
aW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkgewotICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZFRhYmxlUGFydEVycm9yLCAmbG9jYWxO
YW1lLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcG9wIG91
dCB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCi0gICAgICAgICAg
ICAgICAgd2hpbGUgKG1fYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQobV9jdXJyZW50KSkK
LSAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0Tm9kZShuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoaGVhZFRhZykpIHsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0Rv
Y3VtZW50Tm9kZSgpICYmICFtX2N1cnJlbnQtPmhhc1RhZ05hbWUoaHRtbFRhZykpIHsKLSAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUobWV0YVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKGxpbmtUYWcpIHx8IGgtPmhh
c0xvY2FsTmFtZShiYXNlVGFnKSkgewotICAgICAgICAgICAgYm9vbCBjcmVhdGVkSGVhZCA9IGZh
bHNlOwotICAgICAgICAgICAgaWYgKCFtX2hlYWQpIHsKLSAgICAgICAgICAgICAgICBjcmVhdGVI
ZWFkKCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRlZEhlYWQgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKG1faGVhZCkgewotICAgICAgICAgICAgICAgIGlmICghY3JlYXRl
ZEhlYWQpCi0gICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRDb250
ZW50RXJyb3IsICZsb2NhbE5hbWUsICZtX2N1cnJlbnQtPmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9oZWFkLT5sZWdhY3lQYXJzZXJBZGRDaGlsZChuKSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
aHRtbFRhZykpIHsKLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgp
ICkgewotICAgICAgICAgICAgICAgIGlmIChtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSAm
JiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShodG1sVGFnKSAmJiAh
bV9pc1BhcnNpbmdGcmFnbWVudCkgewotICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihS
ZWR1bmRhbnRIVE1MQm9keUVycm9yLCAmbG9jYWxOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRv
IGV4aXN0aW5nIG9uZQotICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qg
b3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwotICAgICAgICAgICAgICAgICAg
ICBOYW1lZE5vZGVNYXAqIG1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+YXR0cmlidXRl
cyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZXhpc3RpbmdIVE1MID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwKiBibWFwID0gZXhpc3RpbmdIVE1MLT5hdHRyaWJ1
dGVzKGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsID0gMDsgbWFw
ICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0
dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPm5hbWUoKSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhpc3RpbmdIVE1MLT5zZXRBdHRyaWJ1dGUoaXQtPm5hbWUoKSwg
aXQtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUodGl0bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShzdHls
ZVRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykpIHsKLSAgICAgICAgICAgIGJvb2wg
Y3JlYXRlZEhlYWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgICAgIGNyZWF0ZWRIZWFkID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2hlYWQpIHsKLSAgICAgICAgICAg
ICAgICBOb2RlKiBuZXdOb2RlID0gbV9oZWFkLT5sZWdhY3lQYXJzZXJBZGRDaGlsZChuKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIW5ld05vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0U2tp
cE1vZGUoaC0+dGFnUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KCFjcmVhdGVkSGVhZCkKLSAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2Vk
SGVhZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJm1fY3VycmVudC0+bG9jYWxOYW1lKCkpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRh
Z1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJl
bigpOwotICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQotICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2luQm9keSkgewotICAgICAgICAgICAgICAg
IHNldFNraXBNb2RlKGgtPnRhZ1FOYW1lKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYm9k
eVRhZykpIHsKLSAgICAgICAgICAgIGlmIChtX2luQm9keSAmJiBtX2RvY3VtZW50LT5ib2R5KCkg
JiYgIW1faXNQYXJzaW5nRnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFu
b3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25l
Ci0gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5
IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8
Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgotICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlZHVuZGFudEhUTUxCb2R5RXJyb3IsICZsb2NhbE5h
bWUpOwotICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcCogbWFwID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotICAgICAgICAgICAgICAgIEVsZW1lbnQqIGV4
aXN0aW5nQm9keSA9IG1fZG9jdW1lbnQtPmJvZHkoKTsKLSAgICAgICAgICAgICAgICBOYW1lZE5v
ZGVNYXAqIGJtYXAgPSBleGlzdGluZ0JvZHktPmF0dHJpYnV0ZXMoZmFsc2UpOwotICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKyts
KSB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0
ZW0obCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShp
dC0+bmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQm9keS0+c2V0QXR0
cmlidXRlKGl0LT5uYW1lKCksIGl0LT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbV9jdXJy
ZW50LT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoYXJlYVRhZykpIHsKLSAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRNYXBFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3Io
TWlzcGxhY2VkQXJlYUVycm9yLCAmbV9jdXJyZW50LT5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAg
ICAgICAgbV9jdXJyZW50TWFwRWxlbWVudC0+bGVnYWN5UGFyc2VyQWRkQ2hpbGQobik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmICFtX2lzUGFyc2luZ0ZyYWdtZW50KQot
ICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5h
bWUoY29sZ3JvdXBUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZShjYXB0aW9uVGFnKSkgewotICAgICAg
ICAgICAgaWYgKGlzVGFibGVSZWxhdGVkKG1fY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICB3
aGlsZSAobV9ibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0KG1fY3VycmVudCkpCi0gICAgICAgICAg
ICAgICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5v
ZGUobik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG4tPmlzQ29t
bWVudE5vZGUoKSAmJiAhbV9oZWFkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyAy
LiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB0byBkbyBzb21l
IGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgaWYgKG1fY3VycmVudC0+aXNIVE1MRWxlbWVu
dCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihtX2N1cnJlbnQpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1l
ID0gaC0+bG9jYWxOYW1lKCk7Ci0gICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoaHRtbFRhZykp
IHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbHQgPSBuLT5pc0hUTUxFbGVtZW50KCkgPyBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG4pIDogMDsKLSAgICAgICAgICAgIGlmIChlbHQgJiYg
KGVsdC0+aGFzTG9jYWxOYW1lKHNjcmlwdFRhZykgfHwgZWx0LT5oYXNMb2NhbE5hbWUoc3R5bGVU
YWcpIHx8Ci0gICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUobWV0YVRhZykgfHwgZWx0
LT5oYXNMb2NhbE5hbWUobGlua1RhZykgfHwKLSAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2Fs
TmFtZShvYmplY3RUYWcpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKGVtYmVkVGFnKSB8fAotICAgICAg
ICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKHRpdGxlVGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFt
ZShpc2luZGV4VGFnKSB8fAotICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKGJhc2VU
YWcpKSkgewotICAgICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faGVhZCA9IEhUTUxIZWFkRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpOwotICAgICAg
ICAgICAgICAgICAgICBpbnNlcnROb2RlKG1faGVhZC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBUZXh0KiB0ID0gc3RhdGljX2Nhc3Q8VGV4dCo+KG4pOwotICAgICAgICAgICAgICAg
ICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9oZWFkICYmICFtX2luQm9keSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3JlIGJldHdlZW4gPC9oZWFkPiBhbmQgPGJvZHk+LiAgQWNjb3JkaW5nIHRv
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIEhUTUw1IHBhcnNpbmcgYWxnb3Jp
dGhtLCB3ZSdyZSBzdXBwb3NlZCB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlu
c2VydCB3aGl0ZXNwYWNlIHRleHQgbm9kZXMgaW50byB0aGUgSFRNTCBlbGVtZW50LgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jdXJyZW50LT5hcHBlbmRDaGlsZChuLCBlYyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2hhdmVGcmFtZVNl
dCkgewotICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBoZWFkIGV4aXN0cy4KLSAg
ICAgICAgICAgICAgICAgICAgLy8gQnV0IG5vdCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgTWFpbCwg
d2hlcmUgdGhlIGltcGxpY2l0IDxoZWFkPiBpc24ndCBleHBlY3RlZCAtIDxyZGFyOi8vcHJvYmxl
bS82ODYzNzk1PgotICAgICAgICAgICAgICAgICAgICBpZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQg
JiYgc2hvdWxkQ3JlYXRlSW1wbGljaXRIZWFkKG1fZG9jdW1lbnQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY3JlYXRlSGVhZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGhl
YWRUYWcpOwotICAgICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZShIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRGcmFtZXNl
dENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKGhlYWRUYWcpKSB7Ci0gICAgICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZShodG1sVGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0
cyBoZXJlLi4uCi0gICAgICAgICAgICAgICAgaWYgKCFtX2hhdmVGcmFtZVNldCkgewotICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFRhZ05hbWUgPT0gaGVhZFRhZyk7Ci0gICAgICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoSFRNTEJvZHlF
bGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkRnJhbWVzZXRDb250ZW50RXJyb3IsICZsb2NhbE5hbWUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShhZGRy
ZXNzVGFnKSB8fCBoLT5oYXNMb2NhbE5hbWUoZm9udFRhZykKLSAgICAgICAgICAgICAgICAgICB8
fCBoLT5oYXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8IGgtPmhhc0xvY2FsTmFtZSh0aXRsZVRhZykp
IHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZENvbnRlbnRSZXRyeUVycm9yLCAm
bG9jYWxOYW1lLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAgICAgICAgcG9wQmxvY2soY3VycmVu
dFRhZ05hbWUpOwotICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoaC0+aGFzTG9jYWxOYW1lKGNhcHRpb25UYWcpKSB7Ci0gICAgICAgICAgICAvLyBJbGxlZ2Fs
IGNvbnRlbnQgaW4gYSBjYXB0aW9uLiBDbG9zZSB0aGUgY2FwdGlvbiBhbmQgdHJ5IGFnYWluLgot
ICAgICAgICAgICAgcmVwb3J0RXJyb3IoTWlzcGxhY2VkQ2FwdGlvbkNvbnRlbnRFcnJvciwgJmxv
Y2FsTmFtZSk7Ci0gICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0gICAgICAg
ICAgICBpZiAoaXNUYWJsZVBhcnQobikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5v
ZGUobiwgZmxhdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKHRhYmxlVGFn
KSB8fCBoLT5oYXNMb2NhbE5hbWUodHJUYWcpIHx8IGlzVGFibGVTZWN0aW9uKGgpKSB7Ci0gICAg
ICAgICAgICBpZiAobi0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKLSAgICAgICAgICAgICAgICBy
ZXBvcnRFcnJvcihNaXNwbGFjZWRUYWJsZUVycm9yLCAmY3VycmVudFRhZ05hbWUpOwotICAgICAg
ICAgICAgICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdtZW50ICYmICFoLT5oYXNMb2NhbE5hbWUodGFi
bGVUYWcpKQotICAgICAgICAgICAgICAgICAgICAvLyBmcmFnbWVudCBtYXkgY29udGFpbiB0YWJs
ZSBwYXJ0cyB3aXRob3V0IDx0YWJsZT4gYW5jZXN0b3IsIHBvcCB0aGVtIG9uZSBieSBvbmUKLSAg
ICAgICAgICAgICAgICAgICAgcG9wQmxvY2soaC0+bG9jYWxOYW1lKCkpOwotICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKLSAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25lCi0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgTm9k
ZSogcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgICAgIC8vIEEgc2Ny
aXB0IG1heSBoYXZlIHJlbW92ZWQgdGhlIGN1cnJlbnQgbm9kZSdzIHBhcmVudCBmcm9tIHRoZSBE
T00KLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTM3Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBkbyByZWFsIHJl
Y292ZXJ5IGhlcmUgYW5kIHJlLXBhcmVudCB3aXRoIHRoZSBjb3JyZWN0IG5vZGUuCi0gICAgICAg
ICAgICAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgICAgICBOb2RlKiBncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAotICAgICAgICAgICAg
ICAgICAgICAoaC0+aGFzTG9jYWxOYW1lKHRyVGFnKSAmJgotICAgICAgICAgICAgICAgICAgICAg
aXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVudCAmJiBncmFuZHBhcmVudC0+aGFz
VGFnTmFtZSh0YWJsZVRhZykpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoKCFuLT5oYXNUYWdO
YW1lKHRkVGFnKSAmJiAhbi0+aGFzVGFnTmFtZSh0aFRhZykgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgIW4tPmhhc1RhZ05hbWUoZm9ybVRhZykgJiYgIW4tPmhhc1RhZ05hbWUoc2NyaXB0VGFn
KSkgJiYgaXNUYWJsZVNlY3Rpb24obm9kZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dC0+aGFzVGFnTmFtZSh0YWJsZVRhZykpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSAo
bm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpID8gbm9kZSA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChub2RlLT5oYXNUYWdOYW1lKHRyVGFnKSkgPyBncmFuZHBhcmVudCA6IHBhcmVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aXRoIGZyYWdtZW50
cwotICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVu
dC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGVjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFl
YykgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlUYWJsZUNvbnRl
bnRFcnJvciwgJmxvY2FsTmFtZSwgJmN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgdGFnUHJpb3JpdHkgPiAwICYmIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
Kj4obiktPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9j
ayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pblN0cmF5VGFibGVD
b250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ibG9ja1N0YWNrLT5zdHJh
eVRhYmxlQ29udGVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghZWMpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudC0+aGFzVGFnTmFtZSh0clRhZykpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlcG9ydEVycm9yKFRhYmxlUGFydFJlcXVpcmVkRXJyb3IsICZsb2NhbE5h
bWUsICZ0ZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlKEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjcmVhdGUodGRUYWcsIG1fZG9jdW1lbnQpLmdldCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQtPmhhc1RhZ05hbWUo
dGFibGVUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCByZXBvcnQgYW4g
ZXJyb3IgaW4gdGhpcyBjYXNlLCBzaW5jZSBtYWtpbmcgYSA8dGJvZHk+IGhhcHBlbnMgYWxsIHRo
ZSB0aW1lIHdoZW4geW91IGhhdmUgPHRhYmxlPjx0cj4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbmQgaXQgaXNuJ3QgcmVhbGx5IGEgcGFyc2UgZXJyb3IgcGVyIHNlLgotICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y3JlYXRl
KHRib2R5VGFnLCBtX2RvY3VtZW50KS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcihUYWJsZVBhcnRSZXF1aXJl
ZEVycm9yLCAmbG9jYWxOYW1lLCAmdHJUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShIVE1MVGFibGVSb3dFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVu
dCkuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSkgewotICAgICAgICAgICAgcmVw
b3J0RXJyb3IoTWlzcGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50
VGFnTmFtZSk7Ci0gICAgICAgICAgICBwb3BCbG9jayhvYmplY3RUYWcpOwotICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKHBUYWcp
IHx8IGlzSGVhZGluZ1RhZyhjdXJyZW50VGFnTmFtZSkpIHsKLSAgICAgICAgICAgIGlmICghaXNJ
bmxpbmUobikpIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7Ci0g
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykgfHwgaC0+aGFzTG9jYWxOYW1lKG9w
dGdyb3VwVGFnKSkgewotICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBvcHRncm91cFRhZykg
ewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxOYW1lID09
IHNlbGVjdFRhZykgewotICAgICAgICAgICAgICAgIC8vIElFIHRyZWF0cyBhIG5lc3RlZCBzZWxl
Y3QgYXMgPC9zZWxlY3Q+LiBMZXQncyBkbyB0aGUgc2FtZQotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGxvY2FsTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKHNlbGVjdFRhZykpIHsKLSAgICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gaW5w
dXRUYWcgfHwgbG9jYWxOYW1lID09IHRleHRhcmVhVGFnKSB7Ci0gICAgICAgICAgICAgICAgcmVw
b3J0RXJyb3IoTWlzcGxhY2VkQ29udGVudFJldHJ5RXJyb3IsICZsb2NhbE5hbWUsICZjdXJyZW50
VGFnTmFtZSk7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShjb2xncm91cFRhZykpIHsKLSAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAg
ICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoYm9keVRhZykpIHsKLSAgICAgICAgICAgIGlm
IChpc0lubGluZShtX2N1cnJlbnQpKSB7Ci0gICAgICAgICAgICAgICAgcG9wSW5saW5lQmxvY2tz
KCk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkgewotICAg
ICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBUZXh0KiB0ID0gc3RhdGlj
X2Nhc3Q8VGV4dCo+KG4pOwotICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoIW1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpbnNl
cnROb2RlKEhUTUxIdG1sRWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKLSAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gMy4gSWYg
d2UgY291bGRuJ3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVt
cHQgdG8gZXJyb3ItY29ycmVjdCBhZ2Fpbi4KLSAgICBpZiAoIWhhbmRsZWQpIHsKLSAgICAgICAg
cmVwb3J0RXJyb3IoSWdub3JlZENvbnRlbnRFcnJvciwgJmxvY2FsTmFtZSwgJm1fY3VycmVudC0+
bG9jYWxOYW1lKCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBp
bnNlcnROb2RlKG4pOwotfQotCi10eXBlZGVmIGJvb2wgKExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
KkNyZWF0ZUVycm9yQ2hlY2tGdW5jKShUb2tlbiogdCwgUmVmUHRyPE5vZGU+Jik7Ci10eXBlZGVm
IEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENyZWF0ZUVycm9yQ2hlY2tGdW5jPiBGdW5jdGlv
bk1hcDsKLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRleHRDcmVhdGVFcnJvckNoZWNr
KFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICByZXN1bHQgPSBUZXh0Ojpj
cmVhdGUobV9kb2N1bWVudCwgdC0+dGV4dC5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVzdWx0KQotewotICAgIHJlc3VsdCA9IENvbW1lbnQ6OmNy
ZWF0ZShtX2RvY3VtZW50LCB0LT50ZXh0LmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbios
IFJlZlB0cjxOb2RlPiYgcmVzdWx0KQotewotICAgIGlmICghbV9oZWFkIHx8IG1fY3VycmVudC0+
bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBtX2hlYWQgPSBIVE1MSGVhZEVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9oZWFkOwotICAgIH0g
ZWxzZQotICAgICAgICByZXBvcnRFcnJvcihNaXNwbGFjZWRIZWFkRXJyb3IpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICAvLyBib2R5IG5vIGxvbmdlciBh
bGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAotICAgIGlmIChtX2hhdmVGcmFtZVNldCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEVuc3VyZSB0aGF0IGhlYWQgZXhpc3Rz
ICh1bmxlc3MgcGFyc2luZyBhIGZyYWdtZW50KS4KLSAgICAvLyBCdXQgbm90IGZvciBvbGRlciB2
ZXJzaW9ucyBvZiBNYWlsLCB3aGVyZSB0aGUgaW1wbGljaXQgPGhlYWQ+IGlzbid0IGV4cGVjdGVk
IC0gPHJkYXI6Ly9wcm9ibGVtLzY4NjM3OTU+Ci0gICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50
ICYmIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChtX2RvY3VtZW50KSkKLSAgICAgICAgY3JlYXRl
SGVhZCgpOwotICAgIAotICAgIHBvcEJsb2NrKGhlYWRUYWcpOwotICAgIHN0YXJ0Qm9keSgpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZnJhbWVz
ZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBwb3BCbG9j
ayhoZWFkVGFnKTsKLSAgICBpZiAobV9pbkJvZHkgJiYgIW1faGF2ZUZyYW1lU2V0ICYmICFtX2hh
dmVDb250ZW50KSB7Ci0gICAgICAgIHBvcEJsb2NrKGJvZHlUYWcpOwotICAgICAgICAvLyAjIyMg
YWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93IGhpZGRlbiAiYm9k
eSIgZWxlbWVudAotICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhhdmlvdXIg
bm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKLSAgICAgICAgLy8gcmVncmVzc2lv
bnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRo
ZXJlIGlzCi0gICAgICAgIC8vIG5vIHNpdGUgYWN0dWFsbHkgcmVseWluZyBvbiB0aGF0IGRldGFp
bCAoRGlyaykKLSAgICAgICAgaWYgKG1fZG9jdW1lbnQtPmJvZHkoKSAmJiAhbV9pc1BhcnNpbmdG
cmFnbWVudCkKLSAgICAgICAgICAgIG1fZG9jdW1lbnQtPmJvZHkoKS0+c2V0QXR0cmlidXRlKHN0
eWxlQXR0ciwgImRpc3BsYXk6bm9uZSIpOwotICAgICAgICBtX2luQm9keSA9IGZhbHNlOwotICAg
IH0KLSAgICBpZiAoKG1faGF2ZUNvbnRlbnQgfHwgbV9oYXZlRnJhbWVTZXQpICYmIG1fY3VycmVu
dC0+bG9jYWxOYW1lKCkgPT0gaHRtbFRhZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1f
aGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKLSAgICBzdGFydEJvZHkoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmZvcm1DcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICAvLyBPbmx5IGNyZWF0ZSBhIG5l
dyBmb3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCi0gICAgLy8gVGhpcyBpcyBj
b25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgIGlmICghbV9jdXJy
ZW50Rm9ybUVsZW1lbnQpIHsKLSAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQgPSBIVE1MRm9y
bUVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLSAgICAgICAgcmVzdWx0ID0gbV9jdXJyZW50
Rm9ybUVsZW1lbnQ7Ci0gICAgICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mIHJlc3Vs
dCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgaWYgKCFt
X2luQm9keSkKLSAgICAgICAgbV9pc2luZGV4RWxlbWVudCA9IG4ucmVsZWFzZSgpOwotICAgIGVs
c2UgewotICAgICAgICB0LT5zZWxmQ2xvc2luZ1RhZyA9IHRydWU7Ci0gICAgICAgIHJlc3VsdCA9
IG4ucmVsZWFzZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+JikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxk
ZXI6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCi17
Ci0gICAgcENsb3NlckNyZWF0ZUVycm9yQ2hlY2sodCwgcmVzdWx0KTsKLSAgICBwb3BCbG9jayhk
dFRhZyk7Ci0gICAgcG9wQmxvY2soZGRUYWcpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6ZHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBSZWZQ
dHI8Tm9kZT4mIHJlc3VsdCkKLXsKLSAgICBwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayh0LCByZXN1
bHQpOwotICAgIHBvcEJsb2NrKGRkVGFnKTsKLSAgICBwb3BCbG9jayhkdFRhZyk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQotewotICAgIHBvcEJsb2NrKHJwVGFnKTsKLSAg
ICBwb3BCbG9jayhydFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjpydENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKQot
ewotICAgIHBvcEJsb2NrKHJwVGFnKTsKLSAgICBwb3BCbG9jayhydFRhZyk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKFRva2VuKiB0LCBSZWZQdHI8Tm9kZT4mKQotewotICAgIHBvcEJsb2NrKHQtPnRhZ05h
bWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6
bmVzdGVkUENsb3NlckNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0cjxOb2RlPiYgcmVz
dWx0KQotewotICAgIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7Ci0gICAgcG9w
QmxvY2sodC0+dGFnTmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIFJlZlB0
cjxOb2RlPiYpCi17Ci0gICAgcmV0dXJuIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05h
bWUpOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6Y29sQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnQtPmhhc1RhZ05h
bWUodGFibGVUYWcpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBSZWZQdHI8RWxlbWVudD4g
aW1wbGljaXRDb2xncm91cCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQo
Y29sZ3JvdXBUYWcsIG1fZG9jdW1lbnQsIDAsIHRydWUpOwotICAgIGluc2VydE5vZGUoaW1wbGlj
aXRDb2xncm91cC5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+JikKLXsKLSAgICBwb3BCbG9jayh0ZFRhZyk7Ci0gICAgcG9wQmxvY2sodGhUYWcpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6dGFibGVTZWN0
aW9uQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgcG9wQmxv
Y2sodGhlYWRUYWcpOwotICAgIHBvcEJsb2NrKHRib2R5VGFnKTsKLSAgICBwb3BCbG9jayh0Zm9v
dFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVy
Ojpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAg
c2V0U2tpcE1vZGUobm9lbWJlZFRhZyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVn
YWN5SFRNTFRyZWVCdWlsZGVyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKQotewotICAgIHNldFNraXBNb2RlKG5vZnJhbWVzVGFnKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5vc2NyaXB0Q3JlYXRlRXJy
b3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17Ci0gICAgaWYgKCFtX2lzUGFyc2luZ0Zy
YWdtZW50KSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jdW1lbnQtPmZyYW1lKCk7Ci0g
ICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5v
dEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAgICAgIHNldFNraXBNb2RlKG5vc2NyaXB0
VGFnKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpwQ2xvc2VyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpCi17
Ci0gICAgaWYgKGhhc1BFbGVtZW50SW5TY29wZSgpKQotICAgICAgICBwb3BCbG9jayhwVGFnKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBDbG9z
ZXJTdHJpY3RDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JikKLXsKLSAgICBp
ZiAobV9kb2N1bWVudC0+aW5Db21wYXRNb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGlmIChoYXNQRWxlbWVudEluU2NvcGUoKSkKLSAgICAgICAgcG9wQmxvY2socFRhZyk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjptYXBDcmVhdGVF
cnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCi17Ci0gICAgbV9jdXJyZW50
TWFwRWxlbWVudCA9IEhUTUxNYXBFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVudCk7Ci0gICAgcmVz
dWx0ID0gbV9jdXJyZW50TWFwRWxlbWVudDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyB2b2lkIG1hcFRhZ1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWcsIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCi17Ci0gICAgbWFwLnNldCh0YWcubG9j
YWxOYW1lKCkuaW1wbCgpLCBmdW5jKTsKLX0KLQotdGVtcGxhdGU8IHNpemVfdCBBcnJheVNpemUg
Pgotc3RhdGljIHZvaWQgbWFwVGFnc1RvRnVuYyhGdW5jdGlvbk1hcCYgbWFwLCBRdWFsaWZpZWRO
YW1lICgmbmFtZXMpW0FycmF5U2l6ZV0sIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGZ1bmMpCi17Ci0g
ICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBBcnJheVNpemU7IHgrKykgewotICAgICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lID0gbmFtZXNbeF07Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyht
YXAsIG5hbWUsIGZ1bmMpOwotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXI6OmdldE5vZGUoVG9rZW4qIHQpCi17Ci0gICAgLy8gSW5pdCBvdXIgZXJyb3Ig
aGFuZGxpbmcgdGFibGUuCi0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGdW5jdGlvbk1hcCwgZ0Z1
bmN0aW9uTWFwLCAoKSk7Ci0gICAgaWYgKGdGdW5jdGlvbk1hcC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgUXVhbGlmaWVkTmFtZSBuZXN0ZWRDcmVhdGVFcnJvclRhZ3NbXSA9IHsgYVRhZywgYnV0dG9u
VGFnLCBub2JyVGFnLCB0clRhZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1h
cCwgbmVzdGVkQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpuZXN0ZWRD
cmVhdGVFcnJvckNoZWNrKTsKLQotICAgICAgICBRdWFsaWZpZWROYW1lIG5lc3RlZFN0eWxlQ3Jl
YXRlRXJyb3JUYWdzW10gPSB7IGJUYWcsIGJpZ1RhZywgaVRhZywgbWFya1RhZywgc1RhZywgc21h
bGxUYWcsIHN0cmlrZVRhZywgdHRUYWcsIHVUYWcgfTsKLSAgICAgICAgbWFwVGFnc1RvRnVuYyhn
RnVuY3Rpb25NYXAsIG5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JUYWdzLCAmTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwotCi0gICAgICAgIFF1YWxpZmll
ZE5hbWUgcENsb3NlckNyZWF0ZUVycm9yVGFnc1tdID0geyBhZGRyZXNzVGFnLCBhcnRpY2xlVGFn
LAotICAgICAgICAgICAgYXNpZGVUYWcsIGJsb2NrcXVvdGVUYWcsIGNlbnRlclRhZywgZGlyVGFn
LCBkaXZUYWcsIGRsVGFnLAotICAgICAgICAgICAgZmllbGRzZXRUYWcsIGZvb3RlclRhZywgaDFU
YWcsIGgyVGFnLCBoM1RhZywgaDRUYWcsIGg1VGFnLCBoNlRhZywKLSAgICAgICAgICAgIGhlYWRl
clRhZywgaGdyb3VwVGFnLCBoclRhZywgbGlzdGluZ1RhZywgbWVudVRhZywgbmF2VGFnLCBvbFRh
ZywKLSAgICAgICAgICAgIHBUYWcsIHBsYWludGV4dFRhZywgcHJlVGFnLCBzZWN0aW9uVGFnLCB1
bFRhZyB9OwotICAgICAgICBtYXBUYWdzVG9GdW5jKGdGdW5jdGlvbk1hcCwgcENsb3NlckNyZWF0
ZUVycm9yVGFncywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cENsb3NlckNyZWF0ZUVycm9yQ2hl
Y2spOwotCi0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGJvZHlUYWcsICZMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OmJvZHlDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFn
VG9GdW5jKGdGdW5jdGlvbk1hcCwgY29sVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpjb2xD
cmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgZGRU
YWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmRkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAg
IG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGR0VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVy
OjpkdENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFw
LCBmb3JtVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpmb3JtQ3JlYXRlRXJyb3JDaGVjayk7
Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAsIGZyYW1lc2V0VGFnLCAmTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAgICBtYXBU
YWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBoZWFkVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpo
ZWFkQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25NYXAs
IGlzaW5kZXhUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNo
ZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbWFwVGFnLCAmTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjptYXBDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9G
dW5jKGdGdW5jdGlvbk1hcCwgbGlUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6Om5lc3RlZFBD
bG9zZXJDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1h
cCwgbm9lbWJlZFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9lbWJlZENyZWF0ZUVycm9y
Q2hlY2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBub2ZyYW1lc1RhZywg
JkxlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAg
ICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgbm9zY3JpcHRUYWcsICZMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVu
YyhnRnVuY3Rpb25NYXAsIHRhYmxlVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpwQ2xvc2Vy
U3RyaWN0Q3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVuY3Rpb25N
YXAsIHJwVGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpycENyZWF0ZUVycm9yQ2hlY2spOwot
ICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCBydFRhZywgJkxlZ2FjeUhUTUxUcmVl
QnVpbGRlcjo6cnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5j
dGlvbk1hcCwgc2VsZWN0VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzZWxlY3RDcmVhdGVF
cnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGRUYWcsICZM
ZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2spOwotICAgICAg
ICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aFRhZywgJkxlZ2FjeUhUTUxUcmVlQnVpbGRl
cjo6dGFibGVDZWxsQ3JlYXRlRXJyb3JDaGVjayk7Ci0gICAgICAgIG1hcFRhZ1RvRnVuYyhnRnVu
Y3Rpb25NYXAsIHRib2R5VGFnLCAmTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjp0YWJsZVNlY3Rpb25D
cmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgbWFwVGFnVG9GdW5jKGdGdW5jdGlvbk1hcCwgdGZv
b3RUYWcsICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hl
Y2spOwotICAgICAgICBtYXBUYWdUb0Z1bmMoZ0Z1bmN0aW9uTWFwLCB0aGVhZFRhZywgJkxlZ2Fj
eUhUTUxUcmVlQnVpbGRlcjo6dGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayk7Ci0KLSAgICAg
ICAgZ0Z1bmN0aW9uTWFwLnNldChjb21tZW50QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUJ1
aWxkZXI6OmNvbW1lbnRDcmVhdGVFcnJvckNoZWNrKTsKLSAgICAgICAgZ0Z1bmN0aW9uTWFwLnNl
dCh0ZXh0QXRvbS5pbXBsKCksICZMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnRleHRDcmVhdGVFcnJv
ckNoZWNrKTsKLSAgICB9Ci0KLSAgICBib29sIHByb2NlZWQgPSB0cnVlOwotICAgIFJlZlB0cjxO
b2RlPiByZXN1bHQ7Ci0gICAgaWYgKENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hlY2tGdW5j
ID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGwoKSkpCi0gICAgICAgIHByb2NlZWQg
PSAodGhpcy0+KmVycm9yQ2hlY2tGdW5jKSh0LCByZXN1bHQpOwotICAgIGlmIChwcm9jZWVkKQot
ICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIHQtPnRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgbV9k
b2N1bWVudCwgbV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOwotICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOwotfQotCi1ib29sIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6YWxsb3dOZXN0ZWRS
ZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQotewotICAgIC8vIHd3dy5s
aWNlby5lZHUubXggaXMgYW4gZXhhbXBsZSBvZiBhIHNpdGUgdGhhdCBhY2hpZXZlcyBhIGxldmVs
IG9mIG5lc3Rpbmcgb2YKLSAgICAvLyBhYm91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2gg
b2YgPGI+cy4gIFdlIHdpbGwgb25seSBhbGxvdyBhdCBtb3N0IDIwCi0gICAgLy8gbmVzdGVkIHRh
Z3Mgb2YgdGhlIHNhbWUgdHlwZSBiZWZvcmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhl
ci4KLSAgICB1bnNpZ25lZCBpID0gMDsKLSAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBt
X2Jsb2NrU3RhY2s7Ci0gICAgICAgICBpIDwgY01heFJlZHVuZGFudFRhZ0RlcHRoICYmIGN1cnIg
JiYgY3Vyci0+dGFnTmFtZSA9PSB0YWdOYW1lOwotICAgICAgICAgY3VyciA9IGN1cnItPm5leHQs
IGkrKykgeyB9Ci0gICAgcmV0dXJuIGkgIT0gY01heFJlZHVuZGFudFRhZ0RlcHRoOwotfQotCi12
b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuKiB0KQotewot
ICAgIC8vIFN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KLSAgICAvLyB3ZSBuZXZlciBj
bG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBi
ZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAvLyBsZXQncyByZWx5IG9uIHRo
ZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KLSAgICBpZiAodC0+dGFnTmFtZSA9PSBodG1s
VGFnIHx8IHQtPnRhZ05hbWUgPT0gYm9keVRhZyB8fCB0LT50YWdOYW1lID09IGNvbW1lbnRBdG9t
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9vbCBjaGVja0ZvckNsb3NlVGFnRXJyb3Jz
ID0gdHJ1ZTsKLSAgICBpZiAodC0+dGFnTmFtZSA9PSBmb3JtVGFnICYmIG1fY3VycmVudEZvcm1F
bGVtZW50KSB7Ci0gICAgICAgIG1fY3VycmVudEZvcm1FbGVtZW50ID0gMDsKLSAgICAgICAgY2hl
Y2tGb3JDbG9zZVRhZ0Vycm9ycyA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAodC0+dGFnTmFtZSA9
PSBtYXBUYWcpCi0gICAgICAgIG1fY3VycmVudE1hcEVsZW1lbnQgPSAwOwotICAgIGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gcFRhZykKLSAgICAgICAgY2hlY2tGb3JDbG9zZVRhZ0Vycm9ycyA9IGZh
bHNlOwotICAgICAgICAKLSAgICBIVE1MU3RhY2tFbGVtKiBvbGRFbGVtID0gbV9ibG9ja1N0YWNr
OwotICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUsIGNoZWNrRm9yQ2xvc2VUYWdFcnJvcnMpOwotICAg
IGlmIChvbGRFbGVtID09IG1fYmxvY2tTdGFjayAmJiB0LT50YWdOYW1lID09IHBUYWcpIHsKLSAg
ICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBzdHJheSA8L3A+LiAgQW1hemluZ2x5IEdlY2tvLCBX
aW5JRSwgYW5kIE1hY0lFIGFsbCB0cmVhdAotICAgICAgICAvLyB0aGlzIGFzIGEgdmFsaWQgYnJl
YWssIGkuZS4sIDxwPjwvcD4uICBTbyBnbyBhaGVhZCBhbmQgbWFrZSB0aGUgZW1wdHkKLSAgICAg
ICAgLy8gcGFyYWdyYXBoLgotICAgICAgICB0LT5iZWdpblRhZyA9IHRydWU7Ci0gICAgICAgIHBh
cnNlVG9rZW4odCk7Ci0gICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwotICAgICAgICByZXBv
cnRFcnJvcihTdHJheVBhcmFncmFwaENsb3NlRXJyb3IpOwotICAgIH0KLX0KLQotYm9vbCBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXI6OmlzSGVhZGluZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChUYWdOYW1lU2V0LCBoZWFkaW5nVGFncywg
KCkpOwotICAgIGlmIChoZWFkaW5nVGFncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUXVhbGlmaWVk
TmFtZSB0YWdOYW1lc1tdID0geyBoMVRhZywgaDJUYWcsIGgzVGFnLCBoNFRhZywgaDVUYWcsIGg2
VGFnIH07Ci0gICAgICAgIGFkZFRhZ3MoaGVhZGluZ1RhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGhlYWRpbmdUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKLX0KLQotYm9v
bCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzSW5saW5lKE5vZGUqIG5vZGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBlID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShhVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9udFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHR0
VGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHVUYWcpIHx8IGUtPmhhc0xvY2Fs
TmFtZShiVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoaVRhZykgfHwKLSAgICAgICAgICAgIGUtPmhh
c0xvY2FsTmFtZShzVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoc3RyaWtlVGFnKSB8fCBlLT5oYXNM
b2NhbE5hbWUoYmlnVGFnKSB8fAotICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKHNtYWxsVGFn
KSB8fCBlLT5oYXNMb2NhbE5hbWUoZW1UYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShzdHJvbmdUYWcp
IHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoZGZuVGFnKSB8fCBlLT5oYXNMb2NhbE5h
bWUoY29kZVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHNhbXBUYWcpIHx8Ci0gICAgICAgICAgICBl
LT5oYXNMb2NhbE5hbWUoa2JkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUodmFyVGFnKSB8fCBlLT5o
YXNMb2NhbE5hbWUoY2l0ZVRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhYmJy
VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoYWNyb255bVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHN1
YlRhZykgfHwKLSAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShzdXBUYWcpIHx8IGUtPmhhc0xv
Y2FsTmFtZShzcGFuVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUobm9iclRhZykgfHwKLSAgICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShub2ZyYW1lc1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG5vbGF5
ZXJUYWcpIHx8Ci0gICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUobm9lbWJlZFRhZykgfHwgZS0+
aGFzTG9jYWxOYW1lKG1hcmtUYWcpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0jaWYgIUVO
QUJMRShYSFRNTE1QKQotICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG5vc2NyaXB0VGFnKSAm
JiAhbV9pc1BhcnNpbmdGcmFnbWVudCkgewotICAgICAgICAgICAgRnJhbWUqIGZyYW1lID0gbV9k
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICAgICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c2NyaXB0
KCktPmNhbkV4ZWN1dGVTY3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIAotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmlzUmVzaWR1
YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiwgcmVzaWR1YWxTdHlsZVRhZ3Ms
ICgpKTsKLSAgICBpZiAocmVzaWR1YWxTdHlsZVRhZ3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFF1
YWxpZmllZE5hbWUgdGFnTmFtZXNbXSA9IHsgYVRhZywgZm9udFRhZywgdHRUYWcsIHVUYWcsIGJU
YWcsIGlUYWcsCi0gICAgICAgICAgICBzVGFnLCBzdHJpa2VUYWcsIGJpZ1RhZywgc21hbGxUYWcs
IGVtVGFnLCBzdHJvbmdUYWcsIGRmblRhZywKLSAgICAgICAgICAgIGNvZGVUYWcsIHNhbXBUYWcs
IGtiZFRhZywgdmFyVGFnLCBub2JyVGFnLCBtYXJrVGFnIH07Ci0gICAgICAgIGFkZFRhZ3MocmVz
aWR1YWxTdHlsZVRhZ3MsIHRhZ05hbWVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc2lkdWFsU3R5
bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbCgpKTsKLX0KLQotYm9vbCBMZWdhY3lIVE1MVHJl
ZUJ1aWxkZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxBdG9taWNTdHJpbmdJ
bXBsKj4sIHVuYWZmZWN0ZWRUYWdzLCAoKSk7Ci0gICAgaWYgKHVuYWZmZWN0ZWRUYWdzLmlzRW1w
dHkoKSkgewotICAgICAgICBRdWFsaWZpZWROYW1lIHRhZ05hbWVzW10gPSB7IGJvZHlUYWcsIHRh
YmxlVGFnLCB0aGVhZFRhZywgdGJvZHlUYWcsCi0gICAgICAgICAgICB0Zm9vdFRhZywgdHJUYWcs
IHRoVGFnLCB0ZFRhZywgY2FwdGlvblRhZywgY29sZ3JvdXBUYWcsIGNvbFRhZywKLSAgICAgICAg
ICAgIG9wdGlvblRhZywgb3B0Z3JvdXBUYWcsIHNlbGVjdFRhZywgb2JqZWN0VGFnLCBkYXRhZ3Jp
ZFRhZywgZGF0YWxpc3RUYWcgfTsKLSAgICAgICAgYWRkVGFncyh1bmFmZmVjdGVkVGFncywgdGFn
TmFtZXMpOwotICAgIH0KLSAgICByZXR1cm4gIXVuYWZmZWN0ZWRUYWdzLmNvbnRhaW5zKHRhZ05h
bWUuaW1wbCgpKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQotewotICAg
IEhUTUxTdGFja0VsZW0qIG1heEVsZW0gPSAwOwotICAgIGJvb2wgZmluaXNoZWQgPSBmYWxzZTsK
LSAgICBib29sIHN0cmF5VGFibGVDb250ZW50ID0gZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQ7Ci0K
LSAgICB1bnNpZ25lZCBpdGVyYXRpb25Db3VudCA9IDA7Ci0KLSAgICBtX2hhbmRsaW5nUmVzaWR1
YWxTdHlsZUFjcm9zc0Jsb2NrcyA9IHRydWU7Ci0gICAgd2hpbGUgKCFmaW5pc2hlZCAmJiAoaXRl
cmF0aW9uQ291bnQrKyA8IGNSZXNpZHVhbFN0eWxlSXRlcmF0aW9uTGltaXQpKSB7Ci0gICAgICAg
IC8vIEZpbmQgdGhlIG91dGVybW9zdCBlbGVtZW50IHRoYXQgY3Jvc3NlcyBvdmVyIHRvIGEgaGln
aGVyIGxldmVsLiBJZiB0aGVyZSBleGlzdHMgYW5vdGhlciBoaWdoZXItbGV2ZWwKLSAgICAgICAg
Ly8gZWxlbWVudCwgd2Ugd2lsbCBkbyBhbm90aGVyIHBhc3MsIHVudGlsIHdlIGhhdmUgY29ycmVj
dGVkIHRoZSBpbm5lcm1vc3Qgb25lLgotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAgICAgSFRNTFN0YWNrRWxlbSogY3VyciA9IG1fYmxvY2tTdGFjazsKLSAgICAgICAgSFRNTFN0
YWNrRWxlbSogcHJldiA9IDA7Ci0gICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZNYXhFbGVtID0g
MDsKLSAgICAgICAgbWF4RWxlbSA9IDA7Ci0gICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLSAgICAg
ICAgd2hpbGUgKGN1cnIgJiYgY3VyciAhPSBlbGVtKSB7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+
bGV2ZWwgPiBlbGVtLT5sZXZlbCkgewotICAgICAgICAgICAgICAgIGlmICghaXNBZmZlY3RlZEJ5
UmVzaWR1YWxTdHlsZShjdXJyLT50YWdOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIGlmIChtYXhFbGVtKQotICAgICAgICAgICAgICAgICAgICAvLyBX
ZSB3aWxsIG5lZWQgYW5vdGhlciBwYXNzLgotICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIG1heEVsZW0gPSBjdXJyOwotICAgICAgICAgICAgICAg
IHByZXZNYXhFbGVtID0gcHJldjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldiA9
IGN1cnI7Ci0gICAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICghY3VyciB8fCAhbWF4RWxlbSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBOb2RlKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwotICAgICAgICBOb2RlKiBibG9ja0Vs
ZW0gPSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogbV9jdXJyZW50OwotICAgICAg
ICBOb2RlKiBwYXJlbnRFbGVtID0gZWxlbS0+bm9kZTsKLQotICAgICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgdGhlIHJlcGFyZW50aW5nIHRoYXQgaXMgZ29pbmcgdG8gb2NjdXIgaXMgYWxsb3dlZCBh
Y2NvcmRpbmcgdG8gdGhlIERPTS4KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBlaXRoZXIg
YWx3YXlzIGFsbG93IGl0IG9yIHBlcmZvcm0gYW4gYWRkaXRpb25hbCBmaXh1cCBpbnN0ZWFkIG9m
Ci0gICAgICAgIC8vIGp1c3QgYmFpbGluZyBoZXJlLgotICAgICAgICAvLyBFeGFtcGxlOiA8cD48
Zm9udD48Y2VudGVyPmJsYWg8L2ZvbnQ+PC9jZW50ZXI+PC9wPiBpc24ndCBkb2luZyBhIGZpeHVw
IHJpZ2h0IG5vdy4KLSAgICAgICAgaWYgKCFwYXJlbnRFbGVtLT5jaGlsZEFsbG93ZWQoYmxvY2tF
bGVtKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2hhc1BFbGVtZW50SW5TY29w
ZSA9IFVua25vd247Ci0KLSAgICAgICAgaWYgKG1heEVsZW0tPm5vZGUtPnBhcmVudE5vZGUoKSAh
PSBlbGVtLT5ub2RlKSB7Ci0gICAgICAgICAgICAvLyBXYWxrIHRoZSBzdGFjayBhbmQgcmVtb3Zl
IGFueSBlbGVtZW50cyB0aGF0IGFyZW4ndCByZXNpZHVhbCBzdHlsZSB0YWdzLiAgVGhlc2UKLSAg
ICAgICAgICAgIC8vIGFyZSBiYXNpY2FsbHkganVzdCBiZWluZyBjbG9zZWQgdXAuICBFeGFtcGxl
OgotICAgICAgICAgICAgLy8gPGZvbnQ+PHNwYW4+TW9vPHA+R29vPC9mb250PjwvcD4uCi0gICAg
ICAgICAgICAvLyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIDxzcGFuPiBkb2Vzbid0IG5lZWQg
dG8gYmUgcmVvcGVuZWQuICBJdCBjYW4ganVzdCBjbG9zZS4KLSAgICAgICAgICAgIEhUTUxTdGFj
a0VsZW0qIGN1cnJFbGVtID0gbWF4RWxlbS0+bmV4dDsKLSAgICAgICAgICAgIEhUTUxTdGFja0Vs
ZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKLSAgICAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBl
bGVtKSB7Ci0gICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBjdXJyRWxl
bS0+bmV4dDsKLSAgICAgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxl
bS0+dGFnTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0
RWxlbTsKLSAgICAgICAgICAgICAgICAgICAgcHJldkVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAg
ICAgICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwotICAgICAgICAg
ICAgICAgICAgICBwcmV2RWxlbS0+ZGlkUmVmTm9kZSA9IGN1cnJFbGVtLT5kaWRSZWZOb2RlOwot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgY3VyckVsZW07Ci0gICAgICAgICAgICAgICAgICAg
IG1fdHJlZURlcHRoLS07Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHByZXZFbGVtID0gY3VyckVsZW07Ci0gICAgICAgICAgICAgICAgY3VyckVsZW0gPSBuZXh0
RWxlbTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZW9wZW4g
cmVzaWR1YWwgdGFncyBpbiBiZXR3ZWVuIG1heEVsZW0gYW5kIGVsZW0uICBBbiBleGFtcGxlIG9m
IHRoaXMgY2FzZSBpczoKLSAgICAgICAgICAgIC8vIDxmb250PjxpPk1vbzxwPkZvbzwvZm9udD4u
Ci0gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBw
YXJ0IGJlZm9yZSB0aGUgPHA+IGludG86Ci0gICAgICAgICAgICAvLyA8Zm9udD48aT5Nb288L2k+
PC9mb250PjxpPgotICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUgPGk+IHdpbGwgcmVtYWluIG9w
ZW4uICBUaGlzIGludm9sdmVzIHRoZSBtb2RpZmljYXRpb24gb2YgZWxlbWVudHMKLSAgICAgICAg
ICAgIC8vIGluIHRoZSBibG9jayBzdGFjay4KLSAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhbHNv
IGFmZmVjdCBob3cgd2UgdWx0aW1hdGVseSByZXBhcmVudCB0aGUgYmxvY2ssIHNpbmNlIHdlIHdh
bnQgaXQgdG8gZW5kIHVwCi0gICAgICAgICAgICAvLyB1bmRlciB0aGUgcmVvcGVuZWQgcmVzaWR1
YWwgdGFncyAoZS5nLiwgdGhlIDxpPiBpbiB0aGUgYWJvdmUgZXhhbXBsZS4pCi0gICAgICAgICAg
ICBSZWZQdHI8Tm9kZT4gcHJldk5vZGUgPSAwOwotICAgICAgICAgICAgY3VyckVsZW0gPSBtYXhF
bGVtOwotICAgICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFsRWxlbSkg
ewotICAgICAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUt
PmxvY2FsTmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBv
ZiB0aGlzIGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbGwgcmVsZWFzZVJl
ZiB0byBnZXQgYSByYXcgcG9pbnRlciBzaW5jZSB3ZSBwbGFuIHRvIGhhbmQgb3ZlciBvd25lcnNo
aXAgdG8gY3VyckVsZW0uCi0gICAgICAgICAgICAgICAgICAgIE5vZGUqIGN1cnJOb2RlID0gY3Vy
ckVsZW0tPm5vZGUtPmNsb25lTm9kZShmYWxzZSkucmVsZWFzZVJlZigpOwotICAgICAgICAgICAg
ICAgICAgICByZXBvcnRFcnJvcihSZXNpZHVhbFN0eWxlRXJyb3IsICZjdXJyTm9kZS0+bG9jYWxO
YW1lKCkpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHN0YWNrIGVs
ZW1lbnQncyBub2RlIHRvIHBvaW50IHRvIHRoZSBjbG9uZS4KLSAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIHN0YWNrIGVsZW1lbnQgYWRvcHRzIHRoZSByZWZlcmVuY2Ugd2Ugb2J0YWluZWQgYWJv
dmUgYnkgY2FsbGluZyByZWxlYXNlKCkuCi0gICAgICAgICAgICAgICAgICAgIGN1cnJFbGVtLT5k
ZXJlZk5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPm5vZGUgPSBjdXJyTm9k
ZTsKLSAgICAgICAgICAgICAgICAgICAgY3VyckVsZW0tPmRpZFJlZk5vZGUgPSB0cnVlOwotCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEF0dGFjaCB0aGUgcHJldmlvdXMgbm9kZSBhcyBhIGNoaWxk
IG9mIHRoaXMgbmV3IG5vZGUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Tm9kZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJOb2RlLT5hcHBlbmRDaGlsZChwcmV2Tm9kZSwgZWMp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlIC8vIFRoZSBuZXcgcGFyZW50IGZvciB0aGUgYmxv
Y2sgZWxlbWVudCBpcyBnb2luZyB0byBiZSB0aGUgaW5uZXJtb3N0IGNsb25lLgotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50RWxlbSA9IGN1cnJOb2RlOyAgLy8gRklYTUU6IFdlIHNoaWZ0
ZWQgcGFyZW50RWxlbSB0byBiZSBhIHJlc2lkdWFsIGlubGluZS4gIFdlIG5ldmVyIGNoZWNrZWQg
dG8gc2VlIGlmIGJsb2NrRWxlbSBjb3VsZCBiZSBsZWdhbGx5IHBsYWNlZCBpbnNpZGUgdGhlIGlu
bGluZSB0aG91Z2guCi0KLSAgICAgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBjdXJyTm9kZTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVt
LT5uZXh0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBj
aGFpbiBvZiBuZXcgcmVzaWR1YWwgc3R5bGUgZWxlbWVudHMgaWYgb25lIGV4aXN0cy4KLSAgICAg
ICAgICAgIGlmIChwcmV2Tm9kZSkKLSAgICAgICAgICAgICAgICBlbGVtLT5ub2RlLT5hcHBlbmRD
aGlsZChwcmV2Tm9kZSwgZWMpOyAgLy8gRklYTUU6IFRoaXMgYXBwZW5kIGNhbiByZXN1bHQgaW4g
d2VpcmQgc3R1ZmYgaGFwcGVuaW5nLCBsaWtlIGFuIGlubGluZSBjaGFpbiBiZWluZyBwdXQgaW50
byBhIHRhYmxlIHNlY3Rpb24uCi0gICAgICAgIH0KLQotICAgICAgICAvLyBDaGVjayBpZiB0aGUg
YmxvY2sgaXMgc3RpbGwgaW4gdGhlIHRyZWUuIElmIGl0IGlzbid0LCB0aGVuIHdlIGRvbid0Ci0g
ICAgICAgIC8vIHdhbnQgdG8gcmVtb3ZlIGl0IGZyb20gaXRzIHBhcmVudCAodGhhdCB3b3VsZCBj
cmFzaCkgb3IgaW5zZXJ0IGl0IGludG8KLSAgICAgICAgLy8gYSBuZXcgcGFyZW50IGxhdGVyLiBT
ZWUgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3OAotICAgICAgICBi
b29sIGlzQmxvY2tTdGlsbEluVHJlZSA9IGJsb2NrRWxlbS0+cGFyZW50Tm9kZSgpOwotCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBhIGNsb25lIG9mIHxyZXNpZHVhbEVsZW18IGFuZCBwbGFj
ZSBpdCBqdXN0IGluc2lkZSB8YmxvY2tFbGVtfC4KLSAgICAgICAgLy8gQWxsIGNvbnRlbnQgb2Yg
fGJsb2NrRWxlbXwgaXMgcmVwYXJlbnRlZCB0byBiZSB1bmRlciB0aGlzIGNsb25lLiAgV2UgdGhl
bgotICAgICAgICAvLyByZXBhcmVudCB8YmxvY2tFbGVtfCB1c2luZyByZWFsIERPTSBjYWxscyBz
byB0aGF0IGF0dGFjaG1lbnQvZGV0YWNobWVudCB3aWxsCi0gICAgICAgIC8vIGJlIHBlcmZvcm1l
ZCB0byBmaXggdXAgdGhlIHJlbmRlcmluZyB0cmVlLgotICAgICAgICAvLyBTbyBmb3IgdGhpcyBl
eGFtcGxlOiA8Yj4uLi48cD5Gb288L2I+R29vPC9wPgotICAgICAgICAvLyBUaGUgZW5kIHJlc3Vs
dCB3aWxsIGJlOiA8Yj4uLi48L2I+PHA+PGI+Rm9vPC9iPkdvbzwvcD4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gU3RlcCAxOiBSZW1vdmUgfGJsb2NrRWxlbXwgZnJvbSBpdHMgcGFyZW50LCBkb2lu
ZyBhIGJhdGNoIGRldGFjaCBvZiBhbGwgdGhlIGtpZHMuCi0gICAgICAgIGlmIChpc0Jsb2NrU3Rp
bGxJblRyZWUpCi0gICAgICAgICAgICBibG9ja0VsZW0tPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hp
bGQoYmxvY2tFbGVtLCBlYyk7Ci0KLSAgICAgICAgTm9kZSogbmV3Tm9kZVB0ciA9IDA7Ci0gICAg
ICAgIGlmIChibG9ja0VsZW0tPmZpcnN0Q2hpbGQoKSkgewotICAgICAgICAgICAgLy8gU3RlcCAy
OiBDbG9uZSB8cmVzaWR1YWxFbGVtfC4KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2Rl
ID0gcmVzaWR1YWxFbGVtLT5jbG9uZU5vZGUoZmFsc2UpOyAvLyBTaGFsbG93IGNsb25lLiBXZSBk
b24ndCBwaWNrIHVwIHRoZSBzYW1lIGtpZHMuCi0gICAgICAgICAgICBuZXdOb2RlUHRyID0gbmV3
Tm9kZS5nZXQoKTsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwg
Jm5ld05vZGUtPmxvY2FsTmFtZSgpKTsKLQotICAgICAgICAgICAgLy8gU3RlcCAzOiBQbGFjZSB8
YmxvY2tFbGVtfCdzIGNoaWxkcmVuIHVuZGVyIHxuZXdOb2RlfC4gIFJlbW92ZSBhbGwgb2YgdGhl
IGNoaWxkcmVuIG9mIHxibG9ja0VsZW18Ci0gICAgICAgICAgICAvLyBiZWZvcmUgd2UndmUgcHV0
IHxuZXdFbGVtfCBpbnRvIHRoZSBkb2N1bWVudC4gIFRoYXQgd2F5IHdlJ2xsIG9ubHkgZG8gb25l
IGF0dGFjaG1lbnQgb2YgYWxsCi0gICAgICAgICAgICAvLyB0aGUgbmV3IGNvbnRlbnQgKGluc3Rl
YWQgb2YgYSBidW5jaCBvZiBpbmRpdmlkdWFsIGF0dGFjaG1lbnRzKS4KLSAgICAgICAgICAgIE5v
ZGUqIGN1cnJOb2RlID0gYmxvY2tFbGVtLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB3aGls
ZSAoY3Vyck5vZGUpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBuZXh0Tm9kZSA9IGN1cnJOb2Rl
LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgICAgIG5ld05vZGUtPmFwcGVuZENoaWxkKGN1
cnJOb2RlLCBlYyk7Ci0gICAgICAgICAgICAgICAgY3Vyck5vZGUgPSBuZXh0Tm9kZTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3RlcCA0OiBQbGFjZSB8bmV3Tm9kZXwgdW5kZXIg
fGJsb2NrRWxlbXwuICB8YmxvY2tFbGVtfCBpcyBzdGlsbCBvdXQgb2YgdGhlIGRvY3VtZW50LCBz
byBubwotICAgICAgICAgICAgLy8gYXR0YWNobWVudCBjYW4gb2NjdXIgeWV0LgotICAgICAgICAg
ICAgYmxvY2tFbGVtLT5hcHBlbmRDaGlsZChuZXdOb2RlLnJlbGVhc2UoKSwgZWMpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLQotICAgICAgICAvLyBTdGVw
IDU6IFJlcGFyZW50IHxibG9ja0VsZW18LiAgTm93IHRoZSBmdWxsIGF0dGFjaG1lbnQgb2YgdGhl
IGZpeGVkIHVwIHRyZWUgdGFrZXMgcGxhY2UuCi0gICAgICAgIGlmIChpc0Jsb2NrU3RpbGxJblRy
ZWUpCi0gICAgICAgICAgICBwYXJlbnRFbGVtLT5hcHBlbmRDaGlsZChibG9ja0VsZW0sIGVjKTsK
LQotICAgICAgICAvLyBTdGVwIDY6IFB1bGwgfGVsZW18IG91dCBvZiB0aGUgc3RhY2ssIHNpbmNl
IGl0IGlzIG5vIGxvbmdlciBlbmNsb3NpbmcgdXMuICBBbHNvIHVwZGF0ZQotICAgICAgICAvLyB0
aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByZXZpb3VzIHN0YWNrIGVsZW1lbnQgc28gdGhh
dCB3aGVuIGl0IGdldHMgcG9wcGVkLAotICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2UgdGhlIHJl
c2lkdWFsIGVsZW1lbnQgdGhlIG5leHQgY3VycmVudCBub2RlLgotICAgICAgICBIVE1MU3RhY2tF
bGVtKiBjdXJyRWxlbSA9IG1heEVsZW07Ci0gICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVt
ID0gMDsKLSAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKLSAgICAgICAgICAgIHBy
ZXZFbGVtID0gY3VyckVsZW07Ci0gICAgICAgICAgICBjdXJyRWxlbSA9IGN1cnJFbGVtLT5uZXh0
OwotICAgICAgICB9Ci0gICAgICAgIHByZXZFbGVtLT5uZXh0ID0gZWxlbS0+bmV4dDsKLSAgICAg
ICAgcHJldkVsZW0tPmRlcmVmTm9kZSgpOwotICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGVsZW0t
Pm5vZGU7Ci0gICAgICAgIHByZXZFbGVtLT5kaWRSZWZOb2RlID0gZWxlbS0+ZGlkUmVmTm9kZTsK
LSAgICAgICAgbV90cmVlRGVwdGgtLTsKLSAgICAgICAgaWYgKCFmaW5pc2hlZCkgewotICAgICAg
ICAgICAgLy8gUmVwdXJwb3NlIHxlbGVtfCB0byByZXByZXNlbnQgfG5ld05vZGV8IGFuZCBpbnNl
cnQgaXQgYXQgdGhlIGFwcHJvcHJpYXRlIHBvc2l0aW9uCi0gICAgICAgICAgICAvLyBpbiB0aGUg
c3RhY2suIFdlIGRvIG5vdCBkbyB0aGlzIGZvciB0aGUgaW5uZXJtb3N0IGJsb2NrLCBiZWNhdXNl
IGluIHRoYXQgY2FzZSB0aGUgbmV3Ci0gICAgICAgICAgICAvLyBub2RlIGlzIGVmZmVjdGl2ZWx5
IG5vIGxvbmdlciBvcGVuLgotICAgICAgICAgICAgZWxlbS0+bmV4dCA9IG1heEVsZW07Ci0gICAg
ICAgICAgICBlbGVtLT5ub2RlID0gcHJldk1heEVsZW0tPm5vZGU7Ci0gICAgICAgICAgICBlbGVt
LT5kaWRSZWZOb2RlID0gcHJldk1heEVsZW0tPmRpZFJlZk5vZGU7Ci0gICAgICAgICAgICBlbGVt
LT5zdHJheVRhYmxlQ29udGVudCA9IGZhbHNlOwotICAgICAgICAgICAgcHJldk1heEVsZW0tPm5l
eHQgPSBlbGVtOwotICAgICAgICAgICAgQVNTRVJUKG5ld05vZGVQdHIpOwotICAgICAgICAgICAg
cHJldk1heEVsZW0tPm5vZGUgPSBuZXdOb2RlUHRyOwotICAgICAgICAgICAgbmV3Tm9kZVB0ci0+
cmVmKCk7Ci0gICAgICAgICAgICBwcmV2TWF4RWxlbS0+ZGlkUmVmTm9kZSA9IHRydWU7Ci0gICAg
ICAgICAgICBtX3RyZWVEZXB0aCsrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGRlbGV0
ZSBlbGVtOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIG1ha2UgYSBjYXNlIGxp
a2UgdGhpcyB3b3JrOgotICAgIC8vIDx0YWJsZT48Yj48aT48Zm9ybT48L2I+PC9mb3JtPjwvaT48
L3RhYmxlPgotICAgIC8vIFRoZW4gdGhpcyBjaGVjayB3aWxsIGJlIHRvbyBzaW1wbGlzdGljLiAg
UmlnaHQgbm93IHRoZSA8aT48Zm9ybT4gY2hhaW4gd2lsbCBlbmQgdXAgaW5zaWRlIHRoZSA8dGJv
ZHk+LCB3aGljaCBpcyBwcmV0dHkgY3JhenkuCi0gICAgaWYgKHN0cmF5VGFibGVDb250ZW50KQot
ICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRlbnQtLTsKLQotICAgIC8vIFN0ZXAgNzogUmVvcGVu
IGludGVybWVkaWF0ZSBpbmxpbmVzLCBlLmcuLCA8Yj48cD48aT5Gb288L2I+R29vPC9wPi4KLSAg
ICAvLyBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgR29vIHNob3VsZCBzdGF5IGl0YWxpYy4KLSAgICAv
LyBXZSBjYXAgdGhlIG51bWJlciBvZiB0YWdzIHdlJ3JlIHdpbGxpbmcgdG8gcmVvcGVuIGJhc2Vk
IG9mZiBjUmVzaWR1YWxTdHlsZU1heERlcHRoLgotICAgIAotICAgIEhUTUxTdGFja0VsZW0qIGN1
cnIgPSBtX2Jsb2NrU3RhY2s7Ci0gICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNr
ID0gMDsKLSAgICB1bnNpZ25lZCBzdGFja0RlcHRoID0gMTsKLSAgICB1bnNpZ25lZCByZWR1bmRh
bnRTdHlsZUNvdW50ID0gMDsKLSAgICB3aGlsZSAoY3VyciAmJiBjdXJyICE9IG1heEVsZW0pIHsK
LSAgICAgICAgLy8gV2Ugd2lsbCBhY3R1YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVu
aW5nCi0gICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGly
ZSBibG9jay4KLSAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1lKSAm
JiBzdGFja0RlcHRoKysgPCBjUmVzaWR1YWxTdHlsZU1heERlcHRoKSB7Ci0gICAgICAgICAgICAv
LyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0
IHJldXNpbmcgdGhlCi0gICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZl
cmVudCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCi0gICAg
ICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlz
dCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KLSAgICAgICAgICAgIC8vIGZyb20g
dGhlIG91dGVybW9zdCB0byB0aGUgaW5uZXJtb3N0LCBpLmUuLCByZXNpZHVhbFN0eWxlU3RhY2sg
d2lsbCBlbmQgdXAgcG9pbnRpbmcKLSAgICAgICAgICAgIC8vIHRvIHRoZSBvdXRlcm1vc3QgdGFn
IHdlIG5lZWQgdG8gcmVvcGVuLgotICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgY3Vyci0+bm9k
ZSB0byBiZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3Rv
cmVkIGluCi0gICAgICAgICAgICAvLyBjdXJyLT5pZCByYXRoZXIgdGhhbiB0aGUgbm9kZSB0aGF0
IHlvdSBzaG91bGQgcG9wIHRvIHdoZW4gdGhlIGVsZW1lbnQgZ2V0cyBwdWxsZWQgb2ZmCi0gICAg
ICAgICAgICAvLyB0aGUgc3RhY2suCi0gICAgICAgICAgICBpZiAocmVzaWR1YWxTdHlsZVN0YWNr
ICYmIGN1cnItPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYmIGN1cnIt
Pm5vZGUtPmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0YWNrLT5u
b2RlLT5hdHRyaWJ1dGVzKCkpKQotICAgICAgICAgICAgICAgIHJlZHVuZGFudFN0eWxlQ291bnQr
KzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWR1bmRhbnRTdHlsZUNvdW50
ID0gMDsKLQotICAgICAgICAgICAgaWYgKHJlZHVuZGFudFN0eWxlQ291bnQgPCBjTWF4UmVkdW5k
YW50VGFnRGVwdGgpCi0gICAgICAgICAgICAgICAgbW92ZU9uZUJsb2NrVG9TdGFjayhyZXNpZHVh
bFN0eWxlU3RhY2spOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBvcE9uZUJs
b2NrKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLQotICAg
ICAgICBjdXJyID0gbV9ibG9ja1N0YWNrOwotICAgIH0KLQotICAgIHJlb3BlblJlc2lkdWFsU3R5
bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgMCk7IC8vIFN0cmF5IHRhYmxlIGNvbnRlbnQgY2Fu
J3QgYmUgYW4gaXNzdWUgaGVyZSwgc2luY2Ugc29tZSBlbGVtZW50IGFib3ZlIHdpbGwgYWx3YXlz
IGJlY29tZSB0aGUgcm9vdCBvZiBuZXcgc3RyYXkgdGFibGUgY29udGVudC4KLQotICAgIG1faGFu
ZGxpbmdSZXNpZHVhbFN0eWxlQWNyb3NzQmxvY2tzID0gZmFsc2U7Ci19Ci0KLXZvaWQgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBl
bGVtLCBOb2RlKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKLXsKLSAgICAvLyBMb29wIGZvciBlYWNo
IHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgotICAgIHdoaWxlIChlbGVtKSB7Ci0gICAg
ICAgIC8vIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhlIERPTSBub2RlIGZvciB0aGlzIGVs
ZW1lbnQuCi0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gZWxlbS0+bm9kZS0+Y2xvbmVO
b2RlKGZhbHNlKTsgCi0gICAgICAgIHJlcG9ydEVycm9yKFJlc2lkdWFsU3R5bGVFcnJvciwgJm5l
d05vZGUtPmxvY2FsTmFtZSgpKTsKLQotICAgICAgICAvLyBBcHBlbmQgdGhlIG5ldyBub2RlLiBJ
biB0aGUgbWFsZm9ybWVkIHRhYmxlIGNhc2UsIHdlIG5lZWQgdG8gaW5zZXJ0IGJlZm9yZSB0aGUg
dGFibGUsCi0gICAgICAgIC8vIHdoaWNoIHdpbGwgYmUgdGhlIGxhc3QgY2hpbGQuCi0gICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBpZiAobWFsZm9ybWVkVGFibGVQYXJlbnQp
Ci0gICAgICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVudC0+aW5zZXJ0QmVmb3JlKG5ld05vZGUs
IG1hbGZvcm1lZFRhYmxlUGFyZW50LT5sYXN0Q2hpbGQoKSwgZWMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBtX2N1cnJlbnQtPmFwcGVuZENoaWxkKG5ld05vZGUsIGVjKTsKLSAgICAgICAg
Ly8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8K
LQotICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlzIG5vZGUg
d2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxvY2soZWxlbS0+dGFnTmFtZSwgZWxlbS0+
bGV2ZWwpOwotICAgICAgICBuZXdOb2RlLT5iZWdpblBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAg
ICAgIC8vIFNldCBvdXIgc3RyYXlUYWJsZUNvbnRlbnQgYm9vbGVhbiBpZiBuZWVkZWQsIHNvIHRo
YXQgdGhlIHJlb3BlbmVkIHRhZyBhbHNvIGtub3dzCi0gICAgICAgIC8vIHRoYXQgaXQgaXMgaW5z
aWRlIGEgbWFsZm9ybWVkIHRhYmxlLgotICAgICAgICBtX2Jsb2NrU3RhY2stPnN0cmF5VGFibGVD
b250ZW50ID0gbWFsZm9ybWVkVGFibGVQYXJlbnQgIT0gMDsKLSAgICAgICAgaWYgKG1fYmxvY2tT
dGFjay0+c3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAgICAgICBtX2luU3RyYXlUYWJsZUNvbnRl
bnQrKzsKLQotICAgICAgICAvLyBDbGVhciBvdXIgbWFsZm9ybWVkIHRhYmxlIHBhcmVudCB2YXJp
YWJsZS4KLSAgICAgICAgbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwotCi0gICAgICAgIC8vIFVw
ZGF0ZSB8Y3VycmVudHwgbWFudWFsbHkgdG8gcG9pbnQgdG8gdGhlIG5ldyBub2RlLgotICAgICAg
ICBzZXRDdXJyZW50KG5ld05vZGUuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gQWR2YW5j
ZSB0byB0aGUgbmV4dCB0YWcgdGhhdCBuZWVkcyB0byBiZSByZW9wZW5lZC4KLSAgICAgICAgSFRN
TFN0YWNrRWxlbSogbmV4dCA9IGVsZW0tPm5leHQ7Ci0gICAgICAgIGVsZW0tPmRlcmVmTm9kZSgp
OwotICAgICAgICBkZWxldGUgZWxlbTsKLSAgICAgICAgZWxlbSA9IG5leHQ7Ci0gICAgfQotfQot
Ci12b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgaW50IGxldmVsKQotewotICAgIG1fYmxvY2tTdGFjayA9IG5ldyBIVE1MU3Rh
Y2tFbGVtKHRhZ05hbWUsIGxldmVsLCBtX2N1cnJlbnQsIG1fZGlkUmVmQ3VycmVudCwgbV9ibG9j
a1N0YWNrKTsKLSAgICBpZiAobGV2ZWwgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KQotICAg
ICAgICBtX2Jsb2Nrc0luU3RhY2srKzsKLSAgICBtX3RyZWVEZXB0aCsrOwotICAgIG1fZGlkUmVm
Q3VycmVudCA9IGZhbHNlOwotICAgIGlmICh0YWdOYW1lID09IHBUYWcpCi0gICAgICAgIG1faGFz
UEVsZW1lbnRJblNjb3BlID0gSW5TY29wZTsKLSAgICBlbHNlIGlmIChpc1Njb3BpbmdUYWcodGFn
TmFtZSkpCi0gICAgICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKLX0KLQot
dm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgYm9vbCByZXBvcnRFcnJvcnMpCi17Ci0gICAgSFRNTFN0YWNrRWxlbSogZWxlbSA9
IG1fYmxvY2tTdGFjazsKLQotICAgIGlmIChtX3BhcnNlclF1aXJrcyAmJiBlbGVtICYmICFtX3Bh
cnNlclF1aXJrcy0+c2hvdWxkUG9wQmxvY2soZWxlbS0+dGFnTmFtZSwgdGFnTmFtZSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGludCBtYXhMZXZlbCA9IDA7Ci0KLSAgICB3aGlsZSAoZWxlbSAm
JiAoZWxlbS0+dGFnTmFtZSAhPSB0YWdOYW1lKSkgewotICAgICAgICBpZiAobWF4TGV2ZWwgPCBl
bGVtLT5sZXZlbCkKLSAgICAgICAgICAgIG1heExldmVsID0gZWxlbS0+bGV2ZWw7Ci0gICAgICAg
IGVsZW0gPSBlbGVtLT5uZXh0OwotICAgIH0KLQotICAgIGlmICghZWxlbSkgewotICAgICAgICBp
ZiAocmVwb3J0RXJyb3JzKQotICAgICAgICAgICAgcmVwb3J0RXJyb3IoU3RyYXlDbG9zZVRhZ0Vy
cm9yLCAmdGFnTmFtZSwgMCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAobWF4TGV2ZWwgPiBlbGVtLT5sZXZlbCkgewotICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0Y2gg
YmVjYXVzZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAotICAgICAgICAv
LyA8Yj48cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCi0gICAgICAgIGlm
ICghaXNSZXNpZHVhbFN0eWxlVGFnKHRhZ05hbWUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKGVsZW0p
OwotICAgIH0KLQotICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNp
ZHVhbFN0eWxlKGVsZW0tPnRhZ05hbWUpOwotICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5
bGVTdGFjayA9IDA7Ci0gICAgTm9kZSogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwotICAgIAot
ICAgIGVsZW0gPSBtX2Jsb2NrU3RhY2s7Ci0gICAgdW5zaWduZWQgc3RhY2tEZXB0aCA9IDE7Ci0g
ICAgdW5zaWduZWQgcmVkdW5kYW50U3R5bGVDb3VudCA9IDA7Ci0gICAgd2hpbGUgKGVsZW0pIHsK
LSAgICAgICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gdGFnTmFtZSkgewotICAgICAgICAgICAgaW50
IHN0cmF5VGFibGUgPSBtX2luU3RyYXlUYWJsZUNvbnRlbnQ7Ci0gICAgICAgICAgICBwb3BPbmVC
bG9jaygpOwotICAgICAgICAgICAgZWxlbSA9IDA7Ci0KLSAgICAgICAgICAgIC8vIFRoaXMgZWxl
bWVudCB3YXMgdGhlIHJvb3Qgb2Ygc29tZSBtYWxmb3JtZWQgY29udGVudCBqdXN0IGluc2lkZSBh
biBpbXBsaWNpdCBvcgotICAgICAgICAgICAgLy8gZXhwbGljaXQgPHRib2R5PiBvciA8dHI+Lgot
ICAgICAgICAgICAgLy8gSWYgd2UgZW5kIHVwIG5lZWRpbmcgdG8gcmVvcGVuIHJlc2lkdWFsIHN0
eWxlIHRhZ3MsIHRoZSByb290IG9mIHRoZSByZW9wZW5lZCBjaGFpbgotICAgICAgICAgICAgLy8g
bXVzdCBhbHNvIGtub3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVudCBp
bnNpZGUgYSA8dGJvZHk+Lzx0cj4uCi0gICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAobV9p
blN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZSogY3VyciA9IG1fY3VycmVudDsKLSAgICAgICAgICAgICAg
ICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzVGFnTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgbWFs
Zm9ybWVkVGFibGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX2N1
cnJlbnRGb3JtRWxlbWVudCAmJiBlbGVtLT50YWdOYW1lID09IGZvcm1UYWcpCi0gICAgICAgICAg
ICAgICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChhbmQgdGhpcyBp
cwotICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBhdHRyaWJ1dGUg
b24gdGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0cwotICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBt
YXJnaW4uCi0gICAgICAgICAgICAgICAgbV9jdXJyZW50Rm9ybUVsZW1lbnQtPnNldE1hbGZvcm1l
ZCh0cnVlKTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3Blbmlu
ZwotICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50
aXJlIGJsb2NrLgotICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1
YWxTdHlsZVRhZyhlbGVtLT50YWdOYW1lKSAmJiBzdGFja0RlcHRoKysgPCBjUmVzaWR1YWxTdHls
ZU1heERlcHRoKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNl
IG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQotICAgICAgICAgICAg
ICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZh
cmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKLSAgICAgICAgICAgICAgICAvLyBmcm9tIGlu
bmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mg
d2UgbmVlZCB0byByZW9wZW4KLSAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSBvdXRlcm1vc3Qg
dG8gdGhlIGlubmVybW9zdCwgaS5lLiwgcmVzaWR1YWxTdHlsZVN0YWNrIHdpbGwgZW5kIHVwIHBv
aW50aW5nCi0gICAgICAgICAgICAgICAgLy8gdG8gdGhlIG91dGVybW9zdCB0YWcgd2UgbmVlZCB0
byByZW9wZW4uCi0gICAgICAgICAgICAgICAgLy8gV2UgYWxzbyBzZXQgZWxlbS0+bm9kZSB0byBi
ZSB0aGUgYWN0dWFsIGVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgc3RvcmVkIGlu
Ci0gICAgICAgICAgICAgICAgLy8gZWxlbS0+aWQgcmF0aGVyIHRoYW4gdGhlIG5vZGUgdGhhdCB5
b3Ugc2hvdWxkIHBvcCB0byB3aGVuIHRoZSBlbGVtZW50IGdldHMgcHVsbGVkIG9mZgotICAgICAg
ICAgICAgICAgIC8vIHRoZSBzdGFjay4KLSAgICAgICAgICAgICAgICBpZiAocmVzaWR1YWxTdHls
ZVN0YWNrICYmIGVsZW0tPnRhZ05hbWUgPT0gcmVzaWR1YWxTdHlsZVN0YWNrLT50YWdOYW1lICYm
IGVsZW0tPm5vZGUtPmF0dHJpYnV0ZXMoKS0+bWFwc0VxdWl2YWxlbnQocmVzaWR1YWxTdHlsZVN0
YWNrLT5ub2RlLT5hdHRyaWJ1dGVzKCkpKQotICAgICAgICAgICAgICAgICAgICByZWR1bmRhbnRT
dHlsZUNvdW50Kys7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBy
ZWR1bmRhbnRTdHlsZUNvdW50ID0gMDsKLQotICAgICAgICAgICAgICAgIGlmIChyZWR1bmRhbnRT
dHlsZUNvdW50IDwgY01heFJlZHVuZGFudFRhZ0RlcHRoKQotICAgICAgICAgICAgICAgICAgICBt
b3ZlT25lQmxvY2tUb1N0YWNrKHJlc2lkdWFsU3R5bGVTdGFjayk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICAgICAgICAgIGVsZW0gPSBt
X2Jsb2NrU3RhY2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZW9wZW5SZXNpZHVhbFN0eWxl
VGFncyhyZXNpZHVhbFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKLX0KLQotaW5s
aW5lIEhUTUxTdGFja0VsZW0qIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6cG9wT25lQmxvY2tDb21t
b24oKQotewotICAgIEhUTUxTdGFja0VsZW0qIGVsZW0gPSBtX2Jsb2NrU3RhY2s7Ci0KLSAgICAv
LyBGb3JtIGVsZW1lbnRzIHJlc3RvcmUgdGhlaXIgc3RhdGUgZHVyaW5nIHRoZSBwYXJzaW5nIHBy
b2Nlc3MuCi0gICAgLy8gQWxzbywgYSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0Pikg
bmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWls
YWJsZS4KLSAgICBpZiAobV9jdXJyZW50ICYmIGVsZW0tPm5vZGUgIT0gbV9jdXJyZW50KQotICAg
ICAgICBtX2N1cnJlbnQtPmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwotCi0gICAgaWYgKG1fYmxv
Y2tTdGFjay0+bGV2ZWwgPj0gbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5KSB7Ci0gICAgICAgIEFT
U0VSVChtX2Jsb2Nrc0luU3RhY2sgPiAwKTsKLSAgICAgICAgbV9ibG9ja3NJblN0YWNrLS07Ci0g
ICAgfQotICAgIG1fdHJlZURlcHRoLS07Ci0gICAgbV9ibG9ja1N0YWNrID0gZWxlbS0+bmV4dDsK
LSAgICBtX2N1cnJlbnQgPSBlbGVtLT5ub2RlOwotICAgIG1fZGlkUmVmQ3VycmVudCA9IGVsZW0t
PmRpZFJlZk5vZGU7Ci0KLSAgICBpZiAoZWxlbS0+c3RyYXlUYWJsZUNvbnRlbnQpCi0gICAgICAg
IG1faW5TdHJheVRhYmxlQ29udGVudC0tOwotCi0gICAgaWYgKGVsZW0tPnRhZ05hbWUgPT0gcFRh
ZykKLSAgICAgICAgbV9oYXNQRWxlbWVudEluU2NvcGUgPSBOb3RJblNjb3BlOwotICAgIGVsc2Ug
aWYgKGlzU2NvcGluZ1RhZyhlbGVtLT50YWdOYW1lKSkKLSAgICAgICAgbV9oYXNQRWxlbWVudElu
U2NvcGUgPSBVbmtub3duOwotCi0gICAgcmV0dXJuIGVsZW07Ci19Ci0KLXZvaWQgTGVnYWN5SFRN
TFRyZWVCdWlsZGVyOjpwb3BPbmVCbG9jaygpCi17Ci0gICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQg
bm9kZSBiZWZvcmUgcG9wT25lQmxvY2tDb21tb24gb3ZlcndyaXRlcyBpdC4KLSAgICBOb2RlKiBs
YXN0Q3VycmVudCA9IG1fY3VycmVudDsKLSAgICBib29sIGRpZFJlZkxhc3RDdXJyZW50ID0gbV9k
aWRSZWZDdXJyZW50OwotCi0gICAgZGVsZXRlIHBvcE9uZUJsb2NrQ29tbW9uKCk7Ci0KLSAgICBp
ZiAoZGlkUmVmTGFzdEN1cnJlbnQpCi0gICAgICAgIGxhc3RDdXJyZW50LT5kZXJlZigpOwotfQot
Ci12b2lkIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6bW92ZU9uZUJsb2NrVG9TdGFjayhIVE1MU3Rh
Y2tFbGVtKiYgaGVhZCkKLXsKLSAgICAvLyBXZSdsbCBiZSB1c2luZyB0aGUgc3RhY2sgZWxlbWVu
dCB3ZSdyZSBwb3BwaW5nLCBidXQgZm9yIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgLy8gU2VlIHRo
ZSB0d28gY2FsbGVycyBmb3IgZGV0YWlscy4KLQotICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IG5v
ZGUgYmVmb3JlIHBvcE9uZUJsb2NrQ29tbW9uIG92ZXJ3cml0ZXMgaXQuCi0gICAgTm9kZSogbGFz
dEN1cnJlbnQgPSBtX2N1cnJlbnQ7Ci0gICAgYm9vbCBkaWRSZWZMYXN0Q3VycmVudCA9IG1fZGlk
UmVmQ3VycmVudDsKLQotICAgIC8vIFBvcCB0aGUgYmxvY2ssIGJ1dCBkb24ndCBkZXJlZiB0aGUg
Y3VycmVudCBub2RlIGFzIHBvcE9uZUJsb2NrIGRvZXMgYmVjYXVzZQotICAgIC8vIHdlJ2xsIGJl
IHVzaW5nIHRoZSBwb2ludGVyIGluIHRoZSBuZXcgc3RhY2sgZWxlbWVudC4KLSAgICBIVE1MU3Rh
Y2tFbGVtKiBlbGVtID0gcG9wT25lQmxvY2tDb21tb24oKTsKLQotICAgIC8vIFRyYW5zZmVyIHRo
ZSBjdXJyZW50IG5vZGUgaW50byB0aGUgc3RhY2sgZWxlbWVudC4KLSAgICAvLyBObyBuZWVkIHRv
IGRlcmVmIHRoZSBvbGQgZWxlbS0+bm9kZSBiZWNhdXNlIHBvcE9uZUJsb2NrQ29tbW9uIHRyYW5z
ZmVycmVkCi0gICAgLy8gaXQgaW50byB0aGUgbV9jdXJyZW50L21fZGlkUmVmQ3VycmVudCBmaWVs
ZHMuCi0gICAgZWxlbS0+bm9kZSA9IGxhc3RDdXJyZW50OwotICAgIGVsZW0tPmRpZFJlZk5vZGUg
PSBkaWRSZWZMYXN0Q3VycmVudDsKLSAgICBlbGVtLT5uZXh0ID0gaGVhZDsKLSAgICBoZWFkID0g
ZWxlbTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OmNoZWNrSWZIYXNQRWxlbWVu
dEluU2NvcGUoKQotewotICAgIG1faGFzUEVsZW1lbnRJblNjb3BlID0gTm90SW5TY29wZTsKLSAg
ICBIVE1MU3RhY2tFbGVtKiBlbGVtID0gbV9ibG9ja1N0YWNrOwotICAgIHdoaWxlIChlbGVtKSB7
Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IGVsZW0tPnRhZ05hbWU7Ci0g
ICAgICAgIGlmICh0YWdOYW1lID09IHBUYWcpIHsKLSAgICAgICAgICAgIG1faGFzUEVsZW1lbnRJ
blNjb3BlID0gSW5TY29wZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlm
IChpc1Njb3BpbmdUYWcodGFnTmFtZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGVs
ZW0gPSBlbGVtLT5uZXh0OwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OnBvcElubGluZUJsb2NrcygpCi17Ci0gICAgd2hpbGUgKG1fYmxvY2tTdGFjayAmJiBpc0lubGlu
ZShtX2N1cnJlbnQpKQotICAgICAgICBwb3BPbmVCbG9jaygpOwotfQotCi12b2lkIExlZ2FjeUhU
TUxUcmVlQnVpbGRlcjo6ZnJlZUJsb2NrKCkKLXsKLSAgICB3aGlsZSAobV9ibG9ja1N0YWNrKQot
ICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIEFTU0VSVCghbV9ibG9ja3NJblN0YWNrKTsKLSAg
ICBBU1NFUlQoIW1fdHJlZURlcHRoKTsKLX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6
OmNyZWF0ZUhlYWQoKQotewotICAgIGlmIChtX2hlYWQpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmICghbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkgJiYgIW1faXNQYXJzaW5nRnJhZ21l
bnQpIHsKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3Vt
ZW50KS5nZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KSB8fCBtX2lzUGFyc2luZ0ZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBtX2hlYWQgPSBIVE1MSGVh
ZEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KTsKLQotICAgIGlmIChtX2lzUGFyc2luZ0ZyYWdt
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIVE1MRWxlbWVudCogYm9keSA9IG1fZG9jdW1l
bnQtPmJvZHkoKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBtX2RvY3VtZW50LT5k
b2N1bWVudEVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKG1faGVhZC5nZXQoKSwgYm9keSwgZWMpOwot
ICAgIGlmIChlYykKLSAgICAgICAgbV9oZWFkID0gMDsKLSAgICAgICAgCi0gICAgLy8gSWYgdGhl
IGJvZHkgZG9lcyBub3QgZXhpc3QgeWV0LCB0aGVuIHRoZSA8aGVhZD4gc2hvdWxkIGJlIHB1c2hl
ZCBhcyB0aGUgY3VycmVudCBibG9jay4KLSAgICBpZiAobV9oZWFkICYmICFib2R5KSB7Ci0gICAg
ICAgIHB1c2hCbG9jayhtX2hlYWQtPmxvY2FsTmFtZSgpLCBtX2hlYWQtPnRhZ1ByaW9yaXR5KCkp
OwotICAgICAgICBzZXRDdXJyZW50KG1faGVhZC5nZXQoKSk7Ci0gICAgfQotfQotCi1QYXNzUmVm
UHRyPE5vZGU+IExlZ2FjeUhUTUxUcmVlQnVpbGRlcjo6aGFuZGxlSXNpbmRleChUb2tlbiogdCkK
LXsKLSAgICBSZWZQdHI8Tm9kZT4gbiA9IEhUTUxEaXZFbGVtZW50OjpjcmVhdGUobV9kb2N1bWVu
dCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJzID0gdC0+YXR0cnMuZ2V0KCk7Ci0KLSAgICBS
ZWZQdHI8SFRNTElzSW5kZXhFbGVtZW50PiBpc0luZGV4ID0gSFRNTElzSW5kZXhFbGVtZW50Ojpj
cmVhdGUobV9kb2N1bWVudCwgbV9jdXJyZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOwotICAgIGlzSW5k
ZXgtPnNldEF0dHJpYnV0ZU1hcChhdHRycyk7Ci0gICAgaXNJbmRleC0+c2V0QXR0cmlidXRlKHR5
cGVBdHRyLCAia2h0bWxfaXNpbmRleCIpOwotCi0gICAgU3RyaW5nIHRleHQgPSBzZWFyY2hhYmxl
SW5kZXhJbnRyb2R1Y3Rpb24oKTsKLSAgICBpZiAoYXR0cnMpIHsKLSAgICAgICAgaWYgKEF0dHJp
YnV0ZSogYSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpKQotICAgICAgICAg
ICAgdGV4dCA9IGEtPnZhbHVlKCkuc3RyaW5nKCkgKyAiICI7Ci0gICAgICAgIHQtPmF0dHJzID0g
MDsKLSAgICB9Ci0KLSAgICBuLT5sZWdhY3lQYXJzZXJBZGRDaGlsZChIVE1MSFJFbGVtZW50Ojpj
cmVhdGUobV9kb2N1bWVudCkpOwotICAgIG4tPmxlZ2FjeVBhcnNlckFkZENoaWxkKFRleHQ6OmNy
ZWF0ZShtX2RvY3VtZW50LCB0ZXh0KSk7Ci0gICAgbi0+bGVnYWN5UGFyc2VyQWRkQ2hpbGQoaXNJ
bmRleC5yZWxlYXNlKCkpOwotICAgIG4tPmxlZ2FjeVBhcnNlckFkZENoaWxkKEhUTUxIUkVsZW1l
bnQ6OmNyZWF0ZShtX2RvY3VtZW50KSk7Ci0KLSAgICByZXR1cm4gbi5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOjpzdGFydEJvZHkoKQotewotICAgIGlmIChtX2lu
Qm9keSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbkJvZHkgPSB0cnVlOwotCi0gICAgaWYg
KG1faXNpbmRleEVsZW1lbnQpIHsKLSAgICAgICAgaW5zZXJ0Tm9kZShtX2lzaW5kZXhFbGVtZW50
LmdldCgpLCB0cnVlIC8qIGRvbid0IGRlc2NlbmQgaW50byB0aGlzIG5vZGUgKi8pOwotICAgICAg
ICBtX2lzaW5kZXhFbGVtZW50ID0gMDsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyOjpmaW5pc2hlZCgpCi17Ci0gICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5
IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVt
ZW50LgotICAgIGlmIChtX2N1cnJlbnQgJiYgbV9jdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYm
ICFtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgaW5zZXJ0Tm9kZShIVE1M
SHRtbEVsZW1lbnQ6OmNyZWF0ZShtX2RvY3VtZW50KS5nZXQoKSk7Ci0KLSAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCAiY3VycmVudCIgaXMgbm90IGxlZnQgcG9pbnRpbmcgdG8gYSBub2RlIHdoZW4g
dGhlIGRvY3VtZW50IGlzIGRlc3Ryb3llZC4KLSAgICBmcmVlQmxvY2soKTsKLSAgICBzZXRDdXJy
ZW50KDApOwotCi0gICAgLy8gV2FybmluZywgdGhpcyBtYXkgZGVsZXRlIHRoZSBwYXJzZXIsIHNv
IGRvbid0IHRyeSB0byBkbyBhbnl0aGluZyBlbHNlIGFmdGVyIHRoaXMuCi0gICAgaWYgKCFtX2lz
UGFyc2luZ0ZyYWdtZW50KQotICAgICAgICBtX2RvY3VtZW50LT5maW5pc2hlZFBhcnNpbmcoKTsK
LX0KLQotdm9pZCBMZWdhY3lIVE1MVHJlZUJ1aWxkZXI6OnJlcG9ydEVycm9yVG9Db25zb2xlKEhU
TUxQYXJzZXJFcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUx
LCBjb25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUyLCBib29sIGNsb3NlVGFncykKLXsgICAgCi0g
ICAgRnJhbWUqIGZyYW1lID0gbV9kb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIqIHBhcnNlciA9
IG1fZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpOwotICAgIGludCBsaW5lTnVt
YmVyID0gcGFyc2VyLT5saW5lTnVtYmVyKCkgKyAxOwotCi0gICAgQXRvbWljU3RyaW5nIHRhZzE7
Ci0gICAgQXRvbWljU3RyaW5nIHRhZzI7Ci0gICAgaWYgKHRhZ05hbWUxKSB7Ci0gICAgICAgIGlm
ICgqdGFnTmFtZTEgPT0gIiN0ZXh0IikKLSAgICAgICAgICAgIHRhZzEgPSAiVGV4dCI7Ci0gICAg
ICAgIGVsc2UgaWYgKCp0YWdOYW1lMSA9PSAiI2NvbW1lbnQiKQotICAgICAgICAgICAgdGFnMSA9
ICI8IS0tIGNvbW1lbnQgLS0+IjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGFnMSA9IChj
bG9zZVRhZ3MgPyAiPC8iIDogIjwiKSArICp0YWdOYW1lMSArICI+IjsKLSAgICB9Ci0gICAgaWYg
KHRhZ05hbWUyKSB7Ci0gICAgICAgIGlmICgqdGFnTmFtZTIgPT0gIiN0ZXh0IikKLSAgICAgICAg
ICAgIHRhZzIgPSAiVGV4dCI7Ci0gICAgICAgIGVsc2UgaWYgKCp0YWdOYW1lMiA9PSAiI2NvbW1l
bnQiKQotICAgICAgICAgICAgdGFnMiA9ICI8IS0tIGNvbW1lbnQgLS0+IjsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGFnMiA9IChjbG9zZVRhZ3MgPyAiPC8iIDogIjwiKSArICp0YWdOYW1l
MiArICI+IjsKLSAgICB9Ci0gICAgICAgIAotICAgIGNvbnN0IGNoYXIqIGVycm9yTXNnID0gaHRt
bFBhcnNlckVycm9yTWVzc2FnZVRlbXBsYXRlKGVycm9yQ29kZSk7Ci0gICAgaWYgKCFlcnJvck1z
ZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaWYgKHBhcnNl
ci0+cHJvY2Vzc2luZ0NvbnRlbnRXcml0dGVuQnlTY3JpcHQoKSkKLSAgICAgICAgbWVzc2FnZSAr
PSBodG1sUGFyc2VyRG9jdW1lbnRXcml0ZU1lc3NhZ2UoKTsKLSAgICBtZXNzYWdlICs9IGVycm9y
TXNnOwotICAgIG1lc3NhZ2UucmVwbGFjZSgiJXRhZzEiLCB0YWcxKTsKLSAgICBtZXNzYWdlLnJl
cGxhY2UoIiV0YWcyIiwgdGFnMik7Ci0KLSAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUo
KS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIAotICAgICAg
ICBpc1dhcm5pbmcoZXJyb3JDb2RlKSA/IFdhcm5pbmdNZXNzYWdlTGV2ZWwgOiBFcnJvck1lc3Nh
Z2VMZXZlbCwKLSAgICAgICAgbWVzc2FnZSwgbGluZU51bWJlciwgbV9kb2N1bWVudC0+dXJsKCku
c3RyaW5nKCkpOwotfQotCi0jaWZkZWYgQlVJTERJTkdfT05fTEVPUEFSRAotYm9vbCBzaG91bGRD
cmVhdGVJbXBsaWNpdEhlYWQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVChkb2N1
bWVudCk7Ci0gICAgCi0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKSA/
IGRvY3VtZW50LT5wYWdlKCktPnNldHRpbmdzKCkgOiAwOwotICAgIHJldHVybiBzZXR0aW5ncyA/
ICFzZXR0aW5ncy0+bmVlZHNMZW9wYXJkTWFpbFF1aXJrcygpIDogdHJ1ZTsKLX0KLSNlbGlmIGRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpCi1ib29sIHNob3VsZENyZWF0ZUltcGxpY2l0SGVhZChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAKLSAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpID8gZG9jdW1lbnQtPnBhZ2UoKS0+
c2V0dGluZ3MoKSA6IDA7Ci0gICAgcmV0dXJuIHNldHRpbmdzID8gIXNldHRpbmdzLT5uZWVkc1Rp
Z2VyTWFpbFF1aXJrcygpIDogdHJ1ZTsKLX0KLSNlbmRpZgotCi0KLVN0cmluZyBzZXJpYWxpemVG
b3JOdW1iZXJUeXBlKGRvdWJsZSBudW1iZXIpCi17Ci0gICAgLy8gQWNjb3JkaW5nIHRvIEhUTUw1
LCAidGhlIGJlc3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBuIGFzIGEgZmxvYXRpbmcK
LSAgICAvLyBwb2ludCBudW1iZXIiIGlzIGEgc3RyaW5nIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIFRv
U3RyaW5nKCkgdG8gbi4KLSAgICBEdG9hQnVmZmVyIGJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBsZW5n
dGg7Ci0gICAgZG91YmxlVG9TdHJpbmdJbkphdmFTY3JpcHRGb3JtYXQobnVtYmVyLCBidWZmZXIs
ICZsZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLCBsZW5ndGgpOwotfQotCi1ib29s
IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0cmluZyYgc3JjLCBkb3VibGUqIG91
dCkKLXsKLSAgICAvLyBTZWUgSFRNTDUgMi40LjQuMyBgUmVhbCBudW1iZXJzLicKLQotICAgIGlm
IChzcmMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gU3RyaW5nOjp0
b0RvdWJsZSgpIGFjY2VwdHMgbGVhZGluZyArIFx0IFxuIFx2IFxmIFxyIGFuZCBTUEFDRSwgd2hp
Y2ggYXJlIGludmFsaWQgaW4gSFRNTDUuCi0gICAgLy8gU28sIGNoZWNrIHRoZSBmaXJzdCBjaGFy
YWN0ZXIuCi0gICAgaWYgKHNyY1swXSAhPSAnLScgJiYgKHNyY1swXSA8ICcwJyB8fCBzcmNbMF0g
PiAnOScpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIHZhbGlkID0gZmFsc2U7
Ci0gICAgZG91YmxlIHZhbHVlID0gc3JjLnRvRG91YmxlKCZ2YWxpZCk7Ci0gICAgaWYgKCF2YWxp
ZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIE5hTiBhbmQgSW5maW5pdHkgYXJlIG5v
dCB2YWxpZCBudW1iZXJzIGFjY29yZGluZyB0byB0aGUgc3RhbmRhcmQuCi0gICAgaWYgKCFpc2Zp
bml0ZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyAtMCAtPiAwCi0gICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgdmFsdWUgPSAwOwotICAgIGlmIChvdXQpCi0gICAgICAgICpv
dXQgPSB2YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0xlZ2FjeUhUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxU
cmVlQnVpbGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDJiODU3MzNlODA2
MzdkOTE3YmJmYmZlZmEyOGE2MzE4M2U4Y2I2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMTk5
NyBNYXJ0aW4gSm9uZXMgKG1qb25lc0BrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5NyBU
b3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQotICAgICAgICAgICAgICAoQykgMTk5OCBXYWxkbyBC
YXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0gICAgICAgICAgICAgIChDKSAxOTk5IExhcnMgS25v
bGwgKGtub2xsQGtkZS5vcmcpCi0gICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZu
ZGVmIExlZ2FjeUhUTUxUcmVlQnVpbGRlcl9oCi0jZGVmaW5lIExlZ2FjeUhUTUxUcmVlQnVpbGRl
cl9oCi0KLSNpbmNsdWRlICJGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24uaCIKLSNpbmNsdWRl
ICJIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIgotI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgotI2lu
Y2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRG9jdHlwZVRva2VuOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBE
b2N1bWVudEZyYWdtZW50OwotY2xhc3MgSFRNTERvY3VtZW50OwotY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OwotY2xhc3MgSFRNTEhlYWRFbGVtZW50OwotY2xhc3MgSFRNTE1hcEVsZW1lbnQ7Ci1jbGFz
cyBIVE1MUGFyc2VyUXVpcmtzOwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEhUTUxTdGFja0VsZW07
Ci0KLS8qKgotICogQGludGVybmFsCi0gKiByZXByZXNlbnRzIG9uZSBIVE1MIHRhZy4gQ29uc2lz
dHMgb2YgYSBudW1lcmljYWwgaWQsIGFuZCB0aGUgbGlzdAotICogb2YgYXR0cmlidXRlcy4gQ2Fu
IGFsc28gcmVwcmVzZW50IHRleHQuIEluIHRoaXMgY2FzZSB0aGUgaWQgPSAwIGFuZAotICogdGV4
dCBjb250YWlucyB0aGUgdGV4dC4KLSAqLwotc3RydWN0IFRva2VuIHsKLSAgICBUb2tlbigpCi0g
ICAgICAgIDogYmVnaW5UYWcodHJ1ZSkKLSAgICAgICAgLCBzZWxmQ2xvc2luZ1RhZyhmYWxzZSkK
LSAgICAgICAgLCBicm9rZW5YTUxTdHlsZShmYWxzZSkKLSAgICAgICAgLCBtX3NvdXJjZUluZm8o
MCkKLSAgICB7IH0KLSAgICB+VG9rZW4oKSB7IH0KLQotICAgIHZvaWQgYWRkQXR0cmlidXRlKEF0
b21pY1N0cmluZyYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdiwgYm9vbCB2aWV3U291
cmNlTW9kZSk7Ci0KLSAgICBib29sIGlzT3BlblRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxs
TmFtZSkgY29uc3QgeyByZXR1cm4gYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0g
dGFnTmFtZTsgfQotICAgIGJvb2wgaXNDbG9zZVRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiBmdWxs
TmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KLQotICAgIHZvaWQgcmVzZXQoKQotICAgIHsKLSAgICAgICAgYXR0cnMgPSAw
OwotICAgICAgICB0ZXh0ID0gMDsKLSAgICAgICAgdGFnTmFtZSA9IG51bGxBdG9tOwotICAgICAg
ICBiZWdpblRhZyA9IHRydWU7Ci0gICAgICAgIHNlbGZDbG9zaW5nVGFnID0gZmFsc2U7Ci0gICAg
ICAgIGJyb2tlblhNTFN0eWxlID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX3NvdXJjZUluZm8pCi0g
ICAgICAgICAgICBtX3NvdXJjZUluZm8tPmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRW
aWV3U291cmNlQ2hhcihVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3NvdXJjZUluZm8u
Z2V0KCkpCi0gICAgICAgICAgICBtX3NvdXJjZUluZm8uc2V0KG5ldyBWZWN0b3I8VUNoYXI+KTsK
LSAgICAgICAgbV9zb3VyY2VJbmZvLT5hcHBlbmQoYyk7Ci0gICAgfQotCi0gICAgUmVmUHRyPE5h
bWVkTm9kZU1hcD4gYXR0cnM7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQ7Ci0gICAgQXRv
bWljU3RyaW5nIHRhZ05hbWU7Ci0gICAgYm9vbCBiZWdpblRhZzsKLSAgICBib29sIHNlbGZDbG9z
aW5nVGFnOwotICAgIGJvb2wgYnJva2VuWE1MU3R5bGU7Ci0gICAgT3duUHRyPFZlY3RvcjxVQ2hh
cj4gPiBtX3NvdXJjZUluZm87Ci19OwotCi1lbnVtIERvY3R5cGVTdGF0ZSB7Ci0gICAgRG9jdHlw
ZUJlZ2luLAotICAgIERvY3R5cGVCZWZvcmVOYW1lLAotICAgIERvY3R5cGVOYW1lLAotICAgIERv
Y3R5cGVBZnRlck5hbWUsCi0gICAgRG9jdHlwZUJlZm9yZVB1YmxpY0lELAotICAgIERvY3R5cGVQ
dWJsaWNJRCwKLSAgICBEb2N0eXBlQWZ0ZXJQdWJsaWNJRCwKLSAgICBEb2N0eXBlQmVmb3JlU3lz
dGVtSUQsCi0gICAgRG9jdHlwZVN5c3RlbUlELAotICAgIERvY3R5cGVBZnRlclN5c3RlbUlELAot
ICAgIERvY3R5cGVCb2d1cwotfTsKLQotY2xhc3MgRG9jdHlwZVRva2VuIHsKLXB1YmxpYzoKLSAg
ICBEb2N0eXBlVG9rZW4oKSB7fQotCi0gICAgdm9pZCByZXNldCgpCi0gICAgewotICAgICAgICBt
X25hbWUuY2xlYXIoKTsKLSAgICAgICAgbV9wdWJsaWNJRC5jbGVhcigpOwotICAgICAgICBtX3N5
c3RlbUlELmNsZWFyKCk7Ci0gICAgICAgIG1fc3RhdGUgPSBEb2N0eXBlQmVnaW47Ci0gICAgICAg
IG1fc291cmNlLmNsZWFyKCk7Ci0gICAgICAgIG1fZm9yY2VRdWlya3MgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBEb2N0eXBlU3RhdGUgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9Ci0gICAgdm9p
ZCBzZXRTdGF0ZShEb2N0eXBlU3RhdGUgcykgeyBtX3N0YXRlID0gczsgfQotCi0gICAgVmVjdG9y
PFVDaGFyPiBtX25hbWU7Ci0gICAgVmVjdG9yPFVDaGFyPiBtX3B1YmxpY0lEOwotICAgIFZlY3Rv
cjxVQ2hhcj4gbV9zeXN0ZW1JRDsKLSAgICBEb2N0eXBlU3RhdGUgbV9zdGF0ZTsKLQotICAgIFZl
Y3RvcjxVQ2hhcj4gbV9zb3VyY2U7Ci0KLSAgICBib29sIG1fZm9yY2VRdWlya3M7IC8vIFVzZWQg
YnkgdGhlIEhUTUw1IHBhcnNlci4KLX07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyoq
Ci0gKiBUaGUgcGFyc2VyIGZvciBIVE1MLiBJdCByZWNlaXZlcyBhIHN0cmVhbSBvZiB0b2tlbnMg
ZnJvbSB0aGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLCBhbmQKLSAqIGJ1aWxkcyB1cCB0aGUg
RG9jdW1lbnQgc3RydWN0dXJlIGZyb20gaXQuCi0gKi8KLWNsYXNzIExlZ2FjeUhUTUxUcmVlQnVp
bGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci1wdWJsaWM6Ci0gICAgTGVnYWN5SFRNTFRyZWVC
dWlsZGVyKEhUTUxEb2N1bWVudCosIGJvb2wgcmVwb3J0RXJyb3JzKTsKLSAgICBMZWdhY3lIVE1M
VHJlZUJ1aWxkZXIoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biA9IEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCk7Ci0gICAgdmlydHVhbCB+TGVnYWN5SFRNTFRy
ZWVCdWlsZGVyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJl
ZCBieSB0aGUgdG9rZW5pemVyCi0gICAgICovCi0gICAgUGFzc1JlZlB0cjxOb2RlPiBwYXJzZVRv
a2VuKFRva2VuKik7Ci0gICAgCi0gICAgLy8gUGFyc2VzIGEgZG9jdHlwZSB0b2tlbi4KLSAgICB2
b2lkIHBhcnNlRG9jdHlwZVRva2VuKERvY3R5cGVUb2tlbiopOwotCi0gICAgLyoqCi0gICAgICog
dG9rZW5pemVyIHNheXMgaXQncyBub3QgZ29pbmcgdG8gYmUgc2VuZGluZyB1cyBhbnkgbW9yZSB0
b2tlbnMKLSAgICAgKi8KLSAgICB2b2lkIGZpbmlzaGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBy
ZXNldHMgdGhlIHBhcnNlcgotICAgICAqLwotICAgIHZvaWQgcmVzZXQoKTsKLQotICAgIGJvb2wg
c2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhbV9za2lwTW9kZVRhZy5pc051bGwoKTsgfQotICAg
IGJvb2wgaXNIYW5kbGluZ1Jlc2lkdWFsU3R5bGVBY3Jvc3NCbG9ja3MoKSBjb25zdCB7IHJldHVy
biBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrczsgfQotCi1wcml2YXRlOgotICAg
IHZvaWQgc2V0Q3VycmVudChOb2RlKik7Ci0gICAgdm9pZCBkZXJlZkN1cnJlbnQoKTsKLSAgICB2
b2lkIHNldFNraXBNb2RlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IG1fc2tpcE1vZGVU
YWcgPSBxTmFtZS5sb2NhbE5hbWUoKTsgfQotCi0gICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROb2Rl
KFRva2VuKik7Ci0gICAgYm9vbCBib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpOwotICAgIGJvb2wgY2FudmFzQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxO
b2RlPiYpOwotICAgIGJvb2wgY29sQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2Rl
PiYpOwotICAgIGJvb2wgY29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKLSAgICBib29sIGRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYp
OwotICAgIGJvb2wgZHRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0g
ICAgYm9vbCBmb3JtQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgZnJhbWVzZXRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7Ci0g
ICAgYm9vbCBoZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgaWZyYW1lQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiosIFJlZlB0cjxOb2RlPiYpOwotICAg
IGJvb2wgaXNpbmRleENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAg
ICBib29sIG1hcENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIG5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBi
b29sIG5lc3RlZFBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5vZGU+Jik7
Ci0gICAgYm9vbCBuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8Tm9k
ZT4mKTsKLSAgICBib29sIG5vZW1iZWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRyPE5v
ZGU+Jik7Ci0gICAgYm9vbCBub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQdHI8
Tm9kZT4mKTsKLSAgICBib29sIG5vbGF5ZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVmUHRy
PE5vZGU+Jik7Ci0gICAgYm9vbCBub3NjcmlwdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKTsKLSAgICBib29sIHBDbG9zZXJDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwgUmVm
UHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBwQ2xvc2VyU3RyaWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tl
biosIFJlZlB0cjxOb2RlPiYpOwotICAgIGJvb2wgcnBDcmVhdGVFcnJvckNoZWNrKFRva2VuKiwg
UmVmUHRyPE5vZGU+Jik7Ci0gICAgYm9vbCBydENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKTsKLSAgICBib29sIHNlbGVjdENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBSZWZQ
dHI8Tm9kZT4mKTsKLSAgICBib29sIHRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qLCBS
ZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIHRhYmxlU2VjdGlvbkNyZWF0ZUVycm9yQ2hlY2soVG9r
ZW4qLCBSZWZQdHI8Tm9kZT4mKTsKLSAgICBib29sIHRleHRDcmVhdGVFcnJvckNoZWNrKFRva2Vu
KiwgUmVmUHRyPE5vZGU+Jik7Ci0KLSAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhUb2tlbiopOwot
Ci0gICAgdm9pZCBsaW1pdERlcHRoKGludCB0YWdQcmlvcml0eSk7Ci0gICAgYm9vbCBpbnNlcnRO
b2RlQWZ0ZXJMaW1pdERlcHRoKE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBp
bnNlcnROb2RlKE5vZGUqLCBib29sIGZsYXQgPSBmYWxzZSk7Ci0gICAgYm9vbCBoYW5kbGVFcnJv
cihOb2RlKiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRh
Z1ByaW9yaXR5KTsKLSAgICAKLSAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIGludCBsZXZlbCk7Ci0gICAgdm9pZCBwb3BCbG9jayhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUsIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2UpOwotICAgIHZvaWQgcG9wQmxv
Y2soY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIGJvb2wgcmVwb3J0RXJyb3JzID0gZmFsc2Up
IHsgcmV0dXJuIHBvcEJsb2NrKHFOYW1lLmxvY2FsTmFtZSgpLCByZXBvcnRFcnJvcnMpOyB9IC8v
IENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkYWJpbGl0eS4KLSAgICB2b2lkIHBvcE9uZUJs
b2NrKCk7Ci0gICAgdm9pZCBtb3ZlT25lQmxvY2tUb1N0YWNrKEhUTUxTdGFja0VsZW0qJiBoZWFk
KTsKLSAgICBpbmxpbmUgSFRNTFN0YWNrRWxlbSogcG9wT25lQmxvY2tDb21tb24oKTsKLSAgICB2
b2lkIHBvcElubGluZUJsb2NrcygpOwotCi0gICAgdm9pZCBmcmVlQmxvY2soKTsKLQotICAgIHZv
aWQgY3JlYXRlSGVhZCgpOwotCi0gICAgc3RhdGljIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgc3RhdGljIGJvb2wgaXNBZmZlY3RlZEJ5
UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwotICAgIHZvaWQgaGFu
ZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qKTsKLSAg
ICB2b2lkIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qLCBOb2RlKiBtYWxm
b3JtZWRUYWJsZVBhcmVudCk7Ci0KLSAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNIZWFk
aW5nVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSk7Ci0KLSAgICBib29sIGlzSW5saW5l
KE5vZGUqKSBjb25zdDsKLSAgICAKLSAgICB2b2lkIHN0YXJ0Qm9keSgpOyAvLyBpbnNlcnRzIHRo
ZSBpc2luZGV4IGVsZW1lbnQKLSAgICBQYXNzUmVmUHRyPE5vZGU+IGhhbmRsZUlzaW5kZXgoVG9r
ZW4qKTsKLQotICAgIHZvaWQgY2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgpOwotICAgIGJvb2wg
aGFzUEVsZW1lbnRJblNjb3BlKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2hhc1BFbGVtZW50SW5T
Y29wZSA9PSBVbmtub3duKQotICAgICAgICAgICAgY2hlY2tJZkhhc1BFbGVtZW50SW5TY29wZSgp
OwotICAgICAgICByZXR1cm4gbV9oYXNQRWxlbWVudEluU2NvcGUgPT0gSW5TY29wZTsKLSAgICB9
Ci0KLSAgICB2b2lkIHJlcG9ydEVycm9yKEhUTUxQYXJzZXJFcnJvckNvZGUgZXJyb3JDb2RlLCBj
b25zdCBBdG9taWNTdHJpbmcqIHRhZ05hbWUxID0gMCwgY29uc3QgQXRvbWljU3RyaW5nKiB0YWdO
YW1lMiA9IDAsIGJvb2wgY2xvc2VUYWdzID0gZmFsc2UpCi0gICAgeyBpZiAoIW1fcmVwb3J0RXJy
b3JzKSByZXR1cm47IHJlcG9ydEVycm9yVG9Db25zb2xlKGVycm9yQ29kZSwgdGFnTmFtZTEsIHRh
Z05hbWUyLCBjbG9zZVRhZ3MpOyB9Ci0KLSAgICB2b2lkIHJlcG9ydEVycm9yVG9Db25zb2xlKEhU
TUxQYXJzZXJFcnJvckNvZGUsIGNvbnN0IEF0b21pY1N0cmluZyogdGFnTmFtZTEsIGNvbnN0IEF0
b21pY1N0cmluZyogdGFnTmFtZTIsIGJvb2wgY2xvc2VUYWdzKTsKLSAgICAKLSAgICBEb2N1bWVu
dCogbV9kb2N1bWVudDsKLQotICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRo
ZSBvbmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pLiBDYW4gYmUgYSBkb2N1bWVudCBm
cmFnbWVudCwgYSBkb2N1bWVudCBvciBhbiBlbGVtZW50LgotICAgIE5vZGUqIG1fY3VycmVudDsK
LSAgICAvLyBXZSBjYW4ndCByZWYgYSBkb2N1bWVudCwgYnV0IHdlIGRvbid0IHdhbnQgdG8gY29u
c3RhbnRseSBjaGVjayBpZiBhIG5vZGUgaXMgYSBkb2N1bWVudCBqdXN0IHRvIGRlY2lkZSB3aGV0
aGVyIHRvIGRlcmVmLgotICAgIGJvb2wgbV9kaWRSZWZDdXJyZW50OwotCi0gICAgSFRNTFN0YWNr
RWxlbSogbV9ibG9ja1N0YWNrOwotCi0gICAgLy8gVGhlIG51bWJlciBvZiB0YWdzIHdpdGggcHJp
b3JpdHkgbWluQmxvY2tMZXZlbFRhZ1ByaW9yaXR5IG9yIGhpZ2hlcgotICAgIC8vIGN1cnJlbnRs
eSBpbiBtX2Jsb2NrU3RhY2suIFRoZSBwYXJzZXIgZW5mb3JjZXMgYSBjYXAgb24gdGhpcyB2YWx1
ZSBieQotICAgIC8vIGFkZGluZyBzdWNoIG5ldyBlbGVtZW50cyBhcyBzaWJsaW5ncyBpbnN0ZWFk
IG9mIGNoaWxkcmVuIG9uY2UgaXQgaXMgcmVhY2hlZC4KLSAgICBzaXplX3QgbV9ibG9ja3NJblN0
YWNrOwotICAgIC8vIERlcHRoIG9mIHRoZSB0cmVlLgotICAgIHVuc2lnbmVkIG1fdHJlZURlcHRo
OwotCi0gICAgZW51bSBFbGVtZW50SW5TY29wZVN0YXRlIHsgTm90SW5TY29wZSwgSW5TY29wZSwg
VW5rbm93biB9OyAKLSAgICBFbGVtZW50SW5TY29wZVN0YXRlIG1faGFzUEVsZW1lbnRJblNjb3Bl
OwotCi0gICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7IC8v
IGN1cnJlbnRseSBhY3RpdmUgZm9ybQotICAgIFJlZlB0cjxIVE1MTWFwRWxlbWVudD4gbV9jdXJy
ZW50TWFwRWxlbWVudDsgLy8gY3VycmVudCBtYXAKLSAgICBSZWZQdHI8SFRNTEhlYWRFbGVtZW50
PiBtX2hlYWQ7IC8vIGhlYWQgZWxlbWVudDsgbmVlZGVkIGZvciBIVE1MIHdoaWNoIGRlZmluZXMg
PGJhc2U+IGFmdGVyIDwvaGVhZD4KLSAgICBSZWZQdHI8Tm9kZT4gbV9pc2luZGV4RWxlbWVudDsg
Ly8gYSBwb3NzaWJsZSA8aXNpbmRleD4gZWxlbWVudCBpbiB0aGUgaGVhZAotCi0gICAgYm9vbCBt
X2luQm9keTsKLSAgICBib29sIG1faGF2ZUNvbnRlbnQ7Ci0gICAgYm9vbCBtX2hhdmVGcmFtZVNl
dDsKLQotICAgIEF0b21pY1N0cmluZyBtX3NraXBNb2RlVGFnOyAvLyB0ZWxscyB0aGUgcGFyc2Vy
IHRvIGRpc2NhcmQgYWxsIHRhZ3MgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAot
Ci0gICAgYm9vbCBtX2lzUGFyc2luZ0ZyYWdtZW50OwotICAgIGJvb2wgbV9yZXBvcnRFcnJvcnM7
Ci0gICAgYm9vbCBtX2hhbmRsaW5nUmVzaWR1YWxTdHlsZUFjcm9zc0Jsb2NrczsKLSAgICBpbnQg
bV9pblN0cmF5VGFibGVDb250ZW50OwotICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBt
X3NjcmlwdGluZ1Blcm1pc3Npb247Ci0KLSAgICBPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gbV9w
YXJzZXJRdWlya3M7Ci19OwotCi0jaWYgZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKSB8fCBk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKQotYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQo
RG9jdW1lbnQqKTsKLSNlbHNlCi1pbmxpbmUgYm9vbCBzaG91bGRDcmVhdGVJbXBsaWNpdEhlYWQo
RG9jdW1lbnQqKSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotLy8gQ29udmVydHMgdGhlIHNw
ZWNpZmllZCBzdHJpbmcgdG8gYSBmbG9hdGluZyBudW1iZXIuCi0vLyBJZiB0aGUgY29udmVyc2lv
biBmYWlscywgdGhlIHJldHVybiB2YWx1ZSBpcyBmYWxzZS4gVGFrZSBjYXJlIHRoYXQgbGVhZGlu
ZyBvciB0cmFpbGluZyB1bm5lY2Vzc2FyeSBjaGFyYWN0ZXJzIG1ha2UgZmFpbHVyZXMuICBUaGlz
IHJldHVybnMgZmFsc2UgZm9yIGFuIGVtcHR5IHN0cmluZyBpbnB1dC4KLS8vIFRoZSBkb3VibGUq
IHBhcmFtZXRlciBtYXkgYmUgMC4KLWJvb2wgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoY29u
c3QgU3RyaW5nJiwgZG91YmxlKik7Ci0vLyBDb252ZXJ0cyB0aGUgc3BlY2lmaWVkIG51bWJlciB0
byBhIHN0cmluZy4gVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZgotLy8gSFRNTDUncyAiYWxn
b3JpdGhtIHRvIGNvbnZlcnQgYSBudW1iZXIgdG8gYSBzdHJpbmciIGZvciBOVU1CRVIvUkFOR0Ug
dHlwZXMuCi1TdHJpbmcgc2VyaWFsaXplRm9yTnVtYmVyVHlwZShkb3VibGUpOwotCi19Ci0gICAg
Ci0jZW5kaWYgLy8gTGVnYWN5SFRNTFRyZWVCdWlsZGVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9TdGVwUmFuZ2UuY3BwIGIvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAKaW5kZXggOWFm
ZGUxYjgwYjU5MWMzYmRlNWQ3ZmVhNWY0NmRjYjI5YzZjNWQzOS4uYWVhZjYyZmQ0ZjA1MGQ4NTNk
YWUxMTU5NjQ0OWY5M2NiMTUyYjkyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL1N0ZXBSYW5n
ZS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAKQEAgLTIzLDcgKzIzLDcgQEAK
IAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
LSNpbmNsdWRlICJMZWdhY3lIVE1MVHJlZUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJIVE1MVHJlZUJ1
aWxkZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcCBi
L1dlYkNvcmUvaHRtbC9WYWxpZGl0eVN0YXRlLmNwcAppbmRleCBlMjg2YjY0ZDI5OTliOGI3ZTY2
MTJhNTkxMTEzMWIyMzgxNjdjYTkzLi4wYzI1ZGFjZDFjMTc4NzYwNjE4YTdlOGQxOTU1OTk0ZmY5
OGYxNGY0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvVmFsaWRpdHlTdGF0ZS5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL1ZhbGlkaXR5U3RhdGUuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVk
ZSAiTGVnYWN5SFRNTFRyZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiSFRNTFRyZWVCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2xpZGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAKaW5k
ZXggYWQ0NTg1NmQ3YTAzZjJjYTlhZGQ4MmEwZDI4YmQ1OWNhM2RiZTJiYy4uYTFiYzcxYWQxMzFm
YjM0ZWViMDJlNTdmZmMyMzFhZjgyMDM1MTIxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1M
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTGVnYWN5
SFRNTFRyZWVCdWlsZGVyLmgiCisjaW5jbHVkZSAiSFRNTFRyZWVCdWlsZGVyLmgiCiAjaW5jbHVk
ZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIK
</data>
<flag name="review"
          id="54085"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="54086"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>