<?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>79204</bug_id>
          
          <creation_ts>2012-02-22 00:30:17 -0800</creation_ts>
          <short_desc>Move Geolocation code into Modules/geolocation</short_desc>
          <delta_ts>2012-02-22 01:40:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>561698</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 00:30:17 -0800</bug_when>
    <thetext>Move Geolocation code into Modules/geolocation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561700</commentid>
    <comment_count>1</comment_count>
      <attachid>128147</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 00:33:11 -0800</bug_when>
    <thetext>Created attachment 128147
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561703</commentid>
    <comment_count>2</comment_count>
      <attachid>128147</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-02-22 00:37:13 -0800</bug_when>
    <thetext>Comment on attachment 128147
Patch

r=me assuming all bots greened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561730</commentid>
    <comment_count>3</comment_count>
      <attachid>128153</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 01:15:00 -0800</bug_when>
    <thetext>Created attachment 128153
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561746</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-22 01:40:04 -0800</bug_when>
    <thetext>Committed r108464: &lt;http://trac.webkit.org/changeset/108464&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128147</attachid>
            <date>2012-02-22 00:33:11 -0800</date>
            <delta_ts>2012-02-22 01:14:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79204-20120222003310.patch</filename>
            <type>text/plain</type>
            <size>186798</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTIyICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBHZW9sb2NhdGlvbiBjb2Rl
IGludG8gTW9kdWxlcy9nZW9sb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzkyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgc3RpbGwgc29tZSBkYW5nbGluZyByZWZlcmVuY2Vz
IGludG8gdGhlIEdlb2xvY2F0aW9uIG1vZHVsZSwKKyAgICAgICAgd2hpY2ggSSB3aWxsIGNsZWFu
IHVwIGluIGEgZm9sbG93dXAgcGF0Y2guCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnBy
aToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaC4KKyAg
ICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5pZGwuCisgICAgICAgICogTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAuCisgICAgICAgICogTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBNb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbkVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBvc2l0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Qb3NpdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
cG9zaXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5o
LgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaWRsOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2Nh
dGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bv
c2l0aW9uRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVy
cm9yLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oLgorICAgICAg
ICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsLgorICAg
ICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25PcHRpb25zLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmguCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBhZ2UvR2VvbG9jYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dl
b3Bvc2l0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9HZW9wb3NpdGlvbi5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdl
L1Bvc2l0aW9uRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uRXJyb3Iu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25PcHRpb25zLmg6IFJlbW92ZWQuCisKIDIwMTItMDIt
MjEgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBOZXcgQ0NPY2NsdXNpb25UcmFja2VyIGNsYXNzIHdpdGggdGVzdHMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCwxMiBAQCBTRVQoV2ViQ29yZV9J
RExfSU5DTFVERVMKICkKIAogU0VUKFdlYkNvcmVfSURMX0ZJTEVTCisgICAgTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0
aW9uLmlkbAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRs
CisgICAgTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAorICAgIE1vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwKIAogICAgIGNzcy9Db3VudGVyLmlkbAogICAgIGNz
cy9DU1NDaGFyc2V0UnVsZS5pZGwKQEAgLTMzMyw4ICszMzgsNiBAQCBTRVQoV2ViQ29yZV9JRExf
RklMRVMKICAgICBwYWdlL0RPTVNlbGVjdGlvbi5pZGwKICAgICBwYWdlL0RPTVdpbmRvdy5pZGwK
ICAgICBwYWdlL0V2ZW50U291cmNlLmlkbAotICAgIHBhZ2UvR2VvbG9jYXRpb24uaWRsCi0gICAg
cGFnZS9HZW9wb3NpdGlvbi5pZGwKICAgICBwYWdlL0hpc3RvcnkuaWRsCiAgICAgcGFnZS9Mb2Nh
dGlvbi5pZGwKICAgICBwYWdlL01lbW9yeUluZm8uaWRsCkBAIC0zNDIsOSArMzQ1LDYgQEAgU0VU
KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5pZGwKICAgICBwYWdlL1Bl
cmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwKICAgICBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAot
ICAgIHBhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwKLSAgICBwYWdlL1Bvc2l0aW9uRXJyb3IuaWRs
Ci0gICAgcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCiAgICAgcGFnZS9TY3JlZW4uaWRs
CiAgICAgcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmlkbAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1
bHQuaWRsCkBAIC00MDUsNiArNDA1LDggQEAgU0VUKFdlYkNvcmVfSURMX0ZJTEVTCiApCiAKIFNF
VChXZWJDb3JlX1NPVVJDRVMKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cAorICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAogICAg
IE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCiAKICAgICBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMDIxLDggKzEwMjMsNiBAQCBTRVQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGFnZS9GcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwCiAgICAg
cGFnZS9GcmFtZVRyZWUuY3BwCiAgICAgcGFnZS9GcmFtZVZpZXcuY3BwCi0gICAgcGFnZS9HZW9s
b2NhdGlvbi5jcHAKLSAgICBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKICAgICBwYWdl
L0dyb3VwU2V0dGluZ3MuY3BwCiAgICAgcGFnZS9IaXN0b3J5LmNwcAogICAgIHBhZ2UvTG9jYXRp
b24uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEwODQ0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDEyIEBAIFZQQVRIID0gXAogIwogCiBCSU5ESU5HX0lETFMgPSBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbCBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0aW9uLmlkbCBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAorICAg
ICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRs
IFwKICAgICAkKFdlYkNvcmUpL2Nzcy9DU1NDaGFyc2V0UnVsZS5pZGwgXAogICAgICQoV2ViQ29y
ZSkvY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwgXAogICAgICQoV2ViQ29yZSkvY3NzL0NTU0ltcG9y
dFJ1bGUuaWRsIFwKQEAgLTMxOSw4ICszMjQsNiBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChX
ZWJDb3JlKS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9ET01X
aW5kb3cuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3BhZ2UvR2VvbG9jYXRpb24uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3BhZ2UvR2Vv
cG9zaXRpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvSGlzdG9yeS5pZGwgXAogICAgICQo
V2ViQ29yZSkvcGFnZS9Mb2NhdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9NZW1vcnlJ
bmZvLmlkbCBcCkBAIC0zMjgsOSArMzMxLDYgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9QZXJmb3JtYW5jZS5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9QZXJmb3Jt
YW5jZU5hdmlnYXRpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwgXAotICAg
ICQoV2ViQ29yZSkvcGFnZS9Qb3NpdGlvbkVycm9yLmlkbCBcCi0gICAgJChXZWJDb3JlKS9wYWdl
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9TY3JlZW4u
aWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5pZGwgXAogICAgICQo
V2ViQ29yZSkvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApJbmRleDogU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLnByaQkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4NiwxMiBAQCBTVFlMRVNIRUVU
U19FTUJFRCA9IFwKICAgICAkJFBXRC9jc3MvbW9iaWxlVGhlbWVRdC5jc3MKIAogSURMX0JJTkRJ
TkdTICs9IFwKKyAgICAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwgXAogICAgICQk
UFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRsIFwKKyAgICAk
JFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsIFwKKyAgICAkJFBXRC9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQkUFdEL2Nz
cy9Db3VudGVyLmlkbCBcCiAgICAgJCRQV0QvY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCBcCiAgICAg
JCRQV0QvY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwgXApAQCAtMzQzLDggKzM0OCw2IEBAIElETF9C
SU5ESU5HUyArPSBcCiAgICAgJCRQV0QvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKICAgICAkJFBX
RC9wYWdlL0RPTVdpbmRvdy5pZGwgXAogICAgICQkUFdEL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwK
LSAgICAkJFBXRC9wYWdlL0dlb2xvY2F0aW9uLmlkbCBcCi0gICAgJCRQV0QvcGFnZS9HZW9wb3Np
dGlvbi5pZGwgXAogICAgICQkUFdEL3BhZ2UvSGlzdG9yeS5pZGwgXAogICAgICQkUFdEL3BhZ2Uv
TG9jYXRpb24uaWRsIFwKICAgICAkJFBXRC9wYWdlL01lbW9yeUluZm8uaWRsIFwKQEAgLTM1Miw5
ICszNTUsNiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3BhZ2UvUGVyZm9ybWFuY2Uu
aWRsIFwKICAgICAkJFBXRC9wYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwgXAogICAgICQk
UFdEL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsIFwKLSAgICAkJFBXRC9wYWdlL1Bvc2l0aW9u
Q2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9wYWdlL1Bvc2l0aW9uRXJyb3IuaWRsIFwKLSAgICAk
JFBXRC9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQkUFdEL3BhZ2UvU2Ny
ZWVuLmlkbCBcCiAgICAgJCRQV0QvcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmlkbCBcCiAgICAgJCRQ
V0QvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC02NTAsNyArNjUwLDEyIEBAIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1tYXIuaAog
CiBkb21fYmluZGluZ19pZGxzICs9IFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvbG9jYXRpb24uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9z
aXRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2Vv
bG9jYXRpb24uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25D
YWxsYmFjay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVy
cm9yLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JD
YWxsYmFjay5pZGwgXAogCSQoV2ViQ29yZSkvY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCBcCiAJJChX
ZWJDb3JlKS9jc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTSW1w
b3J0UnVsZS5pZGwgXApAQCAtODk4LDggKzkwMyw2IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAog
CSQoV2ViQ29yZSkvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvRE9N
V2luZG93LmlkbCBcCiAJJChXZWJDb3JlKS9wYWdlL0V2ZW50U291cmNlLmlkbCBcCi0JJChXZWJD
b3JlKS9wYWdlL0dlb2xvY2F0aW9uLmlkbCBcCi0JJChXZWJDb3JlKS9wYWdlL0dlb3Bvc2l0aW9u
LmlkbCBcCiAJJChXZWJDb3JlKS9wYWdlL0hpc3RvcnkuaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2Uv
TG9jYXRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvTWVtb3J5SW5mby5pZGwgXApAQCAtOTA3
LDkgKzkxMCw2IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvcGFnZS9QZXJm
b3JtYW5jZS5pZGwgXAogCSQoV2ViQ29yZSkvcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRs
IFwKIAkkKFdlYkNvcmUpL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsIFwKLQkkKFdlYkNvcmUp
L3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvcGFnZS9Qb3NpdGlvbkVy
cm9yLmlkbCBcCi0JJChXZWJDb3JlKS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAog
CSQoV2ViQ29yZSkvcGFnZS9TY3JlZW4uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvU3BlZWNoSW5w
dXRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApA
QCAtOTUyLDggKzk1MiwxOSBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL3ht
bC9YU0xUUHJvY2Vzc29yLmlkbAogCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkVycm9yLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Qb3NpdGlvbi5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmggXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0
aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxs
YmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJy
b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9y
Q2FsbGJhY2suaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlv
bk9wdGlvbnMuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBcCkBAIC0yNzE1LDE0ICsyNzI2LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25DbGllbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xs
ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2Vv
cG9zaXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlc3R1cmVUYXBIaWdobGlnaHRlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wYWdlL0dyb3VwU2V0dGluZ3MuY3BwIFwKQEAgLTI3NjcsMTAgKzI3NzEs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9pbnRlckxv
Y2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJMb2NrQ29udHJvbGxlci5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9Q
b3NpdGlvbkVycm9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxi
YWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Q
cmludENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTA4NDUwKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBpbmNsdWRlX3dlYmluc3BlY3RvciB7
CiB9CiAKIFNPVVJDRVMgKz0gXAorICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24u
Y3BwIFwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAg
XAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwIFwKICAg
ICBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcCBcCkBA
IC05OTEsOCArOTkzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9GcmFtZURlc3RydWN0aW9u
T2JzZXJ2ZXIuY3BwIFwKICAgICBwYWdlL0ZyYW1lVHJlZS5jcHAgXAogICAgIHBhZ2UvRnJhbWVW
aWV3LmNwcCBcCi0gICAgcGFnZS9HZW9sb2NhdGlvbi5jcHAgXAotICAgIHBhZ2UvR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuY3BwIFwK
ICAgICBwYWdlL0dyb3VwU2V0dGluZ3MuY3BwIFwKICAgICBwYWdlL0hpc3RvcnkuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwODQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDE1IEBACiAgICAgICAgICdwcm9q
ZWN0X2Rpcic6IFsnLiddLAogICAgICAgICAjIFRoZXNlIGhlYWRlcnMgYXJlIHBhcnQgb2YgV2Vi
Q29yZSdzIHByaXZhdGUgQVBJIGluIHRoZSBBcHBsZSBNYWMgYnVpbGQuCiAgICAgICAgICd3ZWJj
b3JlX3ByaXZhdGVoZWFkZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvbi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uRXJyb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvblBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvcG9zaXRpb24uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlv
bkNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25F
cnJvci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JD
YWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0
aW9ucy5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmgnLApAQCAtMjA3LDEyICsyMTYs
NyBAQAogICAgICAgICAgICAgJ3BhZ2UvRnJhbWUuaCcsCiAgICAgICAgICAgICAncGFnZS9GcmFt
ZVRyZWUuaCcsCiAgICAgICAgICAgICAncGFnZS9GcmFtZVZpZXcuaCcsCi0gICAgICAgICAgICAn
cGFnZS9HZW9sb2NhdGlvbi5oJywKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ2xpZW50
LmgnLAotICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgnLAotICAgICAg
ICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oJywKLSAgICAgICAgICAgICdwYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb24uaCcsCi0gICAgICAgICAgICAncGFnZS9HZW9wb3NpdGlvbi5oJywKICAg
ICAgICAgICAgICdwYWdlL0dyb3VwU2V0dGluZ3MuaCcsCiAgICAgICAgICAgICAncGFnZS9NZWRp
YUNhblN0YXJ0TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9NZW1vcnlJbmZvLmgnLApA
QCAtMjIxLDEwICsyMjUsNiBAQAogICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCcs
CiAgICAgICAgICAgICAncGFnZS9QYWdlU3VwcGxlbWVudC5oJywKICAgICAgICAgICAgICdwYWdl
L1BhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCi0gICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxi
YWNrLmgnLAotICAgICAgICAgICAgJ3BhZ2UvUG9zaXRpb25FcnJvci5oJywKLSAgICAgICAgICAg
ICdwYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oJywKLSAgICAgICAgICAgICdwYWdlL1Bvc2l0
aW9uT3B0aW9ucy5oJywKICAgICAgICAgICAgICdwYWdlL1ByaW50Q29udGV4dC5oJywKICAgICAg
ICAgICAgICdwYWdlL1NlY3VyaXR5T3JpZ2luLmgnLAogICAgICAgICAgICAgJ3BhZ2UvU2VjdXJp
dHlPcmlnaW5IYXNoLmgnLApAQCAtNzIwLDcgKzcyMCwxMiBAQAogICAgICAgICAgICAgJ01vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRMaXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24u
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2su
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFj
ay5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRl
bnRzLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLApAQCAt
MTAwNiw4ICsxMDExLDYgQEAKICAgICAgICAgICAgICdwYWdlL0RPTVNlbGVjdGlvbi5pZGwnLAog
ICAgICAgICAgICAgJ3BhZ2UvRE9NV2luZG93LmlkbCcsCiAgICAgICAgICAgICAncGFnZS9FdmVu
dFNvdXJjZS5pZGwnLAotICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb24uaWRsJywKLSAgICAg
ICAgICAgICdwYWdlL0dlb3Bvc2l0aW9uLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9IaXN0b3J5
LmlkbCcsCiAgICAgICAgICAgICAncGFnZS9Mb2NhdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3Bh
Z2UvTWVtb3J5SW5mby5pZGwnLApAQCAtMTAxNyw5ICsxMDIwLDYgQEAKICAgICAgICAgICAgICdw
YWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9y
bWFuY2VUaW1pbmcuaWRsJywKICAgICAgICAgICAgICdwYWdlL1BvaW50ZXJMb2NrLmlkbCcsCi0g
ICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAncGFn
ZS9Qb3NpdGlvbkVycm9yLmlkbCcsCi0gICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkVycm9yQ2Fs
bGJhY2suaWRsJywKICAgICAgICAgICAgICdwYWdlL1NjcmVlbi5pZGwnLAogICAgICAgICAgICAg
J3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvU3BlZWNoSW5w
dXRSZXN1bHQuaWRsJywKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRMaXN0LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9O
YXZpZ2F0b3JHYW1lcGFkLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmln
YXRvckdhbWVwYWQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25D
b250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0
b3JHZW9sb2NhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2
aWdhdG9yR2VvbG9jYXRpb24uaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCcsCkBAIC0yNjI5LDggKzI2MzEsNiBAQAogICAgICAg
ICAgICAgJ3BhZ2UvRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvRnJhbWVUcmVlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9GcmFtZVZpZXcuY3BwJywKLSAg
ICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uLmNwcCcsCi0gICAgICAgICAgICAncGFnZS9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL0dyb3VwU2V0dGluZ3Mu
Y3BwJywKICAgICAgICAgICAgICdwYWdlL0hpc3RvcnkuY3BwJywKICAgICAgICAgICAgICdwYWdl
L0hpc3RvcnkuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xv
Y2F0aW9uL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug
UHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUo
R0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiR2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorI2luY2x1
ZGUgIkNvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRp
b24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdl
W10gPSAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iOworc3RhdGljIGNvbnN0IGNoYXIgZmFpbGVk
VG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2VbXSA9ICJGYWlsZWQgdG8gc3RhcnQgR2VvbG9jYXRp
b24gc2VydmljZSI7CitzdGF0aWMgY29uc3QgY2hhciBmcmFtZWxlc3NEb2N1bWVudEVycm9yTWVz
c2FnZVtdID0gIkdlb2xvY2F0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGZyYW1lbGVzcyBkb2N1bWVu
dHMiOworCitzdGF0aWMgY29uc3QgaW50IGZpcnN0QXZhaWxhYmxlV2F0Y2hJZCA9IDE7CisKKyNp
ZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCitzdGF0aWMgUGFzc1JlZlB0cjxH
ZW9wb3NpdGlvbj4gY3JlYXRlR2VvcG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbiogcG9zaXRp
b24pCit7CisgICAgaWYgKCFwb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
UmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcyA9IENvb3JkaW5hdGVzOjpjcmVhdGUocG9z
aXRpb24tPmxhdGl0dWRlKCksIHBvc2l0aW9uLT5sb25naXR1ZGUoKSwgcG9zaXRpb24tPmNhblBy
b3ZpZGVBbHRpdHVkZSgpLCBwb3NpdGlvbi0+YWx0aXR1ZGUoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPmFjY3Vy
YWN5KCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpLCBwb3NpdGlvbi0+
YWx0aXR1ZGVBY2N1cmFjeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLT5jYW5Qcm92aWRlSGVhZGluZygpLCBwb3Np
dGlvbi0+aGVhZGluZygpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZVNwZWVkKCksIHBvc2l0aW9uLT5z
cGVlZCgpKTsKKyAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxl
YXNlKCksIGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAocG9zaXRpb24tPnRpbWVzdGFtcCgp
KSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZVBvc2l0aW9u
RXJyb3IoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCit7CisgICAgUG9zaXRpb25FcnJvcjo6RXJy
b3JDb2RlIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRTsKKyAgICBz
d2l0Y2ggKGVycm9yLT5jb2RlKCkpIHsKKyAgICBjYXNlIEdlb2xvY2F0aW9uRXJyb3I6OlBlcm1p
c3Npb25EZW5pZWQ6CisgICAgICAgIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RF
TklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlv
blVuYXZhaWxhYmxlOgorICAgICAgICBjb2RlID0gUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5B
VkFJTEFCTEU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBQb3NpdGlvbkVy
cm9yOjpjcmVhdGUoY29kZSwgZXJyb3ItPm1lc3NhZ2UoKSk7Cit9CisjZW5kaWYKKworR2VvbG9j
YXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24s
IFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IG9wdGlvbnMpCisgICAgOiBtX2dlb2xvY2F0aW9uKGdlb2xvY2F0aW9uKQorICAg
ICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQorICAgICwgbV9lcnJvckNhbGxi
YWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fdGlt
ZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCkKKyAgICAsIG1f
dXNlQ2FjaGVkUG9zaXRpb24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fZ2VvbG9jYXRpb24pOwor
ICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CisgICAgLy8gSWYgbm8gb3B0aW9ucyB3ZXJl
IHN1cHBsaWVkIGZyb20gSlMsIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBkZWZhdWx0IHNldAor
ICAgIC8vIG9mIG9wdGlvbnMgaW4gSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAuCisgICAgQVNTRVJU
KG1fb3B0aW9ucyk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRGYXRh
bEVycm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IpCit7CisgICAgLy8gSWYgYSBm
YXRhbCBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHNldCwgc3RpY2sgd2l0aCBpdC4gVGhpcyBtYWtl
cyBzdXJlIHRoYXQKKyAgICAvLyB3aGVuIHBlcm1pc3Npb24gaXMgZGVuaWVkLCB0aGlzIGlzIHRo
ZSBlcnJvciByZXBvcnRlZCwgYXMgcmVxdWlyZWQgYnkgdGhlCisgICAgLy8gc3BlYy4KKyAgICBp
ZiAobV9mYXRhbEVycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZhdGFsRXJyb3IgPSBl
cnJvcjsKKyAgICAvLyBBbiBleGlzdGluZyB0aW1lciBtYXkgbm90IGhhdmUgYSB6ZXJvIHRpbWVv
dXQuCisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRVc2VDYWNoZWRQb3NpdGlvbigp
Cit7CisgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IHRydWU7CisgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK2Jvb2wgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpoYXNaZXJvVGlt
ZW91dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3B0aW9ucy0+aGFzVGltZW91dCgpICYmIG1f
b3B0aW9ucy0+dGltZW91dCgpID09IDA7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlm
aWVyOjpydW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1f
c3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChwb3NpdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9j
YXRpb246Okdlb05vdGlmaWVyOjpzdGFydFRpbWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX29w
dGlvbnMtPmhhc1RpbWVvdXQoKSkKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QobV9vcHRp
b25zLT50aW1lb3V0KCkgLyAxMDAwLjApOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6dGltZXJGaXJlZChUaW1lcjxHZW9Ob3RpZmllcj4qKQoreworICAgIG1fdGltZXIuc3Rv
cCgpOworCisgICAgLy8gUHJvdGVjdCB0aGlzIEdlb05vdGlmaWVyIG9iamVjdCwgc2luY2UgaXQK
KyAgICAvLyBjb3VsZCBiZSBkZWxldGVkIGJ5IGEgY2FsbCB0byBjbGVhcldhdGNoIGluIGEgY2Fs
bGJhY2suCisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgLy8g
VGVzdCBmb3IgZmF0YWwgZXJyb3IgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBjYXNl
IHdoZXJlIHRoZSBGcmFtZSBpcworICAgIC8vIGRpc2Nvbm5lY3RlZCBhbmQgcmVxdWVzdHMgYXJl
IGNhbmNlbGxlZC4KKyAgICBpZiAobV9mYXRhbEVycm9yKSB7CisgICAgICAgIGlmIChtX2Vycm9y
Q2FsbGJhY2spCisgICAgICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZmF0
YWxFcnJvci5nZXQoKSk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGlzIG5vdGlmaWVy
IHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIG1fZ2VvbG9jYXRpb24tPmZhdGFsRXJyb3JPY2N1cnJl
ZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3VzZUNhY2hlZFBv
c2l0aW9uKSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgcG9zaXRpb24gZmxhZyBpbiBj
YXNlIHRoaXMgaXMgYSB3YXRjaCByZXF1ZXN0LCB3aGljaAorICAgICAgICAvLyB3aWxsIGNvbnRp
bnVlIHRvIHJ1bi4KKyAgICAgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IGZhbHNlOworICAgICAg
ICBtX2dlb2xvY2F0aW9uLT5yZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgeworICAgICAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRp
b25FcnJvcjo6VElNRU9VVCwgIlRpbWVvdXQgZXhwaXJlZCIpOworICAgICAgICBtX2Vycm9yQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsKKyAgICB9CisgICAgbV9nZW9sb2NhdGlv
bi0+cmVxdWVzdFRpbWVkT3V0KHRoaXMpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVy
czo6c2V0KGludCBpZCwgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gcHJwTm90aWZpZXIpCit7Cisg
ICAgQVNTRVJUKGlkID4gMCk7CisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHBy
cE5vdGlmaWVyOworCisgICAgbV9pZFRvTm90aWZpZXJNYXAuc2V0KGlkLCBub3RpZmllci5nZXQo
KSk7CisgICAgbV9ub3RpZmllclRvSWRNYXAuc2V0KG5vdGlmaWVyLnJlbGVhc2UoKSwgaWQpOwor
fQorCitHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Zmlu
ZChpbnQgaWQpCit7CisgICAgQVNTRVJUKGlkID4gMCk7CisgICAgSWRUb05vdGlmaWVyTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CisgICAgaWYgKGl0ZXIg
PT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBpdGVyLT5zZWNvbmQuZ2V0KCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpy
ZW1vdmUoaW50IGlkKQoreworICAgIEFTU0VSVChpZCA+IDApOworICAgIElkVG9Ob3RpZmllck1h
cDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOworICAgIGlmIChp
dGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9u
b3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9pZFRvTm90aWZpZXJN
YXAucmVtb3ZlKGl0ZXIpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3Zl
KEdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsKKyAgICBpZiAoaXRlciA9
PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRUb05v
dGlmaWVyTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJUb0lkTWFwLnJl
bW92ZShpdGVyKTsKK30KKworYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5zKEdl
b05vdGlmaWVyKiBub3RpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub3RpZmllclRvSWRN
YXAuY29udGFpbnMobm90aWZpZXIpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
Y2xlYXIoKQoreworICAgIG1faWRUb05vdGlmaWVyTWFwLmNsZWFyKCk7CisgICAgbV9ub3RpZmll
clRvSWRNYXAuY2xlYXIoKTsKK30KKworYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmlzRW1w
dHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkVG9Ob3RpZmllck1hcC5pc0VtcHR5KCk7Cit9
CisKK3ZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpnZXROb3RpZmllcnNWZWN0b3IoR2VvTm90
aWZpZXJWZWN0b3ImIGNvcHkpIGNvbnN0Cit7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1faWRU
b05vdGlmaWVyTWFwLCBjb3B5KTsKK30KKworR2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKEZyYW1l
KiBmcmFtZSkKKyAgICA6IERPTVdpbmRvd1Byb3BlcnR5KGZyYW1lKQorI2lmICFFTkFCTEUoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgICwgbV9zZXJ2aWNlKEdlb2xvY2F0aW9uU2Vydmlj
ZTo6Y3JlYXRlKHRoaXMpKQorI2VuZGlmCisgICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93
bikKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9s
b2NhdGlvbih0cnVlKTsKK30KKworR2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpCit7CisgICAg
QVNTRVJUKG1fYWxsb3dHZW9sb2NhdGlvbiAhPSBJblByb2dyZXNzKTsKKyAgICBBU1NFUlQoIW1f
ZnJhbWUpOworfQorCitQYWdlKiBHZW9sb2NhdGlvbjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5wYWdlKCkgOiAwOworfQorCit2b2lkIEdlb2xvY2F0aW9u
OjpyZXNldCgpCit7CisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAocGFn
ZSAmJiBtX2FsbG93R2VvbG9jYXRpb24gPT0gSW5Qcm9ncmVzcykgeworI2lmIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxl
cigpLT5jYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCh0aGlzKTsKKyNlbHNlCisgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKG1fZnJhbWUsIHRoaXMpOworI2VuZGlmCisgICAgfQorICAgIC8vIFRoZSBmcmFtZSBt
YXkgYmUgbW92aW5nIHRvIGEgbmV3IHBhZ2UgYW5kIHdlIHdhbnQgdG8gZ2V0IHRoZSBwZXJtaXNz
aW9ucyBmcm9tIHRoZSBuZXcgcGFnZSdzIGNsaWVudC4KKyAgICBtX2FsbG93R2VvbG9jYXRpb24g
PSBVbmtub3duOworICAgIGNhbmNlbEFsbFJlcXVlc3RzKCk7CisgICAgc3RvcFVwZGF0aW5nKCk7
CisjaWYgVVNFKFBSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKKyAgICBtX3BlbmRpbmdG
b3JQZXJtaXNzaW9uTm90aWZpZXJzLmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBHZW9sb2Nh
dGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkKK3sKKyAgICAvLyBPbmNlIHdlIGFyZSBkaXNjb25uZWN0
ZWQgZnJvbSB0aGUgRnJhbWUsIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBwZXJmb3JtIGFu
eSBvcGVyYXRpb25zLgorICAgIHJlc2V0KCk7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9sb2Nh
dGlvbihmYWxzZSk7CisgICAgRE9NV2luZG93UHJvcGVydHk6OmRpc2Nvbm5lY3RGcmFtZSgpOwor
fQorCitHZW9wb3NpdGlvbiogR2VvbG9jYXRpb246Omxhc3RQb3NpdGlvbigpCit7CisjaWYgRU5B
QkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xhc3RQb3Np
dGlvbiA9IGNyZWF0ZUdlb3Bvc2l0aW9uKHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5s
YXN0UG9zaXRpb24oKSk7CisjZWxzZQorICAgIG1fbGFzdFBvc2l0aW9uID0gbV9zZXJ2aWNlLT5s
YXN0UG9zaXRpb24oKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgp
OworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oUGFzc1JlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0
aW9ucykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBzdGFydFJlcXVlc3Qoc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBBU1NFUlQobm90aWZpZXIpOworCisgICAgbV9v
bmVTaG90cy5hZGQobm90aWZpZXIpOworfQorCitpbnQgR2VvbG9jYXRpb246OndhdGNoUG9zaXRp
b24oUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0
aW9uT3B0aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOworICAgIEFTU0VSVChub3Rp
Zmllcik7CisKKyAgICBzdGF0aWMgaW50IG5leHRBdmFpbGFibGVXYXRjaElkID0gZmlyc3RBdmFp
bGFibGVXYXRjaElkOworICAgIC8vIEluIGNhc2Ugb2Ygb3ZlcmZsb3csIG1ha2Ugc3VyZSB0aGUg
SUQgcmVtYWlucyBwb3NpdGl2ZSwgYnV0IHJldXNlIHRoZSBJRCB2YWx1ZXMuCisgICAgaWYgKG5l
eHRBdmFpbGFibGVXYXRjaElkIDwgMSkKKyAgICAgICAgbmV4dEF2YWlsYWJsZVdhdGNoSWQgPSAx
OworICAgIG1fd2F0Y2hlcnMuc2V0KG5leHRBdmFpbGFibGVXYXRjaElkLCBub3RpZmllci5yZWxl
YXNlKCkpOworICAgIHJldHVybiBuZXh0QXZhaWxhYmxlV2F0Y2hJZCsrOworfQorCitQYXNzUmVm
UHRyPEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcj4gR2VvbG9jYXRpb246OnN0YXJ0UmVxdWVzdChQ
YXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQ
b3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBvcHRpb25zKQoreworICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBH
ZW9Ob3RpZmllcjo6Y3JlYXRlKHRoaXMsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
b3B0aW9ucyk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHBlcm1pc3Npb25zIGhhdmUgYWxyZWFk
eSBiZWVuIGRlbmllZC4gTm90ZSB0aGF0IGlmIHRoaXMgaXMgdGhlIGNhc2UsCisgICAgLy8gdGhl
IHBlcm1pc3Npb24gc3RhdGUgY2FuIG5vdCBjaGFuZ2UgYWdhaW4gaW4gdGhlIGxpZmV0aW1lIG9m
IHRoaXMgcGFnZS4KKyAgICBpZiAoaXNEZW5pZWQoKSkKKyAgICAgICAgbm90aWZpZXItPnNldEZh
dGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05f
REVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlKSk7CisgICAgZWxzZSBpZiAoaGF2
ZVN1aXRhYmxlQ2FjaGVkUG9zaXRpb24obm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisgICAg
ICAgIG5vdGlmaWVyLT5zZXRVc2VDYWNoZWRQb3NpdGlvbigpOworICAgIGVsc2UgaWYgKG5vdGlm
aWVyLT5oYXNaZXJvVGltZW91dCgpKQorICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVl
ZGVkKCk7CisjaWYgVVNFKFBSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKKyAgICBlbHNl
IGlmICghaXNBbGxvd2VkKCkpIHsKKyAgICAgICAgLy8gaWYgd2UgZG9uJ3QgeWV0IGhhdmUgcGVy
bWlzc2lvbiwgcmVxdWVzdCBmb3IgcGVybWlzc2lvbiBiZWZvcmUgY2FsbGluZyBzdGFydFVwZGF0
aW5nKCkKKyAgICAgICAgbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5hZGQobm90aWZp
ZXIpOworICAgICAgICByZXF1ZXN0UGVybWlzc2lvbigpOworICAgIH0KKyNlbmRpZgorICAgIGVs
c2UgaWYgKHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkpKQorICAgICAgICBub3RpZmllci0+
c3RhcnRUaW1lcklmTmVlZGVkKCk7CisgICAgZWxzZQorICAgICAgICBub3RpZmllci0+c2V0RmF0
YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5B
VkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisKKyAgICByZXR1
cm4gbm90aWZpZXIucmVsZWFzZSgpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9y
T2NjdXJyZWQoR2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBU
aGlzIHJlcXVlc3QgaGFzIGZhaWxlZCBmYXRhbGx5LiBSZW1vdmUgaXQgZnJvbSBvdXIgbGlzdHMu
CisgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworICAgIG1fd2F0Y2hlcnMucmVtb3Zl
KG5vdGlmaWVyKTsKKworICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHN0b3BVcGRh
dGluZygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9u
KEdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hy
b25vdXNseSwgc28gdGhlIHBlcm1pc3Npb25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKKyAgICAv
LyBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQgaW4gc3RhcnRSZXF1ZXN0LgorICAgIGlmIChpc0Rlbmll
ZCgpKSB7CisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0c0F3
YWl0aW5nQ2FjaGVkUG9zaXRpb24uYWRkKG5vdGlmaWVyKTsKKworICAgIC8vIElmIHBlcm1pc3Np
b25zIGFyZSBhbGxvd2VkLCBtYWtlIHRoZSBjYWxsYmFjaworICAgIGlmIChpc0FsbG93ZWQoKSkg
eworICAgICAgICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFJlcXVlc3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5j
aHJvbm91cyBvciBhc3luY2hyb25vdXMuCisgICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICAv
LyBBbGwgbW9kaWZpY2F0aW9ucyB0byBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBh
cmUgZG9uZQorICAgIC8vIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5
IGFib3V0IGl0IGJlaW5nIG1vZGlmaWVkIGZyb20KKyAgICAvLyB0aGUgY2FsbGJhY2tzLgorICAg
IEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdD
YWNoZWRQb3NpdGlvbi5lbmQoKTsKKyAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVy
LT5nZXQoKTsKKyAgICAgICAgbm90aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFjayhtX2NhY2hlZFBv
c2l0aW9uLmdldCgpKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVz
dCwgc3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKKyAgICAgICAgLy8gZXhp
c3RzLCBzdGFydCB0aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KKyAgICAgICAgaWYgKG1fb25l
U2hvdHMuY29udGFpbnMobm90aWZpZXIpKQorICAgICAgICAgICAgbV9vbmVTaG90cy5yZW1vdmUo
bm90aWZpZXIpOworICAgICAgICBlbHNlIGlmIChtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVy
KSkgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0
VXBkYXRpbmcobm90aWZpZXIpKQorICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVy
SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmllci0+
c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJ
T05fVU5BVkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVh
cigpOworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90
aWZpZXIpCit7CisgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQu
CisgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworCisgICAgaWYgKCFoYXNMaXN0ZW5l
cnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7Cit9CisKK2Jvb2wgR2VvbG9jYXRpb246Omhh
dmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK3sKKyAg
ICBpZiAoIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IW9wdGlvbnMtPmhhc01heGltdW1BZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KCFvcHRpb25zLT5tYXhpbXVtQWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBET01U
aW1lU3RhbXAgY3VycmVudFRpbWVNaWxsaXMgPSBjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1w
KGN1cnJlbnRUaW1lKCkpOworICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLT50aW1lc3RhbXAo
KSA+IGN1cnJlbnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOworfQorCit2b2lk
IEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQoreworICAgIGlmICh3YXRjaElk
IDwgZmlyc3RBdmFpbGFibGVXYXRjaElkKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoUFJF
RU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQorICAgIGlmIChHZW9Ob3RpZmllciogbm90aWZp
ZXIgPSBtX3dhdGNoZXJzLmZpbmQod2F0Y2hJZCkpCisgICAgICAgIG1fcGVuZGluZ0ZvclBlcm1p
c3Npb25Ob3RpZmllcnMucmVtb3ZlKG5vdGlmaWVyKTsKKyNlbmRpZgorICAgIG1fd2F0Y2hlcnMu
cmVtb3ZlKHdhdGNoSWQpOworICAgIAorICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAg
IHN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9v
bCBhbGxvd2VkKQoreworICAgIC8vIFByb3RlY3QgdGhlIEdlb2xvY2F0aW9uIG9iamVjdCBmcm9t
IGdhcmJhZ2UgY29sbGVjdGlvbiBkdXJpbmcgYSBjYWxsYmFjay4KKyAgICBSZWZQdHI8R2VvbG9j
YXRpb24+IHByb3RlY3QodGhpcyk7CisKKyAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gZWl0aGVy
IGEgbmV3IHBvc2l0aW9uIGZyb20gdGhlIHNlcnZpY2UsIG9yIGEgY2FjaGVkCisgICAgLy8gcG9z
aXRpb24uCisgICAgbV9hbGxvd0dlb2xvY2F0aW9uID0gYWxsb3dlZCA/IFllcyA6IE5vOworICAg
IAorI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCisgICAgLy8gUGVybWlz
c2lvbiByZXF1ZXN0IHdhcyBtYWRlIGR1cmluZyB0aGUgc3RhcnRSZXF1ZXN0IHByb2Nlc3MKKyAg
ICBpZiAoIW1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGhhbmRsZVBlbmRpbmdQZXJtaXNzaW9uTm90aWZpZXJzKCk7CisgICAgICAgIG1fcGVuZGlu
Z0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKCFpc0FsbG93ZWQoKSkgeworICAgICAgICBSZWZQdHI8UG9zaXRp
b25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVS
TUlTU0lPTl9ERU5JRUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpOworICAgICAgICBl
cnJvci0+c2V0SXNGYXRhbCh0cnVlKTsKKyAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkp
OworICAgICAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNlcnZpY2UgaGFzIGEgbGFzdCBw
b3NpdGlvbiwgdXNlIGl0IHRvIGNhbGwgYmFjayBmb3IgYWxsIHJlcXVlc3RzLgorICAgIC8vIElm
IGFueSBvZiB0aGUgcmVxdWVzdHMgYXJlIHdhaXRpbmcgZm9yIHBlcm1pc3Npb24gZm9yIGEgY2Fj
aGVkIHBvc2l0aW9uLAorICAgIC8vIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIHdpbGwg
YmUgYXQgbGVhc3QgYXMgZnJlc2guCisgICAgaWYgKGxhc3RQb3NpdGlvbigpKQorICAgICAgICBt
YWtlU3VjY2Vzc0NhbGxiYWNrcygpOworICAgIGVsc2UKKyAgICAgICAgbWFrZUNhY2hlZFBvc2l0
aW9uQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNlbmRFcnJvcihHZW9Ob3Rp
ZmllclZlY3RvciYgbm90aWZpZXJzLCBQb3NpdGlvbkVycm9yKiBlcnJvcikKK3sKKyAgICAgR2Vv
Tm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKKyAg
ICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+
IG5vdGlmaWVyID0gKml0OworICAgICAgICAgCisgICAgICAgICBpZiAobm90aWZpZXItPm1fZXJy
b3JDYWxsYmFjaykKKyAgICAgICAgICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5k
bGVFdmVudChlcnJvcik7CisgICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvbjo6c2VuZFBvc2l0
aW9uKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbikK
K3sKKyAgICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJz
LmVuZCgpOworICAgIGZvciAoR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZWZQdHI8R2Vv
Tm90aWZpZXI+IG5vdGlmaWVyID0gKml0OworICAgICAgICBBU1NFUlQobm90aWZpZXItPm1fc3Vj
Y2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgCisgICAgICAgIG5vdGlmaWVyLT5tX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQocG9zaXRpb24pOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlv
bjo6c3RvcFRpbWVyKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMpCit7CisgICAgR2VvTm90
aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKKyAgICBm
b3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3Rp
ZmllciA9ICppdDsKKyAgICAgICAgbm90aWZpZXItPm1fdGltZXIuc3RvcCgpOworICAgIH0KK30K
Kwordm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVyc0Zvck9uZVNob3RzKCkKK3sKKyAgICBHZW9O
b3RpZmllclZlY3RvciBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsK
KyAgICAKKyAgICBzdG9wVGltZXIoY29weSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnN0b3BU
aW1lcnNGb3JXYXRjaGVycygpCit7CisgICAgR2VvTm90aWZpZXJWZWN0b3IgY29weTsKKyAgICBt
X3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcihjb3B5KTsKKyAgICAKKyAgICBzdG9wVGltZXIo
Y29weSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnN0b3BUaW1lcnMoKQoreworICAgIHN0b3BU
aW1lcnNGb3JPbmVTaG90cygpOworICAgIHN0b3BUaW1lcnNGb3JXYXRjaGVycygpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uOjpjYW5jZWxSZXF1ZXN0cyhHZW9Ob3RpZmllclZlY3RvciYgbm90aWZp
ZXJzKQoreworICAgIEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub3Rp
ZmllcnMuZW5kKCk7CisgICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBub3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+
c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJ
T05fVU5BVkFJTEFCTEUsIGZyYW1lbGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlKSk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb246OmNhbmNlbEFsbFJlcXVlc3RzKCkKK3sKKyAgICBHZW9Ob3RpZmllclZl
Y3RvciBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsKKyAgICBjYW5j
ZWxSZXF1ZXN0cyhjb3B5KTsKKyAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcihjb3B5
KTsKKyAgICBjYW5jZWxSZXF1ZXN0cyhjb3B5KTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6ZXh0
cmFjdE5vdGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZp
ZXJzLCBHZW9Ob3RpZmllclZlY3RvciogY2FjaGVkKQoreworICAgIEdlb05vdGlmaWVyVmVjdG9y
IG5vbkNhY2hlZDsKKyAgICBHZW9Ob3RpZmllclZlY3Rvcjo6aXRlcmF0b3IgZW5kID0gbm90aWZp
ZXJzLmVuZCgpOworICAgIGZvciAoR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHZW9Ob3Rp
Zmllciogbm90aWZpZXIgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChub3RpZmllci0+bV91c2VD
YWNoZWRQb3NpdGlvbikgeworICAgICAgICAgICAgaWYgKGNhY2hlZCkKKyAgICAgICAgICAgICAg
ICBjYWNoZWQtPmFwcGVuZChub3RpZmllcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bm9uQ2FjaGVkLmFwcGVuZChub3RpZmllcik7CisgICAgfQorICAgIG5vdGlmaWVycy5zd2FwKG5v
bkNhY2hlZCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OmNvcHlUb1NldChjb25zdCBHZW9Ob3Rp
ZmllclZlY3RvciYgc3JjLCBHZW9Ob3RpZmllclNldCYgZGVzdCkKK3sKKyAgICAgR2VvTm90aWZp
ZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNyYy5lbmQoKTsKKyAgICAgZm9yIChHZW9O
b3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzcmMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdC0+Z2V0KCk7Cisg
ICAgICAgICBkZXN0LmFkZChub3RpZmllcik7CisgICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlv
bjo6aGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciogZXJyb3IpCit7CisgICAgQVNTRVJUKGVycm9y
KTsKKyAgICAKKyAgICBHZW9Ob3RpZmllclZlY3RvciBvbmVTaG90c0NvcHk7CisgICAgY29weVRv
VmVjdG9yKG1fb25lU2hvdHMsIG9uZVNob3RzQ29weSk7CisKKyAgICBHZW9Ob3RpZmllclZlY3Rv
ciB3YXRjaGVyc0NvcHk7CisgICAgbV93YXRjaGVycy5nZXROb3RpZmllcnNWZWN0b3Iod2F0Y2hl
cnNDb3B5KTsKKworICAgIC8vIENsZWFyIHRoZSBsaXN0cyBiZWZvcmUgd2UgbWFrZSB0aGUgY2Fs
bGJhY2tzLCB0byBhdm9pZCBjbGVhcmluZyBub3RpZmllcnMKKyAgICAvLyBhZGRlZCBieSBjYWxs
cyB0byBHZW9sb2NhdGlvbiBtZXRob2RzIGZyb20gdGhlIGNhbGxiYWNrcywgYW5kIHRvIHByZXZl
bnQKKyAgICAvLyBmdXJ0aGVyIGNhbGxiYWNrcyB0byB0aGVzZSBub3RpZmllcnMuCisgICAgR2Vv
Tm90aWZpZXJWZWN0b3Igb25lU2hvdHNXaXRoQ2FjaGVkUG9zaXRpb247CisgICAgbV9vbmVTaG90
cy5jbGVhcigpOworICAgIGlmIChlcnJvci0+aXNGYXRhbCgpKQorICAgICAgICBtX3dhdGNoZXJz
LmNsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIERvbid0IHNlbmQgbm9uLWZhdGFsIGVy
cm9ycyB0byBub3RpZmllcnMgZHVlIHRvIHJlY2VpdmUgYSBjYWNoZWQgcG9zaXRpb24uCisgICAg
ICAgIGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24ob25lU2hvdHNDb3B5LCAmb25l
U2hvdHNXaXRoQ2FjaGVkUG9zaXRpb24pOworICAgICAgICBleHRyYWN0Tm90aWZpZXJzV2l0aENh
Y2hlZFBvc2l0aW9uKHdhdGNoZXJzQ29weSwgMCk7CisgICAgfQorCisgICAgc2VuZEVycm9yKG9u
ZVNob3RzQ29weSwgZXJyb3IpOworICAgIHNlbmRFcnJvcih3YXRjaGVyc0NvcHksIGVycm9yKTsK
KworICAgIC8vIGhhc0xpc3RlbmVycygpIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBub3Rp
ZmllcnMgZHVlIHRvIHJlY2VpdmUgYQorICAgIC8vIGNhY2hlZCBwb3NpdGlvbiBhbmQgdGhvc2Ug
cmVxdWlyaW5nIGEgZnJlc2ggcG9zaXRpb24uIFBlcmZvcm0gdGhlIGNoZWNrCisgICAgLy8gYmVm
b3JlIHJlc3RvcmluZyB0aGUgbm90aWZpZXJzIGJlbG93LgorICAgIGlmICghaGFzTGlzdGVuZXJz
KCkpCisgICAgICAgIHN0b3BVcGRhdGluZygpOworCisgICAgLy8gTWFpbnRhaW4gYSByZWZlcmVu
Y2UgdG8gdGhlIGNhY2hlZCBub3RpZmllcnMgdW50aWwgdGhlaXIgdGltZXIgZmlyZXMuCisgICAg
Y29weVRvU2V0KG9uZVNob3RzV2l0aENhY2hlZFBvc2l0aW9uLCBtX29uZVNob3RzKTsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFBlcm1pc3Npb24oKQoreworICAgIGlmIChtX2FsbG93
R2VvbG9jYXRpb24gPiBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlKiBwYWdl
ID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9hbGxvd0dlb2xvY2F0aW9uID0gSW5Qcm9ncmVzczsKKworICAgIC8vIEFzayB0aGUgZW1iZWRk
ZXI6IGl0IG1haW50YWlucyB0aGUgZ2VvbG9jYXRpb24gY2hhbGxlbmdlIHBvbGljeSBpdHNlbGYu
CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBwYWdlLT5nZW9sb2Nh
dGlvbkNvbnRyb2xsZXIoKS0+cmVxdWVzdFBlcm1pc3Npb24odGhpcyk7CisjZWxzZQorICAgIHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZy
YW1lKG1fZnJhbWUsIHRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnBvc2l0
aW9uQ2hhbmdlZEludGVybmFsKCkKK3sKKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gbGFzdFBvc2l0
aW9uKCk7CisKKyAgICAvLyBTdG9wIGFsbCBjdXJyZW50bHkgcnVubmluZyB0aW1lcnMuCisgICAg
c3RvcFRpbWVycygpOworCisgICAgaWYgKCFpc0FsbG93ZWQoKSkgeworICAgICAgICAvLyByZXF1
ZXN0UGVybWlzc2lvbigpIHdpbGwgYXNrIHRoZSBjaHJvbWUgZm9yIHBlcm1pc3Npb24uIFRoaXMg
bWF5IGJlCisgICAgICAgIC8vIGltcGxlbWVudGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9u
b3VzbHkuIEluIGJvdGggY2FzZXMsCisgICAgICAgIC8vIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCkg
d2lsbCBiZSBjYWxsZWQgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLCBzbworICAgICAgICAvLyB0
aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbyBoZXJlLgorICAgICAgICByZXF1ZXN0UGVybWlzc2lv
bigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3Mo
KTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6bWFrZVN1Y2Nlc3NDYWxsYmFja3MoKQoreworICAg
IEFTU0VSVChsYXN0UG9zaXRpb24oKSk7CisgICAgQVNTRVJUKGlzQWxsb3dlZCgpKTsKKyAgICAK
KyAgICBHZW9Ob3RpZmllclZlY3RvciBvbmVTaG90c0NvcHk7CisgICAgY29weVRvVmVjdG9yKG1f
b25lU2hvdHMsIG9uZVNob3RzQ29weSk7CisgICAgCisgICAgR2VvTm90aWZpZXJWZWN0b3Igd2F0
Y2hlcnNDb3B5OworICAgIG1fd2F0Y2hlcnMuZ2V0Tm90aWZpZXJzVmVjdG9yKHdhdGNoZXJzQ29w
eSk7CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIGxpc3RzIGJlZm9yZSB3ZSBtYWtlIHRoZSBjYWxs
YmFja3MsIHRvIGF2b2lkIGNsZWFyaW5nIG5vdGlmaWVycworICAgIC8vIGFkZGVkIGJ5IGNhbGxz
IHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMgZnJvbSB0aGUgY2FsbGJhY2tzLCBhbmQgdG8gcHJldmVu
dAorICAgIC8vIGZ1cnRoZXIgY2FsbGJhY2tzIHRvIHRoZXNlIG5vdGlmaWVycy4KKyAgICBtX29u
ZVNob3RzLmNsZWFyKCk7CisKKyAgICBzZW5kUG9zaXRpb24ob25lU2hvdHNDb3B5LCBsYXN0UG9z
aXRpb24oKSk7CisgICAgc2VuZFBvc2l0aW9uKHdhdGNoZXJzQ29weSwgbGFzdFBvc2l0aW9uKCkp
OworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7Cit9
CisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCit2b2lkIEdlb2xvY2F0
aW9uOjpwb3NpdGlvbkNoYW5nZWQoKQoreworICAgIHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNldEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqIGVycm9y
KQoreworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBwb3NpdGlvbkVycm9yID0gY3JlYXRlUG9z
aXRpb25FcnJvcihlcnJvcik7CisgICAgaGFuZGxlRXJyb3IocG9zaXRpb25FcnJvci5nZXQoKSk7
Cit9CisKKyNlbHNlCisKK3ZvaWQgR2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2VydmljZVBvc2l0
aW9uQ2hhbmdlZChHZW9sb2NhdGlvblNlcnZpY2UqIHNlcnZpY2UpCit7CisgICAgQVNTRVJUX1VO
VVNFRChzZXJ2aWNlLCBzZXJ2aWNlID09IG1fc2VydmljZSk7CisgICAgQVNTRVJUKG1fc2Vydmlj
ZS0+bGFzdFBvc2l0aW9uKCkpOworCisgICAgcG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKTsKK30K
Kwordm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZChHZW9s
b2NhdGlvblNlcnZpY2UqIHNlcnZpY2UpCit7CisgICAgQVNTRVJUKHNlcnZpY2UtPmxhc3RFcnJv
cigpKTsKKworICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3RvcCB0aW1lcnMgaGVyZS4gRm9y
IG9uZS1zaG90cywgdGhlIHJlcXVlc3QgaXMKKyAgICAvLyBjbGVhcmVkIGluIGhhbmRsZUVycm9y
LiBGb3Igd2F0Y2hlcnMsIHRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHRpbWVyIGlzCisgICAg
Ly8gbm90IGNsZWFyZWQuCisgICAgaGFuZGxlRXJyb3Ioc2VydmljZS0+bGFzdEVycm9yKCkpOwor
fQorCisjZW5kaWYKKworYm9vbCBHZW9sb2NhdGlvbjo6c3RhcnRVcGRhdGluZyhHZW9Ob3RpZmll
ciogbm90aWZpZXIpCit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAg
ICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmFkZE9ic2Vy
dmVyKHRoaXMsIG5vdGlmaWVyLT5tX29wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRhdGlu
Zyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIEdlb2xvY2F0
aW9uOjpzdG9wVXBkYXRpbmcoKQoreworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pCisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVP
YnNlcnZlcih0aGlzKTsKKyNlbHNlCisgICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKKyNl
bmRpZgorCit9CisKKyNpZiBVU0UoUFJFRU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQordm9p
ZCBHZW9sb2NhdGlvbjo6aGFuZGxlUGVuZGluZ1Blcm1pc3Npb25Ob3RpZmllcnMoKQoreworICAg
IC8vIFdoaWxlIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCwgd2UgbmVlZCBub3Qgd29ycnkg
YWJvdXQgbGlzdCBiZWluZyBtb2RpZmllZCBhcyB0aGUgcGVybWlzc2lvbiAKKyAgICAvLyBpcyBh
bHJlYWR5IHNldCB0byBZZXMvTm8gYW5kIG5vIG5ldyBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZCB0
byB0aGUgcGVuZGluZyBsaXN0CisgICAgR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuZW5kKCk7CisgICAgZm9yIChHZW9O
b3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25O
b3RpZmllcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBHZW9Ob3Rp
Zmllciogbm90aWZpZXIgPSBpdGVyLT5nZXQoKTsKKworICAgICAgICBpZiAoaXNBbGxvd2VkKCkp
IHsKKyAgICAgICAgICAgIC8vIHN0YXJ0IGFsbCBwZW5kaW5nIG5vdGlmaWNhdGlvbiByZXF1ZXN0
cyBhcyBwZXJtaXNzaW9uIGdyYW50ZWQuCisgICAgICAgICAgICAvLyBUaGUgbm90aWZpZXIgaXMg
YWx3YXlzIHJlZidlZCBieSBtX29uZVNob3RzIG9yIG1fd2F0Y2hlcnMuCisgICAgICAgICAgICBp
ZiAoc3RhcnRVcGRhdGluZyhub3RpZmllcikpCisgICAgICAgICAgICAgICAgbm90aWZpZXItPnN0
YXJ0VGltZXJJZk5lZWRlZCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5v
dGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9y
OjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2Up
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQ
b3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBl
cm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpKTsKKyAgICB9Cit9CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZWxzZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
R2VvbG9jYXRpb246OmNsZWFyV2F0Y2goaW50KSB7fQorCit2b2lkIEdlb2xvY2F0aW9uOjpyZXNl
dCgpIHt9CisKK3ZvaWQgR2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSgpIHt9CisKK0dlb2xv
Y2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSopIDogRE9NV2luZG93UHJvcGVydHkoMCkge30KKwor
R2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpIHt9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNldElz
QWxsb3dlZChib29sKSB7fQorCit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW9s
b2NhdGlvbl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uX2gKKworI2luY2x1ZGUgIkRPTVdpbmRvd1By
b3BlcnR5LmgiCisjaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbkNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisKKyNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyNpbmNs
dWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lOworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCitj
bGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOworY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsKKyNlbmRp
ZgorY2xhc3MgUGFnZTsKKworY2xhc3MgR2VvbG9jYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxH
ZW9sb2NhdGlvbj4sIHB1YmxpYyBET01XaW5kb3dQcm9wZXJ0eQorI2lmICFFTkFCTEUoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKSAmJiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgLCBwdWJsaWMg
R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IEdlb2xvY2F0aW9uKGZyYW1lKSk7IH0KKyAgICB+R2VvbG9jYXRpb24oKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSBPVkVSUklERTsKKyAgICB2b2lkIHJl
c2V0KCk7CisKKyAgICB2b2lkIGdldEN1cnJlbnRQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
UG9zaXRpb25PcHRpb25zPik7CisgICAgaW50IHdhdGNoUG9zaXRpb24oUGFzc1JlZlB0cjxQb3Np
dGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4pOworICAgIHZvaWQgY2xlYXJXYXRjaChpbnQgd2F0Y2hJZCk7
CisKKyAgICB2b2lkIHNldElzQWxsb3dlZChib29sKTsKKworI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2b2lkIHNl
dEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqKTsKKyNlbHNlCisgICAgR2VvbG9jYXRpb25TZXJ2aWNl
KiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2UuZ2V0KCk7
IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsK
KworICAgIGJvb2wgaXNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9u
ID09IFllczsgfQorICAgIGJvb2wgaXNEZW5pZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2Vv
bG9jYXRpb24gPT0gTm87IH0KKworICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uKEZyYW1lKik7CisK
KyAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisKKyAgICBjbGFzcyBHZW9Ob3RpZmllciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdlb05vdGlmaWVyPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiwg
UGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb05vdGlm
aWVyKGdlb2xvY2F0aW9uLCBwb3NpdGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpKTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRGYXRhbEVycm9yKFBhc3NS
ZWZQdHI8UG9zaXRpb25FcnJvcj4pOworICAgICAgICBib29sIGhhc1plcm9UaW1lb3V0KCkgY29u
c3Q7CisgICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9zaXRpb24oKTsKKyAgICAgICAgdm9pZCBy
dW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qKTsKKyAgICAgICAgdm9pZCBzdGFydFRpbWVy
SWZOZWVkZWQoKTsKKyAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiop
OworICAgICAgICAKKyAgICAgICAgUmVmUHRyPEdlb2xvY2F0aW9uPiBtX2dlb2xvY2F0aW9uOwor
ICAgICAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAg
ICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICAg
ICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOworICAgICAgICBUaW1lcjxHZW9O
b3RpZmllcj4gbV90aW1lcjsKKyAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fZmF0YWxF
cnJvcjsKKyAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9z
aXRpb25PcHRpb25zPik7CisgICAgfTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxHZW9O
b3RpZmllcj4gPiBHZW9Ob3RpZmllclZlY3RvcjsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyU2V0OworCisgICAgY2xhc3MgV2F0Y2hlcnMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlm
aWVyPik7CisgICAgICAgIEdlb05vdGlmaWVyKiBmaW5kKGludCBpZCk7CisgICAgICAgIHZvaWQg
cmVtb3ZlKGludCBpZCk7CisgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7CisgICAg
ICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVh
cigpOworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXROb3Rp
ZmllcnNWZWN0b3IoR2VvTm90aWZpZXJWZWN0b3ImKSBjb25zdDsKKyAgICBwcml2YXRlOgorICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8R2VvTm90aWZpZXI+ID4gSWRUb05vdGlm
aWVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEdlb05vdGlmaWVyPiwgaW50
PiBOb3RpZmllclRvSWRNYXA7CisgICAgICAgIElkVG9Ob3RpZmllck1hcCBtX2lkVG9Ob3RpZmll
ck1hcDsKKyAgICAgICAgTm90aWZpZXJUb0lkTWFwIG1fbm90aWZpZXJUb0lkTWFwOworICAgIH07
CisKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX29uZVNob3RzLmlz
RW1wdHkoKSB8fCAhbV93YXRjaGVycy5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgc2VuZEVycm9y
KEdlb05vdGlmaWVyVmVjdG9yJiwgUG9zaXRpb25FcnJvciopOworICAgIHZvaWQgc2VuZFBvc2l0
aW9uKEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvcG9zaXRpb24qKTsKKworICAgIHN0YXRpYyB2b2lk
IGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImIG5v
dGlmaWVycywgR2VvTm90aWZpZXJWZWN0b3IqIGNhY2hlZCk7CisgICAgc3RhdGljIHZvaWQgY29w
eVRvU2V0KGNvbnN0IEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvTm90aWZpZXJTZXQmKTsKKworICAg
IHN0YXRpYyB2b2lkIHN0b3BUaW1lcihHZW9Ob3RpZmllclZlY3RvciYpOworICAgIHZvaWQgc3Rv
cFRpbWVyc0Zvck9uZVNob3RzKCk7CisgICAgdm9pZCBzdG9wVGltZXJzRm9yV2F0Y2hlcnMoKTsK
KyAgICB2b2lkIHN0b3BUaW1lcnMoKTsKKworICAgIHZvaWQgY2FuY2VsUmVxdWVzdHMoR2VvTm90
aWZpZXJWZWN0b3ImKTsKKyAgICB2b2lkIGNhbmNlbEFsbFJlcXVlc3RzKCk7CisKKyAgICB2b2lk
IHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7CisgICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNr
cygpOworICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOworCisgICAgdm9pZCBy
ZXF1ZXN0UGVybWlzc2lvbigpOworCisgICAgYm9vbCBzdGFydFVwZGF0aW5nKEdlb05vdGlmaWVy
Kik7CisgICAgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKworI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FU
SU9OX1BFUk1JU1NJT04pCisgICAgdm9pZCBoYW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVy
cygpOworI2VuZGlmCisKKyNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJiYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRp
b25TZXJ2aWNlKik7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9yT2Nj
dXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CisjZW5kaWYKKworICAgIFBhc3NSZWZQdHI8R2Vv
Tm90aWZpZXI+IHN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25z
Pik7CisKKyAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJlZChHZW9Ob3RpZmllciopOworICAgIHZv
aWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7CisgICAgdm9pZCByZXF1ZXN0VXNlc0Nh
Y2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7CisgICAgYm9vbCBoYXZlU3VpdGFibGVDYWNoZWRQ
b3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2b2lkIG1ha2VDYWNoZWRQb3NpdGlvbkNh
bGxiYWNrcygpOworCisgICAgR2VvTm90aWZpZXJTZXQgbV9vbmVTaG90czsKKyAgICBXYXRjaGVy
cyBtX3dhdGNoZXJzOworI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAg
IE93blB0cjxHZW9sb2NhdGlvblNlcnZpY2U+IG1fc2VydmljZTsKKyNlbmRpZgorI2lmIFVTRShQ
UkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCisgICAgR2VvTm90aWZpZXJTZXQgbV9wZW5k
aW5nRm9yUGVybWlzc2lvbk5vdGlmaWVyczsKKyNlbmRpZgorICAgIFJlZlB0cjxHZW9wb3NpdGlv
bj4gbV9sYXN0UG9zaXRpb247CisKKyAgICBlbnVtIHsKKyAgICAgICAgVW5rbm93biwKKyAgICAg
ICAgSW5Qcm9ncmVzcywKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH0gbV9hbGxvd0dl
b2xvY2F0aW9uOworCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFJlZlB0cjxHZW9wb3Np
dGlvbj4gbV9jYWNoZWRQb3NpdGlvbjsKKyNlbmRpZgorICAgIEdlb05vdGlmaWVyU2V0IG1fcmVx
dWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwJKHJldmlzaW9uIDEw
ODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5pZGw6MTA4NDQ5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCittb2R1bGUgY29yZSB7CisKKyAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9nZW9sb2NhdGlvbi1BUEkvI2dlb2xvY2F0aW9uX2ludGVyZmFjZQorICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdFT0xPQ0FUSU9OLCAKKyAgICAgICAgSlNHZW5l
cmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKKyAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAg
XSBHZW9sb2NhdGlvbiB7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0Q3VycmVudFBvc2l0aW9u
KGluIFBvc2l0aW9uQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uT3B0aW9ucyBvcHRpb25zKTsKKworICAgICAgICBbQ3Vz
dG9tXSBsb25nIHdhdGNoUG9zaXRpb24oaW4gUG9zaXRpb25DYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBv
c2l0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBQb3NpdGlvbk9wdGlvbnMgb3B0aW9ucyk7CisK
KyAgICAgICAgdm9pZCBjbGVhcldhdGNoKGluIGxvbmcgd2F0Y2hJZCk7CisgICAgfTsKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6MTA4NDQ5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uUG9zaXRpb24uaCIKKworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dlb2xvY2F0aW9uQ29udHJvbGxlcjo6R2VvbG9jYXRpb25Db250cm9sbGVyKFBh
Z2UqIHBhZ2UsIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BhZ2UocGFnZSkK
KyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworR2VvbG9jYXRpb25Db250cm9sbGVyOjp+
R2VvbG9jYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0
eSgpKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmdlb2xvY2F0aW9u
RGVzdHJveWVkKCk7Cit9CisKK1Bhc3NPd25QdHI8R2VvbG9jYXRpb25Db250cm9sbGVyPiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZShQYWdlKiBwYWdlLCBHZW9sb2NhdGlvbkNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25Db250cm9sbGVy
KHBhZ2UsIGNsaWVudCkpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6YWRkT2Jz
ZXJ2ZXIoR2VvbG9jYXRpb24qIG9ic2VydmVyLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkKK3sK
KyAgICAvLyBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciwgdGhvdWdoIHJlbW92ZU9ic2VydmVyKCkKKyAgICAvLyBpcyBjYWxsZWQgb25seSBv
bmNlIHdpdGggZWFjaC4KKyAgICBib29sIHdhc0VtcHR5ID0gbV9vYnNlcnZlcnMuaXNFbXB0eSgp
OworICAgIG1fb2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7CisgICAgaWYgKGVuYWJsZUhpZ2hBY2N1
cmFjeSkKKyAgICAgICAgbV9oaWdoQWNjdXJhY3lPYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKKwor
ICAgIGlmIChtX2NsaWVudCkgeyAgICAgICAgCisgICAgICAgIGlmIChlbmFibGVIaWdoQWNjdXJh
Y3kpCisgICAgICAgICAgICBtX2NsaWVudC0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5KHRydWUpOwor
ICAgICAgICBpZiAod2FzRW1wdHkpCisgICAgICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGlu
ZygpOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9ic2Vy
dmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlcikKK3sKKyAgICBpZiAoIW1fb2JzZXJ2ZXJzLmNvbnRh
aW5zKG9ic2VydmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vYnNlcnZlcnMucmVtb3Zl
KG9ic2VydmVyKTsKKyAgICBtX2hpZ2hBY2N1cmFjeU9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIp
OworCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIGlmIChtX29ic2VydmVycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7CisgICAgICAgIGVsc2Ug
aWYgKG1faGlnaEFjY3VyYWN5T2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fY2xp
ZW50LT5zZXRFbmFibGVIaWdoQWNjdXJhY3koZmFsc2UpOworICAgIH0KK30KKwordm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbikKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZXF1ZXN0UGVy
bWlzc2lvbihnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjpj
YW5jZWxQZXJtaXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2FuY2VsUGVybWlzc2lvblJlcXVlc3Qo
Z2VvbG9jYXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25D
aGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1fbGFzdFBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgVmVjdG9yPFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBvYnNlcnZl
cnNWZWN0b3I7CisgICAgY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJzLCBvYnNlcnZlcnNWZWN0b3Ip
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzVmVjdG9yLnNpemUoKTsgKytp
KQorICAgICAgICBvYnNlcnZlcnNWZWN0b3JbaV0tPnBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVycm9y
KiBlcnJvcikKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEdlb2xvY2F0aW9uPiA+IG9ic2VydmVyc1Zl
Y3RvcjsKKyAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMsIG9ic2VydmVyc1ZlY3Rvcik7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG9ic2VydmVyc1ZlY3RvcltpXS0+c2V0RXJyb3IoZXJyb3IpOworfQorCitHZW9sb2Nh
dGlvblBvc2l0aW9uKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6Omxhc3RQb3NpdGlvbigpCit7Cisg
ICAgaWYgKG1fbGFzdFBvc2l0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gbV9sYXN0UG9zaXRp
b24uZ2V0KCk7CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2NsaWVudC0+bGFzdFBvc2l0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uQ29u
dHJvbGxlcl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUo
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9s
b2NhdGlvbkNsaWVudDsKK2NsYXNzIEdlb2xvY2F0aW9uRXJyb3I7CitjbGFzcyBHZW9sb2NhdGlv
blBvc2l0aW9uOworY2xhc3MgUGFnZTsKKworY2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZW9sb2NhdGlvbkNvbnRyb2xsZXIpOworcHVibGlj
OgorICAgIH5HZW9sb2NhdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PEdlb2xvY2F0aW9uQ29udHJvbGxlcj4gY3JlYXRlKFBhZ2UqLCBHZW9sb2NhdGlvbkNsaWVudCop
OworCisgICAgdm9pZCBhZGRPYnNlcnZlcihHZW9sb2NhdGlvbiosIGJvb2wgZW5hYmxlSGlnaEFj
Y3VyYWN5KTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKik7CisKKyAgICB2
b2lkIHJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWxQZXJt
aXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiopOworCisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQo
R2VvbG9jYXRpb25Qb3NpdGlvbiopOworICAgIHZvaWQgZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlv
bkVycm9yKik7CisKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsKKwor
ICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCitw
cml2YXRlOgorICAgIEdlb2xvY2F0aW9uQ29udHJvbGxlcihQYWdlKiwgR2VvbG9jYXRpb25DbGll
bnQqKTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBHZW9sb2NhdGlvbkNsaWVudCogbV9jbGll
bnQ7CisKKyAgICBSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247Cisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBPYnNlcnZlcnNTZXQ7Cisg
ICAgLy8gQWxsIG9ic2VydmVyczsgYm90aCB0aG9zZSByZXF1ZXN0aW5nIGhpZ2ggYWNjdXJhY3kg
YW5kIHRob3NlIG5vdC4KKyAgICBPYnNlcnZlcnNTZXQgbV9vYnNlcnZlcnM7CisgICAgT2JzZXJ2
ZXJzU2V0IG1faGlnaEFjY3VyYWN5T2JzZXJ2ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2Vu
ZGlmIC8vIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaAkocmV2aXNpb24g
MTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaDoxMDg0
NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJy
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBHZW9sb2NhdGlvbkVycm9yX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25FcnJvcl9oCisKKyNpZiBF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdlb2xvY2F0aW9uRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvbkVy
cm9yPiB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBQZXJtaXNzaW9u
RGVuaWVkLAorICAgICAgICBQb3NpdGlvblVuYXZhaWxhYmxlCisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uRXJyb3I+IGNyZWF0ZShFcnJvckNvZGUgY29kZSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25FcnJv
cihjb2RlLCBtZXNzYWdlKSk7IH0KKworICAgIEVycm9yQ29kZSBjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9tZXNzYWdlOyB9CisKK3ByaXZhdGU6CisgICAgR2VvbG9jYXRpb25FcnJvcihFcnJvckNvZGUg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAg
ICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBFcnJvckNvZGUg
bV9jb2RlOworICAgIFN0cmluZyBtX21lc3NhZ2U7IAorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2Vu
ZGlmIC8vIEdlb2xvY2F0aW9uRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBvc2l0aW9uLmgJKHJldmlzaW9u
IDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmg6
MTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
blBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEdlb2xvY2F0aW9uUG9zaXRpb25faAorI2RlZmluZSBHZW9sb2NhdGlvblBvc2l0
aW9uX2gKKworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0
aW9uUG9zaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvblBvc2l0aW9uPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gY3JlYXRl
KGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5KSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbih0
aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KSk7IH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uUG9zaXRpb24+IGNyZWF0ZShkb3VibGUgdGltZXN0YW1w
LCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEdlb2xvY2F0aW9uUG9zaXRpb24odGltZXN0YW1wLCBsYXRpdHVkZSwg
bG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFk
aW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCkpOyB9CisKKyAgICBkb3VibGUgdGltZXN0YW1wKCkg
Y29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKworICAgIGRvdWJsZSBsYXRpdHVkZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF0aXR1ZGU7IH0KKyAgICBkb3VibGUgbG9uZ2l0dWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9sb25naXR1ZGU7IH0KKyAgICBkb3VibGUgYWNjdXJhY3koKSBjb25zdCB7IHJl
dHVybiBtX2FjY3VyYWN5OyB9CisgICAgZG91YmxlIGFsdGl0dWRlKCkgY29uc3QgeyByZXR1cm4g
bV9hbHRpdHVkZTsgfQorICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1
cm4gbV9hbHRpdHVkZUFjY3VyYWN5OyB9CisgICAgZG91YmxlIGhlYWRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2hlYWRpbmc7IH0KKyAgICBkb3VibGUgc3BlZWQoKSBjb25zdCB7IHJldHVybiBtX3Nw
ZWVkOyB9CisKKyAgICBib29sIGNhblByb3ZpZGVBbHRpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUHJvdmlkZUFsdGl0dWRlOyB9CisgICAgYm9vbCBjYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFj
eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3k7IH0KKyAgICBi
b29sIGNhblByb3ZpZGVIZWFkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlSGVhZGlu
ZzsgfQorICAgIGJvb2wgY2FuUHJvdmlkZVNwZWVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92
aWRlU3BlZWQ7IH0KKworcHJpdmF0ZToKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0
aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5KQorICAgICAgICA6IG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0
dWRlKGxhdGl0dWRlKQorICAgICAgICAsIG1fbG9uZ2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAg
LCBtX2FjY3VyYWN5KGFjY3VyYWN5KQorICAgICAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAgICAg
LCBtX2FsdGl0dWRlQWNjdXJhY3koMCkKKyAgICAgICAgLCBtX2hlYWRpbmcoMCkKKyAgICAgICAg
LCBtX3NwZWVkKDApCisgICAgICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUoZmFsc2UpCisgICAg
ICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeShmYWxzZSkKKyAgICAgICAgLCBtX2Nh
blByb3ZpZGVIZWFkaW5nKGZhbHNlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1lc3Rh
bXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQorICAg
ICAgICA6IG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0dWRlKGxhdGl0
dWRlKQorICAgICAgICAsIG1fbG9uZ2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAgLCBtX2FjY3Vy
YWN5KGFjY3VyYWN5KQorICAgICAgICAsIG1fYWx0aXR1ZGUoYWx0aXR1ZGUpCisgICAgICAgICwg
bV9hbHRpdHVkZUFjY3VyYWN5KGFsdGl0dWRlQWNjdXJhY3kpCisgICAgICAgICwgbV9oZWFkaW5n
KGhlYWRpbmcpCisgICAgICAgICwgbV9zcGVlZChzcGVlZCkKKyAgICAgICAgLCBtX2NhblByb3Zp
ZGVBbHRpdHVkZShwcm92aWRlc0FsdGl0dWRlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZUFsdGl0
dWRlQWNjdXJhY3kocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5KQorICAgICAgICAsIG1fY2FuUHJv
dmlkZUhlYWRpbmcocHJvdmlkZXNIZWFkaW5nKQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVk
KHByb3ZpZGVzU3BlZWQpCisgICAgeworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsK
KworICAgIGRvdWJsZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsKKyAgICBk
b3VibGUgbV9hY2N1cmFjeTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZTsKKyAgICBkb3VibGUgbV9h
bHRpdHVkZUFjY3VyYWN5OworICAgIGRvdWJsZSBtX2hlYWRpbmc7CisgICAgZG91YmxlIG1fc3Bl
ZWQ7CisKKyAgICBib29sIG1fY2FuUHJvdmlkZUFsdGl0dWRlOworICAgIGJvb2wgbV9jYW5Qcm92
aWRlQWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBib29sIG1fY2FuUHJvdmlkZUhlYWRpbmc7CisgICAg
Ym9vbCBtX2NhblByb3ZpZGVTcGVlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNlbmRpZiAvLyBH
ZW9sb2NhdGlvblBvc2l0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VvcG9zaXRpb25faAorI2RlZmluZSBHZW9wb3NpdGlvbl9oCisKKyNpbmNsdWRlICJD
b29yZGluYXRlcy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdlb3Bvc2l0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2VvcG9zaXRpb24+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzLCBET01UaW1lU3RhbXAgdGltZXN0YW1wKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9wb3NpdGlvbihjb29yZGluYXRl
cywgdGltZXN0YW1wKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gaXNv
bGF0ZWRDb3B5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3Jl
YXRlKG1fY29vcmRpbmF0ZXMtPmlzb2xhdGVkQ29weSgpLCBtX3RpbWVzdGFtcCk7CisgICAgfQor
CisgICAgRE9NVGltZVN0YW1wIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1w
OyB9CisgICAgQ29vcmRpbmF0ZXMqIGNvb3JkcygpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0
ZXMuZ2V0KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgR2VvcG9zaXRpb24oUGFzc1JlZlB0cjxD
b29yZGluYXRlcz4gY29vcmRpbmF0ZXMsIERPTVRpbWVTdGFtcCB0aW1lc3RhbXApCisgICAgICAg
IDogbV9jb29yZGluYXRlcyhjb29yZGluYXRlcykKKyAgICAgICAgLCBtX3RpbWVzdGFtcCh0aW1l
c3RhbXApCisgICAgeworICAgICAgICBBU1NFUlQobV9jb29yZGluYXRlcyk7CisgICAgfQorCisg
ICAgUmVmUHRyPENvb3JkaW5hdGVzPiBtX2Nvb3JkaW5hdGVzOworICAgIERPTVRpbWVTdGFtcCBt
X3RpbWVzdGFtcDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBHZW9wb3NpdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb3Bvc2l0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
K21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdF
T0xPQ0FUSU9OLAorICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICBdIEdlb3Bvc2l0aW9uIHsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENvb3JkaW5hdGVzIGNvb3JkczsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVRpbWVTdGFtcCB0aW1lc3RhbXA7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRp
b25DYWxsYmFjay5oCShyZXZpc2lvbiAxMDg0NDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UG9zaXRpb25DYWxsYmFjay5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBQb3NpdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgUG9zaXRpb25DYWxsYmFja19oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBHZW9wb3NpdGlvbjsKKworICAgIGNsYXNzIFBvc2l0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxQb3NpdGlvbkNhbGxiYWNrPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IH5Qb3NpdGlvbkNhbGxiYWNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChHZW9wb3NpdGlvbiopID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBQb3NpdGlvbkNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAkocmV2aXNp
b24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaWRs
OjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25D
YWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdF
T0xPQ0FUSU9OLAorICAgICAgICBDYWxsYmFjaworICAgIF0gUG9zaXRpb25DYWxsYmFjayB7Cisg
ICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gR2VvcG9zaXRpb24gcG9zaXRpb24pOworICAg
IH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9u
RXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3IuaAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1Bvc2l0aW9uRXJyb3IuaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UG9zaXRpb25FcnJvcl9oCisjZGVmaW5lIFBvc2l0aW9uRXJyb3JfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBvc2l0
aW9uRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkVycm9yPiB7CitwdWJsaWM6Cisg
ICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBQRVJNSVNTSU9OX0RFTklFRCA9IDEsCisgICAg
ICAgIFBPU0lUSU9OX1VOQVZBSUxBQkxFID0gMiwKKyAgICAgICAgVElNRU9VVCA9IDMKKyAgICB9
OworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZShFcnJv
ckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
UG9zaXRpb25FcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KKworICAgIEVycm9yQ29kZSBjb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9pZCBzZXRJc0ZhdGFsKGJvb2wgaXNGYXRh
bCkgeyBtX2lzRmF0YWwgPSBpc0ZhdGFsOyB9CisgICAgYm9vbCBpc0ZhdGFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ZhdGFsOyB9CisgICAgCitwcml2YXRlOgorICAgIFBvc2l0aW9uRXJyb3IoRXJy
b3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgCisgICAgICAgIDogbV9jb2RlKGNv
ZGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICwgbV9pc0ZhdGFsKGZh
bHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXJyb3JDb2RlIG1fY29kZTsKKyAgICBTdHJp
bmcgbV9tZXNzYWdlOworICAgIC8vIFdoZXRoZXIgdGhlIGVycm9yIGlzIGZhdGFsLCBzdWNoIHRo
YXQgbm8gcmVxdWVzdCBjYW4gZXZlciBvYnRhaW4gYSBnb29kCisgICAgLy8gcG9zaXRpb24gZml4
IGluIHRoZSBmdXR1cmUuCisgICAgYm9vbCBtX2lzRmF0YWw7Cit9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUG9zaXRpb25FcnJvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwJ
KHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9y
LmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uRXJyb3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGNvcmUgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9R0VPTE9DQVRJT04KKyAgICBdIFBvc2l0
aW9uRXJyb3IgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgY29k
ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOworCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUk1JU1NJT05fREVOSUVEID0gMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUE9TSVRJT05fVU5BVkFJTEFCTEUgPSAyOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUID0gMzsKKyAgICB9OworCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25F
cnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQb3NpdGlvbkVycm9yQ2FsbGJhY2tfaAorI2RlZmluZSBQb3NpdGlvbkVy
cm9yQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgUG9zaXRpb25FcnJvcjsKKworICAgIGNsYXNzIFBvc2l0
aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UG9zaXRpb25FcnJvckNhbGxiYWNr
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKikg
PSAwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBvc2l0
aW9uRXJyb3JDYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCShyZXZpc2lv
biAxMDg0NDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNr
LmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uRXJyb3JDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPUdFT0xPQ0FUSU9OLAorICAgICAgICBDYWxsYmFjaworICAgIF0gUG9zaXRpb25FcnJv
ckNhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBQb3NpdGlvbkVycm9y
IGVycm9yKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2Nh
dGlvbi9Qb3NpdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAxMDg0NDkpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmg6MTA4NDQ5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbk9wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUG9zaXRpb25PcHRpb25zX2gKKyNkZWZpbmUgUG9zaXRpb25P
cHRpb25zX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgUG9zaXRpb25P
cHRpb25zIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25PcHRpb25zPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgUG9zaXRpb25PcHRpb25zKCkpOyB9CisKKyAgICBib29sIGVuYWJsZUhpZ2hB
Y2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaEFjY3VyYWN5OyB9CisgICAgdm9pZCBzZXRF
bmFibGVIaWdoQWNjdXJhY3koYm9vbCBlbmFibGUpIHsgbV9oaWdoQWNjdXJhY3kgPSBlbmFibGU7
IH0KKyAgICBib29sIGhhc1RpbWVvdXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RpbWVvdXQ7IH0K
KyAgICBpbnQgdGltZW91dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzVGltZW91
dCgpKTsKKyAgICAgICAgcmV0dXJuIG1fdGltZW91dDsKKyAgICB9CisgICAgdm9pZCBzZXRUaW1l
b3V0KGludCB0aW1lb3V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRpbWVvdXQgPj0gMCk7Cisg
ICAgICAgIG1faGFzVGltZW91dCA9IHRydWU7CisgICAgICAgIG1fdGltZW91dCA9IHRpbWVvdXQ7
CisgICAgfQorICAgIGJvb2wgaGFzTWF4aW11bUFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF4
aW11bUFnZTsgfQorICAgIGludCBtYXhpbXVtQWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNNYXhpbXVtQWdlKCkpOworICAgICAgICByZXR1cm4gbV9tYXhpbXVtQWdlOworICAg
IH0KKyAgICB2b2lkIGNsZWFyTWF4aW11bUFnZSgpIHsgbV9oYXNNYXhpbXVtQWdlID0gZmFsc2U7
IH0KKyAgICB2b2lkIHNldE1heGltdW1BZ2UoaW50IGFnZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChhZ2UgPj0gMCk7CisgICAgICAgIG1faGFzTWF4aW11bUFnZSA9IHRydWU7CisgICAgICAgIG1f
bWF4aW11bUFnZSA9IGFnZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFBvc2l0aW9uT3B0
aW9ucygpCisgICAgICAgIDogbV9oaWdoQWNjdXJhY3koZmFsc2UpCisgICAgICAgICwgbV9oYXNU
aW1lb3V0KGZhbHNlKQorICAgIHsKKyAgICAgICAgc2V0TWF4aW11bUFnZSgwKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBtX2hpZ2hBY2N1cmFjeTsKKyAgICBib29sIG1faGFzVGltZW91dDsKKyAg
ICBpbnQgbV90aW1lb3V0OworICAgIGJvb2wgbV9oYXNNYXhpbXVtQWdlOworICAgIGludCBtX21h
eGltdW1BZ2U7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UG9zaXRpb25PcHRpb25zX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQwNTcsNiArMjQw
NTcsMzQgQEAKIAkJCQlOYW1lPSJnZW9sb2NhdGlvbiIKIAkJCQk+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGdlb2xvY2F0aW9uXEdlb2xvY2F0aW9uLmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRpb24uaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRpb25Db250cm9sbGVy
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXGdlb2xvY2F0aW9uXEdlb2xvY2F0aW9uRXJyb3IuaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRp
b25cR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxHZW9wb3NpdGlvbi5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1xnZW9sb2NhdGlvblxOYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CkBAIC0yNDA2NCw2ICsyNDA5MiwyMiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcZ2VvbG9jYXRpb25cTmF2aWdhdG9yR2VvbG9jYXRpb24uaCIKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9j
YXRpb25cUG9zaXRpb25DYWxsYmFjay5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxQb3NpdGlvbkVycm9y
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXGdlb2xvY2F0aW9uXFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9s
b2NhdGlvblxQb3NpdGlvbk9wdGlvbnMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJCTwvRmls
dGVyPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgpAQCAtMjU0ODYsMzggKzI1NTMwLDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2Vv
bG9jYXRpb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvbG9jYXRpb25DbGllbnQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxHZW9sb2NhdGlv
bkNvbnRyb2xsZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uRXJyb3Iu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFn
ZVxHZW9sb2NhdGlvblBvc2l0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvcG9zaXRpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxHcm91cFNldHRpbmdzLmNwcCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNTY3OCwyMiArMjU2OTQsNiBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBvc2l0aW9uQ2FsbGJh
Y2suaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGFnZVxQb3NpdGlvbkVycm9yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUG9zaXRpb25PcHRp
b25zLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBhZ2VcUHJpbnRDb250ZXh0LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzNDMsNiArMzM0MywxNyBAQAogCQk5NzNEQzY0MDE0
NUE5NDA5MDAyODQyQzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzNEQzYzRTE0NUE5NDA5MDAyODQy
QzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTczRTMyNTYxMDg4M0I3QzAwNUJDNDkzIC8qIFJl
c291cmNlTG9hZE5vdGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3Rp
Zmllci5jcHAgKi87IH07CiAJCTk3M0UzMjU3MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTczRTMyNTUxMDg4M0I3QzAwNUJDNDkzIC8qIFJlc291cmNlTG9hZE5vdGlmaWVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc0NkFGMjMx
NEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NDZBRjEzMTRGNERERTYwMDNFN0E3MCAvKiBHZW9s
b2NhdGlvbi5jcHAgKi87IH07CisJCTk3NDZBRjI0MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc0
NkFGMTQxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc0NkFGMjYxNEY0RERFNjAwM0U3QTcw
IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYxNjE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCAqLzsgfTsKKwkJOTc0NkFGMjcxNEY0RERFNjAwM0U3QTcwIC8qIEdl
b2xvY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTc0NkFGMTcxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJv
bGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTk3NDZBRjI4MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYxODE0RjREREU2MDAz
RTdBNzAgLyogR2VvbG9jYXRpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTk3NDZBRjI5MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2Nh
dGlvblBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzQ2QUYxOTE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk3NDZBRjJB
MTRGNERERTYwMDNFN0E3MCAvKiBHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc0NkFGMUExNEY0RERFNjAwM0U3QTcwIC8qIEdlb3Bv
c2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJOTc0NkFGMkMxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NDZBRjFDMTRGNERERTYw
MDNFN0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc0NkFGMkUxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0
aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NDZBRjFFMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTc0NkFGMzAxNEY0RERFNjAw
M0U3QTcwIC8qIFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc0NkFGMjAxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0
aW9uRXJyb3JDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTk3NDZBRjMyMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbk9wdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NDZBRjIy
MTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbk9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5NzRBODYyMjE0QjdBREJCMDAzRkRDNzYg
LyogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NEE4NjIwMTRCN0FEQkIwMDNGREM3NiAvKiBGcmFtZURl
c3RydWN0aW9uT2JzZXJ2ZXIuY3BwICovOyB9OwogCQk5NzRBODYyMzE0QjdBREJCMDAzRkRDNzYg
LyogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5NzRBODYyMTE0QjdBREJCMDAzRkRDNzYgLyogRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJOTc0RDJEQTQxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NEQyREEy
MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5jcHAgKi87IH07CkBAIC01MTQ5LDEx
ICs1MTYwLDcgQEAKIAkJQkM1M0RBNjAxMTQzMTQxQTAwMEQ4MTdFIC8qIERPTU9iamVjdEhhc2hU
YWJsZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM1M0RBNUYxMTQzMTQxQTAwMEQ4MTdFIC8qIERPTU9iamVjdEhhc2hUYWJsZU1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDNTNEQTYyMTE0
MzE0QkQwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1M0RBNjExMTQzMTRCRDAwMEQ4MTdF
IC8qIERPTU9iamVjdEhhc2hUYWJsZU1hcC5jcHAgKi87IH07CiAJCUJDNTNEQUM3MTE0MzMwNjQw
MDBEODE3RSAvKiBKU0RPTVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM1M0RBQzYxMTQzMzA2NDAwMEQ4MTdFIC8qIEpTRE9NV3JhcHBl
ci5jcHAgKi87IH07Ci0JCUJDNTZDQjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM1NkNCMUMxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAg
Ki87IH07Ci0JCUJDNTZDQjIyMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZD
QjFEMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzU2Q0IyMzEwRDVBQzgw
MDBBNzdDNjQgLyogR2VvbG9jYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2Nh
dGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCUJDNTZDQjI0MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU2Q0IxRjEwRDVB
QzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDNTZDQjI1MTBENUFDODAwMEE3N0M2NCAvKiBH
ZW9sb2NhdGlvblBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzU2Q0IyMDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
NTgyM0Y1MEMwQTk4REYwMDUzRjFCNSAvKiBKU0hUTUxFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTgyM0Y0MEMwQTk4REYw
MDUzRjFCNSAvKiBKU0hUTUxFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJQkM1ODI1RjMwQzBC
ODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4MjVGMjBDMEI4OTM4MDA1
M0YxQjUgLyogSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJQkM1ODhB
RjAwQkZBNkNGOTAwRUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4OEFFRjBCRkE2Q0Y5MDBFRTY3
OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCAqLzsgfTsKQEAgLTYyMzcsMTMgKzYyNDQsNiBA
QAogCQlGRTZGRDQ4RTBGNjc2RTkzMDAwOTI4NzMgLyogSlNDb29yZGluYXRlcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU2RkQ0OEMwRjY3NkU5MzAw
MDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuaCAqLzsgfTsKIAkJRkU3MDBERDEwRjkyRDgxQTAwOEUy
QkZFIC8qIEpTQ29vcmRpbmF0ZXNDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU3MDBERDAwRjkyRDgxQTAwOEUyQkZFIC8qIEpTQ29vcmRp
bmF0ZXNDdXN0b20uY3BwICovOyB9OwogCQlGRTgwRDdBQjBFOUMxRUQyMDAwRDZGNzUgLyogSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGRTgwRDdBNjBFOUMxRUQyMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbkN1c3Rv
bS5jcHAgKi87IH07Ci0JCUZFODBEN0M1MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdC
NzBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uY3BwICovOyB9OwotCQlGRTgwRDdDNjBF
OUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0I4MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CUZFODBEN0M5MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QkIwRTlDMUYyNTAwMEQ2Rjc1
IC8qIEdlb3Bvc2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJRkU4MEQ3Q0IwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JE
MEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU4MEQ3Q0QwRTlDMUYyNTAwMEQ2Rjc1
IC8qIFBvc2l0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFODBEN0JGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRkU4MEQ3Q0Yw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QzEwRTlDMUYyNTAwMEQ2Rjc1
IC8qIFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCUZFODBEN0QxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlv
bk9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZFODBEN0MzMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTgwREE2MzBFOUM0NzAz
MDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwREE1RjBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2Nh
dGlvbi5jcHAgKi87IH07CiAJCUZFODBEQTY0MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgw
REE2MDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oICovOyB9OwogCQlGRTgwREE2
NTBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwREE2MTBFOUM0NzAzMDAwRDZGNzUgLyog
SlNHZW9wb3NpdGlvbi5jcHAgKi87IH07CkBAIC04NTE2LDggKzg1MTYsNiBAQAogCQk1OTEzQTI0
MDEzRDQ5RUJBMDBGNUIwNUMgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElkZW50aWZpZXJzRmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1OTMwOUExMDExRjRBRTU4MDAyNTA2MDMgLyogRGV2aWNlT3JpZW50YXRp
b25DbGllbnRNb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERl
dmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5jcHA7IHBhdGggPSBtb2NrL0RldmljZU9yaWVudGF0
aW9uQ2xpZW50TW9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5MzA5QTEy
MTFGNEFFNkEwMDI1MDYwMyAvKiBEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmg7
IHBhdGggPSBtb2NrL0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1OTNBQjY5NzEzNTVDRDkyMDBGQzgyMTEgLyogUG9zaXRpb25DYWxs
YmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUG9zaXRpb25DYWxsYmFjay5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5M0FCNjk5MTM1NUNEQUUwMEZDODIxMSAvKiBQ
b3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBvc2l0aW9u
RXJyb3JDYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5NThGMUNC
MTM0MzkxN0MwMDgwQjMxRiAvKiBYTUxWaWV3ZXIuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBh
dGggPSBYTUxWaWV3ZXIuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTU4RjFD
QzEzNDM5MTdDMDA4MEIzMUYgLyogWE1MVmlld2VyLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gWE1MVmlld2VyLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1OTY5NTA4MTEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSm9iamVjdFdyYXBwZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMjE0LDYgKzEwMjEyLDIyIEBACiAJCTk3M0RDNjNFMTQ1QTk0
MDkwMDI4NDJDMiAvKiBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTk3M0UzMjU0MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNv
dXJjZUxvYWROb3RpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3M0Uz
MjU1MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWROb3RpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5NzQ2QUYxMzE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gR2VvbG9jYXRpb24u
Y3BwOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3NDZBRjE0MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2Nh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbi5oOyBw
YXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzQ2QUYxNTE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb24uaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEdlb2xvY2F0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMv
Z2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzQ2QUYxNjE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdlb2xvY2F0aW9uQ29udHJvbGxl
ci5jcHA7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3NDZBRjE3MTRGNERERTYwMDNFN0E3
MCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gR2VvbG9jYXRpb25Db250cm9sbGVyLmg7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5
NzQ2QUYxODE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25FcnJvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9sb2NhdGlvbkVycm9yLmg7IHBhdGggPSBNb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTc0NkFGMTkxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VvbG9jYXRpb25Qb3NpdGlvbi5oOyBw
YXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBvc2l0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3NDZBRjFBMTRGNERERTYwMDNFN0E3MCAvKiBHZW9wb3Np
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBHZW9wb3NpdGlvbi5oOyBw
YXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzQ2QUYxQjE0RjREREU2MDAzRTdBNzAgLyogR2VvcG9zaXRpb24uaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IEdlb3Bvc2l0aW9uLmlkbDsgcGF0aCA9IE1vZHVsZXMv
Z2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzQ2QUYxQzE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25DYWxsYmFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQb3NpdGlvbkNhbGxiYWNrLmg7IHBhdGggPSBNb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTc0NkFGMUQxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uQ2FsbGJhY2suaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFBvc2l0aW9uQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9k
dWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTc0NkFGMUUxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uRXJyb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUG9zaXRpb25FcnJvci5oOyBwYXRoID0g
TW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTk3NDZBRjFGMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9yLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBQb3NpdGlvbkVycm9yLmlkbDsgcGF0aCA9IE1vZHVsZXMv
Z2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3NDZBRjIwMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUG9zaXRpb25FcnJvckNhbGxiYWNrLmg7
IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdBNzAgLyogUG9z
aXRpb25FcnJvckNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBQb3NpdGlvbkVy
cm9yQ2FsbGJhY2suaWRsOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9y
Q2FsbGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzQ2QUYyMjE0RjRE
REU2MDAzRTdBNzAgLyogUG9zaXRpb25PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFBvc2l0aW9uT3B0aW9ucy5oOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9Q
b3NpdGlvbk9wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc0QTg2MjAx
NEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzRBODYyMTE0QjdBREJCMDAzRkRDNzYg
LyogRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5NzREMkRBMjE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2VjdXJpdHlQb2xpY3kuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIwODMsMTEgKzEyMDk3LDcgQEAKIAkJQkM1
M0RBNUYxMTQzMTQxQTAwMEQ4MTdFIC8qIERPTU9iamVjdEhhc2hUYWJsZU1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01PYmplY3RIYXNoVGFibGVNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1M0RBNjExMTQzMTRCRDAwMEQ4MTdFIC8qIERPTU9i
amVjdEhhc2hUYWJsZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBET01PYmplY3RIYXNoVGFibGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzUzREFDNjExNDMzMDY0MDAwRDgxN0UgLyogSlNET01XcmFwcGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NV3JhcHBlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUJDNTZDQjFDMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlv
bkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2Vv
bG9jYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM1
NkNCMUQxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1NkNCMUUxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xv
Y2F0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0
aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNTZDQjFGMTBENUFD
ODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdlb2xvY2F0aW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQkM1NkNCMjAxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25Qb3NpdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzU4MjNGNDBDMEE5OERGMDA1M0YxQjUgLyogSlNI
VE1MRWxlbWVudEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0hUTUxFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8qIEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NTU1N0eWxlRGVjbGFy
YXRpb25DdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzU4OEFFRjBC
RkE2Q0Y5MDBFRTY3OUUgLyogSFRNTFBhcnNlckVycm9yQ29kZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQYXJzZXJFcnJvckNvZGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzMyNCwxNiArMTMzMzQsNiBAQAogCQlGRTZGRDQ4QzBGNjc2RTkz
MDAwOTI4NzMgLyogSlNDb29yZGluYXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU0Nvb3JkaW5hdGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNzAw
REQwMEY5MkQ4MUEwMDhFMkJGRSAvKiBKU0Nvb3JkaW5hdGVzQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29vcmRpbmF0ZXNDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwRDdBNjBFOUMxRUQyMDAwRDZGNzUgLyogSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkU4MEQ3QjcwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlb2xvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkU4MEQ3QjgwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0I5MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2Nh
dGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2VvbG9jYXRpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGRTgwRDdCQjBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9z
aXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VvcG9zaXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU4MEQ3QkMwRTlDMUYyNTAwMEQ2Rjc1IC8q
IEdlb3Bvc2l0aW9uLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBHZW9wb3NpdGlvbi5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0JEMEU5QzFGMjUwMDBENkY3NSAv
KiBQb3NpdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBv
c2l0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU4MEQ3QkYw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUG9zaXRpb25FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlGRTgwRDdDMDBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUG9zaXRpb25FcnJvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZFODBEN0MxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25FcnJvckNhbGxiYWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0MzMEU5QzFGMjUwMDBENkY3
NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UG9zaXRpb25PcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODBEQTVG
MEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2VvbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTgwREE2MDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dlb2xvY2F0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFODBEQTYxMEU5QzQ3MDMwMDBENkY3NSAvKiBKU0dlb3Bv
c2l0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2VvcG9z
aXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUyNTgsMTYgKzE1MjU4
LDcgQEAKIAkJCQk2NUEyMTQ4MzA5N0EzRjUzMDBCOTA1MEEgLyogRnJhbWVUcmVlLmggKi8sCiAJ
CQkJNjVDQkZFRjcwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5jcHAgKi8sCiAJCQkJNjVD
QkZFRjgwOTc0RjYwNzAwMURBQzI1IC8qIEZyYW1lVmlldy5oICovLAotCQkJCUZFODBEN0I3MEU5
QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5jcHAgKi8sCi0JCQkJRkU4MEQ3QjgwRTlDMUYy
NTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmggKi8sCi0JCQkJRkU4MEQ3QjkwRTlDMUYyNTAwMEQ2
Rjc1IC8qIEdlb2xvY2F0aW9uLmlkbCAqLywKIAkJCQlCQzU2Q0IxRTEwRDVBQzgwMDBBNzdDNjQg
LyogR2VvbG9jYXRpb25DbGllbnQuaCAqLywKLQkJCQlCQzU2Q0IxQzEwRDVBQzgwMDBBNzdDNjQg
LyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQlCQzU2Q0IxRDEwRDVBQzgwMDBB
NzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmggKi8sCi0JCQkJQkM1NkNCMUYxMEQ1QUM4
MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uRXJyb3IuaCAqLywKLQkJCQlCQzU2Q0IyMDEwRDVBQzgw
MDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oICovLAotCQkJCUZFODBEN0JCMEU5QzFG
MjUwMDBENkY3NSAvKiBHZW9wb3NpdGlvbi5oICovLAotCQkJCUZFODBEN0JDMEU5QzFGMjUwMDBE
NkY3NSAvKiBHZW9wb3NpdGlvbi5pZGwgKi8sCiAJCQkJQzUwQjU2MTQxMjExOUQyMzAwOEI0NkUw
IC8qIEdyb3VwU2V0dGluZ3MuY3BwICovLAogCQkJCUM1MEI1NjE1MTIxMTlEMjMwMDhCNDZFMCAv
KiBHcm91cFNldHRpbmdzLmggKi8sCiAJCQkJQkM5NEQxNTAwQzI3NUM4QjAwNkJDNjE3IC8qIEhp
c3RvcnkuY3BwICovLApAQCAtMTUzMTUsMTMgKzE1MzA2LDYgQEAKIAkJCQk4QUY0RTU1ODExREM1
QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuY3BwICovLAogCQkJCThBRjRFNTU5MTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovLAogCQkJCThBRjRFNTVBMTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5pZGwgKi8sCi0JCQkJRkU4MEQ3QkQw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uQ2FsbGJhY2suaCAqLywKLQkJCQk1OTNBQjY5NzEz
NTVDRDkyMDBGQzgyMTEgLyogUG9zaXRpb25DYWxsYmFjay5pZGwgKi8sCi0JCQkJRkU4MEQ3QkYw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaCAqLywKLQkJCQlGRTgwRDdDMDBFOUMx
RjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5pZGwgKi8sCi0JCQkJRkU4MEQ3QzEwRTlDMUYy
NTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oICovLAotCQkJCTU5M0FCNjk5MTM1
NUNEQUUwMEZDODIxMSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsICovLAotCQkJCUZFODBE
N0MzMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCAqLywKIAkJCQlCNzc2RDQz
QzExMDQ1Mjc1MDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmNwcCAqLywKIAkJCQlCNzc2RDQzQTEx
MDQ1MjVEMDBCRUIwRUMgLyogUHJpbnRDb250ZXh0LmggKi8sCiAJCQkJQkNFQzAxQkEwQzI3NERB
QzAwOUY0RUM5IC8qIFNjcmVlbi5jcHAgKi8sCkBAIC0xNzEwNSw5ICsxNzA4OSwyNSBAQAogCQk5
NzExNDVGRjE0RUYwMDc5MDA2NzRGRDkgLyogZ2VvbG9jYXRpb24gKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTk3NDZBRjEzMTRGNERERTYwMDNFN0E3MCAv
KiBHZW9sb2NhdGlvbi5jcHAgKi8sCisJCQkJOTc0NkFGMTQxNEY0RERFNjAwM0U3QTcwIC8qIEdl
b2xvY2F0aW9uLmggKi8sCisJCQkJOTc0NkFGMTUxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0
aW9uLmlkbCAqLywKKwkJCQk5NzQ2QUYxNjE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25D
b250cm9sbGVyLmNwcCAqLywKKwkJCQk5NzQ2QUYxNzE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9j
YXRpb25Db250cm9sbGVyLmggKi8sCisJCQkJOTc0NkFGMTgxNEY0RERFNjAwM0U3QTcwIC8qIEdl
b2xvY2F0aW9uRXJyb3IuaCAqLywKKwkJCQk5NzQ2QUYxOTE0RjREREU2MDAzRTdBNzAgLyogR2Vv
bG9jYXRpb25Qb3NpdGlvbi5oICovLAorCQkJCTk3NDZBRjFBMTRGNERERTYwMDNFN0E3MCAvKiBH
ZW9wb3NpdGlvbi5oICovLAorCQkJCTk3NDZBRjFCMTRGNERERTYwMDNFN0E3MCAvKiBHZW9wb3Np
dGlvbi5pZGwgKi8sCiAJCQkJOTcxMTQ2MDAxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdl
b2xvY2F0aW9uLmNwcCAqLywKIAkJCQk5NzExNDYwMTE0RUYwMDlBMDA2NzRGRDkgLyogTmF2aWdh
dG9yR2VvbG9jYXRpb24uaCAqLywKIAkJCQk5NzExNDYwMjE0RUYwMDlBMDA2NzRGRDkgLyogTmF2
aWdhdG9yR2VvbG9jYXRpb24uaWRsICovLAorCQkJCTk3NDZBRjFDMTRGNERERTYwMDNFN0E3MCAv
KiBQb3NpdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJOTc0NkFGMUQxNEY0RERFNjAwM0U3QTcwIC8q
IFBvc2l0aW9uQ2FsbGJhY2suaWRsICovLAorCQkJCTk3NDZBRjFFMTRGNERERTYwMDNFN0E3MCAv
KiBQb3NpdGlvbkVycm9yLmggKi8sCisJCQkJOTc0NkFGMUYxNEY0RERFNjAwM0U3QTcwIC8qIFBv
c2l0aW9uRXJyb3IuaWRsICovLAorCQkJCTk3NDZBRjIwMTRGNERERTYwMDNFN0E3MCAvKiBQb3Np
dGlvbkVycm9yQ2FsbGJhY2suaCAqLywKKwkJCQk5NzQ2QUYyMTE0RjREREU2MDAzRTdBNzAgLyog
UG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbCAqLywKKwkJCQk5NzQ2QUYyMjE0RjREREU2MDAzRTdB
NzAgLyogUG9zaXRpb25PcHRpb25zLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGdlb2xvY2F0aW9u
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyMzkyLDEzICsyMjM5MiwxMyBAQAog
CQkJCTJENDgxRjA0MTQ2QjVDNkIwMEFBNzgzNCAvKiBHZW5lcmF0b3JHZW5lcmF0ZWRJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTYyMkE4RkYxMjJDNDRBNjAwQTc4NUIzIC8qIEdlbmVyaWNC
aW5kaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzIwQjBBMTE0RDMzMjM1MDA2NDI5NTUgLyog
R2VuZXJpY0V2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZFODBEN0M2MEU5QzFGMjUw
MDBENkY3NSAvKiBHZW9sb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTc0NkFGMjQxNEY0
RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzU2Q0Iy
MzEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA1MkJGQ0VCMTI4QUJGMjEwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNsaWVudE1vY2suaCBp
biBIZWFkZXJzICovLAotCQkJCUJDNTZDQjIyMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlv
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDNTZDQjI0MTBENUFDODAwMEE3N0M2
NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzU2Q0IyNTEwRDVB
QzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkU4MEQ3QzkwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmggaW4gSGVhZGVycyAqLywK
KwkJCQk5NzQ2QUYyNzE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk5NzQ2QUYyODE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRp
b25FcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTc0NkFGMjkxNEY0RERFNjAwM0U3QTcwIC8q
IEdlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTk3NDZBRjJBMTRGNERE
RTYwMDNFN0E3MCAvKiBHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2QkJEMEYx
MzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREE2QzBE
MDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1RDRB
QTdBMTE2QkFGQjYwMDY5Q0E5MyAvKiBHbHlwaE1ldHJpY3NNYXAuaCBpbiBIZWFkZXJzICovLApA
QCAtMjM0NDgsMTEgKzIzNDQ4LDExIEBACiAJCQkJRDM5RDAwNkQxMUY4RTMwODAwNjA0MUYyIC8q
IFBvcHVwTWVudU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMzQkUxMkIwRTk4MDkyRjAwODM1
NTg4IC8qIFBvcHVwTWVudVN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOTlERTA4MjQ1
RTU5MDAxRTlBQkMgLyogUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUZFODBEN0NCMEU5
QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKLQkJCQlG
RTgwRDdDRDBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRkU4MEQ3Q0YwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3JDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJOTc0NkFGMkMxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTk3NDZBRjJFMTRGNERERTYwMDNFN0E3MCAv
KiBQb3NpdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzQ2QUYzMDE0RjREREU2MDAz
RTdBNzAgLyogUG9zaXRpb25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzkx
OUMyNDBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJRkU4MEQ3RDEwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJOTc0NkFGMzIxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBGMkE0NDExMzg2OUFBQjAwNjZDNTM0IC8qIHByZXBy
b2Nlc3Nvci5wbSBpbiBIZWFkZXJzICovLAogCQkJCUI3MUZFNkRGMTEwOTFDQjMwMERBRUY3NyAv
KiBQcmludENvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3RUJDMEExOTQ1RDAwMEE4
RUY1RiAvKiBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjU0NjAs
OSArMjU0NjAsOSBAQAogCQkJCTE0MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xs
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ0ODFGMDMxNDZCNUM2NTAwQUE3ODM0IC8qIEdl
bmVyYXRvckdlbmVyYXRlZEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3MjBCMEEwMTRE
MzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQlGRTgwRDdDNTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJOTc0NkFGMjMxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA1MkJGQ0U5MTI4QUJGMTUwMEZEMzM4RCAvKiBHZW9sb2NhdGlvbkNs
aWVudE1vY2suY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM1NkNCMjExMEQ1QUM4MDAwQTc3QzY0
IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5NzQ2QUYy
NjE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyQzNEQTZEMEQwMDZDRDYwMEVGNkYyNiAvKiBHbHlwaFBhZ2VUcmVlTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM4MzBEMDBBNUMxMDAzMDA3NEQgLyogR2x5cGhQ
YWdlVHJlZU5vZGVNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1M0M2MDgwREE1NkM1NzAw
MjFFQjVEIC8qIEdyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvbi5jcHAJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4K
LSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLQotI2lmIEVOQUJMRShHRU9MT0NBVElPTikK
LQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlv
bi5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQot
I2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0jaW5jbHVkZSAiQ29vcmRpbmF0
ZXMuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJHZW9s
b2NhdGlvbkVycm9yLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgotI2luY2x1
ZGUgIlBvc2l0aW9uRXJyb3IuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBjb25zdCBjaGFyIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2VbXSA9ICJVc2VyIGRl
bmllZCBHZW9sb2NhdGlvbiI7Ci1zdGF0aWMgY29uc3QgY2hhciBmYWlsZWRUb1N0YXJ0U2Vydmlj
ZUVycm9yTWVzc2FnZVtdID0gIkZhaWxlZCB0byBzdGFydCBHZW9sb2NhdGlvbiBzZXJ2aWNlIjsK
LXN0YXRpYyBjb25zdCBjaGFyIGZyYW1lbGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlW10gPSAiR2Vv
bG9jYXRpb24gY2Fubm90IGJlIHVzZWQgaW4gZnJhbWVsZXNzIGRvY3VtZW50cyI7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgZmlyc3RBdmFpbGFibGVXYXRjaElkID0gMTsKLQotI2lmIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCi0KLXN0YXRpYyBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBj
cmVhdGVHZW9wb3NpdGlvbihHZW9sb2NhdGlvblBvc2l0aW9uKiBwb3NpdGlvbikKLXsKLSAgICBp
ZiAoIXBvc2l0aW9uKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZWZQdHI8Q29vcmRp
bmF0ZXM+IGNvb3JkaW5hdGVzID0gQ29vcmRpbmF0ZXM6OmNyZWF0ZShwb3NpdGlvbi0+bGF0aXR1
ZGUoKSwgcG9zaXRpb24tPmxvbmdpdHVkZSgpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZUFsdGl0dWRl
KCksIHBvc2l0aW9uLT5hbHRpdHVkZSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi0+YWNjdXJhY3koKSwgcG9zaXRp
b24tPmNhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KCksIHBvc2l0aW9uLT5hbHRpdHVkZUFjY3Vy
YWN5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9zaXRpb24tPmNhblByb3ZpZGVIZWFkaW5nKCksIHBvc2l0aW9uLT5oZWFkaW5n
KCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlU3BlZWQoKSwgcG9zaXRpb24tPnNwZWVkKCkpOwotICAg
IHJldHVybiBHZW9wb3NpdGlvbjo6Y3JlYXRlKGNvb3JkaW5hdGVzLnJlbGVhc2UoKSwgY29udmVy
dFNlY29uZHNUb0RPTVRpbWVTdGFtcChwb3NpdGlvbi0+dGltZXN0YW1wKCkpKTsKLX0KLQotc3Rh
dGljIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gY3JlYXRlUG9zaXRpb25FcnJvcihHZW9sb2Nh
dGlvbkVycm9yKiBlcnJvcikKLXsKLSAgICBQb3NpdGlvbkVycm9yOjpFcnJvckNvZGUgY29kZSA9
IFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VOQVZBSUxBQkxFOwotICAgIHN3aXRjaCAoZXJyb3It
PmNvZGUoKSkgewotICAgIGNhc2UgR2VvbG9jYXRpb25FcnJvcjo6UGVybWlzc2lvbkRlbmllZDoK
LSAgICAgICAgY29kZSA9IFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVEOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdlb2xvY2F0aW9uRXJyb3I6OlBvc2l0aW9uVW5hdmFpbGFibGU6
Ci0gICAgICAgIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShj
b2RlLCBlcnJvci0+bWVzc2FnZSgpKTsKLX0KLSNlbmRpZgotCi1HZW9sb2NhdGlvbjo6R2VvTm90
aWZpZXI6Okdlb05vdGlmaWVyKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiwgUGFzc1JlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0
aW9ucykKLSAgICA6IG1fZ2VvbG9jYXRpb24oZ2VvbG9jYXRpb24pCi0gICAgLCBtX3N1Y2Nlc3ND
YWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxs
YmFjaykKLSAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQotICAgICwgbV90aW1lcih0aGlzLCAmR2Vv
bG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZpcmVkKQotICAgICwgbV91c2VDYWNoZWRQb3Np
dGlvbihmYWxzZSkKLXsKLSAgICBBU1NFUlQobV9nZW9sb2NhdGlvbik7Ci0gICAgQVNTRVJUKG1f
c3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAvLyBJZiBubyBvcHRpb25zIHdlcmUgc3VwcGxpZWQgZnJv
bSBKUywgd2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCBhIGRlZmF1bHQgc2V0Ci0gICAgLy8gb2Ygb3B0
aW9ucyBpbiBKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcC4KLSAgICBBU1NFUlQobV9vcHRpb25zKTsK
LX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldEZhdGFsRXJyb3IoUGFzc1Jl
ZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJvcikKLXsKLSAgICAvLyBJZiBhIGZhdGFsIGVycm9yIGhh
cyBhbHJlYWR5IGJlZW4gc2V0LCBzdGljayB3aXRoIGl0LiBUaGlzIG1ha2VzIHN1cmUgdGhhdAot
ICAgIC8vIHdoZW4gcGVybWlzc2lvbiBpcyBkZW5pZWQsIHRoaXMgaXMgdGhlIGVycm9yIHJlcG9y
dGVkLCBhcyByZXF1aXJlZCBieSB0aGUKLSAgICAvLyBzcGVjLgotICAgIGlmIChtX2ZhdGFsRXJy
b3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZmF0YWxFcnJvciA9IGVycm9yOwotICAgIC8v
IEFuIGV4aXN0aW5nIHRpbWVyIG1heSBub3QgaGF2ZSBhIHplcm8gdGltZW91dC4KLSAgICBtX3Rp
bWVyLnN0b3AoKTsKLSAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBHZW9s
b2NhdGlvbjo6R2VvTm90aWZpZXI6OnNldFVzZUNhY2hlZFBvc2l0aW9uKCkKLXsKLSAgICBtX3Vz
ZUNhY2hlZFBvc2l0aW9uID0gdHJ1ZTsKLSAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0K
LQotYm9vbCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6Omhhc1plcm9UaW1lb3V0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9vcHRpb25zLT5oYXNUaW1lb3V0KCkgJiYgbV9vcHRpb25zLT50aW1l
b3V0KCkgPT0gMDsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXI6OnJ1blN1Y2Nl
c3NDYWxsYmFjayhHZW9wb3NpdGlvbiogcG9zaXRpb24pCi17Ci0gICAgbV9zdWNjZXNzQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KHBvc2l0aW9uKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6R2VvTm90
aWZpZXI6OnN0YXJ0VGltZXJJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fb3B0aW9ucy0+aGFzVGlt
ZW91dCgpKQotICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChtX29wdGlvbnMtPnRpbWVvdXQo
KSAvIDEwMDAuMCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjp0aW1lckZp
cmVkKFRpbWVyPEdlb05vdGlmaWVyPiopCi17Ci0gICAgbV90aW1lci5zdG9wKCk7Ci0KLSAgICAv
LyBQcm90ZWN0IHRoaXMgR2VvTm90aWZpZXIgb2JqZWN0LCBzaW5jZSBpdAotICAgIC8vIGNvdWxk
IGJlIGRlbGV0ZWQgYnkgYSBjYWxsIHRvIGNsZWFyV2F0Y2ggaW4gYSBjYWxsYmFjay4KLSAgICBS
ZWZQdHI8R2VvTm90aWZpZXI+IHByb3RlY3QodGhpcyk7Ci0KLSAgICAvLyBUZXN0IGZvciBmYXRh
bCBlcnJvciBmaXJzdC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIEZy
YW1lIGlzCi0gICAgLy8gZGlzY29ubmVjdGVkIGFuZCByZXF1ZXN0cyBhcmUgY2FuY2VsbGVkLgot
ICAgIGlmIChtX2ZhdGFsRXJyb3IpIHsKLSAgICAgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykKLSAg
ICAgICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV9mYXRhbEVycm9yLmdldCgp
KTsKLSAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRoaXMgbm90aWZpZXIgdG8gYmUgZGVsZXRl
ZC4KLSAgICAgICAgbV9nZW9sb2NhdGlvbi0+ZmF0YWxFcnJvck9jY3VycmVkKHRoaXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fdXNlQ2FjaGVkUG9zaXRpb24pIHsKLSAg
ICAgICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBwb3NpdGlvbiBmbGFnIGluIGNhc2UgdGhpcyBpcyBh
IHdhdGNoIHJlcXVlc3QsIHdoaWNoCi0gICAgICAgIC8vIHdpbGwgY29udGludWUgdG8gcnVuLgot
ICAgICAgICBtX3VzZUNhY2hlZFBvc2l0aW9uID0gZmFsc2U7Ci0gICAgICAgIG1fZ2VvbG9jYXRp
b24tPnJlcXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24odGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7Ci0gICAgICAgIFJlZlB0cjxQb3NpdGlv
bkVycm9yPiBlcnJvciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpUSU1F
T1VULCAiVGltZW91dCBleHBpcmVkIik7Ci0gICAgICAgIG1fZXJyb3JDYWxsYmFjay0+aGFuZGxl
RXZlbnQoZXJyb3IuZ2V0KCkpOwotICAgIH0KLSAgICBtX2dlb2xvY2F0aW9uLT5yZXF1ZXN0VGlt
ZWRPdXQodGhpcyk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpzZXQoaW50IGlk
LCBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPiBwcnBOb3RpZmllcikKLXsKLSAgICBBU1NFUlQoaWQg
PiAwKTsKLSAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gcHJwTm90aWZpZXI7Ci0K
LSAgICBtX2lkVG9Ob3RpZmllck1hcC5zZXQoaWQsIG5vdGlmaWVyLmdldCgpKTsKLSAgICBtX25v
dGlmaWVyVG9JZE1hcC5zZXQobm90aWZpZXIucmVsZWFzZSgpLCBpZCk7Ci19Ci0KLUdlb2xvY2F0
aW9uOjpHZW9Ob3RpZmllciogR2VvbG9jYXRpb246OldhdGNoZXJzOjpmaW5kKGludCBpZCkKLXsK
LSAgICBBU1NFUlQoaWQgPiAwKTsKLSAgICBJZFRvTm90aWZpZXJNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lkVG9Ob3RpZmllck1hcC5maW5kKGlkKTsKLSAgICBpZiAoaXRlciA9PSBtX2lkVG9Ob3Rp
Zmllck1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGl0ZXItPnNlY29u
ZC5nZXQoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OnJlbW92ZShpbnQgaWQp
Ci17Ci0gICAgQVNTRVJUKGlkID4gMCk7Ci0gICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBp
dGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9pZFRv
Tm90aWZpZXJNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX25vdGlmaWVyVG9JZE1h
cC5yZW1vdmUoaXRlci0+c2Vjb25kKTsKLSAgICBtX2lkVG9Ob3RpZmllck1hcC5yZW1vdmUoaXRl
cik7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoR2VvTm90aWZpZXIq
IG5vdGlmaWVyKQotewotICAgIE5vdGlmaWVyVG9JZE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fbm90
aWZpZXJUb0lkTWFwLmZpbmQobm90aWZpZXIpOwotICAgIGlmIChpdGVyID09IG1fbm90aWZpZXJU
b0lkTWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9pZFRvTm90aWZpZXJNYXAucmVt
b3ZlKGl0ZXItPnNlY29uZCk7Ci0gICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXIpOwot
fQotCi1ib29sIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Y29udGFpbnMoR2VvTm90aWZpZXIqIG5v
dGlmaWVyKSBjb25zdAotewotICAgIHJldHVybiBtX25vdGlmaWVyVG9JZE1hcC5jb250YWlucyhu
b3RpZmllcik7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpjbGVhcigpCi17Ci0g
ICAgbV9pZFRvTm90aWZpZXJNYXAuY2xlYXIoKTsKLSAgICBtX25vdGlmaWVyVG9JZE1hcC5jbGVh
cigpOwotfQotCi1ib29sIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6aXNFbXB0eSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1faWRUb05vdGlmaWVyTWFwLmlzRW1wdHkoKTsKLX0KLQotdm9pZCBHZW9s
b2NhdGlvbjo6V2F0Y2hlcnM6OmdldE5vdGlmaWVyc1ZlY3RvcihHZW9Ob3RpZmllclZlY3RvciYg
Y29weSkgY29uc3QKLXsKLSAgICBjb3B5VmFsdWVzVG9WZWN0b3IobV9pZFRvTm90aWZpZXJNYXAs
IGNvcHkpOwotfQotCi1HZW9sb2NhdGlvbjo6R2VvbG9jYXRpb24oRnJhbWUqIGZyYW1lKQotICAg
IDogRE9NV2luZG93UHJvcGVydHkoZnJhbWUpCi0jaWYgIUVOQUJMRShDTElFTlRfQkFTRURfR0VP
TE9DQVRJT04pCi0gICAgLCBtX3NlcnZpY2UoR2VvbG9jYXRpb25TZXJ2aWNlOjpjcmVhdGUodGhp
cykpCi0jZW5kaWYKLSAgICAsIG1fYWxsb3dHZW9sb2NhdGlvbihVbmtub3duKQotewotICAgIGlm
ICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2ZyYW1lLT5kb2N1bWVu
dCgpKTsKLSAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dlb2xvY2F0aW9uKHRydWUp
OwotfQotCi1HZW9sb2NhdGlvbjo6fkdlb2xvY2F0aW9uKCkKLXsKLSAgICBBU1NFUlQobV9hbGxv
d0dlb2xvY2F0aW9uICE9IEluUHJvZ3Jlc3MpOwotICAgIEFTU0VSVCghbV9mcmFtZSk7Ci19Ci0K
LVBhZ2UqIEdlb2xvY2F0aW9uOjpwYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mcmFtZSA/
IG1fZnJhbWUtPnBhZ2UoKSA6IDA7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OnJlc2V0KCkKLXsK
LSAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmIChwYWdlICYmIG1fYWxsb3dH
ZW9sb2NhdGlvbiA9PSBJblByb2dyZXNzKSB7Ci0jaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTikKLSAgICAgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmNhbmNlbFBl
cm1pc3Npb25SZXF1ZXN0KHRoaXMpOwotI2Vsc2UKLSAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpLT5jYW5jZWxHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0Rm9yRnJhbWUobV9mcmFt
ZSwgdGhpcyk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgLy8gVGhlIGZyYW1lIG1heSBiZSBtb3Zpbmcg
dG8gYSBuZXcgcGFnZSBhbmQgd2Ugd2FudCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIGZyb20gdGhl
IG5ldyBwYWdlJ3MgY2xpZW50LgotICAgIG1fYWxsb3dHZW9sb2NhdGlvbiA9IFVua25vd247Ci0g
ICAgY2FuY2VsQWxsUmVxdWVzdHMoKTsKLSAgICBzdG9wVXBkYXRpbmcoKTsKLSNpZiBVU0UoUFJF
RU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQotICAgIG1fcGVuZGluZ0ZvclBlcm1pc3Npb25O
b3RpZmllcnMuY2xlYXIoKTsKLSNlbmRpZgotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpkaXNjb25u
ZWN0RnJhbWUoKQotewotICAgIC8vIE9uY2Ugd2UgYXJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBG
cmFtZSwgaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHBlcmZvcm0gYW55IG9wZXJhdGlvbnMu
Ci0gICAgcmVzZXQoKTsKLSAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpKQot
ICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zZXRVc2luZ0dlb2xvY2F0aW9uKGZhbHNlKTsK
LSAgICBET01XaW5kb3dQcm9wZXJ0eTo6ZGlzY29ubmVjdEZyYW1lKCk7Ci19Ci0KLUdlb3Bvc2l0
aW9uKiBHZW9sb2NhdGlvbjo6bGFzdFBvc2l0aW9uKCkKLXsKLSNpZiBFTkFCTEUoQ0xJRU5UX0JB
U0VEX0dFT0xPQ0FUSU9OKQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIG1fbGFzdFBvc2l0aW9uID0gY3JlYXRl
R2VvcG9zaXRpb24ocGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmxhc3RQb3NpdGlvbigp
KTsKLSNlbHNlCi0gICAgbV9sYXN0UG9zaXRpb24gPSBtX3NlcnZpY2UtPmxhc3RQb3NpdGlvbigp
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7Ci19Ci0KLXZvaWQg
R2VvbG9jYXRpb246OmdldEN1cnJlbnRQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQotewotICAg
IGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEdlb05vdGlmaWVy
PiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpOwotICAgIEFTU0VSVChub3RpZmllcik7Ci0KLSAgICBtX29uZVNob3RzLmFkZChu
b3RpZmllcik7Ci19Ci0KLWludCBHZW9sb2NhdGlvbjo6d2F0Y2hQb3NpdGlvbihQYXNzUmVmUHRy
PFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBv
cHRpb25zKQotewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBS
ZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gc3RhcnRSZXF1ZXN0KHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7Ci0gICAgQVNTRVJUKG5vdGlmaWVyKTsKLQotICAg
IHN0YXRpYyBpbnQgbmV4dEF2YWlsYWJsZVdhdGNoSWQgPSBmaXJzdEF2YWlsYWJsZVdhdGNoSWQ7
Ci0gICAgLy8gSW4gY2FzZSBvZiBvdmVyZmxvdywgbWFrZSBzdXJlIHRoZSBJRCByZW1haW5zIHBv
c2l0aXZlLCBidXQgcmV1c2UgdGhlIElEIHZhbHVlcy4KLSAgICBpZiAobmV4dEF2YWlsYWJsZVdh
dGNoSWQgPCAxKQotICAgICAgICBuZXh0QXZhaWxhYmxlV2F0Y2hJZCA9IDE7Ci0gICAgbV93YXRj
aGVycy5zZXQobmV4dEF2YWlsYWJsZVdhdGNoSWQsIG5vdGlmaWVyLnJlbGVhc2UoKSk7Ci0gICAg
cmV0dXJuIG5leHRBdmFpbGFibGVXYXRjaElkKys7Ci19Ci0KLVBhc3NSZWZQdHI8R2VvbG9jYXRp
b246Okdlb05vdGlmaWVyPiBHZW9sb2NhdGlvbjo6c3RhcnRSZXF1ZXN0KFBhc3NSZWZQdHI8UG9z
aXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlv
bnMpCi17Ci0gICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IEdlb05vdGlmaWVyOjpj
cmVhdGUodGhpcywgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRpb25zKTsKLQot
ICAgIC8vIENoZWNrIHdoZXRoZXIgcGVybWlzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVuaWVk
LiBOb3RlIHRoYXQgaWYgdGhpcyBpcyB0aGUgY2FzZSwKLSAgICAvLyB0aGUgcGVybWlzc2lvbiBz
dGF0ZSBjYW4gbm90IGNoYW5nZSBhZ2FpbiBpbiB0aGUgbGlmZXRpbWUgb2YgdGhpcyBwYWdlLgot
ICAgIGlmIChpc0RlbmllZCgpKQotICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3Np
dGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1p
c3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpKTsKLSAgICBlbHNlIGlmIChoYXZlU3VpdGFibGVDYWNo
ZWRQb3NpdGlvbihub3RpZmllci0+bV9vcHRpb25zLmdldCgpKSkKLSAgICAgICAgbm90aWZpZXIt
PnNldFVzZUNhY2hlZFBvc2l0aW9uKCk7Ci0gICAgZWxzZSBpZiAobm90aWZpZXItPmhhc1plcm9U
aW1lb3V0KCkpCi0gICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKLSNpZiBV
U0UoUFJFRU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQotICAgIGVsc2UgaWYgKCFpc0FsbG93
ZWQoKSkgewotICAgICAgICAvLyBpZiB3ZSBkb24ndCB5ZXQgaGF2ZSBwZXJtaXNzaW9uLCByZXF1
ZXN0IGZvciBwZXJtaXNzaW9uIGJlZm9yZSBjYWxsaW5nIHN0YXJ0VXBkYXRpbmcoKQotICAgICAg
ICBtX3BlbmRpbmdGb3JQZXJtaXNzaW9uTm90aWZpZXJzLmFkZChub3RpZmllcik7Ci0gICAgICAg
IHJlcXVlc3RQZXJtaXNzaW9uKCk7Ci0gICAgfQotI2VuZGlmCi0gICAgZWxzZSBpZiAoc3RhcnRV
cGRhdGluZyhub3RpZmllci5nZXQoKSkpCi0gICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZO
ZWVkZWQoKTsKLSAgICBlbHNlCi0gICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0
aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgZmFp
bGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKTsKLQotICAgIHJldHVybiBub3RpZmllci5y
ZWxlYXNlKCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OmZhdGFsRXJyb3JPY2N1cnJlZChHZW9s
b2NhdGlvbjo6R2VvTm90aWZpZXIqIG5vdGlmaWVyKQotewotICAgIC8vIFRoaXMgcmVxdWVzdCBo
YXMgZmFpbGVkIGZhdGFsbHkuIFJlbW92ZSBpdCBmcm9tIG91ciBsaXN0cy4KLSAgICBtX29uZVNo
b3RzLnJlbW92ZShub3RpZmllcik7Ci0gICAgbV93YXRjaGVycy5yZW1vdmUobm90aWZpZXIpOwot
Ci0gICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAgc3RvcFVwZGF0aW5nKCk7Ci19Ci0K
LXZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RVc2VzQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXIq
IG5vdGlmaWVyKQotewotICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFzeW5jaHJvbm91c2x5LCBzbyB0
aGUgcGVybWlzc2lvbnMgY291bGQgaGF2ZSBiZWVuIGRlbmllZAotICAgIC8vIHNpbmNlIHdlIGxh
c3QgY2hlY2tlZCBpbiBzdGFydFJlcXVlc3QuCi0gICAgaWYgKGlzRGVuaWVkKCkpIHsKLSAgICAg
ICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9u
RXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQ
b3NpdGlvbi5hZGQobm90aWZpZXIpOwotCi0gICAgLy8gSWYgcGVybWlzc2lvbnMgYXJlIGFsbG93
ZWQsIG1ha2UgdGhlIGNhbGxiYWNrCi0gICAgaWYgKGlzQWxsb3dlZCgpKSB7Ci0gICAgICAgIG1h
a2VDYWNoZWRQb3NpdGlvbkNhbGxiYWNrcygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gUmVxdWVzdCBwZXJtaXNzaW9ucywgd2hpY2ggbWF5IGJlIHN5bmNocm9ub3VzIG9yIGFz
eW5jaHJvbm91cy4KLSAgICByZXF1ZXN0UGVybWlzc2lvbigpOwotfQotCi12b2lkIEdlb2xvY2F0
aW9uOjptYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKQotewotICAgIC8vIEFsbCBtb2RpZmlj
YXRpb25zIHRvIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uIGFyZSBkb25lCi0gICAg
Ly8gYXN5bmNocm9ub3VzbHksIHNvIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQgYmVp
bmcgbW9kaWZpZWQgZnJvbQotICAgIC8vIHRoZSBjYWxsYmFja3MuCi0gICAgR2VvTm90aWZpZXJT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9u
LmVuZCgpOwotICAgIGZvciAoR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
X3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0ZXItPmdldCgpOwotICAg
ICAgICBub3RpZmllci0+cnVuU3VjY2Vzc0NhbGxiYWNrKG1fY2FjaGVkUG9zaXRpb24uZ2V0KCkp
OwotCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBvbmUtc2hvdCByZXF1ZXN0LCBzdG9wIGl0LiBP
dGhlcndpc2UsIGlmIHRoZSB3YXRjaCBzdGlsbAotICAgICAgICAvLyBleGlzdHMsIHN0YXJ0IHRo
ZSBzZXJ2aWNlIHRvIGdldCB1cGRhdGVzLgotICAgICAgICBpZiAobV9vbmVTaG90cy5jb250YWlu
cyhub3RpZmllcikpCi0gICAgICAgICAgICBtX29uZVNob3RzLnJlbW92ZShub3RpZmllcik7Ci0g
ICAgICAgIGVsc2UgaWYgKG1fd2F0Y2hlcnMuY29udGFpbnMobm90aWZpZXIpKSB7Ci0gICAgICAg
ICAgICBpZiAobm90aWZpZXItPmhhc1plcm9UaW1lb3V0KCkgfHwgc3RhcnRVcGRhdGluZyhub3Rp
ZmllcikpCi0gICAgICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9y
KFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJM
RSwgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fcmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmNsZWFyKCk7Ci0KLSAgICBp
ZiAoIWhhc0xpc3RlbmVycygpKQotICAgICAgICBzdG9wVXBkYXRpbmcoKTsKLX0KLQotdm9pZCBH
ZW9sb2NhdGlvbjo6cmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKiBub3RpZmllcikKLXsKLSAg
ICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4KLSAgICBtX29uZVNo
b3RzLnJlbW92ZShub3RpZmllcik7Ci0KLSAgICBpZiAoIWhhc0xpc3RlbmVycygpKQotICAgICAg
ICBzdG9wVXBkYXRpbmcoKTsKLX0KLQotYm9vbCBHZW9sb2NhdGlvbjo6aGF2ZVN1aXRhYmxlQ2Fj
aGVkUG9zaXRpb24oUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQotewotICAgIGlmICghbV9jYWNo
ZWRQb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghb3B0aW9ucy0+aGFz
TWF4aW11bUFnZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW9wdGlvbnMtPm1h
eGltdW1BZ2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIERPTVRpbWVTdGFtcCBjdXJy
ZW50VGltZU1pbGxpcyA9IGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAoY3VycmVudFRpbWUo
KSk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkUG9zaXRpb24tPnRpbWVzdGFtcCgpID4gY3VycmVudFRp
bWVNaWxsaXMgLSBvcHRpb25zLT5tYXhpbXVtQWdlKCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246
OmNsZWFyV2F0Y2goaW50IHdhdGNoSWQpCi17Ci0gICAgaWYgKHdhdGNoSWQgPCBmaXJzdEF2YWls
YWJsZVdhdGNoSWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FU
SU9OX1BFUk1JU1NJT04pCi0gICAgaWYgKEdlb05vdGlmaWVyKiBub3RpZmllciA9IG1fd2F0Y2hl
cnMuZmluZCh3YXRjaElkKSkKLSAgICAgICAgbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlmaWVy
cy5yZW1vdmUobm90aWZpZXIpOwotI2VuZGlmCi0gICAgbV93YXRjaGVycy5yZW1vdmUod2F0Y2hJ
ZCk7Ci0gICAgCi0gICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAgc3RvcFVwZGF0aW5n
KCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sIGFsbG93ZWQpCi17
Ci0gICAgLy8gUHJvdGVjdCB0aGUgR2VvbG9jYXRpb24gb2JqZWN0IGZyb20gZ2FyYmFnZSBjb2xs
ZWN0aW9uIGR1cmluZyBhIGNhbGxiYWNrLgotICAgIFJlZlB0cjxHZW9sb2NhdGlvbj4gcHJvdGVj
dCh0aGlzKTsKLQotICAgIC8vIFRoaXMgbWF5IGJlIGR1ZSB0byBlaXRoZXIgYSBuZXcgcG9zaXRp
b24gZnJvbSB0aGUgc2VydmljZSwgb3IgYSBjYWNoZWQKLSAgICAvLyBwb3NpdGlvbi4KLSAgICBt
X2FsbG93R2VvbG9jYXRpb24gPSBhbGxvd2VkID8gWWVzIDogTm87Ci0gICAgCi0jaWYgVVNFKFBS
RUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKLSAgICAvLyBQZXJtaXNzaW9uIHJlcXVlc3Qg
d2FzIG1hZGUgZHVyaW5nIHRoZSBzdGFydFJlcXVlc3QgcHJvY2VzcwotICAgIGlmICghbV9wZW5k
aW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaGFuZGxlUGVu
ZGluZ1Blcm1pc3Npb25Ob3RpZmllcnMoKTsKLSAgICAgICAgbV9wZW5kaW5nRm9yUGVybWlzc2lv
bk5vdGlmaWVycy5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBpZiAoIWlzQWxsb3dlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBlcnJv
ciA9IFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklF
RCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSk7Ci0gICAgICAgIGVycm9yLT5zZXRJc0Zh
dGFsKHRydWUpOwotICAgICAgICBoYW5kbGVFcnJvcihlcnJvci5nZXQoKSk7Ci0gICAgICAgIG1f
cmVxdWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBJZiB0aGUgc2VydmljZSBoYXMgYSBsYXN0IHBvc2l0aW9uLCB1c2Ug
aXQgdG8gY2FsbCBiYWNrIGZvciBhbGwgcmVxdWVzdHMuCi0gICAgLy8gSWYgYW55IG9mIHRoZSBy
ZXF1ZXN0cyBhcmUgd2FpdGluZyBmb3IgcGVybWlzc2lvbiBmb3IgYSBjYWNoZWQgcG9zaXRpb24s
Ci0gICAgLy8gdGhlIHBvc2l0aW9uIGZyb20gdGhlIHNlcnZpY2Ugd2lsbCBiZSBhdCBsZWFzdCBh
cyBmcmVzaC4KLSAgICBpZiAobGFzdFBvc2l0aW9uKCkpCi0gICAgICAgIG1ha2VTdWNjZXNzQ2Fs
bGJhY2tzKCk7Ci0gICAgZWxzZQotICAgICAgICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3Mo
KTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6c2VuZEVycm9yKEdlb05vdGlmaWVyVmVjdG9yJiBu
b3RpZmllcnMsIFBvc2l0aW9uRXJyb3IqIGVycm9yKQotewotICAgICBHZW9Ob3RpZmllclZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJzLmVuZCgpOwotICAgICBmb3IgKEdlb05v
dGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSAq
aXQ7Ci0gICAgICAgICAKLSAgICAgICAgIGlmIChub3RpZmllci0+bV9lcnJvckNhbGxiYWNrKQot
ICAgICAgICAgICAgIG5vdGlmaWVyLT5tX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGVycm9y
KTsKLSAgICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpzZW5kUG9zaXRpb24oR2VvTm90aWZp
ZXJWZWN0b3ImIG5vdGlmaWVycywgR2VvcG9zaXRpb24qIHBvc2l0aW9uKQotewotICAgIEdlb05v
dGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub3RpZmllcnMuZW5kKCk7Ci0gICAg
Zm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90
aWZpZXIgPSAqaXQ7Ci0gICAgICAgIEFTU0VSVChub3RpZmllci0+bV9zdWNjZXNzQ2FsbGJhY2sp
OwotICAgICAgICAKLSAgICAgICAgbm90aWZpZXItPm1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVF
dmVudChwb3NpdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpzdG9wVGltZXIo
R2VvTm90aWZpZXJWZWN0b3ImIG5vdGlmaWVycykKLXsKLSAgICBHZW9Ob3RpZmllclZlY3Rvcjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJzLmVuZCgpOwotICAgIGZvciAoR2VvTm90aWZp
ZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gKml0Owot
ICAgICAgICBub3RpZmllci0+bV90aW1lci5zdG9wKCk7Ci0gICAgfQotfQotCi12b2lkIEdlb2xv
Y2F0aW9uOjpzdG9wVGltZXJzRm9yT25lU2hvdHMoKQotewotICAgIEdlb05vdGlmaWVyVmVjdG9y
IGNvcHk7Ci0gICAgY29weVRvVmVjdG9yKG1fb25lU2hvdHMsIGNvcHkpOwotICAgIAotICAgIHN0
b3BUaW1lcihjb3B5KTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVyc0ZvcldhdGNo
ZXJzKCkKLXsKLSAgICBHZW9Ob3RpZmllclZlY3RvciBjb3B5OwotICAgIG1fd2F0Y2hlcnMuZ2V0
Tm90aWZpZXJzVmVjdG9yKGNvcHkpOwotICAgIAotICAgIHN0b3BUaW1lcihjb3B5KTsKLX0KLQot
dm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVycygpCi17Ci0gICAgc3RvcFRpbWVyc0Zvck9uZVNo
b3RzKCk7Ci0gICAgc3RvcFRpbWVyc0ZvcldhdGNoZXJzKCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b246OmNhbmNlbFJlcXVlc3RzKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMpCi17Ci0gICAg
R2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsK
LSAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5zZXRGYXRhbEVycm9y
KFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJM
RSwgZnJhbWVsZXNzRG9jdW1lbnRFcnJvck1lc3NhZ2UpKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlv
bjo6Y2FuY2VsQWxsUmVxdWVzdHMoKQotewotICAgIEdlb05vdGlmaWVyVmVjdG9yIGNvcHk7Ci0g
ICAgY29weVRvVmVjdG9yKG1fb25lU2hvdHMsIGNvcHkpOwotICAgIGNhbmNlbFJlcXVlc3RzKGNv
cHkpOwotICAgIG1fd2F0Y2hlcnMuZ2V0Tm90aWZpZXJzVmVjdG9yKGNvcHkpOwotICAgIGNhbmNl
bFJlcXVlc3RzKGNvcHkpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpleHRyYWN0Tm90aWZpZXJz
V2l0aENhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMsIEdlb05vdGlm
aWVyVmVjdG9yKiBjYWNoZWQpCi17Ci0gICAgR2VvTm90aWZpZXJWZWN0b3Igbm9uQ2FjaGVkOwot
ICAgIEdlb05vdGlmaWVyVmVjdG9yOjppdGVyYXRvciBlbmQgPSBub3RpZmllcnMuZW5kKCk7Ci0g
ICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmll
ciA9IGl0LT5nZXQoKTsKLSAgICAgICAgaWYgKG5vdGlmaWVyLT5tX3VzZUNhY2hlZFBvc2l0aW9u
KSB7Ci0gICAgICAgICAgICBpZiAoY2FjaGVkKQotICAgICAgICAgICAgICAgIGNhY2hlZC0+YXBw
ZW5kKG5vdGlmaWVyKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBub25DYWNoZWQuYXBw
ZW5kKG5vdGlmaWVyKTsKLSAgICB9Ci0gICAgbm90aWZpZXJzLnN3YXAobm9uQ2FjaGVkKTsKLX0K
LQotdm9pZCBHZW9sb2NhdGlvbjo6Y29weVRvU2V0KGNvbnN0IEdlb05vdGlmaWVyVmVjdG9yJiBz
cmMsIEdlb05vdGlmaWVyU2V0JiBkZXN0KQotewotICAgICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gc3JjLmVuZCgpOwotICAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNyYy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmllciA9IGl0LT5nZXQoKTsKLSAgICAgICAgIGRlc3Qu
YWRkKG5vdGlmaWVyKTsKLSAgICAgfQotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpoYW5kbGVFcnJv
cihQb3NpdGlvbkVycm9yKiBlcnJvcikKLXsKLSAgICBBU1NFUlQoZXJyb3IpOwotICAgIAotICAg
IEdlb05vdGlmaWVyVmVjdG9yIG9uZVNob3RzQ29weTsKLSAgICBjb3B5VG9WZWN0b3IobV9vbmVT
aG90cywgb25lU2hvdHNDb3B5KTsKLQotICAgIEdlb05vdGlmaWVyVmVjdG9yIHdhdGNoZXJzQ29w
eTsKLSAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcih3YXRjaGVyc0NvcHkpOwotCi0g
ICAgLy8gQ2xlYXIgdGhlIGxpc3RzIGJlZm9yZSB3ZSBtYWtlIHRoZSBjYWxsYmFja3MsIHRvIGF2
b2lkIGNsZWFyaW5nIG5vdGlmaWVycwotICAgIC8vIGFkZGVkIGJ5IGNhbGxzIHRvIEdlb2xvY2F0
aW9uIG1ldGhvZHMgZnJvbSB0aGUgY2FsbGJhY2tzLCBhbmQgdG8gcHJldmVudAotICAgIC8vIGZ1
cnRoZXIgY2FsbGJhY2tzIHRvIHRoZXNlIG5vdGlmaWVycy4KLSAgICBHZW9Ob3RpZmllclZlY3Rv
ciBvbmVTaG90c1dpdGhDYWNoZWRQb3NpdGlvbjsKLSAgICBtX29uZVNob3RzLmNsZWFyKCk7Ci0g
ICAgaWYgKGVycm9yLT5pc0ZhdGFsKCkpCi0gICAgICAgIG1fd2F0Y2hlcnMuY2xlYXIoKTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3Qgc2VuZCBub24tZmF0YWwgZXJyb3JzIHRvIG5vdGlm
aWVycyBkdWUgdG8gcmVjZWl2ZSBhIGNhY2hlZCBwb3NpdGlvbi4KLSAgICAgICAgZXh0cmFjdE5v
dGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbihvbmVTaG90c0NvcHksICZvbmVTaG90c1dpdGhDYWNo
ZWRQb3NpdGlvbik7Ci0gICAgICAgIGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24o
d2F0Y2hlcnNDb3B5LCAwKTsKLSAgICB9Ci0KLSAgICBzZW5kRXJyb3Iob25lU2hvdHNDb3B5LCBl
cnJvcik7Ci0gICAgc2VuZEVycm9yKHdhdGNoZXJzQ29weSwgZXJyb3IpOwotCi0gICAgLy8gaGFz
TGlzdGVuZXJzKCkgZG9lc24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5vdGlmaWVycyBkdWUgdG8g
cmVjZWl2ZSBhCi0gICAgLy8gY2FjaGVkIHBvc2l0aW9uIGFuZCB0aG9zZSByZXF1aXJpbmcgYSBm
cmVzaCBwb3NpdGlvbi4gUGVyZm9ybSB0aGUgY2hlY2sKLSAgICAvLyBiZWZvcmUgcmVzdG9yaW5n
IHRoZSBub3RpZmllcnMgYmVsb3cuCi0gICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAg
c3RvcFVwZGF0aW5nKCk7Ci0KLSAgICAvLyBNYWludGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgY2Fj
aGVkIG5vdGlmaWVycyB1bnRpbCB0aGVpciB0aW1lciBmaXJlcy4KLSAgICBjb3B5VG9TZXQob25l
U2hvdHNXaXRoQ2FjaGVkUG9zaXRpb24sIG1fb25lU2hvdHMpOwotfQotCi12b2lkIEdlb2xvY2F0
aW9uOjpyZXF1ZXN0UGVybWlzc2lvbigpCi17Ci0gICAgaWYgKG1fYWxsb3dHZW9sb2NhdGlvbiA+
IFVua25vd24pCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FsbG93R2VvbG9j
YXRpb24gPSBJblByb2dyZXNzOwotCi0gICAgLy8gQXNrIHRoZSBlbWJlZGRlcjogaXQgbWFpbnRh
aW5zIHRoZSBnZW9sb2NhdGlvbiBjaGFsbGVuZ2UgcG9saWN5IGl0c2VsZi4KLSNpZiBFTkFCTEUo
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxl
cigpLT5yZXF1ZXN0UGVybWlzc2lvbih0aGlzKTsKLSNlbHNlCi0gICAgcGFnZS0+Y2hyb21lKCkt
PmNsaWVudCgpLT5yZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUobV9mcmFtZSwg
dGhpcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6cG9zaXRpb25DaGFuZ2VkSW50
ZXJuYWwoKQotewotICAgIG1fY2FjaGVkUG9zaXRpb24gPSBsYXN0UG9zaXRpb24oKTsKLQotICAg
IC8vIFN0b3AgYWxsIGN1cnJlbnRseSBydW5uaW5nIHRpbWVycy4KLSAgICBzdG9wVGltZXJzKCk7
Ci0KLSAgICBpZiAoIWlzQWxsb3dlZCgpKSB7Ci0gICAgICAgIC8vIHJlcXVlc3RQZXJtaXNzaW9u
KCkgd2lsbCBhc2sgdGhlIGNocm9tZSBmb3IgcGVybWlzc2lvbi4gVGhpcyBtYXkgYmUKLSAgICAg
ICAgLy8gaW1wbGVtZW50ZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseS4gSW4gYm90
aCBjYXNlcywKLSAgICAgICAgLy8gbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKSB3aWxsIGJlIGNhbGxl
ZCBpZiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQsIHNvCi0gICAgICAgIC8vIHRoZXJlJ3Mgbm90aGlu
ZyBtb3JlIHRvIGRvIGhlcmUuCi0gICAgICAgIHJlcXVlc3RQZXJtaXNzaW9uKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtYWtlU3VjY2Vzc0NhbGxiYWNrcygpOwotfQotCi12b2lk
IEdlb2xvY2F0aW9uOjptYWtlU3VjY2Vzc0NhbGxiYWNrcygpCi17Ci0gICAgQVNTRVJUKGxhc3RQ
b3NpdGlvbigpKTsKLSAgICBBU1NFUlQoaXNBbGxvd2VkKCkpOwotICAgIAotICAgIEdlb05vdGlm
aWVyVmVjdG9yIG9uZVNob3RzQ29weTsKLSAgICBjb3B5VG9WZWN0b3IobV9vbmVTaG90cywgb25l
U2hvdHNDb3B5KTsKLSAgICAKLSAgICBHZW9Ob3RpZmllclZlY3RvciB3YXRjaGVyc0NvcHk7Ci0g
ICAgbV93YXRjaGVycy5nZXROb3RpZmllcnNWZWN0b3Iod2F0Y2hlcnNDb3B5KTsKLSAgICAKLSAg
ICAvLyBDbGVhciB0aGUgbGlzdHMgYmVmb3JlIHdlIG1ha2UgdGhlIGNhbGxiYWNrcywgdG8gYXZv
aWQgY2xlYXJpbmcgbm90aWZpZXJzCi0gICAgLy8gYWRkZWQgYnkgY2FsbHMgdG8gR2VvbG9jYXRp
b24gbWV0aG9kcyBmcm9tIHRoZSBjYWxsYmFja3MsIGFuZCB0byBwcmV2ZW50Ci0gICAgLy8gZnVy
dGhlciBjYWxsYmFja3MgdG8gdGhlc2Ugbm90aWZpZXJzLgotICAgIG1fb25lU2hvdHMuY2xlYXIo
KTsKLQotICAgIHNlbmRQb3NpdGlvbihvbmVTaG90c0NvcHksIGxhc3RQb3NpdGlvbigpKTsKLSAg
ICBzZW5kUG9zaXRpb24od2F0Y2hlcnNDb3B5LCBsYXN0UG9zaXRpb24oKSk7Ci0KLSAgICBpZiAo
IWhhc0xpc3RlbmVycygpKQotICAgICAgICBzdG9wVXBkYXRpbmcoKTsKLX0KLQotI2lmIEVOQUJM
RShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0KLXZvaWQgR2VvbG9jYXRpb246OnBvc2l0aW9u
Q2hhbmdlZCgpCi17Ci0gICAgcG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKTsKLX0KLQotdm9pZCBH
ZW9sb2NhdGlvbjo6c2V0RXJyb3IoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCi17Ci0gICAgUmVm
UHRyPFBvc2l0aW9uRXJyb3I+IHBvc2l0aW9uRXJyb3IgPSBjcmVhdGVQb3NpdGlvbkVycm9yKGVy
cm9yKTsKLSAgICBoYW5kbGVFcnJvcihwb3NpdGlvbkVycm9yLmdldCgpKTsKLX0KLQotI2Vsc2UK
LQotdm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlUG9zaXRpb25DaGFuZ2VkKEdl
b2xvY2F0aW9uU2VydmljZSogc2VydmljZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKHNlcnZpY2Us
IHNlcnZpY2UgPT0gbV9zZXJ2aWNlKTsKLSAgICBBU1NFUlQobV9zZXJ2aWNlLT5sYXN0UG9zaXRp
b24oKSk7Ci0KLSAgICBwb3NpdGlvbkNoYW5nZWRJbnRlcm5hbCgpOwotfQotCi12b2lkIEdlb2xv
Y2F0aW9uOjpnZW9sb2NhdGlvblNlcnZpY2VFcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uU2Vydmlj
ZSogc2VydmljZSkKLXsKLSAgICBBU1NFUlQoc2VydmljZS0+bGFzdEVycm9yKCkpOwotCi0gICAg
Ly8gTm90ZSB0aGF0IHdlIGRvIG5vdCBzdG9wIHRpbWVycyBoZXJlLiBGb3Igb25lLXNob3RzLCB0
aGUgcmVxdWVzdCBpcwotICAgIC8vIGNsZWFyZWQgaW4gaGFuZGxlRXJyb3IuIEZvciB3YXRjaGVy
cywgdGhlIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgdGltZXIgaXMKLSAgICAvLyBub3QgY2xlYXJl
ZC4KLSAgICBoYW5kbGVFcnJvcihzZXJ2aWNlLT5sYXN0RXJyb3IoKSk7Ci19Ci0KLSNlbmRpZgot
Ci1ib29sIEdlb2xvY2F0aW9uOjpzdGFydFVwZGF0aW5nKEdlb05vdGlmaWVyKiBub3RpZmllcikK
LXsKLSNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAgIFBhZ2UqIHBhZ2Ug
PSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+YWRkT2JzZXJ2ZXIodGhpcywgbm90
aWZpZXItPm1fb3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpOwotICAgIHJldHVybiB0cnVl
OwotI2Vsc2UKLSAgICByZXR1cm4gbV9zZXJ2aWNlLT5zdGFydFVwZGF0aW5nKG5vdGlmaWVyLT5t
X29wdGlvbnMuZ2V0KCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgR2VvbG9jYXRpb246OnN0b3BVcGRh
dGluZygpCi17Ci0jaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLSAgICBQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPnJlbW92ZU9ic2VydmVyKHRoaXMp
OwotI2Vsc2UKLSAgICBtX3NlcnZpY2UtPnN0b3BVcGRhdGluZygpOwotI2VuZGlmCi0KLX0KLQot
I2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCi12b2lkIEdlb2xvY2F0aW9u
OjpoYW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVycygpCi17Ci0gICAgLy8gV2hpbGUgd2Ug
aXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0LCB3ZSBuZWVkIG5vdCB3b3JyeSBhYm91dCBsaXN0IGJl
aW5nIG1vZGlmaWVkIGFzIHRoZSBwZXJtaXNzaW9uIAotICAgIC8vIGlzIGFscmVhZHkgc2V0IHRv
IFllcy9ObyBhbmQgbm8gbmV3IGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwZW5kaW5n
IGxpc3QKLSAgICBHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9wZW5kaW5n
Rm9yUGVybWlzc2lvbk5vdGlmaWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBub3RpZmll
ciA9IGl0ZXItPmdldCgpOwotCi0gICAgICAgIGlmIChpc0FsbG93ZWQoKSkgewotICAgICAgICAg
ICAgLy8gc3RhcnQgYWxsIHBlbmRpbmcgbm90aWZpY2F0aW9uIHJlcXVlc3RzIGFzIHBlcm1pc3Np
b24gZ3JhbnRlZC4KLSAgICAgICAgICAgIC8vIFRoZSBub3RpZmllciBpcyBhbHdheXMgcmVmJ2Vk
IGJ5IG1fb25lU2hvdHMgb3IgbV93YXRjaGVycy4KLSAgICAgICAgICAgIGlmIChzdGFydFVwZGF0
aW5nKG5vdGlmaWVyKSkKLSAgICAgICAgICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVl
ZGVkKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbm90aWZpZXItPnNldEZh
dGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBPU0lUSU9OX1VO
QVZBSUxBQkxFLCBmYWlsZWRUb1N0YXJ0U2VydmljZUVycm9yTWVzc2FnZSkpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6
OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmll
ZEVycm9yTWVzc2FnZSkpOwotICAgIH0KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbHNlCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBHZW9sb2NhdGlvbjo6
Y2xlYXJXYXRjaChpbnQpIHt9Ci0KLXZvaWQgR2VvbG9jYXRpb246OnJlc2V0KCkge30KLQotdm9p
ZCBHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkge30KLQotR2VvbG9jYXRpb246Okdlb2xv
Y2F0aW9uKEZyYW1lKikgOiBET01XaW5kb3dQcm9wZXJ0eSgwKSB7fQotCi1HZW9sb2NhdGlvbjo6
fkdlb2xvY2F0aW9uKCkge30KLQotdm9pZCBHZW9sb2NhdGlvbjo6c2V0SXNBbGxvd2VkKGJvb2wp
IHt9Ci0KLX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0jZW5kaWYgLy8gRU5BQkxFKEdFT0xPQ0FUSU9OKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE5OCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQ
cm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEdlb2xvY2F0aW9uX2gKLSNkZWZpbmUgR2VvbG9jYXRpb25faAotCi0jaW5jbHVkZSAiRE9N
V2luZG93UHJvcGVydHkuaCIKLSNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgotI2luY2x1ZGUgIlBv
c2l0aW9uQ2FsbGJhY2suaCIKLSNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCi0jaW5jbHVkZSAi
UG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgiCi0j
aW5jbHVkZSAiVGltZXIuaCIKLQotI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9O
KQotI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRnJhbWU7Ci0jaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NB
VElPTikKLWNsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb247Ci1jbGFzcyBHZW9sb2NhdGlvbkVycm9y
OwotI2VuZGlmCi1jbGFzcyBQYWdlOwotCi1jbGFzcyBHZW9sb2NhdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPEdlb2xvY2F0aW9uPiwgcHVibGljIERPTVdpbmRvd1Byb3BlcnR5Ci0jaWYgIUVOQUJM
RShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pICYmIEVOQUJMRShHRU9MT0NBVElPTikKLSAgICAs
IHB1YmxpYyBHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQKLSNlbmRpZgotewotcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uPiBjcmVhdGUoRnJhbWUqIGZyYW1lKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb24oZnJhbWUpKTsgfQotICAgIH5HZW9sb2NhdGlv
bigpOwotCi0gICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3RGcmFtZSgpIE9WRVJSSURFOwotICAg
IHZvaWQgcmVzZXQoKTsKLQotICAgIHZvaWQgZ2V0Q3VycmVudFBvc2l0aW9uKFBhc3NSZWZQdHI8
UG9zaXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKLSAgICBpbnQgd2F0Y2hQb3NpdGlvbihQYXNzUmVm
UHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPik7Ci0gICAgdm9pZCBjbGVhcldhdGNoKGludCB3
YXRjaElkKTsKLQotICAgIHZvaWQgc2V0SXNBbGxvd2VkKGJvb2wpOwotCi0jaWYgRU5BQkxFKENM
SUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLSAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZCgpOwotICAg
IHZvaWQgc2V0RXJyb3IoR2VvbG9jYXRpb25FcnJvciopOwotI2Vsc2UKLSAgICBHZW9sb2NhdGlv
blNlcnZpY2UqIGdldEdlb2xvY2F0aW9uU2VydmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vydmlj
ZS5nZXQoKTsgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgR2VvcG9zaXRpb24qIGxhc3RQb3Np
dGlvbigpOwotCi0gICAgYm9vbCBpc0FsbG93ZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2Vv
bG9jYXRpb24gPT0gWWVzOyB9Ci0gICAgYm9vbCBpc0RlbmllZCgpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dHZW9sb2NhdGlvbiA9PSBObzsgfQotCi0gICAgZXhwbGljaXQgR2VvbG9jYXRpb24oRnJh
bWUqKTsKLQotICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKLQotICAgIGNsYXNzIEdlb05vdGlmaWVy
IDogcHVibGljIFJlZkNvdW50ZWQ8R2VvTm90aWZpZXI+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlb05vdGlmaWVyPiBjcmVhdGUoR2VvbG9jYXRpb24qIGdlb2xv
Y2F0aW9uLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHBvc2l0aW9uQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBwb3NpdGlvbkVycm9yQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
R2VvTm90aWZpZXIoZ2VvbG9jYXRpb24sIHBvc2l0aW9uQ2FsbGJhY2ssIHBvc2l0aW9uRXJyb3JD
YWxsYmFjaywgb3B0aW9ucykpOyB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHNldEZhdGFsRXJy
b3IoUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yPik7Ci0gICAgICAgIGJvb2wgaGFzWmVyb1RpbWVv
dXQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRVc2VDYWNoZWRQb3NpdGlvbigpOwotICAgICAg
ICB2b2lkIHJ1blN1Y2Nlc3NDYWxsYmFjayhHZW9wb3NpdGlvbiopOwotICAgICAgICB2b2lkIHN0
YXJ0VGltZXJJZk5lZWRlZCgpOwotICAgICAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8R2VvTm90
aWZpZXI+Kik7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8R2VvbG9jYXRpb24+IG1fZ2VvbG9j
YXRpb247Ci0gICAgICAgIFJlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFj
azsKLSAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNr
OwotICAgICAgICBSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBtX29wdGlvbnM7Ci0gICAgICAgIFRp
bWVyPEdlb05vdGlmaWVyPiBtX3RpbWVyOwotICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4g
bV9mYXRhbEVycm9yOwotICAgICAgICBib29sIG1fdXNlQ2FjaGVkUG9zaXRpb247Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiosIFBhc3NSZWZQdHI8UG9z
aXRpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxQb3NpdGlvbk9wdGlvbnM+KTsKLSAgICB9OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyVmVjdG9yOwotICAgIHR5cGVkZWYgSGFzaFNl
dDxSZWZQdHI8R2VvTm90aWZpZXI+ID4gR2VvTm90aWZpZXJTZXQ7Ci0KLSAgICBjbGFzcyBXYXRj
aGVycyB7Ci0gICAgcHVibGljOgotICAgICAgICB2b2lkIHNldChpbnQgaWQsIFBhc3NSZWZQdHI8
R2VvTm90aWZpZXI+KTsKLSAgICAgICAgR2VvTm90aWZpZXIqIGZpbmQoaW50IGlkKTsKLSAgICAg
ICAgdm9pZCByZW1vdmUoaW50IGlkKTsKLSAgICAgICAgdm9pZCByZW1vdmUoR2VvTm90aWZpZXIq
KTsKLSAgICAgICAgYm9vbCBjb250YWlucyhHZW9Ob3RpZmllciopIGNvbnN0OwotICAgICAgICB2
b2lkIGNsZWFyKCk7Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgICAgICB2b2lk
IGdldE5vdGlmaWVyc1ZlY3RvcihHZW9Ob3RpZmllclZlY3RvciYpIGNvbnN0OwotICAgIHByaXZh
dGU6Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxHZW9Ob3RpZmllcj4gPiBJ
ZFRvTm90aWZpZXJNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8R2VvTm90aWZp
ZXI+LCBpbnQ+IE5vdGlmaWVyVG9JZE1hcDsKLSAgICAgICAgSWRUb05vdGlmaWVyTWFwIG1faWRU
b05vdGlmaWVyTWFwOwotICAgICAgICBOb3RpZmllclRvSWRNYXAgbV9ub3RpZmllclRvSWRNYXA7
Ci0gICAgfTsKLQotICAgIGJvb2wgaGFzTGlzdGVuZXJzKCkgY29uc3QgeyByZXR1cm4gIW1fb25l
U2hvdHMuaXNFbXB0eSgpIHx8ICFtX3dhdGNoZXJzLmlzRW1wdHkoKTsgfQotCi0gICAgdm9pZCBz
ZW5kRXJyb3IoR2VvTm90aWZpZXJWZWN0b3ImLCBQb3NpdGlvbkVycm9yKik7Ci0gICAgdm9pZCBz
ZW5kUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImLCBHZW9wb3NpdGlvbiopOwotCi0gICAgc3Rh
dGljIHZvaWQgZXh0cmFjdE5vdGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbihHZW9Ob3RpZmllclZl
Y3RvciYgbm90aWZpZXJzLCBHZW9Ob3RpZmllclZlY3RvciogY2FjaGVkKTsKLSAgICBzdGF0aWMg
dm9pZCBjb3B5VG9TZXQoY29uc3QgR2VvTm90aWZpZXJWZWN0b3ImLCBHZW9Ob3RpZmllclNldCYp
OwotCi0gICAgc3RhdGljIHZvaWQgc3RvcFRpbWVyKEdlb05vdGlmaWVyVmVjdG9yJik7Ci0gICAg
dm9pZCBzdG9wVGltZXJzRm9yT25lU2hvdHMoKTsKLSAgICB2b2lkIHN0b3BUaW1lcnNGb3JXYXRj
aGVycygpOwotICAgIHZvaWQgc3RvcFRpbWVycygpOwotCi0gICAgdm9pZCBjYW5jZWxSZXF1ZXN0
cyhHZW9Ob3RpZmllclZlY3RvciYpOwotICAgIHZvaWQgY2FuY2VsQWxsUmVxdWVzdHMoKTsKLQot
ICAgIHZvaWQgcG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKTsKLSAgICB2b2lkIG1ha2VTdWNjZXNz
Q2FsbGJhY2tzKCk7Ci0gICAgdm9pZCBoYW5kbGVFcnJvcihQb3NpdGlvbkVycm9yKik7Ci0KLSAg
ICB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKCk7Ci0KLSAgICBib29sIHN0YXJ0VXBkYXRpbmcoR2Vv
Tm90aWZpZXIqKTsKLSAgICB2b2lkIHN0b3BVcGRhdGluZygpOwotCi0jaWYgVVNFKFBSRUVNUFRf
R0VPTE9DQVRJT05fUEVSTUlTU0lPTikKLSAgICB2b2lkIGhhbmRsZVBlbmRpbmdQZXJtaXNzaW9u
Tm90aWZpZXJzKCk7Ci0jZW5kaWYKLQotI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FU
SU9OKSAmJiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgLy8gR2VvbG9jYXRpb25TZXJ2aWNlQ2xp
ZW50Ci0gICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZVBvc2l0aW9uQ2hhbmdlZChH
ZW9sb2NhdGlvblNlcnZpY2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VvbG9jYXRpb25TZXJ2aWNl
RXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvblNlcnZpY2UqKTsKLSNlbmRpZgotCi0gICAgUGFzc1Jl
ZlB0cjxHZW9Ob3RpZmllcj4gc3RhcnRSZXF1ZXN0KFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFj
az4sIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+KTsKLQotICAgIHZvaWQgZmF0YWxFcnJvck9jY3VycmVkKEdlb05vdGlmaWVyKik7
Ci0gICAgdm9pZCByZXF1ZXN0VGltZWRPdXQoR2VvTm90aWZpZXIqKTsKLSAgICB2b2lkIHJlcXVl
c3RVc2VzQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXIqKTsKLSAgICBib29sIGhhdmVTdWl0YWJs
ZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyopOwotICAgIHZvaWQgbWFrZUNhY2hlZFBv
c2l0aW9uQ2FsbGJhY2tzKCk7Ci0KLSAgICBHZW9Ob3RpZmllclNldCBtX29uZVNob3RzOwotICAg
IFdhdGNoZXJzIG1fd2F0Y2hlcnM7Ci0jaWYgIUVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pCi0gICAgT3duUHRyPEdlb2xvY2F0aW9uU2VydmljZT4gbV9zZXJ2aWNlOwotI2VuZGlmCi0j
aWYgVVNFKFBSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKLSAgICBHZW9Ob3RpZmllclNl
dCBtX3BlbmRpbmdGb3JQZXJtaXNzaW9uTm90aWZpZXJzOwotI2VuZGlmCi0gICAgUmVmUHRyPEdl
b3Bvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKLQotICAgIGVudW0gewotICAgICAgICBVbmtub3du
LAotICAgICAgICBJblByb2dyZXNzLAotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0gICAgfSBt
X2FsbG93R2VvbG9jYXRpb247Ci0KLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgUmVmUHRy
PEdlb3Bvc2l0aW9uPiBtX2NhY2hlZFBvc2l0aW9uOwotI2VuZGlmCi0gICAgR2VvTm90aWZpZXJT
ZXQgbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb247Ci19OwotICAgIAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR2VvbG9jYXRpb25faAotCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmlkbAkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1tb2R1bGUgY29y
ZSB7Ci0KLSAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9nZW9sb2NhdGlvbi1BUEkvI2dlb2xv
Y2F0aW9uX2ludGVyZmFjZQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUdF
T0xPQ0FUSU9OLCAKLSAgICAgICAgSlNHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKLSAg
ICAgICAgT21pdENvbnN0cnVjdG9yCi0gICAgXSBHZW9sb2NhdGlvbiB7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgZ2V0Q3VycmVudFBvc2l0aW9uKGluIFBvc2l0aW9uQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0
aW9uYWxdIFBvc2l0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uT3B0aW9u
cyBvcHRpb25zKTsKLQotICAgICAgICBbQ3VzdG9tXSBsb25nIHdhdGNoUG9zaXRpb24oaW4gUG9z
aXRpb25DYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxi
YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBQ
b3NpdGlvbk9wdGlvbnMgb3B0aW9ucyk7Ci0KLSAgICAgICAgdm9pZCBjbGVhcldhdGNoKGluIGxv
bmcgd2F0Y2hJZCk7Ci0gICAgfTsKLQotfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24u
aCIKLQotI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0KLSNpbmNsdWRlICJH
ZW9sb2NhdGlvbkNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdlb2xvY2F0aW9u
Q29udHJvbGxlcjo6R2VvbG9jYXRpb25Db250cm9sbGVyKFBhZ2UqIHBhZ2UsIEdlb2xvY2F0aW9u
Q2xpZW50KiBjbGllbnQpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fY2xpZW50KGNsaWVu
dCkKLXsKLX0KLQotR2VvbG9jYXRpb25Db250cm9sbGVyOjp+R2VvbG9jYXRpb25Db250cm9sbGVy
KCkKLXsKLSAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0eSgpKTsKLQotICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgbV9jbGllbnQtPmdlb2xvY2F0aW9uRGVzdHJveWVkKCk7Ci19Ci0KLVBh
c3NPd25QdHI8R2VvbG9jYXRpb25Db250cm9sbGVyPiBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmNy
ZWF0ZShQYWdlKiBwYWdlLCBHZW9sb2NhdGlvbkNsaWVudCogY2xpZW50KQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25Db250cm9sbGVyKHBhZ2UsIGNsaWVudCkpOwotfQot
Ci12b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6YWRkT2JzZXJ2ZXIoR2VvbG9jYXRpb24qIG9i
c2VydmVyLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkKLXsKLSAgICAvLyBUaGlzIG1heSBiZSBj
YWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZSBvYnNlcnZlciwgdGhvdWdoIHJlbW92
ZU9ic2VydmVyKCkKLSAgICAvLyBpcyBjYWxsZWQgb25seSBvbmNlIHdpdGggZWFjaC4KLSAgICBi
b29sIHdhc0VtcHR5ID0gbV9vYnNlcnZlcnMuaXNFbXB0eSgpOwotICAgIG1fb2JzZXJ2ZXJzLmFk
ZChvYnNlcnZlcik7Ci0gICAgaWYgKGVuYWJsZUhpZ2hBY2N1cmFjeSkKLSAgICAgICAgbV9oaWdo
QWNjdXJhY3lPYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKLQotICAgIGlmIChtX2NsaWVudCkgeyAg
ICAgICAgCi0gICAgICAgIGlmIChlbmFibGVIaWdoQWNjdXJhY3kpCi0gICAgICAgICAgICBtX2Ns
aWVudC0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5KHRydWUpOwotICAgICAgICBpZiAod2FzRW1wdHkp
Ci0gICAgICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGluZygpOwotICAgIH0KLX0KLQotdm9p
ZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKiBvYnNl
cnZlcikKLXsKLSAgICBpZiAoIW1fb2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9vYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsKLSAgICBtX2hp
Z2hBY2N1cmFjeU9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIpOwotCi0gICAgaWYgKG1fY2xpZW50
KSB7Ci0gICAgICAgIGlmIChtX29ic2VydmVycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtX2Ns
aWVudC0+c3RvcFVwZGF0aW5nKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1faGlnaEFjY3VyYWN5T2Jz
ZXJ2ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1fY2xpZW50LT5zZXRFbmFibGVIaWdoQWNj
dXJhY3koZmFsc2UpOwotICAgIH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJl
cXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbikKLXsKLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5yZXF1ZXN0UGVybWlzc2lvbihnZW9sb2NhdGlvbik7
Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjpjYW5jZWxQZXJtaXNzaW9uUmVxdWVz
dChHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoZ2VvbG9jYXRpb24pOwotfQotCi12
b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25DaGFuZ2VkKEdlb2xvY2F0aW9uUG9z
aXRpb24qIHBvc2l0aW9uKQotewotICAgIG1fbGFzdFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAg
VmVjdG9yPFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBvYnNlcnZlcnNWZWN0b3I7Ci0gICAgY29weVRv
VmVjdG9yKG1fb2JzZXJ2ZXJzLCBvYnNlcnZlcnNWZWN0b3IpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb2JzZXJ2ZXJzVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvYnNlcnZlcnNW
ZWN0b3JbaV0tPnBvc2l0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uQ29udHJv
bGxlcjo6ZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVycm9yKiBlcnJvcikKLXsKLSAgICBWZWN0
b3I8UmVmUHRyPEdlb2xvY2F0aW9uPiA+IG9ic2VydmVyc1ZlY3RvcjsKLSAgICBjb3B5VG9WZWN0
b3IobV9vYnNlcnZlcnMsIG9ic2VydmVyc1ZlY3Rvcik7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYnNlcnZlcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgIG9ic2VydmVyc1ZlY3Rv
cltpXS0+c2V0RXJyb3IoZXJyb3IpOwotfQotCi1HZW9sb2NhdGlvblBvc2l0aW9uKiBHZW9sb2Nh
dGlvbkNvbnRyb2xsZXI6Omxhc3RQb3NpdGlvbigpCi17Ci0gICAgaWYgKG1fbGFzdFBvc2l0aW9u
LmdldCgpKQotICAgICAgICByZXR1cm4gbV9sYXN0UG9zaXRpb24uZ2V0KCk7Ci0KLSAgICBpZiAo
IW1fY2xpZW50KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NsaWVudC0+bGFz
dFBvc2l0aW9uKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
ODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR2VvbG9jYXRpb25Db250cm9sbGVyX2gK
LSNkZWZpbmUgR2VvbG9jYXRpb25Db250cm9sbGVyX2gKLQotI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCi0KLSNpbmNsdWRlICJHZW9sb2NhdGlvbi5oIgotI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdlb2xvY2F0aW9uQ2xp
ZW50OwotY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsKLWNsYXNzIEdlb2xvY2F0aW9uUG9zaXRpb247
Ci1jbGFzcyBQYWdlOwotCi1jbGFzcyBHZW9sb2NhdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdlb2xvY2F0aW9uQ29udHJvbGxlcik7Ci1wdWJsaWM6Ci0gICAgfkdl
b2xvY2F0aW9uQ29udHJvbGxlcigpOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8R2VvbG9jYXRp
b25Db250cm9sbGVyPiBjcmVhdGUoUGFnZSosIEdlb2xvY2F0aW9uQ2xpZW50Kik7Ci0KLSAgICB2
b2lkIGFkZE9ic2VydmVyKEdlb2xvY2F0aW9uKiwgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3kpOwot
ICAgIHZvaWQgcmVtb3ZlT2JzZXJ2ZXIoR2VvbG9jYXRpb24qKTsKLQotICAgIHZvaWQgcmVxdWVz
dFBlcm1pc3Npb24oR2VvbG9jYXRpb24qKTsKLSAgICB2b2lkIGNhbmNlbFBlcm1pc3Npb25SZXF1
ZXN0KEdlb2xvY2F0aW9uKik7Ci0KLSAgICB2b2lkIHBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlv
blBvc2l0aW9uKik7Ci0gICAgdm9pZCBlcnJvck9jY3VycmVkKEdlb2xvY2F0aW9uRXJyb3IqKTsK
LQotICAgIEdlb2xvY2F0aW9uUG9zaXRpb24qIGxhc3RQb3NpdGlvbigpOwotCi0gICAgR2VvbG9j
YXRpb25DbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0KLXByaXZhdGU6Ci0g
ICAgR2VvbG9jYXRpb25Db250cm9sbGVyKFBhZ2UqLCBHZW9sb2NhdGlvbkNsaWVudCopOwotCi0g
ICAgUGFnZSogbV9wYWdlOwotICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBtX2NsaWVudDsKLQotICAg
IFJlZlB0cjxHZW9sb2NhdGlvblBvc2l0aW9uPiBtX2xhc3RQb3NpdGlvbjsKLSAgICB0eXBlZGVm
IEhhc2hTZXQ8UmVmUHRyPEdlb2xvY2F0aW9uPiA+IE9ic2VydmVyc1NldDsKLSAgICAvLyBBbGwg
b2JzZXJ2ZXJzOyBib3RoIHRob3NlIHJlcXVlc3RpbmcgaGlnaCBhY2N1cmFjeSBhbmQgdGhvc2Ug
bm90LgotICAgIE9ic2VydmVyc1NldCBtX29ic2VydmVyczsKLSAgICBPYnNlcnZlcnNTZXQgbV9o
aWdoQWNjdXJhY3lPYnNlcnZlcnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotCi0jZW5kaWYgLy8gR2Vv
bG9jYXRpb25Db250cm9sbGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRp
b25FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25F
cnJvci5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBHZW9sb2NhdGlvbkVycm9yX2gKLSNkZWZpbmUgR2VvbG9jYXRpb25FcnJvcl9oCi0K
LSNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotCi0jaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEdlb2xvY2F0aW9uRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2Nh
dGlvbkVycm9yPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBFcnJvckNvZGUgewotICAgICAgICBQZXJt
aXNzaW9uRGVuaWVkLAotICAgICAgICBQb3NpdGlvblVuYXZhaWxhYmxlCi0gICAgfTsKLQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uRXJyb3I+IGNyZWF0ZShFcnJvckNvZGUgY29k
ZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRp
b25FcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KLQotICAgIEVycm9yQ29kZSBjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXNzYWdlOyB9Ci0KLXByaXZhdGU6Ci0gICAgR2VvbG9jYXRpb25FcnJvcihFcnJv
ckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotICAgICAgICA6IG1fY29kZShjb2Rl
KQotICAgICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBFcnJv
ckNvZGUgbV9jb2RlOwotICAgIFN0cmluZyBtX21lc3NhZ2U7IAotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikK
LQotI2VuZGlmIC8vIEdlb2xvY2F0aW9uRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvblBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvblBvc2l0aW9uLmgJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHZW9sb2NhdGlvblBvc2l0aW9uX2gKLSNkZWZp
bmUgR2VvbG9jYXRpb25Qb3NpdGlvbl9oCi0KLSNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xP
Q0FUSU9OKQotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2VvbG9j
YXRpb25Qb3NpdGlvbj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdlb2xvY2F0
aW9uUG9zaXRpb24+IGNyZWF0ZShkb3VibGUgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRv
dWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdl
b2xvY2F0aW9uUG9zaXRpb24odGltZXN0YW1wLCBsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFj
eSkpOyB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9sb2NhdGlvblBvc2l0aW9uPiBjcmVh
dGUoZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJv
b2wgcHJvdmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBk
b3VibGUgc3BlZWQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9sb2NhdGlvblBvc2l0aW9uKHRp
bWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUs
IGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHBy
b3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpKTsgfQotCi0gICAg
ZG91YmxlIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1wOyB9Ci0KLSAgICBk
b3VibGUgbGF0aXR1ZGUoKSBjb25zdCB7IHJldHVybiBtX2xhdGl0dWRlOyB9Ci0gICAgZG91Ymxl
IGxvbmdpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9uZ2l0dWRlOyB9Ci0gICAgZG91YmxlIGFj
Y3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9hY2N1cmFjeTsgfQotICAgIGRvdWJsZSBhbHRpdHVk
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0aXR1ZGU7IH0KLSAgICBkb3VibGUgYWx0aXR1ZGVBY2N1
cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0aXR1ZGVBY2N1cmFjeTsgfQotICAgIGRvdWJsZSBo
ZWFkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkaW5nOyB9Ci0gICAgZG91YmxlIHNwZWVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVlZDsgfQotCi0gICAgYm9vbCBjYW5Qcm92aWRlQWx0aXR1ZGUo
KSBjb25zdCB7IHJldHVybiBtX2NhblByb3ZpZGVBbHRpdHVkZTsgfQotICAgIGJvb2wgY2FuUHJv
dmlkZUFsdGl0dWRlQWNjdXJhY3koKSBjb25zdCB7IHJldHVybiBtX2NhblByb3ZpZGVBbHRpdHVk
ZUFjY3VyYWN5OyB9Ci0gICAgYm9vbCBjYW5Qcm92aWRlSGVhZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FuUHJvdmlkZUhlYWRpbmc7IH0KLSAgICBib29sIGNhblByb3ZpZGVTcGVlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FuUHJvdmlkZVNwZWVkOyB9Ci0KLXByaXZhdGU6Ci0gICAgR2VvbG9jYXRp
b25Qb3NpdGlvbihkb3VibGUgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSkKLSAgICAgICAgOiBtX3RpbWVzdGFtcCh0aW1lc3RhbXAp
Ci0gICAgICAgICwgbV9sYXRpdHVkZShsYXRpdHVkZSkKLSAgICAgICAgLCBtX2xvbmdpdHVkZShs
b25naXR1ZGUpCi0gICAgICAgICwgbV9hY2N1cmFjeShhY2N1cmFjeSkKLSAgICAgICAgLCBtX2Fs
dGl0dWRlKDApCi0gICAgICAgICwgbV9hbHRpdHVkZUFjY3VyYWN5KDApCi0gICAgICAgICwgbV9o
ZWFkaW5nKDApCi0gICAgICAgICwgbV9zcGVlZCgwKQotICAgICAgICAsIG1fY2FuUHJvdmlkZUFs
dGl0dWRlKGZhbHNlKQotICAgICAgICAsIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3koZmFs
c2UpCi0gICAgICAgICwgbV9jYW5Qcm92aWRlSGVhZGluZyhmYWxzZSkKLSAgICAgICAgLCBtX2Nh
blByb3ZpZGVTcGVlZChmYWxzZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR2VvbG9jYXRpb25Qb3Np
dGlvbihkb3VibGUgdGltZXN0YW1wLCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUs
IGRvdWJsZSBhY2N1cmFjeSwgYm9vbCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUs
IGJvb2wgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwg
Ym9vbCBwcm92aWRlc0hlYWRpbmcsIGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQs
IGRvdWJsZSBzcGVlZCkKLSAgICAgICAgOiBtX3RpbWVzdGFtcCh0aW1lc3RhbXApCi0gICAgICAg
ICwgbV9sYXRpdHVkZShsYXRpdHVkZSkKLSAgICAgICAgLCBtX2xvbmdpdHVkZShsb25naXR1ZGUp
Ci0gICAgICAgICwgbV9hY2N1cmFjeShhY2N1cmFjeSkKLSAgICAgICAgLCBtX2FsdGl0dWRlKGFs
dGl0dWRlKQotICAgICAgICAsIG1fYWx0aXR1ZGVBY2N1cmFjeShhbHRpdHVkZUFjY3VyYWN5KQot
ICAgICAgICAsIG1faGVhZGluZyhoZWFkaW5nKQotICAgICAgICAsIG1fc3BlZWQoc3BlZWQpCi0g
ICAgICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUocHJvdmlkZXNBbHRpdHVkZSkKLSAgICAgICAg
LCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSkK
LSAgICAgICAgLCBtX2NhblByb3ZpZGVIZWFkaW5nKHByb3ZpZGVzSGVhZGluZykKLSAgICAgICAg
LCBtX2NhblByb3ZpZGVTcGVlZChwcm92aWRlc1NwZWVkKQotICAgIHsKLSAgICB9Ci0KLSAgICBk
b3VibGUgbV90aW1lc3RhbXA7Ci0KLSAgICBkb3VibGUgbV9sYXRpdHVkZTsKLSAgICBkb3VibGUg
bV9sb25naXR1ZGU7Ci0gICAgZG91YmxlIG1fYWNjdXJhY3k7Ci0gICAgZG91YmxlIG1fYWx0aXR1
ZGU7Ci0gICAgZG91YmxlIG1fYWx0aXR1ZGVBY2N1cmFjeTsKLSAgICBkb3VibGUgbV9oZWFkaW5n
OwotICAgIGRvdWJsZSBtX3NwZWVkOwotCi0gICAgYm9vbCBtX2NhblByb3ZpZGVBbHRpdHVkZTsK
LSAgICBib29sIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3k7Ci0gICAgYm9vbCBtX2NhblBy
b3ZpZGVIZWFkaW5nOwotICAgIGJvb2wgbV9jYW5Qcm92aWRlU3BlZWQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FU
SU9OKQotCi0jZW5kaWYgLy8gR2VvbG9jYXRpb25Qb3NpdGlvbl9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0dlb3Bvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9wb3NpdGlvbi5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0dlb3Bvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEdlb3Bvc2l0aW9u
X2gKLSNkZWZpbmUgR2VvcG9zaXRpb25faAotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZXMuaCIKLSNp
bmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHZW9wb3Np
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb3Bvc2l0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPENvb3JkaW5hdGVz
PiBjb29yZGluYXRlcywgRE9NVGltZVN0YW1wIHRpbWVzdGFtcCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgR2VvcG9zaXRpb24oY29vcmRpbmF0ZXMsIHRpbWVzdGFtcCkpOwot
ICAgIH0KLQotICAgIFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+IGlzb2xhdGVkQ29weSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShtX2Nvb3JkaW5hdGVz
LT5pc29sYXRlZENvcHkoKSwgbV90aW1lc3RhbXApOwotICAgIH0KLQotICAgIERPTVRpbWVTdGFt
cCB0aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQotICAgIENvb3JkaW5h
dGVzKiBjb29yZHMoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGVzLmdldCgpOyB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIEdlb3Bvc2l0aW9uKFBhc3NSZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3Jk
aW5hdGVzLCBET01UaW1lU3RhbXAgdGltZXN0YW1wKQotICAgICAgICA6IG1fY29vcmRpbmF0ZXMo
Y29vcmRpbmF0ZXMpCi0gICAgICAgICwgbV90aW1lc3RhbXAodGltZXN0YW1wKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fY29vcmRpbmF0ZXMpOwotICAgIH0KLQotICAgIFJlZlB0cjxDb29yZGlu
YXRlcz4gbV9jb29yZGluYXRlczsKLSAgICBET01UaW1lU3RhbXAgbV90aW1lc3RhbXA7Ci19Owot
ICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR2VvcG9zaXRpb25faApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5pZGwJKHJldmlzaW9uIDEwODQ0OSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotbW9kdWxlIGNvcmUgewotCi0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9
R0VPTE9DQVRJT04sCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgotICAgIF0gR2VvcG9zaXRpb24g
ewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ29vcmRpbmF0ZXMgY29vcmRzOwotICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NVGltZVN0YW1wIHRpbWVzdGFtcDsKLSAgICB9OwotfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDEwODQ0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBQb3NpdGlvbkNhbGxiYWNrX2gKLSNkZWZpbmUgUG9zaXRpb25D
YWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLSAgICBjbGFzcyBHZW9wb3NpdGlvbjsKLQotICAgIGNsYXNzIFBvc2l0aW9uQ2Fs
bGJhY2sgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkNhbGxiYWNrPiB7Ci0gICAgcHVibGlj
OgotICAgICAgICB2aXJ0dWFsIH5Qb3NpdGlvbkNhbGxiYWNrKCkgeyB9Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVFdmVudChHZW9wb3NpdGlvbiopID0gMDsKLSAgICB9OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQb3NpdGlvbkNhbGxiYWNrX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbAkocmV2aXNpb24gMTA4NDQ5KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgY29yZSB7Ci0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9R0VPTE9DQVRJT04sCi0gICAgICAgIENhbGxi
YWNrCi0gICAgXSBQb3NpdGlvbkNhbGxiYWNrIHsKLSAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVu
dChpbiBHZW9wb3NpdGlvbiBwb3NpdGlvbik7Ci0gICAgfTsKLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUG9zaXRpb25FcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUG9zaXRpb25FcnJvci5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1Bvc2l0aW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9zaXRp
b25FcnJvcl9oCi0jZGVmaW5lIFBvc2l0aW9uRXJyb3JfaAotCi0jaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIFBvc2l0aW9uRXJy
b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkVycm9yPiB7Ci1wdWJsaWM6Ci0gICAgZW51
bSBFcnJvckNvZGUgewotICAgICAgICBQRVJNSVNTSU9OX0RFTklFRCA9IDEsCi0gICAgICAgIFBP
U0lUSU9OX1VOQVZBSUxBQkxFID0gMiwKLSAgICAgICAgVElNRU9VVCA9IDMKLSAgICB9OwotICAg
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZShFcnJvckNvZGUg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgUG9zaXRp
b25FcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KLQotICAgIEVycm9yQ29kZSBjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXNzYWdlOyB9Ci0gICAgdm9pZCBzZXRJc0ZhdGFsKGJvb2wgaXNGYXRhbCkgeyBt
X2lzRmF0YWwgPSBpc0ZhdGFsOyB9Ci0gICAgYm9vbCBpc0ZhdGFsKCkgY29uc3QgeyByZXR1cm4g
bV9pc0ZhdGFsOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFBvc2l0aW9uRXJyb3IoRXJyb3JDb2Rl
IGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgCi0gICAgICAgIDogbV9jb2RlKGNvZGUpCi0g
ICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICwgbV9pc0ZhdGFsKGZhbHNlKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgRXJyb3JDb2RlIG1fY29kZTsKLSAgICBTdHJpbmcgbV9t
ZXNzYWdlOwotICAgIC8vIFdoZXRoZXIgdGhlIGVycm9yIGlzIGZhdGFsLCBzdWNoIHRoYXQgbm8g
cmVxdWVzdCBjYW4gZXZlciBvYnRhaW4gYSBnb29kCi0gICAgLy8gcG9zaXRpb24gZml4IGluIHRo
ZSBmdXR1cmUuCi0gICAgYm9vbCBtX2lzRmF0YWw7Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUG9zaXRpb25FcnJvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Bvc2l0aW9uRXJyb3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUG9zaXRpb25FcnJvci5pZGwJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUG9zaXRpb25FcnJvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1tb2R1bGUgY29y
ZSB7Ci0KLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1HRU9MT0NBVElPTgot
ICAgIF0gUG9zaXRpb25FcnJvciB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25l
ZCBzaG9ydCBjb2RlOwotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3Nh
Z2U7Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUEVSTUlTU0lPTl9ERU5JRUQgPSAx
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQT1NJVElPTl9VTkFWQUlMQUJMRSA9IDI7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFRJTUVPVVQgPSAzOwotICAgIH07Ci0KLX0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaAkocmV2
aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgUG9zaXRpb25FcnJvckNhbGxiYWNr
X2gKLSNkZWZpbmUgUG9zaXRpb25FcnJvckNhbGxiYWNrX2gKLQotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIFBvc2l0aW9uRXJy
b3I7Ci0KLSAgICBjbGFzcyBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgOiBwdWJsaWMgUmVmQ291bnRl
ZDxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwg
flBvc2l0aW9uRXJyb3JDYWxsYmFjaygpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
RXZlbnQoUG9zaXRpb25FcnJvciopID0gMDsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBQb3NpdGlvbkVycm9yQ2FsbGJhY2tfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbAkocmV2aXNpb24gMTA4NDQ5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBjb3JlIHsK
LSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1HRU9MT0NBVElPTiwKLSAgICAg
ICAgQ2FsbGJhY2sKLSAgICBdIFBvc2l0aW9uRXJyb3JDYWxsYmFjayB7Ci0gICAgICAgIGJvb2xl
YW4gaGFuZGxlRXZlbnQoaW4gUG9zaXRpb25FcnJvciBlcnJvcik7Ci0gICAgfTsKLX0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbk9wdGlvbnMuaAkocmV2aXNpb24gMTA4NDQ5KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbk9wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgUG9zaXRpb25PcHRpb25zX2gKLSNkZWZpbmUgUG9zaXRpb25PcHRpb25zX2gK
LQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgUG9zaXRpb25PcHRpb25zIDog
cHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25PcHRpb25zPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgUG9zaXRpb25PcHRpb25zKCkpOyB9Ci0KLSAgICBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSgp
IGNvbnN0IHsgcmV0dXJuIG1faGlnaEFjY3VyYWN5OyB9Ci0gICAgdm9pZCBzZXRFbmFibGVIaWdo
QWNjdXJhY3koYm9vbCBlbmFibGUpIHsgbV9oaWdoQWNjdXJhY3kgPSBlbmFibGU7IH0KLSAgICBi
b29sIGhhc1RpbWVvdXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RpbWVvdXQ7IH0KLSAgICBpbnQg
dGltZW91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzVGltZW91dCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fdGltZW91dDsKLSAgICB9Ci0gICAgdm9pZCBzZXRUaW1lb3V0KGludCB0
aW1lb3V0KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHRpbWVvdXQgPj0gMCk7Ci0gICAgICAgIG1f
aGFzVGltZW91dCA9IHRydWU7Ci0gICAgICAgIG1fdGltZW91dCA9IHRpbWVvdXQ7Ci0gICAgfQot
ICAgIGJvb2wgaGFzTWF4aW11bUFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF4aW11bUFnZTsg
fQotICAgIGludCBtYXhpbXVtQWdlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNN
YXhpbXVtQWdlKCkpOwotICAgICAgICByZXR1cm4gbV9tYXhpbXVtQWdlOwotICAgIH0KLSAgICB2
b2lkIGNsZWFyTWF4aW11bUFnZSgpIHsgbV9oYXNNYXhpbXVtQWdlID0gZmFsc2U7IH0KLSAgICB2
b2lkIHNldE1heGltdW1BZ2UoaW50IGFnZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChhZ2UgPj0g
MCk7Ci0gICAgICAgIG1faGFzTWF4aW11bUFnZSA9IHRydWU7Ci0gICAgICAgIG1fbWF4aW11bUFn
ZSA9IGFnZTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIFBvc2l0aW9uT3B0aW9ucygpCi0g
ICAgICAgIDogbV9oaWdoQWNjdXJhY3koZmFsc2UpCi0gICAgICAgICwgbV9oYXNUaW1lb3V0KGZh
bHNlKQotICAgIHsKLSAgICAgICAgc2V0TWF4aW11bUFnZSgwKTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBtX2hpZ2hBY2N1cmFjeTsKLSAgICBib29sIG1faGFzVGltZW91dDsKLSAgICBpbnQgbV90
aW1lb3V0OwotICAgIGJvb2wgbV9oYXNNYXhpbXVtQWdlOwotICAgIGludCBtX21heGltdW1BZ2U7
Ci19OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUG9zaXRpb25P
cHRpb25zX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128153</attachid>
            <date>2012-02-22 01:15:00 -0800</date>
            <delta_ts>2012-02-22 01:15:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79204-20120222011459.patch</filename>
            <type>text/plain</type>
            <size>187702</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODQ1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDEyLTAyLTIyICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgTW92ZSBHZW9sb2NhdGlvbiBjb2Rl
IGludG8gTW9kdWxlcy9nZW9sb2NhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzkyMDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGVyZSBhcmUgc3RpbGwgc29tZSBkYW5nbGluZyByZWZlcmVuY2Vz
IGludG8gdGhlIEdlb2xvY2F0aW9uIG1vZHVsZSwKKyAgICAgICAgd2hpY2ggSSB3aWxsIGNsZWFu
IHVwIGluIGEgZm9sbG93dXAgcGF0Y2guCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLnBy
aToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvZ2Vv
bG9jYXRpb24vR2VvbG9jYXRpb24uY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uLmNwcC4KKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0
aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaC4KKyAg
ICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5pZGwuCisgICAgICAgICogTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAuCisgICAgICAgICogTW9kdWxl
cy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaC4KKyAgICAgICAgKiBNb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbkVycm9yLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlv
bi9HZW9sb2NhdGlvblBvc2l0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Qb3NpdGlvbi5oLgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
cG9zaXRpb24uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5o
LgorICAgICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaWRsOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbC4KKyAgICAgICAgKiBNb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2Nh
dGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bv
c2l0aW9uRXJyb3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVy
cm9yLmguCisgICAgICAgICogTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yLmlkbDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yLmlkbC4KKyAgICAg
ICAgKiBNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oLgorICAgICAg
ICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsLgorICAg
ICAgICAqIE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25PcHRpb25zLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmguCisgICAgICAgICogVGFyZ2V0
LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBhZ2UvR2VvbG9jYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9u
LmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBwYWdlL0dlb2xvY2F0aW9uRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwYWdlL0dlb2xvY2F0aW9uUG9zaXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL0dl
b3Bvc2l0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9HZW9wb3NpdGlvbi5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdl
L1Bvc2l0aW9uRXJyb3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL1Bvc2l0aW9uRXJyb3Iu
aWRsOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmg6IFJl
bW92ZWQuCisgICAgICAgICogcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIHBhZ2UvUG9zaXRpb25PcHRpb25zLmg6IFJlbW92ZWQuCisKIDIwMTItMDIt
MjEgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9t
aXVtXSBOZXcgQ0NPY2NsdXNpb25UcmFja2VyIGNsYXNzIHdpdGggdGVzdHMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCwxMiBAQCBTRVQoV2ViQ29yZV9J
RExfSU5DTFVERVMKICkKIAogU0VUKFdlYkNvcmVfSURMX0ZJTEVTCisgICAgTW9kdWxlcy9nZW9s
b2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0
aW9uLmlkbAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRs
CisgICAgTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAorICAgIE1vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwKIAogICAgIGNzcy9Db3VudGVyLmlkbAogICAgIGNz
cy9DU1NDaGFyc2V0UnVsZS5pZGwKQEAgLTMzMyw4ICszMzgsNiBAQCBTRVQoV2ViQ29yZV9JRExf
RklMRVMKICAgICBwYWdlL0RPTVNlbGVjdGlvbi5pZGwKICAgICBwYWdlL0RPTVdpbmRvdy5pZGwK
ICAgICBwYWdlL0V2ZW50U291cmNlLmlkbAotICAgIHBhZ2UvR2VvbG9jYXRpb24uaWRsCi0gICAg
cGFnZS9HZW9wb3NpdGlvbi5pZGwKICAgICBwYWdlL0hpc3RvcnkuaWRsCiAgICAgcGFnZS9Mb2Nh
dGlvbi5pZGwKICAgICBwYWdlL01lbW9yeUluZm8uaWRsCkBAIC0zNDIsOSArMzQ1LDYgQEAgU0VU
KFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5pZGwKICAgICBwYWdlL1Bl
cmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwKICAgICBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmlkbAot
ICAgIHBhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwKLSAgICBwYWdlL1Bvc2l0aW9uRXJyb3IuaWRs
Ci0gICAgcGFnZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCiAgICAgcGFnZS9TY3JlZW4uaWRs
CiAgICAgcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmlkbAogICAgIHBhZ2UvU3BlZWNoSW5wdXRSZXN1
bHQuaWRsCkBAIC00MDUsNiArNDA1LDggQEAgU0VUKFdlYkNvcmVfSURMX0ZJTEVTCiApCiAKIFNF
VChXZWJDb3JlX1NPVVJDRVMKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNw
cAorICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAogICAg
IE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwCiAKICAgICBhY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xMDIxLDggKzEwMjMsNiBAQCBTRVQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGFnZS9GcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwCiAgICAg
cGFnZS9GcmFtZVRyZWUuY3BwCiAgICAgcGFnZS9GcmFtZVZpZXcuY3BwCi0gICAgcGFnZS9HZW9s
b2NhdGlvbi5jcHAKLSAgICBwYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAKICAgICBwYWdl
L0dyb3VwU2V0dGluZ3MuY3BwCiAgICAgcGFnZS9IaXN0b3J5LmNwcAogICAgIHBhZ2UvTG9jYXRp
b24uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDEwODQ0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDEyIEBAIFZQQVRIID0gXAogIwogCiBCSU5ESU5HX0lETFMgPSBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbCBcCisgICAgJChX
ZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbCBcCiAgICAgJChXZWJD
b3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0aW9uLmlkbCBcCisgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKKyAg
ICAkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwgXAorICAg
ICQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRs
IFwKICAgICAkKFdlYkNvcmUpL2Nzcy9DU1NDaGFyc2V0UnVsZS5pZGwgXAogICAgICQoV2ViQ29y
ZSkvY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwgXAogICAgICQoV2ViQ29yZSkvY3NzL0NTU0ltcG9y
dFJ1bGUuaWRsIFwKQEAgLTMxOSw4ICszMjQsNiBAQCBCSU5ESU5HX0lETFMgPSBcCiAgICAgJChX
ZWJDb3JlKS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9ET01X
aW5kb3cuaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwKLSAgICAk
KFdlYkNvcmUpL3BhZ2UvR2VvbG9jYXRpb24uaWRsIFwKLSAgICAkKFdlYkNvcmUpL3BhZ2UvR2Vv
cG9zaXRpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvSGlzdG9yeS5pZGwgXAogICAgICQo
V2ViQ29yZSkvcGFnZS9Mb2NhdGlvbi5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9NZW1vcnlJ
bmZvLmlkbCBcCkBAIC0zMjgsOSArMzMxLDYgQEAgQklORElOR19JRExTID0gXAogICAgICQoV2Vi
Q29yZSkvcGFnZS9QZXJmb3JtYW5jZS5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9QZXJmb3Jt
YW5jZU5hdmlnYXRpb24uaWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvUGVyZm9ybWFuY2VUaW1p
bmcuaWRsIFwKLSAgICAkKFdlYkNvcmUpL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwgXAotICAg
ICQoV2ViQ29yZSkvcGFnZS9Qb3NpdGlvbkVycm9yLmlkbCBcCi0gICAgJChXZWJDb3JlKS9wYWdl
L1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQoV2ViQ29yZSkvcGFnZS9TY3JlZW4u
aWRsIFwKICAgICAkKFdlYkNvcmUpL3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5pZGwgXAogICAgICQo
V2ViQ29yZSkvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApJbmRleDogU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLnByaQkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMucHJpCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4NiwxMiBAQCBTVFlMRVNIRUVU
U19FTUJFRCA9IFwKICAgICAkJFBXRC9jc3MvbW9iaWxlVGhlbWVRdC5jc3MKIAogSURMX0JJTkRJ
TkdTICs9IFwKKyAgICAkJFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmlkbCBc
CisgICAgJCRQV0QvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwgXAogICAgICQk
UFdEL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uaWRsIFwKKyAgICAk
JFBXRC9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2suaWRsIFwKKyAgICAkJFBX
RC9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsIFwKKyAgICAkJFBXRC9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQkUFdEL2Nz
cy9Db3VudGVyLmlkbCBcCiAgICAgJCRQV0QvY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCBcCiAgICAg
JCRQV0QvY3NzL0NTU0ZvbnRGYWNlUnVsZS5pZGwgXApAQCAtMzQzLDggKzM0OCw2IEBAIElETF9C
SU5ESU5HUyArPSBcCiAgICAgJCRQV0QvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKICAgICAkJFBX
RC9wYWdlL0RPTVdpbmRvdy5pZGwgXAogICAgICQkUFdEL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwK
LSAgICAkJFBXRC9wYWdlL0dlb2xvY2F0aW9uLmlkbCBcCi0gICAgJCRQV0QvcGFnZS9HZW9wb3Np
dGlvbi5pZGwgXAogICAgICQkUFdEL3BhZ2UvSGlzdG9yeS5pZGwgXAogICAgICQkUFdEL3BhZ2Uv
TG9jYXRpb24uaWRsIFwKICAgICAkJFBXRC9wYWdlL01lbW9yeUluZm8uaWRsIFwKQEAgLTM1Miw5
ICszNTUsNiBAQCBJRExfQklORElOR1MgKz0gXAogICAgICQkUFdEL3BhZ2UvUGVyZm9ybWFuY2Uu
aWRsIFwKICAgICAkJFBXRC9wYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwgXAogICAgICQk
UFdEL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsIFwKLSAgICAkJFBXRC9wYWdlL1Bvc2l0aW9u
Q2FsbGJhY2suaWRsIFwKLSAgICAkJFBXRC9wYWdlL1Bvc2l0aW9uRXJyb3IuaWRsIFwKLSAgICAk
JFBXRC9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAogICAgICQkUFdEL3BhZ2UvU2Ny
ZWVuLmlkbCBcCiAgICAgJCRQV0QvcGFnZS9TcGVlY2hJbnB1dEV2ZW50LmlkbCBcCiAgICAgJCRQ
V0QvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApJbmRleDogU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC02NTAsNyArNjUwLDEyIEBAIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YUGF0aEdyYW1tYXIuaAog
CiBkb21fYmluZGluZ19pZGxzICs9IFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvbG9jYXRpb24uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9z
aXRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2Vv
bG9jYXRpb24uaWRsIFwKKwkkKFdlYkNvcmUpL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25D
YWxsYmFjay5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVy
cm9yLmlkbCBcCisJJChXZWJDb3JlKS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JD
YWxsYmFjay5pZGwgXAogCSQoV2ViQ29yZSkvY3NzL0NTU0NoYXJzZXRSdWxlLmlkbCBcCiAJJChX
ZWJDb3JlKS9jc3MvQ1NTRm9udEZhY2VSdWxlLmlkbCBcCiAJJChXZWJDb3JlKS9jc3MvQ1NTSW1w
b3J0UnVsZS5pZGwgXApAQCAtODk4LDggKzkwMyw2IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAog
CSQoV2ViQ29yZSkvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvRE9N
V2luZG93LmlkbCBcCiAJJChXZWJDb3JlKS9wYWdlL0V2ZW50U291cmNlLmlkbCBcCi0JJChXZWJD
b3JlKS9wYWdlL0dlb2xvY2F0aW9uLmlkbCBcCi0JJChXZWJDb3JlKS9wYWdlL0dlb3Bvc2l0aW9u
LmlkbCBcCiAJJChXZWJDb3JlKS9wYWdlL0hpc3RvcnkuaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2Uv
TG9jYXRpb24uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvTWVtb3J5SW5mby5pZGwgXApAQCAtOTA3
LDkgKzkxMCw2IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2ViQ29yZSkvcGFnZS9QZXJm
b3JtYW5jZS5pZGwgXAogCSQoV2ViQ29yZSkvcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uaWRs
IFwKIAkkKFdlYkNvcmUpL3BhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuaWRsIFwKLQkkKFdlYkNvcmUp
L3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwgXAotCSQoV2ViQ29yZSkvcGFnZS9Qb3NpdGlvbkVy
cm9yLmlkbCBcCi0JJChXZWJDb3JlKS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwgXAog
CSQoV2ViQ29yZSkvcGFnZS9TY3JlZW4uaWRsIFwKIAkkKFdlYkNvcmUpL3BhZ2UvU3BlZWNoSW5w
dXRFdmVudC5pZGwgXAogCSQoV2ViQ29yZSkvcGFnZS9TcGVlY2hJbnB1dFJlc3VsdC5pZGwgXApA
QCAtOTUyLDggKzk1MiwxOSBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL3ht
bC9YU0xUUHJvY2Vzc29yLmlkbAogCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCBcCisJU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkVycm9yLmggXAorCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Qb3NpdGlvbi5oIFwK
KwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmggXAogCVNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL05hdmlnYXRvckdlb2xvY2F0
aW9uLmggXAorCVNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxs
YmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJy
b3IuaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9y
Q2FsbGJhY2suaCBcCisJU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlv
bk9wdGlvbnMuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmNwcCBcCkBAIC0yNzE1LDE0ICsyNzI2LDcgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVHJlZS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uY3BwIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25DbGllbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xs
ZXIuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oIFwK
LQlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaCBcCi0JU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvR2Vv
cG9zaXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL0dlc3R1cmVUYXBIaWdobGlnaHRlci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wYWdlL0dyb3VwU2V0dGluZ3MuY3BwIFwKQEAgLTI3NjcsMTAgKzI3NzEs
NiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9pbnRlckxv
Y2suaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Qb2ludGVyTG9ja0NvbnRyb2xsZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BvaW50ZXJMb2NrQ29udHJvbGxlci5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaCBcCi0JU291cmNlL1dlYkNvcmUvcGFnZS9Q
b3NpdGlvbkVycm9yLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxi
YWNrLmggXAotCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUHJpbnRDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Q
cmludENvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9TY3JlZW4uY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTA4NDUwKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBpbmNsdWRlX3dlYmluc3BlY3RvciB7
CiB9CiAKIFNPVVJDRVMgKz0gXAorICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24u
Y3BwIFwKKyAgICBNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAg
XAogICAgIE1vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24uY3BwIFwKICAg
ICBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmNwcCBcCkBA
IC05OTEsOCArOTkzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9GcmFtZURlc3RydWN0aW9u
T2JzZXJ2ZXIuY3BwIFwKICAgICBwYWdlL0ZyYW1lVHJlZS5jcHAgXAogICAgIHBhZ2UvRnJhbWVW
aWV3LmNwcCBcCi0gICAgcGFnZS9HZW9sb2NhdGlvbi5jcHAgXAotICAgIHBhZ2UvR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9HZXN0dXJlVGFwSGlnaGxpZ2h0ZXIuY3BwIFwK
ICAgICBwYWdlL0dyb3VwU2V0dGluZ3MuY3BwIFwKICAgICBwYWdlL0hpc3RvcnkuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwODQ1MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDE1IEBACiAgICAgICAgICdwcm9q
ZWN0X2Rpcic6IFsnLiddLAogICAgICAgICAjIFRoZXNlIGhlYWRlcnMgYXJlIHBhcnQgb2YgV2Vi
Q29yZSdzIHByaXZhdGUgQVBJIGluIHRoZSBBcHBsZSBNYWMgYnVpbGQuCiAgICAgICAgICd3ZWJj
b3JlX3ByaXZhdGVoZWFkZXJfZmlsZXMnOiBbCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvbi5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb2xvY2F0aW9uRXJyb3IuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9H
ZW9sb2NhdGlvblBvc2l0aW9uLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24v
R2VvcG9zaXRpb24uaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlv
bkNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25F
cnJvci5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JD
YWxsYmFjay5oJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0
aW9ucy5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCcsCiAg
ICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL1NjcmlwdENvbnRyb2xsZXJCYXNlLmgnLApAQCAtMjA3LDEyICsyMTYs
NyBAQAogICAgICAgICAgICAgJ3BhZ2UvRnJhbWUuaCcsCiAgICAgICAgICAgICAncGFnZS9GcmFt
ZVRyZWUuaCcsCiAgICAgICAgICAgICAncGFnZS9GcmFtZVZpZXcuaCcsCi0gICAgICAgICAgICAn
cGFnZS9HZW9sb2NhdGlvbi5oJywKICAgICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uQ2xpZW50
LmgnLAotICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmgnLAotICAgICAg
ICAgICAgJ3BhZ2UvR2VvbG9jYXRpb25FcnJvci5oJywKLSAgICAgICAgICAgICdwYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb24uaCcsCi0gICAgICAgICAgICAncGFnZS9HZW9wb3NpdGlvbi5oJywKICAg
ICAgICAgICAgICdwYWdlL0dyb3VwU2V0dGluZ3MuaCcsCiAgICAgICAgICAgICAncGFnZS9NZWRp
YUNhblN0YXJ0TGlzdGVuZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9NZW1vcnlJbmZvLmgnLApA
QCAtMjIxLDEwICsyMjUsNiBAQAogICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCcs
CiAgICAgICAgICAgICAncGFnZS9QYWdlU3VwcGxlbWVudC5oJywKICAgICAgICAgICAgICdwYWdl
L1BhZ2VWaXNpYmlsaXR5U3RhdGUuaCcsCi0gICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxi
YWNrLmgnLAotICAgICAgICAgICAgJ3BhZ2UvUG9zaXRpb25FcnJvci5oJywKLSAgICAgICAgICAg
ICdwYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oJywKLSAgICAgICAgICAgICdwYWdlL1Bvc2l0
aW9uT3B0aW9ucy5oJywKICAgICAgICAgICAgICdwYWdlL1ByaW50Q29udGV4dC5oJywKICAgICAg
ICAgICAgICdwYWdlL1NlY3VyaXR5T3JpZ2luLmgnLAogICAgICAgICAgICAgJ3BhZ2UvU2VjdXJp
dHlPcmlnaW5IYXNoLmgnLApAQCAtNzIwLDcgKzcyMCwxMiBAQAogICAgICAgICAgICAgJ01vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRMaXN0LmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuaWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmlkbCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9wb3NpdGlvbi5pZGwn
LAogICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2aWdhdG9yR2VvbG9jYXRpb24u
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uQ2FsbGJhY2su
aWRsJywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRs
JywKKyAgICAgICAgICAgICdNb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFj
ay5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWRE
YXRhYmFzZS5pZGwnLAogICAgICAgICAgICAgJ01vZHVsZXMvaW50ZW50cy9ET01XaW5kb3dJbnRl
bnRzLmlkbCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbnRlbnRzL0ludGVudC5pZGwnLApAQCAt
MTAwNiw4ICsxMDExLDYgQEAKICAgICAgICAgICAgICdwYWdlL0RPTVNlbGVjdGlvbi5pZGwnLAog
ICAgICAgICAgICAgJ3BhZ2UvRE9NV2luZG93LmlkbCcsCiAgICAgICAgICAgICAncGFnZS9FdmVu
dFNvdXJjZS5pZGwnLAotICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb24uaWRsJywKLSAgICAg
ICAgICAgICdwYWdlL0dlb3Bvc2l0aW9uLmlkbCcsCiAgICAgICAgICAgICAncGFnZS9IaXN0b3J5
LmlkbCcsCiAgICAgICAgICAgICAncGFnZS9Mb2NhdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3Bh
Z2UvTWVtb3J5SW5mby5pZGwnLApAQCAtMTAxNyw5ICsxMDIwLDYgQEAKICAgICAgICAgICAgICdw
YWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9y
bWFuY2VUaW1pbmcuaWRsJywKICAgICAgICAgICAgICdwYWdlL1BvaW50ZXJMb2NrLmlkbCcsCi0g
ICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmlkbCcsCi0gICAgICAgICAgICAncGFn
ZS9Qb3NpdGlvbkVycm9yLmlkbCcsCi0gICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkVycm9yQ2Fs
bGJhY2suaWRsJywKICAgICAgICAgICAgICdwYWdlL1NjcmVlbi5pZGwnLAogICAgICAgICAgICAg
J3BhZ2UvU3BlZWNoSW5wdXRFdmVudC5pZGwnLAogICAgICAgICAgICAgJ3BhZ2UvU3BlZWNoSW5w
dXRSZXN1bHQuaWRsJywKQEAgLTEyNzksNiArMTI3OSw4IEBACiAgICAgICAgICAgICAnTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRMaXN0LmgnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2FtZXBhZC9O
YXZpZ2F0b3JHYW1lcGFkLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nYW1lcGFkL05hdmln
YXRvckdhbWVwYWQuaCcsCisgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvbi5jcHAnLAorICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25D
b250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9nZW9sb2NhdGlvbi9OYXZpZ2F0
b3JHZW9sb2NhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ01vZHVsZXMvZ2VvbG9jYXRpb24vTmF2
aWdhdG9yR2VvbG9jYXRpb24uaCcsCiAgICAgICAgICAgICAnTW9kdWxlcy9pbmRleGVkZGIvRE9N
V2luZG93SW5kZXhlZERhdGFiYXNlLmNwcCcsCkBAIC0yNjI5LDggKzI2MzEsNiBAQAogICAgICAg
ICAgICAgJ3BhZ2UvRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvRnJhbWVUcmVlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9GcmFtZVZpZXcuY3BwJywKLSAg
ICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uLmNwcCcsCi0gICAgICAgICAgICAncGFnZS9HZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL0dyb3VwU2V0dGluZ3Mu
Y3BwJywKICAgICAgICAgICAgICdwYWdlL0hpc3RvcnkuY3BwJywKICAgICAgICAgICAgICdwYWdl
L0hpc3RvcnkuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dl
b2xvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xv
Y2F0aW9uL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uLmNwcDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2gg
TW9iaWxlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2Ug
UHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uLmgiCisKKyNpZiBFTkFCTEUo
R0VPTE9DQVRJT04pCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiR2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorI2luY2x1
ZGUgIkNvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCisj
aW5jbHVkZSAiR2VvbG9jYXRpb25FcnJvci5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRp
b24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbkVycm9yLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdl
W10gPSAiVXNlciBkZW5pZWQgR2VvbG9jYXRpb24iOworc3RhdGljIGNvbnN0IGNoYXIgZmFpbGVk
VG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2VbXSA9ICJGYWlsZWQgdG8gc3RhcnQgR2VvbG9jYXRp
b24gc2VydmljZSI7CitzdGF0aWMgY29uc3QgY2hhciBmcmFtZWxlc3NEb2N1bWVudEVycm9yTWVz
c2FnZVtdID0gIkdlb2xvY2F0aW9uIGNhbm5vdCBiZSB1c2VkIGluIGZyYW1lbGVzcyBkb2N1bWVu
dHMiOworCitzdGF0aWMgY29uc3QgaW50IGZpcnN0QXZhaWxhYmxlV2F0Y2hJZCA9IDE7CisKKyNp
ZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCitzdGF0aWMgUGFzc1JlZlB0cjxH
ZW9wb3NpdGlvbj4gY3JlYXRlR2VvcG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbiogcG9zaXRp
b24pCit7CisgICAgaWYgKCFwb3NpdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
UmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcyA9IENvb3JkaW5hdGVzOjpjcmVhdGUocG9z
aXRpb24tPmxhdGl0dWRlKCksIHBvc2l0aW9uLT5sb25naXR1ZGUoKSwgcG9zaXRpb24tPmNhblBy
b3ZpZGVBbHRpdHVkZSgpLCBwb3NpdGlvbi0+YWx0aXR1ZGUoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPmFjY3Vy
YWN5KCksIHBvc2l0aW9uLT5jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpLCBwb3NpdGlvbi0+
YWx0aXR1ZGVBY2N1cmFjeSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLT5jYW5Qcm92aWRlSGVhZGluZygpLCBwb3Np
dGlvbi0+aGVhZGluZygpLCBwb3NpdGlvbi0+Y2FuUHJvdmlkZVNwZWVkKCksIHBvc2l0aW9uLT5z
cGVlZCgpKTsKKyAgICByZXR1cm4gR2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxl
YXNlKCksIGNvbnZlcnRTZWNvbmRzVG9ET01UaW1lU3RhbXAocG9zaXRpb24tPnRpbWVzdGFtcCgp
KSk7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZVBvc2l0aW9u
RXJyb3IoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCit7CisgICAgUG9zaXRpb25FcnJvcjo6RXJy
b3JDb2RlIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRTsKKyAgICBz
d2l0Y2ggKGVycm9yLT5jb2RlKCkpIHsKKyAgICBjYXNlIEdlb2xvY2F0aW9uRXJyb3I6OlBlcm1p
c3Npb25EZW5pZWQ6CisgICAgICAgIGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RF
TklFRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlv
blVuYXZhaWxhYmxlOgorICAgICAgICBjb2RlID0gUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5B
VkFJTEFCTEU7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBQb3NpdGlvbkVy
cm9yOjpjcmVhdGUoY29kZSwgZXJyb3ItPm1lc3NhZ2UoKSk7Cit9CisjZW5kaWYKKworR2VvbG9j
YXRpb246Okdlb05vdGlmaWVyOjpHZW9Ob3RpZmllcihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24s
IFBhc3NSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlv
bk9wdGlvbnM+IG9wdGlvbnMpCisgICAgOiBtX2dlb2xvY2F0aW9uKGdlb2xvY2F0aW9uKQorICAg
ICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQorICAgICwgbV9lcnJvckNhbGxi
YWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKKyAgICAsIG1fdGlt
ZXIodGhpcywgJkdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCkKKyAgICAsIG1f
dXNlQ2FjaGVkUG9zaXRpb24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fZ2VvbG9jYXRpb24pOwor
ICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CisgICAgLy8gSWYgbm8gb3B0aW9ucyB3ZXJl
IHN1cHBsaWVkIGZyb20gSlMsIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBkZWZhdWx0IHNldAor
ICAgIC8vIG9mIG9wdGlvbnMgaW4gSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAuCisgICAgQVNTRVJU
KG1fb3B0aW9ucyk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRGYXRh
bEVycm9yKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IpCit7CisgICAgLy8gSWYgYSBm
YXRhbCBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHNldCwgc3RpY2sgd2l0aCBpdC4gVGhpcyBtYWtl
cyBzdXJlIHRoYXQKKyAgICAvLyB3aGVuIHBlcm1pc3Npb24gaXMgZGVuaWVkLCB0aGlzIGlzIHRo
ZSBlcnJvciByZXBvcnRlZCwgYXMgcmVxdWlyZWQgYnkgdGhlCisgICAgLy8gc3BlYy4KKyAgICBp
ZiAobV9mYXRhbEVycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZhdGFsRXJyb3IgPSBl
cnJvcjsKKyAgICAvLyBBbiBleGlzdGluZyB0aW1lciBtYXkgbm90IGhhdmUgYSB6ZXJvIHRpbWVv
dXQuCisgICAgbV90aW1lci5zdG9wKCk7CisgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRVc2VDYWNoZWRQb3NpdGlvbigp
Cit7CisgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IHRydWU7CisgICAgbV90aW1lci5zdGFydE9u
ZVNob3QoMCk7Cit9CisKK2Jvb2wgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpoYXNaZXJvVGlt
ZW91dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fb3B0aW9ucy0+aGFzVGltZW91dCgpICYmIG1f
b3B0aW9ucy0+dGltZW91dCgpID09IDA7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlm
aWVyOjpydW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1f
c3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChwb3NpdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9j
YXRpb246Okdlb05vdGlmaWVyOjpzdGFydFRpbWVySWZOZWVkZWQoKQoreworICAgIGlmIChtX29w
dGlvbnMtPmhhc1RpbWVvdXQoKSkKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QobV9vcHRp
b25zLT50aW1lb3V0KCkgLyAxMDAwLjApOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3Rp
Zmllcjo6dGltZXJGaXJlZChUaW1lcjxHZW9Ob3RpZmllcj4qKQoreworICAgIG1fdGltZXIuc3Rv
cCgpOworCisgICAgLy8gUHJvdGVjdCB0aGlzIEdlb05vdGlmaWVyIG9iamVjdCwgc2luY2UgaXQK
KyAgICAvLyBjb3VsZCBiZSBkZWxldGVkIGJ5IGEgY2FsbCB0byBjbGVhcldhdGNoIGluIGEgY2Fs
bGJhY2suCisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgLy8g
VGVzdCBmb3IgZmF0YWwgZXJyb3IgZmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBjYXNl
IHdoZXJlIHRoZSBGcmFtZSBpcworICAgIC8vIGRpc2Nvbm5lY3RlZCBhbmQgcmVxdWVzdHMgYXJl
IGNhbmNlbGxlZC4KKyAgICBpZiAobV9mYXRhbEVycm9yKSB7CisgICAgICAgIGlmIChtX2Vycm9y
Q2FsbGJhY2spCisgICAgICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZmF0
YWxFcnJvci5nZXQoKSk7CisgICAgICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGlzIG5vdGlmaWVy
IHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIG1fZ2VvbG9jYXRpb24tPmZhdGFsRXJyb3JPY2N1cnJl
ZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3VzZUNhY2hlZFBv
c2l0aW9uKSB7CisgICAgICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgcG9zaXRpb24gZmxhZyBpbiBj
YXNlIHRoaXMgaXMgYSB3YXRjaCByZXF1ZXN0LCB3aGljaAorICAgICAgICAvLyB3aWxsIGNvbnRp
bnVlIHRvIHJ1bi4KKyAgICAgICAgbV91c2VDYWNoZWRQb3NpdGlvbiA9IGZhbHNlOworICAgICAg
ICBtX2dlb2xvY2F0aW9uLT5yZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgeworICAgICAgICBS
ZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRp
b25FcnJvcjo6VElNRU9VVCwgIlRpbWVvdXQgZXhwaXJlZCIpOworICAgICAgICBtX2Vycm9yQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KGVycm9yLmdldCgpKTsKKyAgICB9CisgICAgbV9nZW9sb2NhdGlv
bi0+cmVxdWVzdFRpbWVkT3V0KHRoaXMpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVy
czo6c2V0KGludCBpZCwgUGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gcHJwTm90aWZpZXIpCit7Cisg
ICAgQVNTRVJUKGlkID4gMCk7CisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHBy
cE5vdGlmaWVyOworCisgICAgbV9pZFRvTm90aWZpZXJNYXAuc2V0KGlkLCBub3RpZmllci5nZXQo
KSk7CisgICAgbV9ub3RpZmllclRvSWRNYXAuc2V0KG5vdGlmaWVyLnJlbGVhc2UoKSwgaWQpOwor
fQorCitHZW9sb2NhdGlvbjo6R2VvTm90aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Zmlu
ZChpbnQgaWQpCit7CisgICAgQVNTRVJUKGlkID4gMCk7CisgICAgSWRUb05vdGlmaWVyTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pZFRvTm90aWZpZXJNYXAuZmluZChpZCk7CisgICAgaWYgKGl0ZXIg
PT0gbV9pZFRvTm90aWZpZXJNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBpdGVyLT5zZWNvbmQuZ2V0KCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpy
ZW1vdmUoaW50IGlkKQoreworICAgIEFTU0VSVChpZCA+IDApOworICAgIElkVG9Ob3RpZmllck1h
cDo6aXRlcmF0b3IgaXRlciA9IG1faWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOworICAgIGlmIChp
dGVyID09IG1faWRUb05vdGlmaWVyTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9u
b3RpZmllclRvSWRNYXAucmVtb3ZlKGl0ZXItPnNlY29uZCk7CisgICAgbV9pZFRvTm90aWZpZXJN
YXAucmVtb3ZlKGl0ZXIpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3Zl
KEdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX25vdGlmaWVyVG9JZE1hcC5maW5kKG5vdGlmaWVyKTsKKyAgICBpZiAoaXRlciA9
PSBtX25vdGlmaWVyVG9JZE1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRUb05v
dGlmaWVyTWFwLnJlbW92ZShpdGVyLT5zZWNvbmQpOworICAgIG1fbm90aWZpZXJUb0lkTWFwLnJl
bW92ZShpdGVyKTsKK30KKworYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5zKEdl
b05vdGlmaWVyKiBub3RpZmllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub3RpZmllclRvSWRN
YXAuY29udGFpbnMobm90aWZpZXIpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6
Y2xlYXIoKQoreworICAgIG1faWRUb05vdGlmaWVyTWFwLmNsZWFyKCk7CisgICAgbV9ub3RpZmll
clRvSWRNYXAuY2xlYXIoKTsKK30KKworYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmlzRW1w
dHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkVG9Ob3RpZmllck1hcC5pc0VtcHR5KCk7Cit9
CisKK3ZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpnZXROb3RpZmllcnNWZWN0b3IoR2VvTm90
aWZpZXJWZWN0b3ImIGNvcHkpIGNvbnN0Cit7CisgICAgY29weVZhbHVlc1RvVmVjdG9yKG1faWRU
b05vdGlmaWVyTWFwLCBjb3B5KTsKK30KKworR2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKEZyYW1l
KiBmcmFtZSkKKyAgICA6IERPTVdpbmRvd1Byb3BlcnR5KGZyYW1lKQorI2lmICFFTkFCTEUoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAgICwgbV9zZXJ2aWNlKEdlb2xvY2F0aW9uU2Vydmlj
ZTo6Y3JlYXRlKHRoaXMpKQorI2VuZGlmCisgICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93
bikKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9m
cmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9s
b2NhdGlvbih0cnVlKTsKK30KKworR2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpCit7CisgICAg
QVNTRVJUKG1fYWxsb3dHZW9sb2NhdGlvbiAhPSBJblByb2dyZXNzKTsKKyAgICBBU1NFUlQoIW1f
ZnJhbWUpOworfQorCitQYWdlKiBHZW9sb2NhdGlvbjo6cGFnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fZnJhbWUgPyBtX2ZyYW1lLT5wYWdlKCkgOiAwOworfQorCit2b2lkIEdlb2xvY2F0aW9u
OjpyZXNldCgpCit7CisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAocGFn
ZSAmJiBtX2FsbG93R2VvbG9jYXRpb24gPT0gSW5Qcm9ncmVzcykgeworI2lmIEVOQUJMRShDTElF
TlRfQkFTRURfR0VPTE9DQVRJT04pCisgICAgICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxl
cigpLT5jYW5jZWxQZXJtaXNzaW9uUmVxdWVzdCh0aGlzKTsKKyNlbHNlCisgICAgICAgIHBhZ2Ut
PmNocm9tZSgpLT5jbGllbnQoKS0+Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZv
ckZyYW1lKG1fZnJhbWUsIHRoaXMpOworI2VuZGlmCisgICAgfQorICAgIC8vIFRoZSBmcmFtZSBt
YXkgYmUgbW92aW5nIHRvIGEgbmV3IHBhZ2UgYW5kIHdlIHdhbnQgdG8gZ2V0IHRoZSBwZXJtaXNz
aW9ucyBmcm9tIHRoZSBuZXcgcGFnZSdzIGNsaWVudC4KKyAgICBtX2FsbG93R2VvbG9jYXRpb24g
PSBVbmtub3duOworICAgIGNhbmNlbEFsbFJlcXVlc3RzKCk7CisgICAgc3RvcFVwZGF0aW5nKCk7
CisjaWYgVVNFKFBSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKKyAgICBtX3BlbmRpbmdG
b3JQZXJtaXNzaW9uTm90aWZpZXJzLmNsZWFyKCk7CisjZW5kaWYKK30KKwordm9pZCBHZW9sb2Nh
dGlvbjo6ZGlzY29ubmVjdEZyYW1lKCkKK3sKKyAgICAvLyBPbmNlIHdlIGFyZSBkaXNjb25uZWN0
ZWQgZnJvbSB0aGUgRnJhbWUsIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBwZXJmb3JtIGFu
eSBvcGVyYXRpb25zLgorICAgIHJlc2V0KCk7CisgICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+
ZG9jdW1lbnQoKSkKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9sb2Nh
dGlvbihmYWxzZSk7CisgICAgRE9NV2luZG93UHJvcGVydHk6OmRpc2Nvbm5lY3RGcmFtZSgpOwor
fQorCitHZW9wb3NpdGlvbiogR2VvbG9jYXRpb246Omxhc3RQb3NpdGlvbigpCit7CisjaWYgRU5B
QkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xhc3RQb3Np
dGlvbiA9IGNyZWF0ZUdlb3Bvc2l0aW9uKHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5s
YXN0UG9zaXRpb24oKSk7CisjZWxzZQorICAgIG1fbGFzdFBvc2l0aW9uID0gbV9zZXJ2aWNlLT5s
YXN0UG9zaXRpb24oKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgp
OworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oUGFzc1JlZlB0cjxQ
b3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0
aW9ucykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0
cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBzdGFydFJlcXVlc3Qoc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrLCBvcHRpb25zKTsKKyAgICBBU1NFUlQobm90aWZpZXIpOworCisgICAgbV9v
bmVTaG90cy5hZGQobm90aWZpZXIpOworfQorCitpbnQgR2VvbG9jYXRpb246OndhdGNoUG9zaXRp
b24oUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0
aW9uT3B0aW9ucz4gb3B0aW9ucykKK3sKKyAgICBpZiAoIW1fZnJhbWUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChz
dWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMpOworICAgIEFTU0VSVChub3Rp
Zmllcik7CisKKyAgICBzdGF0aWMgaW50IG5leHRBdmFpbGFibGVXYXRjaElkID0gZmlyc3RBdmFp
bGFibGVXYXRjaElkOworICAgIC8vIEluIGNhc2Ugb2Ygb3ZlcmZsb3csIG1ha2Ugc3VyZSB0aGUg
SUQgcmVtYWlucyBwb3NpdGl2ZSwgYnV0IHJldXNlIHRoZSBJRCB2YWx1ZXMuCisgICAgaWYgKG5l
eHRBdmFpbGFibGVXYXRjaElkIDwgMSkKKyAgICAgICAgbmV4dEF2YWlsYWJsZVdhdGNoSWQgPSAx
OworICAgIG1fd2F0Y2hlcnMuc2V0KG5leHRBdmFpbGFibGVXYXRjaElkLCBub3RpZmllci5yZWxl
YXNlKCkpOworICAgIHJldHVybiBuZXh0QXZhaWxhYmxlV2F0Y2hJZCsrOworfQorCitQYXNzUmVm
UHRyPEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcj4gR2VvbG9jYXRpb246OnN0YXJ0UmVxdWVzdChQ
YXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQ
b3NpdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25P
cHRpb25zPiBvcHRpb25zKQoreworICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBH
ZW9Ob3RpZmllcjo6Y3JlYXRlKHRoaXMsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
b3B0aW9ucyk7CisKKyAgICAvLyBDaGVjayB3aGV0aGVyIHBlcm1pc3Npb25zIGhhdmUgYWxyZWFk
eSBiZWVuIGRlbmllZC4gTm90ZSB0aGF0IGlmIHRoaXMgaXMgdGhlIGNhc2UsCisgICAgLy8gdGhl
IHBlcm1pc3Npb24gc3RhdGUgY2FuIG5vdCBjaGFuZ2UgYWdhaW4gaW4gdGhlIGxpZmV0aW1lIG9m
IHRoaXMgcGFnZS4KKyAgICBpZiAoaXNEZW5pZWQoKSkKKyAgICAgICAgbm90aWZpZXItPnNldEZh
dGFsRXJyb3IoUG9zaXRpb25FcnJvcjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05f
REVOSUVELCBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlKSk7CisgICAgZWxzZSBpZiAoaGF2
ZVN1aXRhYmxlQ2FjaGVkUG9zaXRpb24obm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCisgICAg
ICAgIG5vdGlmaWVyLT5zZXRVc2VDYWNoZWRQb3NpdGlvbigpOworICAgIGVsc2UgaWYgKG5vdGlm
aWVyLT5oYXNaZXJvVGltZW91dCgpKQorICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVl
ZGVkKCk7CisjaWYgVVNFKFBSRUVNUFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKKyAgICBlbHNl
IGlmICghaXNBbGxvd2VkKCkpIHsKKyAgICAgICAgLy8gaWYgd2UgZG9uJ3QgeWV0IGhhdmUgcGVy
bWlzc2lvbiwgcmVxdWVzdCBmb3IgcGVybWlzc2lvbiBiZWZvcmUgY2FsbGluZyBzdGFydFVwZGF0
aW5nKCkKKyAgICAgICAgbV9wZW5kaW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5hZGQobm90aWZp
ZXIpOworICAgICAgICByZXF1ZXN0UGVybWlzc2lvbigpOworICAgIH0KKyNlbmRpZgorICAgIGVs
c2UgaWYgKHN0YXJ0VXBkYXRpbmcobm90aWZpZXIuZ2V0KCkpKQorICAgICAgICBub3RpZmllci0+
c3RhcnRUaW1lcklmTmVlZGVkKCk7CisgICAgZWxzZQorICAgICAgICBub3RpZmllci0+c2V0RmF0
YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5B
VkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisKKyAgICByZXR1
cm4gbm90aWZpZXIucmVsZWFzZSgpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9y
T2NjdXJyZWQoR2VvbG9jYXRpb246Okdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBU
aGlzIHJlcXVlc3QgaGFzIGZhaWxlZCBmYXRhbGx5LiBSZW1vdmUgaXQgZnJvbSBvdXIgbGlzdHMu
CisgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworICAgIG1fd2F0Y2hlcnMucmVtb3Zl
KG5vdGlmaWVyKTsKKworICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAgIHN0b3BVcGRh
dGluZygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9u
KEdlb05vdGlmaWVyKiBub3RpZmllcikKK3sKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hy
b25vdXNseSwgc28gdGhlIHBlcm1pc3Npb25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKKyAgICAv
LyBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQgaW4gc3RhcnRSZXF1ZXN0LgorICAgIGlmIChpc0Rlbmll
ZCgpKSB7CisgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNy
ZWF0ZShQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVy
cm9yTWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9yZXF1ZXN0c0F3
YWl0aW5nQ2FjaGVkUG9zaXRpb24uYWRkKG5vdGlmaWVyKTsKKworICAgIC8vIElmIHBlcm1pc3Np
b25zIGFyZSBhbGxvd2VkLCBtYWtlIHRoZSBjYWxsYmFjaworICAgIGlmIChpc0FsbG93ZWQoKSkg
eworICAgICAgICBtYWtlQ2FjaGVkUG9zaXRpb25DYWxsYmFja3MoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFJlcXVlc3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5j
aHJvbm91cyBvciBhc3luY2hyb25vdXMuCisgICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbjo6bWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKK3sKKyAgICAv
LyBBbGwgbW9kaWZpY2F0aW9ucyB0byBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBh
cmUgZG9uZQorICAgIC8vIGFzeW5jaHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5
IGFib3V0IGl0IGJlaW5nIG1vZGlmaWVkIGZyb20KKyAgICAvLyB0aGUgY2FsbGJhY2tzLgorICAg
IEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdD
YWNoZWRQb3NpdGlvbi5lbmQoKTsKKyAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVy
LT5nZXQoKTsKKyAgICAgICAgbm90aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFjayhtX2NhY2hlZFBv
c2l0aW9uLmdldCgpKTsKKworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVz
dCwgc3RvcCBpdC4gT3RoZXJ3aXNlLCBpZiB0aGUgd2F0Y2ggc3RpbGwKKyAgICAgICAgLy8gZXhp
c3RzLCBzdGFydCB0aGUgc2VydmljZSB0byBnZXQgdXBkYXRlcy4KKyAgICAgICAgaWYgKG1fb25l
U2hvdHMuY29udGFpbnMobm90aWZpZXIpKQorICAgICAgICAgICAgbV9vbmVTaG90cy5yZW1vdmUo
bm90aWZpZXIpOworICAgICAgICBlbHNlIGlmIChtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVy
KSkgeworICAgICAgICAgICAgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0
VXBkYXRpbmcobm90aWZpZXIpKQorICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVy
SWZOZWVkZWQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub3RpZmllci0+
c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJ
T05fVU5BVkFJTEFCTEUsIGZhaWxlZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVh
cigpOworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90
aWZpZXIpCit7CisgICAgLy8gSWYgdGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQu
CisgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOworCisgICAgaWYgKCFoYXNMaXN0ZW5l
cnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7Cit9CisKK2Jvb2wgR2VvbG9jYXRpb246Omhh
dmVTdWl0YWJsZUNhY2hlZFBvc2l0aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK3sKKyAg
ICBpZiAoIW1fY2FjaGVkUG9zaXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IW9wdGlvbnMtPmhhc01heGltdW1BZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KCFvcHRpb25zLT5tYXhpbXVtQWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBET01U
aW1lU3RhbXAgY3VycmVudFRpbWVNaWxsaXMgPSBjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1w
KGN1cnJlbnRUaW1lKCkpOworICAgIHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLT50aW1lc3RhbXAo
KSA+IGN1cnJlbnRUaW1lTWlsbGlzIC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOworfQorCit2b2lk
IEdlb2xvY2F0aW9uOjpjbGVhcldhdGNoKGludCB3YXRjaElkKQoreworICAgIGlmICh3YXRjaElk
IDwgZmlyc3RBdmFpbGFibGVXYXRjaElkKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoUFJF
RU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQorICAgIGlmIChHZW9Ob3RpZmllciogbm90aWZp
ZXIgPSBtX3dhdGNoZXJzLmZpbmQod2F0Y2hJZCkpCisgICAgICAgIG1fcGVuZGluZ0ZvclBlcm1p
c3Npb25Ob3RpZmllcnMucmVtb3ZlKG5vdGlmaWVyKTsKKyNlbmRpZgorICAgIG1fd2F0Y2hlcnMu
cmVtb3ZlKHdhdGNoSWQpOworICAgIAorICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCisgICAgICAg
IHN0b3BVcGRhdGluZygpOworfQorCit2b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9v
bCBhbGxvd2VkKQoreworICAgIC8vIFByb3RlY3QgdGhlIEdlb2xvY2F0aW9uIG9iamVjdCBmcm9t
IGdhcmJhZ2UgY29sbGVjdGlvbiBkdXJpbmcgYSBjYWxsYmFjay4KKyAgICBSZWZQdHI8R2VvbG9j
YXRpb24+IHByb3RlY3QodGhpcyk7CisKKyAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gZWl0aGVy
IGEgbmV3IHBvc2l0aW9uIGZyb20gdGhlIHNlcnZpY2UsIG9yIGEgY2FjaGVkCisgICAgLy8gcG9z
aXRpb24uCisgICAgbV9hbGxvd0dlb2xvY2F0aW9uID0gYWxsb3dlZCA/IFllcyA6IE5vOworICAg
IAorI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCisgICAgLy8gUGVybWlz
c2lvbiByZXF1ZXN0IHdhcyBtYWRlIGR1cmluZyB0aGUgc3RhcnRSZXF1ZXN0IHByb2Nlc3MKKyAg
ICBpZiAoIW1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGhhbmRsZVBlbmRpbmdQZXJtaXNzaW9uTm90aWZpZXJzKCk7CisgICAgICAgIG1fcGVuZGlu
Z0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyNlbmRpZgorCisgICAgaWYgKCFpc0FsbG93ZWQoKSkgeworICAgICAgICBSZWZQdHI8UG9zaXRp
b25FcnJvcj4gZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVS
TUlTU0lPTl9ERU5JRUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpOworICAgICAgICBl
cnJvci0+c2V0SXNGYXRhbCh0cnVlKTsKKyAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkp
OworICAgICAgICBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSWYgdGhlIHNlcnZpY2UgaGFzIGEgbGFzdCBw
b3NpdGlvbiwgdXNlIGl0IHRvIGNhbGwgYmFjayBmb3IgYWxsIHJlcXVlc3RzLgorICAgIC8vIElm
IGFueSBvZiB0aGUgcmVxdWVzdHMgYXJlIHdhaXRpbmcgZm9yIHBlcm1pc3Npb24gZm9yIGEgY2Fj
aGVkIHBvc2l0aW9uLAorICAgIC8vIHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIHdpbGwg
YmUgYXQgbGVhc3QgYXMgZnJlc2guCisgICAgaWYgKGxhc3RQb3NpdGlvbigpKQorICAgICAgICBt
YWtlU3VjY2Vzc0NhbGxiYWNrcygpOworICAgIGVsc2UKKyAgICAgICAgbWFrZUNhY2hlZFBvc2l0
aW9uQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNlbmRFcnJvcihHZW9Ob3Rp
ZmllclZlY3RvciYgbm90aWZpZXJzLCBQb3NpdGlvbkVycm9yKiBlcnJvcikKK3sKKyAgICAgR2Vv
Tm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKKyAg
ICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+
IG5vdGlmaWVyID0gKml0OworICAgICAgICAgCisgICAgICAgICBpZiAobm90aWZpZXItPm1fZXJy
b3JDYWxsYmFjaykKKyAgICAgICAgICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5k
bGVFdmVudChlcnJvcik7CisgICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvbjo6c2VuZFBvc2l0
aW9uKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbikK
K3sKKyAgICBHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJz
LmVuZCgpOworICAgIGZvciAoR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZWZQdHI8R2Vv
Tm90aWZpZXI+IG5vdGlmaWVyID0gKml0OworICAgICAgICBBU1NFUlQobm90aWZpZXItPm1fc3Vj
Y2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgCisgICAgICAgIG5vdGlmaWVyLT5tX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQocG9zaXRpb24pOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlv
bjo6c3RvcFRpbWVyKEdlb05vdGlmaWVyVmVjdG9yJiBub3RpZmllcnMpCit7CisgICAgR2VvTm90
aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKKyAgICBm
b3IgKEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3Rp
ZmllciA9ICppdDsKKyAgICAgICAgbm90aWZpZXItPm1fdGltZXIuc3RvcCgpOworICAgIH0KK30K
Kwordm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVyc0Zvck9uZVNob3RzKCkKK3sKKyAgICBHZW9O
b3RpZmllclZlY3RvciBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsK
KyAgICAKKyAgICBzdG9wVGltZXIoY29weSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnN0b3BU
aW1lcnNGb3JXYXRjaGVycygpCit7CisgICAgR2VvTm90aWZpZXJWZWN0b3IgY29weTsKKyAgICBt
X3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcihjb3B5KTsKKyAgICAKKyAgICBzdG9wVGltZXIo
Y29weSk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnN0b3BUaW1lcnMoKQoreworICAgIHN0b3BU
aW1lcnNGb3JPbmVTaG90cygpOworICAgIHN0b3BUaW1lcnNGb3JXYXRjaGVycygpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uOjpjYW5jZWxSZXF1ZXN0cyhHZW9Ob3RpZmllclZlY3RvciYgbm90aWZp
ZXJzKQoreworICAgIEdlb05vdGlmaWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub3Rp
ZmllcnMuZW5kKCk7CisgICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBub3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+
c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJ
T05fVU5BVkFJTEFCTEUsIGZyYW1lbGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlKSk7Cit9CisKK3Zv
aWQgR2VvbG9jYXRpb246OmNhbmNlbEFsbFJlcXVlc3RzKCkKK3sKKyAgICBHZW9Ob3RpZmllclZl
Y3RvciBjb3B5OworICAgIGNvcHlUb1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsKKyAgICBjYW5j
ZWxSZXF1ZXN0cyhjb3B5KTsKKyAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcihjb3B5
KTsKKyAgICBjYW5jZWxSZXF1ZXN0cyhjb3B5KTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6ZXh0
cmFjdE5vdGlmaWVyc1dpdGhDYWNoZWRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZp
ZXJzLCBHZW9Ob3RpZmllclZlY3RvciogY2FjaGVkKQoreworICAgIEdlb05vdGlmaWVyVmVjdG9y
IG5vbkNhY2hlZDsKKyAgICBHZW9Ob3RpZmllclZlY3Rvcjo6aXRlcmF0b3IgZW5kID0gbm90aWZp
ZXJzLmVuZCgpOworICAgIGZvciAoR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBHZW9Ob3Rp
Zmllciogbm90aWZpZXIgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChub3RpZmllci0+bV91c2VD
YWNoZWRQb3NpdGlvbikgeworICAgICAgICAgICAgaWYgKGNhY2hlZCkKKyAgICAgICAgICAgICAg
ICBjYWNoZWQtPmFwcGVuZChub3RpZmllcik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
bm9uQ2FjaGVkLmFwcGVuZChub3RpZmllcik7CisgICAgfQorICAgIG5vdGlmaWVycy5zd2FwKG5v
bkNhY2hlZCk7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OmNvcHlUb1NldChjb25zdCBHZW9Ob3Rp
ZmllclZlY3RvciYgc3JjLCBHZW9Ob3RpZmllclNldCYgZGVzdCkKK3sKKyAgICAgR2VvTm90aWZp
ZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNyYy5lbmQoKTsKKyAgICAgZm9yIChHZW9O
b3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzcmMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdC0+Z2V0KCk7Cisg
ICAgICAgICBkZXN0LmFkZChub3RpZmllcik7CisgICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlv
bjo6aGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciogZXJyb3IpCit7CisgICAgQVNTRVJUKGVycm9y
KTsKKyAgICAKKyAgICBHZW9Ob3RpZmllclZlY3RvciBvbmVTaG90c0NvcHk7CisgICAgY29weVRv
VmVjdG9yKG1fb25lU2hvdHMsIG9uZVNob3RzQ29weSk7CisKKyAgICBHZW9Ob3RpZmllclZlY3Rv
ciB3YXRjaGVyc0NvcHk7CisgICAgbV93YXRjaGVycy5nZXROb3RpZmllcnNWZWN0b3Iod2F0Y2hl
cnNDb3B5KTsKKworICAgIC8vIENsZWFyIHRoZSBsaXN0cyBiZWZvcmUgd2UgbWFrZSB0aGUgY2Fs
bGJhY2tzLCB0byBhdm9pZCBjbGVhcmluZyBub3RpZmllcnMKKyAgICAvLyBhZGRlZCBieSBjYWxs
cyB0byBHZW9sb2NhdGlvbiBtZXRob2RzIGZyb20gdGhlIGNhbGxiYWNrcywgYW5kIHRvIHByZXZl
bnQKKyAgICAvLyBmdXJ0aGVyIGNhbGxiYWNrcyB0byB0aGVzZSBub3RpZmllcnMuCisgICAgR2Vv
Tm90aWZpZXJWZWN0b3Igb25lU2hvdHNXaXRoQ2FjaGVkUG9zaXRpb247CisgICAgbV9vbmVTaG90
cy5jbGVhcigpOworICAgIGlmIChlcnJvci0+aXNGYXRhbCgpKQorICAgICAgICBtX3dhdGNoZXJz
LmNsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIERvbid0IHNlbmQgbm9uLWZhdGFsIGVy
cm9ycyB0byBub3RpZmllcnMgZHVlIHRvIHJlY2VpdmUgYSBjYWNoZWQgcG9zaXRpb24uCisgICAg
ICAgIGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24ob25lU2hvdHNDb3B5LCAmb25l
U2hvdHNXaXRoQ2FjaGVkUG9zaXRpb24pOworICAgICAgICBleHRyYWN0Tm90aWZpZXJzV2l0aENh
Y2hlZFBvc2l0aW9uKHdhdGNoZXJzQ29weSwgMCk7CisgICAgfQorCisgICAgc2VuZEVycm9yKG9u
ZVNob3RzQ29weSwgZXJyb3IpOworICAgIHNlbmRFcnJvcih3YXRjaGVyc0NvcHksIGVycm9yKTsK
KworICAgIC8vIGhhc0xpc3RlbmVycygpIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBub3Rp
ZmllcnMgZHVlIHRvIHJlY2VpdmUgYQorICAgIC8vIGNhY2hlZCBwb3NpdGlvbiBhbmQgdGhvc2Ug
cmVxdWlyaW5nIGEgZnJlc2ggcG9zaXRpb24uIFBlcmZvcm0gdGhlIGNoZWNrCisgICAgLy8gYmVm
b3JlIHJlc3RvcmluZyB0aGUgbm90aWZpZXJzIGJlbG93LgorICAgIGlmICghaGFzTGlzdGVuZXJz
KCkpCisgICAgICAgIHN0b3BVcGRhdGluZygpOworCisgICAgLy8gTWFpbnRhaW4gYSByZWZlcmVu
Y2UgdG8gdGhlIGNhY2hlZCBub3RpZmllcnMgdW50aWwgdGhlaXIgdGltZXIgZmlyZXMuCisgICAg
Y29weVRvU2V0KG9uZVNob3RzV2l0aENhY2hlZFBvc2l0aW9uLCBtX29uZVNob3RzKTsKK30KKwor
dm9pZCBHZW9sb2NhdGlvbjo6cmVxdWVzdFBlcm1pc3Npb24oKQoreworICAgIGlmIChtX2FsbG93
R2VvbG9jYXRpb24gPiBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAgICBQYWdlKiBwYWdl
ID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9hbGxvd0dlb2xvY2F0aW9uID0gSW5Qcm9ncmVzczsKKworICAgIC8vIEFzayB0aGUgZW1iZWRk
ZXI6IGl0IG1haW50YWlucyB0aGUgZ2VvbG9jYXRpb24gY2hhbGxlbmdlIHBvbGljeSBpdHNlbGYu
CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAgICBwYWdlLT5nZW9sb2Nh
dGlvbkNvbnRyb2xsZXIoKS0+cmVxdWVzdFBlcm1pc3Npb24odGhpcyk7CisjZWxzZQorICAgIHBh
Z2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZy
YW1lKG1fZnJhbWUsIHRoaXMpOworI2VuZGlmCit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnBvc2l0
aW9uQ2hhbmdlZEludGVybmFsKCkKK3sKKyAgICBtX2NhY2hlZFBvc2l0aW9uID0gbGFzdFBvc2l0
aW9uKCk7CisKKyAgICAvLyBTdG9wIGFsbCBjdXJyZW50bHkgcnVubmluZyB0aW1lcnMuCisgICAg
c3RvcFRpbWVycygpOworCisgICAgaWYgKCFpc0FsbG93ZWQoKSkgeworICAgICAgICAvLyByZXF1
ZXN0UGVybWlzc2lvbigpIHdpbGwgYXNrIHRoZSBjaHJvbWUgZm9yIHBlcm1pc3Npb24uIFRoaXMg
bWF5IGJlCisgICAgICAgIC8vIGltcGxlbWVudGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9u
b3VzbHkuIEluIGJvdGggY2FzZXMsCisgICAgICAgIC8vIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCkg
d2lsbCBiZSBjYWxsZWQgaWYgcGVybWlzc2lvbiBpcyBncmFudGVkLCBzbworICAgICAgICAvLyB0
aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkbyBoZXJlLgorICAgICAgICByZXF1ZXN0UGVybWlzc2lv
bigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3Mo
KTsKK30KKwordm9pZCBHZW9sb2NhdGlvbjo6bWFrZVN1Y2Nlc3NDYWxsYmFja3MoKQoreworICAg
IEFTU0VSVChsYXN0UG9zaXRpb24oKSk7CisgICAgQVNTRVJUKGlzQWxsb3dlZCgpKTsKKyAgICAK
KyAgICBHZW9Ob3RpZmllclZlY3RvciBvbmVTaG90c0NvcHk7CisgICAgY29weVRvVmVjdG9yKG1f
b25lU2hvdHMsIG9uZVNob3RzQ29weSk7CisgICAgCisgICAgR2VvTm90aWZpZXJWZWN0b3Igd2F0
Y2hlcnNDb3B5OworICAgIG1fd2F0Y2hlcnMuZ2V0Tm90aWZpZXJzVmVjdG9yKHdhdGNoZXJzQ29w
eSk7CisgICAgCisgICAgLy8gQ2xlYXIgdGhlIGxpc3RzIGJlZm9yZSB3ZSBtYWtlIHRoZSBjYWxs
YmFja3MsIHRvIGF2b2lkIGNsZWFyaW5nIG5vdGlmaWVycworICAgIC8vIGFkZGVkIGJ5IGNhbGxz
IHRvIEdlb2xvY2F0aW9uIG1ldGhvZHMgZnJvbSB0aGUgY2FsbGJhY2tzLCBhbmQgdG8gcHJldmVu
dAorICAgIC8vIGZ1cnRoZXIgY2FsbGJhY2tzIHRvIHRoZXNlIG5vdGlmaWVycy4KKyAgICBtX29u
ZVNob3RzLmNsZWFyKCk7CisKKyAgICBzZW5kUG9zaXRpb24ob25lU2hvdHNDb3B5LCBsYXN0UG9z
aXRpb24oKSk7CisgICAgc2VuZFBvc2l0aW9uKHdhdGNoZXJzQ29weSwgbGFzdFBvc2l0aW9uKCkp
OworCisgICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKKyAgICAgICAgc3RvcFVwZGF0aW5nKCk7Cit9
CisKKyNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCit2b2lkIEdlb2xvY2F0
aW9uOjpwb3NpdGlvbkNoYW5nZWQoKQoreworICAgIHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7
Cit9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNldEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqIGVycm9y
KQoreworICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBwb3NpdGlvbkVycm9yID0gY3JlYXRlUG9z
aXRpb25FcnJvcihlcnJvcik7CisgICAgaGFuZGxlRXJyb3IocG9zaXRpb25FcnJvci5nZXQoKSk7
Cit9CisKKyNlbHNlCisKK3ZvaWQgR2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2VydmljZVBvc2l0
aW9uQ2hhbmdlZChHZW9sb2NhdGlvblNlcnZpY2UqIHNlcnZpY2UpCit7CisgICAgQVNTRVJUX1VO
VVNFRChzZXJ2aWNlLCBzZXJ2aWNlID09IG1fc2VydmljZSk7CisgICAgQVNTRVJUKG1fc2Vydmlj
ZS0+bGFzdFBvc2l0aW9uKCkpOworCisgICAgcG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKTsKK30K
Kwordm9pZCBHZW9sb2NhdGlvbjo6Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZChHZW9s
b2NhdGlvblNlcnZpY2UqIHNlcnZpY2UpCit7CisgICAgQVNTRVJUKHNlcnZpY2UtPmxhc3RFcnJv
cigpKTsKKworICAgIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3RvcCB0aW1lcnMgaGVyZS4gRm9y
IG9uZS1zaG90cywgdGhlIHJlcXVlc3QgaXMKKyAgICAvLyBjbGVhcmVkIGluIGhhbmRsZUVycm9y
LiBGb3Igd2F0Y2hlcnMsIHRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHRpbWVyIGlzCisgICAg
Ly8gbm90IGNsZWFyZWQuCisgICAgaGFuZGxlRXJyb3Ioc2VydmljZS0+bGFzdEVycm9yKCkpOwor
fQorCisjZW5kaWYKKworYm9vbCBHZW9sb2NhdGlvbjo6c3RhcnRVcGRhdGluZyhHZW9Ob3RpZmll
ciogbm90aWZpZXIpCit7CisjaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyAg
ICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcGFnZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmFkZE9ic2Vy
dmVyKHRoaXMsIG5vdGlmaWVyLT5tX29wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRhdGlu
Zyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpKTsKKyNlbmRpZgorfQorCit2b2lkIEdlb2xvY2F0
aW9uOjpzdG9wVXBkYXRpbmcoKQoreworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJ
T04pCisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVP
YnNlcnZlcih0aGlzKTsKKyNlbHNlCisgICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKKyNl
bmRpZgorCit9CisKKyNpZiBVU0UoUFJFRU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQordm9p
ZCBHZW9sb2NhdGlvbjo6aGFuZGxlUGVuZGluZ1Blcm1pc3Npb25Ob3RpZmllcnMoKQoreworICAg
IC8vIFdoaWxlIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCwgd2UgbmVlZCBub3Qgd29ycnkg
YWJvdXQgbGlzdCBiZWluZyBtb2RpZmllZCBhcyB0aGUgcGVybWlzc2lvbiAKKyAgICAvLyBpcyBh
bHJlYWR5IHNldCB0byBZZXMvTm8gYW5kIG5vIG5ldyBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZCB0
byB0aGUgcGVuZGluZyBsaXN0CisgICAgR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuZW5kKCk7CisgICAgZm9yIChHZW9O
b3RpZmllclNldDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25O
b3RpZmllcnMuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBHZW9Ob3Rp
Zmllciogbm90aWZpZXIgPSBpdGVyLT5nZXQoKTsKKworICAgICAgICBpZiAoaXNBbGxvd2VkKCkp
IHsKKyAgICAgICAgICAgIC8vIHN0YXJ0IGFsbCBwZW5kaW5nIG5vdGlmaWNhdGlvbiByZXF1ZXN0
cyBhcyBwZXJtaXNzaW9uIGdyYW50ZWQuCisgICAgICAgICAgICAvLyBUaGUgbm90aWZpZXIgaXMg
YWx3YXlzIHJlZidlZCBieSBtX29uZVNob3RzIG9yIG1fd2F0Y2hlcnMuCisgICAgICAgICAgICBp
ZiAoc3RhcnRVcGRhdGluZyhub3RpZmllcikpCisgICAgICAgICAgICAgICAgbm90aWZpZXItPnN0
YXJ0VGltZXJJZk5lZWRlZCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5v
dGlmaWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9y
OjpQT1NJVElPTl9VTkFWQUlMQUJMRSwgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2Up
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQ
b3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBl
cm1pc3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpKTsKKyAgICB9Cit9CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZWxzZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
R2VvbG9jYXRpb246OmNsZWFyV2F0Y2goaW50KSB7fQorCit2b2lkIEdlb2xvY2F0aW9uOjpyZXNl
dCgpIHt9CisKK3ZvaWQgR2VvbG9jYXRpb246OmRpc2Nvbm5lY3RGcmFtZSgpIHt9CisKK0dlb2xv
Y2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSopIDogRE9NV2luZG93UHJvcGVydHkoMCkge30KKwor
R2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpIHt9CisKK3ZvaWQgR2VvbG9jYXRpb246OnNldElz
QWxsb3dlZChib29sKSB7fQorCit9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9u
LmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBHZW9s
b2NhdGlvbl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uX2gKKworI2luY2x1ZGUgIkRPTVdpbmRvd1By
b3BlcnR5LmgiCisjaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbkNh
bGxiYWNrLmgiCisjaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgorI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisKKyNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKyNpbmNs
dWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lOworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCitj
bGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOworY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsKKyNlbmRp
ZgorY2xhc3MgUGFnZTsKKworY2xhc3MgR2VvbG9jYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxH
ZW9sb2NhdGlvbj4sIHB1YmxpYyBET01XaW5kb3dQcm9wZXJ0eQorI2lmICFFTkFCTEUoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKSAmJiBFTkFCTEUoR0VPTE9DQVRJT04pCisgICAgLCBwdWJsaWMg
R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50CisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IEdlb2xvY2F0aW9uKGZyYW1lKSk7IH0KKyAgICB+R2VvbG9jYXRpb24oKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSBPVkVSUklERTsKKyAgICB2b2lkIHJl
c2V0KCk7CisKKyAgICB2b2lkIGdldEN1cnJlbnRQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
UG9zaXRpb25PcHRpb25zPik7CisgICAgaW50IHdhdGNoUG9zaXRpb24oUGFzc1JlZlB0cjxQb3Np
dGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4pOworICAgIHZvaWQgY2xlYXJXYXRjaChpbnQgd2F0Y2hJZCk7
CisKKyAgICB2b2lkIHNldElzQWxsb3dlZChib29sKTsKKworI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQoKTsKKyAgICB2b2lkIHNl
dEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqKTsKKyNlbHNlCisgICAgR2VvbG9jYXRpb25TZXJ2aWNl
KiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2UuZ2V0KCk7
IH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsK
KworICAgIGJvb2wgaXNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9u
ID09IFllczsgfQorICAgIGJvb2wgaXNEZW5pZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2Vv
bG9jYXRpb24gPT0gTm87IH0KKworICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uKEZyYW1lKik7CisK
KyAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisKKyAgICBjbGFzcyBHZW9Ob3RpZmllciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdlb05vdGlmaWVyPiB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiwg
UGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb05vdGlm
aWVyKGdlb2xvY2F0aW9uLCBwb3NpdGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpKTsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRGYXRhbEVycm9yKFBhc3NS
ZWZQdHI8UG9zaXRpb25FcnJvcj4pOworICAgICAgICBib29sIGhhc1plcm9UaW1lb3V0KCkgY29u
c3Q7CisgICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9zaXRpb24oKTsKKyAgICAgICAgdm9pZCBy
dW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qKTsKKyAgICAgICAgdm9pZCBzdGFydFRpbWVy
SWZOZWVkZWQoKTsKKyAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiop
OworICAgICAgICAKKyAgICAgICAgUmVmUHRyPEdlb2xvY2F0aW9uPiBtX2dlb2xvY2F0aW9uOwor
ICAgICAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAg
ICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICAg
ICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOworICAgICAgICBUaW1lcjxHZW9O
b3RpZmllcj4gbV90aW1lcjsKKyAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fZmF0YWxF
cnJvcjsKKyAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9z
aXRpb25PcHRpb25zPik7CisgICAgfTsKKworICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxHZW9O
b3RpZmllcj4gPiBHZW9Ob3RpZmllclZlY3RvcjsKKyAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyU2V0OworCisgICAgY2xhc3MgV2F0Y2hlcnMgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlm
aWVyPik7CisgICAgICAgIEdlb05vdGlmaWVyKiBmaW5kKGludCBpZCk7CisgICAgICAgIHZvaWQg
cmVtb3ZlKGludCBpZCk7CisgICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7CisgICAg
ICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKKyAgICAgICAgdm9pZCBjbGVh
cigpOworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKKyAgICAgICAgdm9pZCBnZXROb3Rp
ZmllcnNWZWN0b3IoR2VvTm90aWZpZXJWZWN0b3ImKSBjb25zdDsKKyAgICBwcml2YXRlOgorICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8R2VvTm90aWZpZXI+ID4gSWRUb05vdGlm
aWVyTWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEdlb05vdGlmaWVyPiwgaW50
PiBOb3RpZmllclRvSWRNYXA7CisgICAgICAgIElkVG9Ob3RpZmllck1hcCBtX2lkVG9Ob3RpZmll
ck1hcDsKKyAgICAgICAgTm90aWZpZXJUb0lkTWFwIG1fbm90aWZpZXJUb0lkTWFwOworICAgIH07
CisKKyAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX29uZVNob3RzLmlz
RW1wdHkoKSB8fCAhbV93YXRjaGVycy5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgc2VuZEVycm9y
KEdlb05vdGlmaWVyVmVjdG9yJiwgUG9zaXRpb25FcnJvciopOworICAgIHZvaWQgc2VuZFBvc2l0
aW9uKEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvcG9zaXRpb24qKTsKKworICAgIHN0YXRpYyB2b2lk
IGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImIG5v
dGlmaWVycywgR2VvTm90aWZpZXJWZWN0b3IqIGNhY2hlZCk7CisgICAgc3RhdGljIHZvaWQgY29w
eVRvU2V0KGNvbnN0IEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvTm90aWZpZXJTZXQmKTsKKworICAg
IHN0YXRpYyB2b2lkIHN0b3BUaW1lcihHZW9Ob3RpZmllclZlY3RvciYpOworICAgIHZvaWQgc3Rv
cFRpbWVyc0Zvck9uZVNob3RzKCk7CisgICAgdm9pZCBzdG9wVGltZXJzRm9yV2F0Y2hlcnMoKTsK
KyAgICB2b2lkIHN0b3BUaW1lcnMoKTsKKworICAgIHZvaWQgY2FuY2VsUmVxdWVzdHMoR2VvTm90
aWZpZXJWZWN0b3ImKTsKKyAgICB2b2lkIGNhbmNlbEFsbFJlcXVlc3RzKCk7CisKKyAgICB2b2lk
IHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7CisgICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNr
cygpOworICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOworCisgICAgdm9pZCBy
ZXF1ZXN0UGVybWlzc2lvbigpOworCisgICAgYm9vbCBzdGFydFVwZGF0aW5nKEdlb05vdGlmaWVy
Kik7CisgICAgdm9pZCBzdG9wVXBkYXRpbmcoKTsKKworI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FU
SU9OX1BFUk1JU1NJT04pCisgICAgdm9pZCBoYW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVy
cygpOworI2VuZGlmCisKKyNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJiYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAorICAg
IHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRp
b25TZXJ2aWNlKik7CisgICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9yT2Nj
dXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7CisjZW5kaWYKKworICAgIFBhc3NSZWZQdHI8R2Vv
Tm90aWZpZXI+IHN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25z
Pik7CisKKyAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJlZChHZW9Ob3RpZmllciopOworICAgIHZv
aWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7CisgICAgdm9pZCByZXF1ZXN0VXNlc0Nh
Y2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7CisgICAgYm9vbCBoYXZlU3VpdGFibGVDYWNoZWRQ
b3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2b2lkIG1ha2VDYWNoZWRQb3NpdGlvbkNh
bGxiYWNrcygpOworCisgICAgR2VvTm90aWZpZXJTZXQgbV9vbmVTaG90czsKKyAgICBXYXRjaGVy
cyBtX3dhdGNoZXJzOworI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorICAg
IE93blB0cjxHZW9sb2NhdGlvblNlcnZpY2U+IG1fc2VydmljZTsKKyNlbmRpZgorI2lmIFVTRShQ
UkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCisgICAgR2VvTm90aWZpZXJTZXQgbV9wZW5k
aW5nRm9yUGVybWlzc2lvbk5vdGlmaWVyczsKKyNlbmRpZgorICAgIFJlZlB0cjxHZW9wb3NpdGlv
bj4gbV9sYXN0UG9zaXRpb247CisKKyAgICBlbnVtIHsKKyAgICAgICAgVW5rbm93biwKKyAgICAg
ICAgSW5Qcm9ncmVzcywKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH0gbV9hbGxvd0dl
b2xvY2F0aW9uOworCisjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQorICAgIFJlZlB0cjxHZW9wb3Np
dGlvbj4gbV9jYWNoZWRQb3NpdGlvbjsKKyNlbmRpZgorICAgIEdlb05vdGlmaWVyU2V0IG1fcmVx
dWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEdlb2xvY2F0aW9uX2gKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwJKHJldmlzaW9uIDEw
ODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5pZGw6MTA4NDQ5KQor
KysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCittb2R1bGUgY29yZSB7CisKKyAgICAvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9nZW9sb2NhdGlvbi1BUEkvI2dlb2xvY2F0aW9uX2ludGVyZmFjZQorICAgIGludGVy
ZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdFT0xPQ0FUSU9OLCAKKyAgICAgICAgSlNHZW5l
cmF0ZUlzUmVhY2hhYmxlPUltcGxGcmFtZSwKKyAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAg
XSBHZW9sb2NhdGlvbiB7CisgICAgICAgIFtDdXN0b21dIHZvaWQgZ2V0Q3VycmVudFBvc2l0aW9u
KGluIFBvc2l0aW9uQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBbT3B0aW9uYWxdIFBvc2l0aW9uT3B0aW9ucyBvcHRpb25zKTsKKworICAgICAgICBbQ3Vz
dG9tXSBsb25nIHdhdGNoUG9zaXRpb24oaW4gUG9zaXRpb25DYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBbT3B0aW9uYWxdIFBv
c2l0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBQb3NpdGlvbk9wdGlvbnMgb3B0aW9ucyk7CisK
KyAgICAgICAgdm9pZCBjbGVhcldhdGNoKGluIGxvbmcgd2F0Y2hJZCk7CisgICAgfTsKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRp
b24vR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5jcHA6MTA4NDQ5KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUg
Ikdlb2xvY2F0aW9uUG9zaXRpb24uaCIKKworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9D
QVRJT04pCisKKyNpbmNsdWRlICJHZW9sb2NhdGlvbkNsaWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dlb2xvY2F0aW9uQ29udHJvbGxlcjo6R2VvbG9jYXRpb25Db250cm9sbGVyKFBh
Z2UqIHBhZ2UsIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3BhZ2UocGFnZSkK
KyAgICAsIG1fY2xpZW50KGNsaWVudCkKK3sKK30KKworR2VvbG9jYXRpb25Db250cm9sbGVyOjp+
R2VvbG9jYXRpb25Db250cm9sbGVyKCkKK3sKKyAgICBBU1NFUlQobV9vYnNlcnZlcnMuaXNFbXB0
eSgpKTsKKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmdlb2xvY2F0aW9u
RGVzdHJveWVkKCk7Cit9CisKK1Bhc3NPd25QdHI8R2VvbG9jYXRpb25Db250cm9sbGVyPiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OmNyZWF0ZShQYWdlKiBwYWdlLCBHZW9sb2NhdGlvbkNsaWVudCog
Y2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR2VvbG9jYXRpb25Db250cm9sbGVy
KHBhZ2UsIGNsaWVudCkpOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6YWRkT2Jz
ZXJ2ZXIoR2VvbG9jYXRpb24qIG9ic2VydmVyLCBib29sIGVuYWJsZUhpZ2hBY2N1cmFjeSkKK3sK
KyAgICAvLyBUaGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgd2l0aCB0aGUgc2FtZSBv
YnNlcnZlciwgdGhvdWdoIHJlbW92ZU9ic2VydmVyKCkKKyAgICAvLyBpcyBjYWxsZWQgb25seSBv
bmNlIHdpdGggZWFjaC4KKyAgICBib29sIHdhc0VtcHR5ID0gbV9vYnNlcnZlcnMuaXNFbXB0eSgp
OworICAgIG1fb2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7CisgICAgaWYgKGVuYWJsZUhpZ2hBY2N1
cmFjeSkKKyAgICAgICAgbV9oaWdoQWNjdXJhY3lPYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKKwor
ICAgIGlmIChtX2NsaWVudCkgeyAgICAgICAgCisgICAgICAgIGlmIChlbmFibGVIaWdoQWNjdXJh
Y3kpCisgICAgICAgICAgICBtX2NsaWVudC0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5KHRydWUpOwor
ICAgICAgICBpZiAod2FzRW1wdHkpCisgICAgICAgICAgICBtX2NsaWVudC0+c3RhcnRVcGRhdGlu
ZygpOworICAgIH0KK30KKwordm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OnJlbW92ZU9ic2Vy
dmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlcikKK3sKKyAgICBpZiAoIW1fb2JzZXJ2ZXJzLmNvbnRh
aW5zKG9ic2VydmVyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vYnNlcnZlcnMucmVtb3Zl
KG9ic2VydmVyKTsKKyAgICBtX2hpZ2hBY2N1cmFjeU9ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIp
OworCisgICAgaWYgKG1fY2xpZW50KSB7CisgICAgICAgIGlmIChtX29ic2VydmVycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2NsaWVudC0+c3RvcFVwZGF0aW5nKCk7CisgICAgICAgIGVsc2Ug
aWYgKG1faGlnaEFjY3VyYWN5T2JzZXJ2ZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fY2xp
ZW50LT5zZXRFbmFibGVIaWdoQWNjdXJhY3koZmFsc2UpOworICAgIH0KK30KKwordm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OnJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKiBnZW9sb2Nh
dGlvbikKK3sKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZXF1ZXN0UGVy
bWlzc2lvbihnZW9sb2NhdGlvbik7Cit9CisKK3ZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjpj
YW5jZWxQZXJtaXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCit7CisgICAg
aWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+Y2FuY2VsUGVybWlzc2lvblJlcXVlc3Qo
Z2VvbG9jYXRpb24pOworfQorCit2b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6cG9zaXRpb25D
aGFuZ2VkKEdlb2xvY2F0aW9uUG9zaXRpb24qIHBvc2l0aW9uKQoreworICAgIG1fbGFzdFBvc2l0
aW9uID0gcG9zaXRpb247CisgICAgVmVjdG9yPFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBvYnNlcnZl
cnNWZWN0b3I7CisgICAgY29weVRvVmVjdG9yKG1fb2JzZXJ2ZXJzLCBvYnNlcnZlcnNWZWN0b3Ip
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JzZXJ2ZXJzVmVjdG9yLnNpemUoKTsgKytp
KQorICAgICAgICBvYnNlcnZlcnNWZWN0b3JbaV0tPnBvc2l0aW9uQ2hhbmdlZCgpOworfQorCit2
b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6ZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVycm9y
KiBlcnJvcikKK3sKKyAgICBWZWN0b3I8UmVmUHRyPEdlb2xvY2F0aW9uPiA+IG9ic2VydmVyc1Zl
Y3RvcjsKKyAgICBjb3B5VG9WZWN0b3IobV9vYnNlcnZlcnMsIG9ic2VydmVyc1ZlY3Rvcik7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYnNlcnZlcnNWZWN0b3Iuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG9ic2VydmVyc1ZlY3RvcltpXS0+c2V0RXJyb3IoZXJyb3IpOworfQorCitHZW9sb2Nh
dGlvblBvc2l0aW9uKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6Omxhc3RQb3NpdGlvbigpCit7Cisg
ICAgaWYgKG1fbGFzdFBvc2l0aW9uLmdldCgpKQorICAgICAgICByZXR1cm4gbV9sYXN0UG9zaXRp
b24uZ2V0KCk7CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2NsaWVudC0+bGFzdFBvc2l0aW9uKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vR2Vv
bG9jYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdlb2xvY2F0aW9uQ29u
dHJvbGxlcl9oCisjZGVmaW5lIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUo
Q0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHZW9s
b2NhdGlvbkNsaWVudDsKK2NsYXNzIEdlb2xvY2F0aW9uRXJyb3I7CitjbGFzcyBHZW9sb2NhdGlv
blBvc2l0aW9uOworY2xhc3MgUGFnZTsKKworY2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVyIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHZW9sb2NhdGlvbkNvbnRyb2xsZXIpOworcHVibGlj
OgorICAgIH5HZW9sb2NhdGlvbkNvbnRyb2xsZXIoKTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRy
PEdlb2xvY2F0aW9uQ29udHJvbGxlcj4gY3JlYXRlKFBhZ2UqLCBHZW9sb2NhdGlvbkNsaWVudCop
OworCisgICAgdm9pZCBhZGRPYnNlcnZlcihHZW9sb2NhdGlvbiosIGJvb2wgZW5hYmxlSGlnaEFj
Y3VyYWN5KTsKKyAgICB2b2lkIHJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKik7CisKKyAgICB2
b2lkIHJlcXVlc3RQZXJtaXNzaW9uKEdlb2xvY2F0aW9uKik7CisgICAgdm9pZCBjYW5jZWxQZXJt
aXNzaW9uUmVxdWVzdChHZW9sb2NhdGlvbiopOworCisgICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQo
R2VvbG9jYXRpb25Qb3NpdGlvbiopOworICAgIHZvaWQgZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlv
bkVycm9yKik7CisKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsKKwor
ICAgIEdlb2xvY2F0aW9uQ2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQorCitw
cml2YXRlOgorICAgIEdlb2xvY2F0aW9uQ29udHJvbGxlcihQYWdlKiwgR2VvbG9jYXRpb25DbGll
bnQqKTsKKworICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBHZW9sb2NhdGlvbkNsaWVudCogbV9jbGll
bnQ7CisKKyAgICBSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247Cisg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBPYnNlcnZlcnNTZXQ7Cisg
ICAgLy8gQWxsIG9ic2VydmVyczsgYm90aCB0aG9zZSByZXF1ZXN0aW5nIGhpZ2ggYWNjdXJhY3kg
YW5kIHRob3NlIG5vdC4KKyAgICBPYnNlcnZlcnNTZXQgbV9vYnNlcnZlcnM7CisgICAgT2JzZXJ2
ZXJzU2V0IG1faGlnaEFjY3VyYWN5T2JzZXJ2ZXJzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2Vu
ZGlmIC8vIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJyb3IuaAkocmV2aXNpb24g
MTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaDoxMDg0
NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL0dlb2xvY2F0aW9uRXJy
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBHZW9sb2NhdGlvbkVycm9yX2gKKyNkZWZpbmUgR2VvbG9jYXRpb25FcnJvcl9oCisKKyNpZiBF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdlb2xvY2F0aW9uRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvbkVy
cm9yPiB7CitwdWJsaWM6CisgICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBQZXJtaXNzaW9u
RGVuaWVkLAorICAgICAgICBQb3NpdGlvblVuYXZhaWxhYmxlCisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uRXJyb3I+IGNyZWF0ZShFcnJvckNvZGUgY29kZSwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25FcnJv
cihjb2RlLCBtZXNzYWdlKSk7IH0KKworICAgIEVycm9yQ29kZSBjb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9tZXNzYWdlOyB9CisKK3ByaXZhdGU6CisgICAgR2VvbG9jYXRpb25FcnJvcihFcnJvckNvZGUg
Y29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAg
ICAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBFcnJvckNvZGUg
bV9jb2RlOworICAgIFN0cmluZyBtX21lc3NhZ2U7IAorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKKworI2Vu
ZGlmIC8vIEdlb2xvY2F0aW9uRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBvc2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBvc2l0aW9uLmgJKHJldmlzaW9u
IDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uLmg6
MTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlv
blBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEdlb2xvY2F0aW9uUG9zaXRpb25faAorI2RlZmluZSBHZW9sb2NhdGlvblBvc2l0
aW9uX2gKKworI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdlb2xvY2F0
aW9uUG9zaXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHZW9sb2NhdGlvblBvc2l0aW9uPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gY3JlYXRl
KGRvdWJsZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91
YmxlIGFjY3VyYWN5KSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbih0
aW1lc3RhbXAsIGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5KSk7IH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEdlb2xvY2F0aW9uUG9zaXRpb24+IGNyZWF0ZShkb3VibGUgdGltZXN0YW1w
LCBkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgYm9v
bCBwcm92aWRlc0FsdGl0dWRlLCBkb3VibGUgYWx0aXR1ZGUsIGJvb2wgcHJvdmlkZXNBbHRpdHVk
ZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBwcm92aWRlc0hlYWRpbmcs
IGRvdWJsZSBoZWFkaW5nLCBib29sIHByb3ZpZGVzU3BlZWQsIGRvdWJsZSBzcGVlZCkgeyByZXR1
cm4gYWRvcHRSZWYobmV3IEdlb2xvY2F0aW9uUG9zaXRpb24odGltZXN0YW1wLCBsYXRpdHVkZSwg
bG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVz
QWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFk
aW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCkpOyB9CisKKyAgICBkb3VibGUgdGltZXN0YW1wKCkg
Y29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKworICAgIGRvdWJsZSBsYXRpdHVkZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF0aXR1ZGU7IH0KKyAgICBkb3VibGUgbG9uZ2l0dWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9sb25naXR1ZGU7IH0KKyAgICBkb3VibGUgYWNjdXJhY3koKSBjb25zdCB7IHJl
dHVybiBtX2FjY3VyYWN5OyB9CisgICAgZG91YmxlIGFsdGl0dWRlKCkgY29uc3QgeyByZXR1cm4g
bV9hbHRpdHVkZTsgfQorICAgIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1
cm4gbV9hbHRpdHVkZUFjY3VyYWN5OyB9CisgICAgZG91YmxlIGhlYWRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2hlYWRpbmc7IH0KKyAgICBkb3VibGUgc3BlZWQoKSBjb25zdCB7IHJldHVybiBtX3Nw
ZWVkOyB9CisKKyAgICBib29sIGNhblByb3ZpZGVBbHRpdHVkZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUHJvdmlkZUFsdGl0dWRlOyB9CisgICAgYm9vbCBjYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFj
eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUHJvdmlkZUFsdGl0dWRlQWNjdXJhY3k7IH0KKyAgICBi
b29sIGNhblByb3ZpZGVIZWFkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlSGVhZGlu
ZzsgfQorICAgIGJvb2wgY2FuUHJvdmlkZVNwZWVkKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92
aWRlU3BlZWQ7IH0KKworcHJpdmF0ZToKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0
aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3Vy
YWN5KQorICAgICAgICA6IG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0
dWRlKGxhdGl0dWRlKQorICAgICAgICAsIG1fbG9uZ2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAg
LCBtX2FjY3VyYWN5KGFjY3VyYWN5KQorICAgICAgICAsIG1fYWx0aXR1ZGUoMCkKKyAgICAgICAg
LCBtX2FsdGl0dWRlQWNjdXJhY3koMCkKKyAgICAgICAgLCBtX2hlYWRpbmcoMCkKKyAgICAgICAg
LCBtX3NwZWVkKDApCisgICAgICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGUoZmFsc2UpCisgICAg
ICAgICwgbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFjeShmYWxzZSkKKyAgICAgICAgLCBtX2Nh
blByb3ZpZGVIZWFkaW5nKGZhbHNlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVkKGZhbHNl
KQorICAgIHsKKyAgICB9CisKKyAgICBHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSB0aW1lc3Rh
bXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92aWRlc0FsdGl0
dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3ZpZGVzSGVhZGlu
ZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNwZWVkKQorICAg
ICAgICA6IG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKKyAgICAgICAgLCBtX2xhdGl0dWRlKGxhdGl0
dWRlKQorICAgICAgICAsIG1fbG9uZ2l0dWRlKGxvbmdpdHVkZSkKKyAgICAgICAgLCBtX2FjY3Vy
YWN5KGFjY3VyYWN5KQorICAgICAgICAsIG1fYWx0aXR1ZGUoYWx0aXR1ZGUpCisgICAgICAgICwg
bV9hbHRpdHVkZUFjY3VyYWN5KGFsdGl0dWRlQWNjdXJhY3kpCisgICAgICAgICwgbV9oZWFkaW5n
KGhlYWRpbmcpCisgICAgICAgICwgbV9zcGVlZChzcGVlZCkKKyAgICAgICAgLCBtX2NhblByb3Zp
ZGVBbHRpdHVkZShwcm92aWRlc0FsdGl0dWRlKQorICAgICAgICAsIG1fY2FuUHJvdmlkZUFsdGl0
dWRlQWNjdXJhY3kocHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5KQorICAgICAgICAsIG1fY2FuUHJv
dmlkZUhlYWRpbmcocHJvdmlkZXNIZWFkaW5nKQorICAgICAgICAsIG1fY2FuUHJvdmlkZVNwZWVk
KHByb3ZpZGVzU3BlZWQpCisgICAgeworICAgIH0KKworICAgIGRvdWJsZSBtX3RpbWVzdGFtcDsK
KworICAgIGRvdWJsZSBtX2xhdGl0dWRlOworICAgIGRvdWJsZSBtX2xvbmdpdHVkZTsKKyAgICBk
b3VibGUgbV9hY2N1cmFjeTsKKyAgICBkb3VibGUgbV9hbHRpdHVkZTsKKyAgICBkb3VibGUgbV9h
bHRpdHVkZUFjY3VyYWN5OworICAgIGRvdWJsZSBtX2hlYWRpbmc7CisgICAgZG91YmxlIG1fc3Bl
ZWQ7CisKKyAgICBib29sIG1fY2FuUHJvdmlkZUFsdGl0dWRlOworICAgIGJvb2wgbV9jYW5Qcm92
aWRlQWx0aXR1ZGVBY2N1cmFjeTsKKyAgICBib29sIG1fY2FuUHJvdmlkZUhlYWRpbmc7CisgICAg
Ym9vbCBtX2NhblByb3ZpZGVTcGVlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCisKKyNlbmRpZiAvLyBH
ZW9sb2NhdGlvblBvc2l0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9j
YXRpb24vR2VvcG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgR2VvcG9zaXRpb25faAorI2RlZmluZSBHZW9wb3NpdGlvbl9oCisKKyNpbmNsdWRlICJD
b29yZGluYXRlcy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdlb3Bvc2l0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2VvcG9zaXRpb24+IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3JlYXRlKFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZXM+IGNvb3JkaW5hdGVzLCBET01UaW1lU3RhbXAgdGltZXN0YW1wKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9wb3NpdGlvbihjb29yZGluYXRl
cywgdGltZXN0YW1wKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gaXNv
bGF0ZWRDb3B5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZW9wb3NpdGlvbjo6Y3Jl
YXRlKG1fY29vcmRpbmF0ZXMtPmlzb2xhdGVkQ29weSgpLCBtX3RpbWVzdGFtcCk7CisgICAgfQor
CisgICAgRE9NVGltZVN0YW1wIHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGltZXN0YW1w
OyB9CisgICAgQ29vcmRpbmF0ZXMqIGNvb3JkcygpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0
ZXMuZ2V0KCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgR2VvcG9zaXRpb24oUGFzc1JlZlB0cjxD
b29yZGluYXRlcz4gY29vcmRpbmF0ZXMsIERPTVRpbWVTdGFtcCB0aW1lc3RhbXApCisgICAgICAg
IDogbV9jb29yZGluYXRlcyhjb29yZGluYXRlcykKKyAgICAgICAgLCBtX3RpbWVzdGFtcCh0aW1l
c3RhbXApCisgICAgeworICAgICAgICBBU1NFUlQobV9jb29yZGluYXRlcyk7CisgICAgfQorCisg
ICAgUmVmUHRyPENvb3JkaW5hdGVzPiBtX2Nvb3JkaW5hdGVzOworICAgIERPTVRpbWVTdGFtcCBt
X3RpbWVzdGFtcDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBHZW9wb3NpdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L0dlb3Bvc2l0aW9uLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2dlb2xvY2F0aW9uL0dlb3Bvc2l0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
K21vZHVsZSBjb3JlIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdF
T0xPQ0FUSU9OLAorICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICBdIEdlb3Bvc2l0aW9uIHsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENvb3JkaW5hdGVzIGNvb3JkczsKKyAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVRpbWVTdGFtcCB0aW1lc3RhbXA7CisgICAgfTsKK30KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRp
b25DYWxsYmFjay5oCShyZXZpc2lvbiAxMDg0NDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UG9zaXRpb25DYWxsYmFjay5oOjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2Vv
bG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBQb3NpdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgUG9zaXRpb25DYWxsYmFja19oCisKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBHZW9wb3NpdGlvbjsKKworICAgIGNsYXNzIFBvc2l0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgUmVm
Q291bnRlZDxQb3NpdGlvbkNhbGxiYWNrPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFs
IH5Qb3NpdGlvbkNhbGxiYWNrKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVu
dChHZW9wb3NpdGlvbiopID0gMDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBQb3NpdGlvbkNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmlkbAkocmV2aXNp
b24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaWRs
OjEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25D
YWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPUdF
T0xPQ0FUSU9OLAorICAgICAgICBDYWxsYmFjaworICAgIF0gUG9zaXRpb25DYWxsYmFjayB7Cisg
ICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gR2VvcG9zaXRpb24gcG9zaXRpb24pOworICAg
IH07Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9u
RXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9u
L1Bvc2l0aW9uRXJyb3IuaAkocmV2aXNpb24gMTA4NDQ5KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1Bvc2l0aW9uRXJyb3IuaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dl
b2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
UG9zaXRpb25FcnJvcl9oCisjZGVmaW5lIFBvc2l0aW9uRXJyb3JfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBvc2l0
aW9uRXJyb3IgOiBwdWJsaWMgUmVmQ291bnRlZDxQb3NpdGlvbkVycm9yPiB7CitwdWJsaWM6Cisg
ICAgZW51bSBFcnJvckNvZGUgeworICAgICAgICBQRVJNSVNTSU9OX0RFTklFRCA9IDEsCisgICAg
ICAgIFBPU0lUSU9OX1VOQVZBSUxBQkxFID0gMiwKKyAgICAgICAgVElNRU9VVCA9IDMKKyAgICB9
OworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZShFcnJv
ckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
UG9zaXRpb25FcnJvcihjb2RlLCBtZXNzYWdlKSk7IH0KKworICAgIEVycm9yQ29kZSBjb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZXNzYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9tZXNzYWdlOyB9CisgICAgdm9pZCBzZXRJc0ZhdGFsKGJvb2wgaXNGYXRh
bCkgeyBtX2lzRmF0YWwgPSBpc0ZhdGFsOyB9CisgICAgYm9vbCBpc0ZhdGFsKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0ZhdGFsOyB9CisgICAgCitwcml2YXRlOgorICAgIFBvc2l0aW9uRXJyb3IoRXJy
b3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgCisgICAgICAgIDogbV9jb2RlKGNv
ZGUpCisgICAgICAgICwgbV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgICwgbV9pc0ZhdGFsKGZh
bHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXJyb3JDb2RlIG1fY29kZTsKKyAgICBTdHJp
bmcgbV9tZXNzYWdlOworICAgIC8vIFdoZXRoZXIgdGhlIGVycm9yIGlzIGZhdGFsLCBzdWNoIHRo
YXQgbm8gcmVxdWVzdCBjYW4gZXZlciBvYnRhaW4gYSBnb29kCisgICAgLy8gcG9zaXRpb24gZml4
IGluIHRoZSBmdXR1cmUuCisgICAgYm9vbCBtX2lzRmF0YWw7Cit9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUG9zaXRpb25FcnJvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3IuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5pZGwJ
KHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9Qb3NpdGlvbkVycm9y
LmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uRXJyb3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGNvcmUgeworCisgICAg
aW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9R0VPTE9DQVRJT04KKyAgICBdIFBvc2l0
aW9uRXJyb3IgeworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgY29k
ZTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOworCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUk1JU1NJT05fREVOSUVEID0gMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgUE9TSVRJT05fVU5BVkFJTEFCTEUgPSAyOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUID0gMzsKKyAgICB9OworCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25F
cnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDEwODQ0OSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFn
ZS9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBQb3NpdGlvbkVycm9yQ2FsbGJhY2tfaAorI2RlZmluZSBQb3NpdGlvbkVy
cm9yQ2FsbGJhY2tfaAorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgY2xhc3MgUG9zaXRpb25FcnJvcjsKKworICAgIGNsYXNzIFBvc2l0
aW9uRXJyb3JDYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+UG9zaXRpb25FcnJvckNhbGxiYWNr
KCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVFdmVudChQb3NpdGlvbkVycm9yKikg
PSAwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBvc2l0
aW9uRXJyb3JDYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0
aW9uL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaWRsCShyZXZpc2lv
biAxMDg0NDkpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNr
LmlkbDoxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dlb2xvY2F0aW9uL1Bvc2l0
aW9uRXJyb3JDYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworbW9kdWxlIGNvcmUgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRp
dGlvbmFsPUdFT0xPQ0FUSU9OLAorICAgICAgICBDYWxsYmFjaworICAgIF0gUG9zaXRpb25FcnJv
ckNhbGxiYWNrIHsKKyAgICAgICAgYm9vbGVhbiBoYW5kbGVFdmVudChpbiBQb3NpdGlvbkVycm9y
IGVycm9yKTsKKyAgICB9OworfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2Nh
dGlvbi9Qb3NpdGlvbk9wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dlb2xvY2F0aW9uL1Bvc2l0aW9uT3B0aW9ucy5oCShyZXZpc2lvbiAxMDg0NDkpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmg6MTA4NDQ5KQorKysgU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbk9wdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgUG9zaXRpb25PcHRpb25zX2gKKyNkZWZpbmUgUG9zaXRpb25P
cHRpb25zX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgUG9zaXRpb25P
cHRpb25zIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25PcHRpb25zPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgUG9zaXRpb25PcHRpb25zKCkpOyB9CisKKyAgICBib29sIGVuYWJsZUhpZ2hB
Y2N1cmFjeSgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaEFjY3VyYWN5OyB9CisgICAgdm9pZCBzZXRF
bmFibGVIaWdoQWNjdXJhY3koYm9vbCBlbmFibGUpIHsgbV9oaWdoQWNjdXJhY3kgPSBlbmFibGU7
IH0KKyAgICBib29sIGhhc1RpbWVvdXQoKSBjb25zdCB7IHJldHVybiBtX2hhc1RpbWVvdXQ7IH0K
KyAgICBpbnQgdGltZW91dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaGFzVGltZW91
dCgpKTsKKyAgICAgICAgcmV0dXJuIG1fdGltZW91dDsKKyAgICB9CisgICAgdm9pZCBzZXRUaW1l
b3V0KGludCB0aW1lb3V0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHRpbWVvdXQgPj0gMCk7Cisg
ICAgICAgIG1faGFzVGltZW91dCA9IHRydWU7CisgICAgICAgIG1fdGltZW91dCA9IHRpbWVvdXQ7
CisgICAgfQorICAgIGJvb2wgaGFzTWF4aW11bUFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF4
aW11bUFnZTsgfQorICAgIGludCBtYXhpbXVtQWdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNNYXhpbXVtQWdlKCkpOworICAgICAgICByZXR1cm4gbV9tYXhpbXVtQWdlOworICAg
IH0KKyAgICB2b2lkIGNsZWFyTWF4aW11bUFnZSgpIHsgbV9oYXNNYXhpbXVtQWdlID0gZmFsc2U7
IH0KKyAgICB2b2lkIHNldE1heGltdW1BZ2UoaW50IGFnZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChhZ2UgPj0gMCk7CisgICAgICAgIG1faGFzTWF4aW11bUFnZSA9IHRydWU7CisgICAgICAgIG1f
bWF4aW11bUFnZSA9IGFnZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFBvc2l0aW9uT3B0
aW9ucygpCisgICAgICAgIDogbV9oaWdoQWNjdXJhY3koZmFsc2UpCisgICAgICAgICwgbV9oYXNU
aW1lb3V0KGZhbHNlKQorICAgIHsKKyAgICAgICAgc2V0TWF4aW11bUFnZSgwKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBtX2hpZ2hBY2N1cmFjeTsKKyAgICBib29sIG1faGFzVGltZW91dDsKKyAg
ICBpbnQgbV90aW1lb3V0OworICAgIGJvb2wgbV9oYXNNYXhpbXVtQWdlOworICAgIGludCBtX21h
eGltdW1BZ2U7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
UG9zaXRpb25PcHRpb25zX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDg0NTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjQwNTcsNiArMjQw
NTcsMzQgQEAKIAkJCQlOYW1lPSJnZW9sb2NhdGlvbiIKIAkJCQk+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGdlb2xvY2F0aW9uXEdlb2xvY2F0aW9uLmNwcCIKKwkJ
CQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVs
ZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRpb24uaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8
RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRp
b25Db250cm9sbGVyLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRpb25cR2VvbG9jYXRpb25Db250cm9sbGVy
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXGdlb2xvY2F0aW9uXEdlb2xvY2F0aW9uRXJyb3IuaCIKKwkJCQkJPgorCQkJCTwv
RmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9jYXRp
b25cR2VvbG9jYXRpb25Qb3NpdGlvbi5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxHZW9wb3NpdGlvbi5o
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
TW9kdWxlc1xnZW9sb2NhdGlvblxOYXZpZ2F0b3JHZW9sb2NhdGlvbi5jcHAiCiAJCQkJCT4KIAkJ
CQk8L0ZpbGU+CkBAIC0yNDA2NCw2ICsyNDA5MiwyMiBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XE1vZHVsZXNcZ2VvbG9jYXRpb25cTmF2aWdhdG9yR2VvbG9jYXRpb24uaCIKIAkJCQkJPgogCQkJ
CTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcZ2VvbG9j
YXRpb25cUG9zaXRpb25DYWxsYmFjay5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9sb2NhdGlvblxQb3NpdGlvbkVycm9y
LmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxNb2R1bGVzXGdlb2xvY2F0aW9uXFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xnZW9s
b2NhdGlvblxQb3NpdGlvbk9wdGlvbnMuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KIAkJCTwvRmls
dGVyPgogCQk8L0ZpbHRlcj4KIAkJPEZpbHRlcgpAQCAtMjU0ODYsMzggKzI1NTMwLDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2Vv
bG9jYXRpb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUK
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvbG9jYXRpb25DbGllbnQuaCIKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxHZW9sb2NhdGlv
bkNvbnRyb2xsZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uQ29udHJvbGxlci5oIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXEdlb2xvY2F0aW9uRXJyb3Iu
aCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFn
ZVxHZW9sb2NhdGlvblBvc2l0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcR2VvcG9zaXRpb24uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxHcm91cFNldHRpbmdzLmNwcCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNTY3OCwyMiArMjU2OTQsNiBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBvc2l0aW9uQ2FsbGJh
Y2suaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGFnZVxQb3NpdGlvbkVycm9yLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUG9zaXRpb25FcnJvckNhbGxiYWNrLmgiCi0JCQkJPgotCQkJ
PC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUG9zaXRpb25PcHRp
b25zLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBhZ2VcUHJpbnRDb250ZXh0LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9jb3B5Rm9yd2FyZGluZ0hlYWRlcnMuY21kCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL2NvcHlGb3J3YXJkaW5nSGVhZGVy
cy5jbWQJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L2NvcHlGb3J3YXJkaW5nSGVhZGVycy5jbWQJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5LDcg
QEAgbWtkaXIgMj5OVUwgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluYwogCiB4Y29weSAveSAv
ZCAiJVByb2plY3REaXIlLi5cY29uZmlnLmgiICIlQ09ORklHVVJBVElPTkJVSUxERElSJVxpbmNs
dWRlXFdlYkNvcmUiCiB4Y29weSAveSAvZCAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcb2JqXFdl
YkNvcmVcRGVyaXZlZFNvdXJjZXNcKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVk
ZVxXZWJDb3JlIgoreGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXE1vZHVsZXNcZ2VvbG9jYXRp
b25cKi5oIiAiJUNPTkZJR1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkg
L3kgL2QgIiVQcm9qZWN0RGlyJS4uXGFjY2Vzc2liaWxpdHlcKi5oIiAiJUNPTkZJR1VSQVRJT05C
VUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgogeGNvcHkgL3kgL2QgIiVQcm9qZWN0RGlyJS4uXGFj
Y2Vzc2liaWxpdHlcd2luXCouaCIgIiVDT05GSUdVUkFUSU9OQlVJTERESVIlXGluY2x1ZGVcV2Vi
Q29yZSIKIHhjb3B5IC95IC9kICIlUHJvamVjdERpciUuLlxpbnNwZWN0b3JcKi5oIiAiJUNPTkZJ
R1VSQVRJT05CVUlMRERJUiVcaW5jbHVkZVxXZWJDb3JlIgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTA4NDUw
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzQzLDYgKzMzNDMsMTcgQEAKIAkJOTczREM2NDAxNDVBOTQwOTAw
Mjg0MkMyIC8qIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTczREM2M0UxNDVBOTQwOTAwMjg0MkMyIC8qIEV4
Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTk3M0UzMjU2MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxv
YWROb3RpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA5NzNFMzI1NDEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuY3Bw
ICovOyB9OwogCQk5NzNFMzI1NzEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZp
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3M0Uz
MjU1MTA4ODNCN0MwMDVCQzQ5MyAvKiBSZXNvdXJjZUxvYWROb3RpZmllci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk3NDZBRjIzMTRGNERERTYw
MDNFN0E3MCAvKiBHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYxMzE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb24u
Y3BwICovOyB9OworCQk5NzQ2QUYyNDE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NDZBRjE0MTRG
NERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTk3NDZBRjI2MTRGNERERTYwMDNFN0E3MCAvKiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTc0NkFGMTYxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJv
bGxlci5jcHAgKi87IH07CisJCTk3NDZBRjI3MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlv
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDk3NDZBRjE3MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NzQ2QUYy
ODE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc0NkFGMTgxNEY0RERFNjAwM0U3QTcwIC8q
IEdlb2xvY2F0aW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk5NzQ2QUYyOTE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb25Qb3Np
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc0
NkFGMTkxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk5NzQ2QUYyQTE0RjREREU2
MDAzRTdBNzAgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3NDZBRjFBMTRGNERERTYwMDNFN0E3MCAvKiBHZW9wb3NpdGlvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk3NDZB
RjJDMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYxQzE0RjREREU2MDAzRTdBNzAg
LyogUG9zaXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTk3NDZBRjJFMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYx
RTE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25FcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTk3NDZBRjMwMTRGNERERTYwMDNFN0E3MCAv
KiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDk3NDZBRjIwMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9y
Q2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk5NzQ2QUYzMjE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25PcHRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzQ2QUYyMjE0RjREREU2
MDAzRTdBNzAgLyogUG9zaXRpb25PcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTc0QTg2MjIxNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzRBODYyMDE0QjdBREJCMDAzRkRDNzYgLyogRnJhbWVEZXN0cnVjdGlv
bk9ic2VydmVyLmNwcCAqLzsgfTsKIAkJOTc0QTg2MjMxNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTc0QTg2MjExNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1lRGVzdHJ1Y3Rpb25P
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTk3NEQyREE0MTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGljeS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzREMkRBMjE0NkE1MzVE
MDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuY3BwICovOyB9OwpAQCAtNTE0OSwxMSArNTE2MCw3
IEBACiAJCUJDNTNEQTYwMTE0MzE0MUEwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTNEQTVG
MTE0MzE0MUEwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzUzREE2MjExNDMxNEJEMDAw
RDgxN0UgLyogRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTNEQTYxMTE0MzE0QkQwMDBEODE3RSAvKiBET01P
YmplY3RIYXNoVGFibGVNYXAuY3BwICovOyB9OwogCQlCQzUzREFDNzExNDMzMDY0MDAwRDgxN0Ug
LyogSlNET01XcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDNTNEQUM2MTE0MzMwNjQwMDBEODE3RSAvKiBKU0RPTVdyYXBwZXIuY3BwICov
OyB9OwotCQlCQzU2Q0IyMTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNTZD
QjFDMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwICovOyB9Owot
CQlCQzU2Q0IyMjEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU2Q0IxRDEwRDVB
QzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM1NkNCMjMxMEQ1QUM4MDAwQTc3QzY0
IC8qIEdlb2xvY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzU2Q0IxRTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25DbGll
bnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlC
QzU2Q0IyNDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25FcnJvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1NkNCMUYxMEQ1QUM4MDAwQTc3
QzY0IC8qIEdlb2xvY2F0aW9uRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQlCQzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRp
b25Qb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM1NkNCMjAxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzU4MjNGNTBD
MEE5OERGMDA1M0YxQjUgLyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzU4MjNGNDBDMEE5OERGMDA1M0YxQjUg
LyogSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTgyNUYzMEMwQjg5MzgwMDUz
RjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODI1RjIwQzBCODkzODAwNTNGMUI1IC8q
IEpTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCUJDNTg4QUYwMEJGQTZD
RjkwMEVFNjc5RSAvKiBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM1ODhBRUYwQkZBNkNGOTAwRUU2NzlFIC8qIEhU
TUxQYXJzZXJFcnJvckNvZGVzLmggKi87IH07CkBAIC02MjM3LDEzICs2MjQ0LDYgQEAKIAkJRkU2
RkQ0OEUwRjY3NkU5MzAwMDkyODczIC8qIEpTQ29vcmRpbmF0ZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNkZENDhDMEY2NzZFOTMwMDA5Mjg3MyAv
KiBKU0Nvb3JkaW5hdGVzLmggKi87IH07CiAJCUZFNzAwREQxMEY5MkQ4MUEwMDhFMkJGRSAvKiBK
U0Nvb3JkaW5hdGVzQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZFNzAwREQwMEY5MkQ4MUEwMDhFMkJGRSAvKiBKU0Nvb3JkaW5hdGVzQ3Vz
dG9tLmNwcCAqLzsgfTsKIAkJRkU4MEQ3QUIwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRp
b25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwICov
OyB9OwotCQlGRTgwRDdDNTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MEQ3QjcwRTlDMUYy
NTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNwcCAqLzsgfTsKLQkJRkU4MEQ3QzYwRTlDMUYyNTAw
MEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTgwRDdCODBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRTgwRDdD
OTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0JCMEU5QzFGMjUwMDBENkY3NSAvKiBHZW9w
b3NpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUZFODBEN0NCMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdCRDBFOUMxRjI1
MDAwRDZGNzUgLyogUG9zaXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFODBEN0NEMEU5QzFGMjUwMDBENkY3NSAvKiBQb3Np
dGlvbkVycm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTgwRDdCRjBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUZFODBEN0NGMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFODBEN0MxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3Np
dGlvbkVycm9yQ2FsbGJhY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQlGRTgwRDdEMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTgwRDdD
MzBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU4MERBNjMwRTlDNDcwMzAwMEQ2Rjc1
IC8qIEpTR2VvbG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU4MERBNUYwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uY3Bw
ICovOyB9OwogCQlGRTgwREE2NDBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MERBNjAwRTlD
NDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uaCAqLzsgfTsKIAkJRkU4MERBNjUwRTlDNDcw
MzAwMEQ2Rjc1IC8qIEpTR2VvcG9zaXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU4MERBNjEwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvcG9z
aXRpb24uY3BwICovOyB9OwpAQCAtODUxNiw4ICs4NTE2LDYgQEAKIAkJNTkxM0EyNDAxM0Q0OUVC
QTAwRjVCMDVDIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJZGVudGlmaWVyc0ZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTkzMDlBMTAxMUY0QUU1ODAwMjUwNjAzIC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50
TW9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEZXZpY2VPcmll
bnRhdGlvbkNsaWVudE1vY2suY3BwOyBwYXRoID0gbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVu
dE1vY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTMwOUExMjExRjRBRTZB
MDAyNTA2MDMgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERldmljZU9yaWVudGF0aW9uQ2xpZW50TW9jay5oOyBwYXRoID0g
bW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTkzQUI2OTcxMzU1Q0Q5MjAwRkM4MjExIC8qIFBvc2l0aW9uQ2FsbGJhY2suaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBvc2l0aW9uQ2FsbGJhY2suaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1OTNBQjY5OTEzNTVDREFFMDBGQzgyMTEgLyogUG9zaXRpb25F
cnJvckNhbGxiYWNrLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb3NpdGlvbkVycm9yQ2Fs
bGJhY2suaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTU4RjFDQjEzNDM5MTdD
MDA4MEIzMUYgLyogWE1MVmlld2VyLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuY3NzOyBwYXRoID0gWE1M
Vmlld2VyLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTk1OEYxQ0MxMzQzOTE3
QzAwODBCMzFGIC8qIFhNTFZpZXdlci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IFhNTFZpZXdlci5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTk2
OTUwODExMzIxMDU5OTAwQzNFRDE4IC8qIEpvYmplY3RXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpvYmplY3RXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDIxNCw2ICsxMDIxMiwyMiBAQAogCQk5NzNEQzYzRTE0NUE5NDA5MDAyODQy
QzIgLyogRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5NzNFMzI1NDEwODgzQjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZp
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VMb2Fk
Tm90aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzNFMzI1NTEwODgz
QjdDMDA1QkM0OTMgLyogUmVzb3VyY2VMb2FkTm90aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkTm90aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTc0NkFGMTMxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEdlb2xvY2F0aW9uLmNwcDsgcGF0
aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzQ2QUYxNDE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9jYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VvbG9jYXRpb24uaDsgcGF0aCA9IE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTc0NkFGMTUxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBHZW9sb2NhdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb2xvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc0NkFG
MTYxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOyBw
YXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzQ2QUYxNzE0RjREREU2MDAzRTdBNzAgLyogR2Vv
bG9jYXRpb25Db250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdl
b2xvY2F0aW9uQ29udHJvbGxlci5oOyBwYXRoID0gTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc0NkFGMTgx
NEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gR2VvbG9jYXRpb25FcnJvci5oOyBwYXRoID0gTW9kdWxlcy9nZW9sb2Nh
dGlvbi9HZW9sb2NhdGlvbkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3
NDZBRjE5MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEdlb2xvY2F0aW9uUG9zaXRpb24uaDsgcGF0aCA9IE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb25Qb3NpdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk5NzQ2QUYxQTE0RjREREU2MDAzRTdBNzAgLyogR2VvcG9zaXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2VvcG9zaXRpb24uaDsgcGF0aCA9IE1v
ZHVsZXMvZ2VvbG9jYXRpb24vR2VvcG9zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTc0NkFGMUIxNEY0RERFNjAwM0U3QTcwIC8qIEdlb3Bvc2l0aW9uLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBHZW9wb3NpdGlvbi5pZGw7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0
aW9uL0dlb3Bvc2l0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc0NkFG
MUMxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUG9zaXRpb25DYWxsYmFjay5oOyBwYXRoID0gTW9kdWxlcy9nZW9s
b2NhdGlvbi9Qb3NpdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTk3NDZBRjFEMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNrLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IG5hbWUgPSBQb3NpdGlvbkNhbGxiYWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvZ2Vv
bG9jYXRpb24vUG9zaXRpb25DYWxsYmFjay5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTk3NDZBRjFFMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVycm9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBvc2l0aW9uRXJyb3IuaDsgcGF0aCA9IE1vZHVsZXMv
Z2VvbG9jYXRpb24vUG9zaXRpb25FcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk5NzQ2QUYxRjE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25FcnJvci5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gUG9zaXRpb25FcnJvci5pZGw7IHBhdGggPSBNb2R1bGVzL2dlb2xvY2F0
aW9uL1Bvc2l0aW9uRXJyb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzQ2
QUYyMDE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25FcnJvckNhbGxiYWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oOyBwYXRoID0g
TW9kdWxlcy9nZW9sb2NhdGlvbi9Qb3NpdGlvbkVycm9yQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTc0NkFGMjExNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uRXJy
b3JDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gUG9zaXRpb25FcnJvckNhbGxi
YWNrLmlkbDsgcGF0aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25FcnJvckNhbGxiYWNr
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTc0NkFGMjIxNEY0RERFNjAwM0U3
QTcwIC8qIFBvc2l0aW9uT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBQb3NpdGlvbk9wdGlvbnMuaDsgcGF0aCA9IE1vZHVsZXMvZ2VvbG9jYXRpb24vUG9zaXRpb25P
cHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NEE4NjIwMTRCN0FEQkIw
MDNGREM3NiAvKiBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc0QTg2MjExNEI3QURCQjAwM0ZEQzc2IC8qIEZyYW1l
RGVzdHJ1Y3Rpb25PYnNlcnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
cmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
OTc0RDJEQTIxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY3VyaXR5UG9saWN5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDgzLDExICsxMjA5Nyw3IEBACiAJCUJDNTNEQTVGMTE0
MzE0MUEwMDBEODE3RSAvKiBET01PYmplY3RIYXNoVGFibGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NT2JqZWN0SGFzaFRhYmxlTWFwLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNTNEQTYxMTE0MzE0QkQwMDBEODE3RSAvKiBET01PYmplY3RIYXNo
VGFibGVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NT2Jq
ZWN0SGFzaFRhYmxlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1M0RB
QzYxMTQzMzA2NDAwMEQ4MTdFIC8qIEpTRE9NV3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTVdyYXBwZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCQzU2Q0IxQzEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9s
bGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlb2xvY2F0aW9u
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNTZDQjFEMTBE
NUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2VvbG9jYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDNTZDQjFFMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkNs
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW9sb2NhdGlvbkNsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzU2Q0IxRjEwRDVBQzgwMDBBNzdD
NjQgLyogR2VvbG9jYXRpb25FcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHZW9sb2NhdGlvbkVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDNTZD
QjIwMTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb2xvY2F0aW9uUG9zaXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODIzRjQwQzBBOThERjAwNTNGMUI1IC8qIEpTSFRNTEVsZW1l
bnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1M
RWxlbWVudEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDNTgyNUYy
MEMwQjg5MzgwMDUzRjFCNSAvKiBKU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NTdHlsZURlY2xhcmF0aW9uQ3Vz
dG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM1ODhBRUYwQkZBNkNGOTAw
RUU2NzlFIC8qIEhUTUxQYXJzZXJFcnJvckNvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGFyc2VyRXJyb3JDb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTMzMjQsMTYgKzEzMzM0LDYgQEAKIAkJRkU2RkQ0OEMwRjY3NkU5MzAwMDkyODcz
IC8qIEpTQ29vcmRpbmF0ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
b29yZGluYXRlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTcwMEREMDBGOTJE
ODFBMDA4RTJCRkUgLyogSlNDb29yZGluYXRlc0N1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nvb3JkaW5hdGVzQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRp
b25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0I3
MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHZW9sb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUZFODBEN0I4MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9sb2NhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW9sb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlGRTgwRDdCOTBFOUMxRjI1MDAwRDZGNzUgLyogR2VvbG9jYXRpb24uaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdlb2xvY2F0aW9uLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRkU4MEQ3QkIwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb3Bvc2l0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdlb3Bvc2l0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0JDMEU5QzFGMjUwMDBENkY3NSAvKiBHZW9wb3Np
dGlvbi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2VvcG9zaXRpb24uaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlGRTgwRDdCRDBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRp
b25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3NpdGlvbkNh
bGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFODBEN0JGMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvc2l0aW9uRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU4MEQ3
QzAwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFBvc2l0aW9uRXJyb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlG
RTgwRDdDMTBFOUMxRjI1MDAwRDZGNzUgLyogUG9zaXRpb25FcnJvckNhbGxiYWNrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGRTgwRDdDMzBFOUMxRjI1MDAwRDZGNzUgLyogUG9z
aXRpb25PcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9u
T3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTgwREE1RjBFOUM0NzAz
MDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0dlb2xvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRkU4MERBNjAwRTlDNDcwMzAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHZW9sb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGRTgwREE2MTBFOUM0NzAzMDAwRDZGNzUgLyogSlNHZW9wb3NpdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dlb3Bvc2l0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MjU4LDE2ICsxNTI1OCw3IEBACiAJ
CQkJNjVBMjE0ODMwOTdBM0Y1MzAwQjkwNTBBIC8qIEZyYW1lVHJlZS5oICovLAogCQkJCTY1Q0JG
RUY3MDk3NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuY3BwICovLAogCQkJCTY1Q0JGRUY4MDk3
NEY2MDcwMDFEQUMyNSAvKiBGcmFtZVZpZXcuaCAqLywKLQkJCQlGRTgwRDdCNzBFOUMxRjI1MDAw
RDZGNzUgLyogR2VvbG9jYXRpb24uY3BwICovLAotCQkJCUZFODBEN0I4MEU5QzFGMjUwMDBENkY3
NSAvKiBHZW9sb2NhdGlvbi5oICovLAotCQkJCUZFODBEN0I5MEU5QzFGMjUwMDBENkY3NSAvKiBH
ZW9sb2NhdGlvbi5pZGwgKi8sCiAJCQkJQkM1NkNCMUUxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xv
Y2F0aW9uQ2xpZW50LmggKi8sCi0JCQkJQkM1NkNCMUMxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xv
Y2F0aW9uQ29udHJvbGxlci5jcHAgKi8sCi0JCQkJQkM1NkNCMUQxMEQ1QUM4MDAwQTc3QzY0IC8q
IEdlb2xvY2F0aW9uQ29udHJvbGxlci5oICovLAotCQkJCUJDNTZDQjFGMTBENUFDODAwMEE3N0M2
NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggKi8sCi0JCQkJQkM1NkNCMjAxMEQ1QUM4MDAwQTc3QzY0
IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCAqLywKLQkJCQlGRTgwRDdCQjBFOUMxRjI1MDAwRDZG
NzUgLyogR2VvcG9zaXRpb24uaCAqLywKLQkJCQlGRTgwRDdCQzBFOUMxRjI1MDAwRDZGNzUgLyog
R2VvcG9zaXRpb24uaWRsICovLAogCQkJCUM1MEI1NjE0MTIxMTlEMjMwMDhCNDZFMCAvKiBHcm91
cFNldHRpbmdzLmNwcCAqLywKIAkJCQlDNTBCNTYxNTEyMTE5RDIzMDA4QjQ2RTAgLyogR3JvdXBT
ZXR0aW5ncy5oICovLAogCQkJCUJDOTREMTUwMEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmNw
cCAqLywKQEAgLTE1MzE1LDEzICsxNTMwNiw2IEBACiAJCQkJOEFGNEU1NTgxMURDNUE2MzAwMEVE
M0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmNwcCAqLywKIAkJCQk4QUY0RTU1OTExREM1QTYzMDAw
RUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCAqLywKIAkJCQk4QUY0RTU1QTExREM1QTYzMDAw
RUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaWRsICovLAotCQkJCUZFODBEN0JEMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkNhbGxiYWNrLmggKi8sCi0JCQkJNTkzQUI2OTcxMzU1Q0Q5MjAw
RkM4MjExIC8qIFBvc2l0aW9uQ2FsbGJhY2suaWRsICovLAotCQkJCUZFODBEN0JGMEU5QzFGMjUw
MDBENkY3NSAvKiBQb3NpdGlvbkVycm9yLmggKi8sCi0JCQkJRkU4MEQ3QzAwRTlDMUYyNTAwMEQ2
Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaWRsICovLAotCQkJCUZFODBEN0MxMEU5QzFGMjUwMDBENkY3
NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLywKLQkJCQk1OTNBQjY5OTEzNTVDREFFMDBG
QzgyMTEgLyogUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbCAqLywKLQkJCQlGRTgwRDdDMzBFOUMx
RjI1MDAwRDZGNzUgLyogUG9zaXRpb25PcHRpb25zLmggKi8sCiAJCQkJQjc3NkQ0M0MxMTA0NTI3
NTAwQkVCMEVDIC8qIFByaW50Q29udGV4dC5jcHAgKi8sCiAJCQkJQjc3NkQ0M0ExMTA0NTI1RDAw
QkVCMEVDIC8qIFByaW50Q29udGV4dC5oICovLAogCQkJCUJDRUMwMUJBMEMyNzREQUMwMDlGNEVD
OSAvKiBTY3JlZW4uY3BwICovLApAQCAtMTcxMDUsOSArMTcwODksMjUgQEAKIAkJOTcxMTQ1RkYx
NEVGMDA3OTAwNjc0RkQ5IC8qIGdlb2xvY2F0aW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5NzQ2QUYxMzE0RjREREU2MDAzRTdBNzAgLyogR2VvbG9j
YXRpb24uY3BwICovLAorCQkJCTk3NDZBRjE0MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlv
bi5oICovLAorCQkJCTk3NDZBRjE1MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbi5pZGwg
Ki8sCisJCQkJOTc0NkFGMTYxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJvbGxl
ci5jcHAgKi8sCisJCQkJOTc0NkFGMTcxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29u
dHJvbGxlci5oICovLAorCQkJCTk3NDZBRjE4MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlv
bkVycm9yLmggKi8sCisJCQkJOTc0NkFGMTkxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9u
UG9zaXRpb24uaCAqLywKKwkJCQk5NzQ2QUYxQTE0RjREREU2MDAzRTdBNzAgLyogR2VvcG9zaXRp
b24uaCAqLywKKwkJCQk5NzQ2QUYxQjE0RjREREU2MDAzRTdBNzAgLyogR2VvcG9zaXRpb24uaWRs
ICovLAogCQkJCTk3MTE0NjAwMTRFRjAwOUEwMDY3NEZEOSAvKiBOYXZpZ2F0b3JHZW9sb2NhdGlv
bi5jcHAgKi8sCiAJCQkJOTcxMTQ2MDExNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdlb2xv
Y2F0aW9uLmggKi8sCiAJCQkJOTcxMTQ2MDIxNEVGMDA5QTAwNjc0RkQ5IC8qIE5hdmlnYXRvckdl
b2xvY2F0aW9uLmlkbCAqLywKKwkJCQk5NzQ2QUYxQzE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRp
b25DYWxsYmFjay5oICovLAorCQkJCTk3NDZBRjFEMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlv
bkNhbGxiYWNrLmlkbCAqLywKKwkJCQk5NzQ2QUYxRTE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRp
b25FcnJvci5oICovLAorCQkJCTk3NDZBRjFGMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkVy
cm9yLmlkbCAqLywKKwkJCQk5NzQ2QUYyMDE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25FcnJv
ckNhbGxiYWNrLmggKi8sCisJCQkJOTc0NkFGMjExNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9u
RXJyb3JDYWxsYmFjay5pZGwgKi8sCisJCQkJOTc0NkFGMjIxNEY0RERFNjAwM0U3QTcwIC8qIFBv
c2l0aW9uT3B0aW9ucy5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBnZW9sb2NhdGlvbjsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yMjM5MiwxMyArMjIzOTIsMTMgQEAKIAkJCQkyRDQ4
MUYwNDE0NkI1QzZCMDBBQTc4MzQgLyogR2VuZXJhdG9yR2VuZXJhdGVkSW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE2MjJBOEZGMTIyQzQ0QTYwMEE3ODVCMyAvKiBHZW5lcmljQmluZGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDcyMEIwQTExNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNF
dmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTgwRDdDNjBFOUMxRjI1MDAwRDZGNzUg
LyogR2VvbG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTk3NDZBRjI0MTRGNERERTYwMDNF
N0E3MCAvKiBHZW9sb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NkNCMjMxMEQ1QUM4
MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNTJC
RkNFQjEyOEFCRjIxMDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2NrLmggaW4gSGVhZGVy
cyAqLywKLQkJCQlCQzU2Q0IyMjEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzU2Q0IyNDEwRDVBQzgwMDBBNzdDNjQgLyogR2Vv
bG9jYXRpb25FcnJvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM1NkNCMjUxMEQ1QUM4MDAwQTc3
QzY0IC8qIEdlb2xvY2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCUZFODBEN0M5
MEU5QzFGMjUwMDBENkY3NSAvKiBHZW9wb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTc0
NkFGMjcxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJOTc0NkFGMjgxNEY0RERFNjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uRXJyb3Iu
aCBpbiBIZWFkZXJzICovLAorCQkJCTk3NDZBRjI5MTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2Nh
dGlvblBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzQ2QUYyQTE0RjREREU2MDAzRTdB
NzAgLyogR2VvcG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NkJCRDBGMTM2MDM5QzIw
MDhCMTVEOCAvKiBHbHlwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBNkMwRDAwNkNENjAw
RUY2RjI2IC8qIEdseXBoQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUQ0QUE3QTExNkJB
RkI2MDA2OUNBOTMgLyogR2x5cGhNZXRyaWNzTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTIzNDQ4
LDExICsyMzQ0OCwxMSBAQAogCQkJCUQzOUQwMDZEMTFGOEUzMDgwMDYwNDFGMiAvKiBQb3B1cE1l
bnVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDM0JFMTJCMEU5ODA5MkYwMDgzNTU4OCAvKiBQ
b3B1cE1lbnVTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5REUwODI0NUU1OTAwMUU5
QUJDIC8qIFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTgwRDdDQjBFOUMxRjI1MDAw
RDZGNzUgLyogUG9zaXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkU4MEQ3Q0Qw
RTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZF
ODBEN0NGMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCTk3NDZBRjJDMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKKwkJCQk5NzQ2QUYyRTE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRp
b25FcnJvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTc0NkFGMzAxNEY0RERFNjAwM0U3QTcwIC8q
IFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MTlDMjQwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUZF
ODBEN0QxMEU5QzFGMjUwMDBENkY3NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk3NDZBRjMyMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbk9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMwRjJBNDQxMTM4NjlBQUIwMDY2QzUzNCAvKiBwcmVwcm9jZXNzb3Iu
cG0gaW4gSGVhZGVycyAqLywKIAkJCQlCNzFGRTZERjExMDkxQ0IzMDBEQUVGNzcgLyogUHJpbnRD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0VCQzBBMTk0NUQwMDBBOEVGNUYgLyog
UHJvY2Vzc2luZ0luc3RydWN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NDYwLDkgKzI1NDYw
LDkgQEAKIAkJCQkxNDMyRTg0OTBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJENDgxRjAzMTQ2QjVDNjUwMEFBNzgzNCAvKiBHZW5lcmF0b3JH
ZW5lcmF0ZWRJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzIwQjBBMDE0RDMzMjM1MDA2
NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkU4MEQ3
QzUwRTlDMUYyNTAwMEQ2Rjc1IC8qIEdlb2xvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTk3NDZBRjIzMTRGNERERTYwMDNFN0E3MCAvKiBHZW9sb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwNTJCRkNFOTEyOEFCRjE1MDBGRDMzOEQgLyogR2VvbG9jYXRpb25DbGllbnRNb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDNTZDQjIxMTBENUFDODAwMEE3N0M2NCAvKiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTc0NkFGMjYxNEY0RERF
NjAwM0U3QTcwIC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkMzREE2RDBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhQYWdlVHJlZU5vZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJBRkZDODMwRDAwQTVDMTAwMzAwNzREIC8qIEdseXBoUGFnZVRyZWVO
b2RlTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTNDNjA4MERBNTZDNTcwMDIxRUI1RCAv
KiBHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb24uY3BwCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCi0gKiBDb3B5
cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uLmgiCi0KLSNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCi0KLSNpbmNs
dWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKLSNp
bmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLSNpZiBFTkFC
TEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCi0j
aW5jbHVkZSAiR2VvbG9jYXRpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAiR2VvbG9jYXRpb25F
cnJvci5oIgotI2luY2x1ZGUgIkdlb2xvY2F0aW9uUG9zaXRpb24uaCIKLSNpbmNsdWRlICJQb3Np
dGlvbkVycm9yLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29u
c3QgY2hhciBwZXJtaXNzaW9uRGVuaWVkRXJyb3JNZXNzYWdlW10gPSAiVXNlciBkZW5pZWQgR2Vv
bG9jYXRpb24iOwotc3RhdGljIGNvbnN0IGNoYXIgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1l
c3NhZ2VbXSA9ICJGYWlsZWQgdG8gc3RhcnQgR2VvbG9jYXRpb24gc2VydmljZSI7Ci1zdGF0aWMg
Y29uc3QgY2hhciBmcmFtZWxlc3NEb2N1bWVudEVycm9yTWVzc2FnZVtdID0gIkdlb2xvY2F0aW9u
IGNhbm5vdCBiZSB1c2VkIGluIGZyYW1lbGVzcyBkb2N1bWVudHMiOwotCi1zdGF0aWMgY29uc3Qg
aW50IGZpcnN0QXZhaWxhYmxlV2F0Y2hJZCA9IDE7Ci0KLSNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VE
X0dFT0xPQ0FUSU9OKQotCi1zdGF0aWMgUGFzc1JlZlB0cjxHZW9wb3NpdGlvbj4gY3JlYXRlR2Vv
cG9zaXRpb24oR2VvbG9jYXRpb25Qb3NpdGlvbiogcG9zaXRpb24pCi17Ci0gICAgaWYgKCFwb3Np
dGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgUmVmUHRyPENvb3JkaW5hdGVzPiBj
b29yZGluYXRlcyA9IENvb3JkaW5hdGVzOjpjcmVhdGUocG9zaXRpb24tPmxhdGl0dWRlKCksIHBv
c2l0aW9uLT5sb25naXR1ZGUoKSwgcG9zaXRpb24tPmNhblByb3ZpZGVBbHRpdHVkZSgpLCBwb3Np
dGlvbi0+YWx0aXR1ZGUoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24tPmFjY3VyYWN5KCksIHBvc2l0aW9uLT5jYW5Q
cm92aWRlQWx0aXR1ZGVBY2N1cmFjeSgpLCBwb3NpdGlvbi0+YWx0aXR1ZGVBY2N1cmFjeSgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvc2l0aW9uLT5jYW5Qcm92aWRlSGVhZGluZygpLCBwb3NpdGlvbi0+aGVhZGluZygpLCBwb3Np
dGlvbi0+Y2FuUHJvdmlkZVNwZWVkKCksIHBvc2l0aW9uLT5zcGVlZCgpKTsKLSAgICByZXR1cm4g
R2VvcG9zaXRpb246OmNyZWF0ZShjb29yZGluYXRlcy5yZWxlYXNlKCksIGNvbnZlcnRTZWNvbmRz
VG9ET01UaW1lU3RhbXAocG9zaXRpb24tPnRpbWVzdGFtcCgpKSk7Ci19Ci0KLXN0YXRpYyBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3I+IGNyZWF0ZVBvc2l0aW9uRXJyb3IoR2VvbG9jYXRpb25FcnJv
ciogZXJyb3IpCi17Ci0gICAgUG9zaXRpb25FcnJvcjo6RXJyb3JDb2RlIGNvZGUgPSBQb3NpdGlv
bkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJMRTsKLSAgICBzd2l0Y2ggKGVycm9yLT5jb2RlKCkp
IHsKLSAgICBjYXNlIEdlb2xvY2F0aW9uRXJyb3I6OlBlcm1pc3Npb25EZW5pZWQ6Ci0gICAgICAg
IGNvZGUgPSBQb3NpdGlvbkVycm9yOjpQRVJNSVNTSU9OX0RFTklFRDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlOgotICAgICAg
ICBjb2RlID0gUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBQb3NpdGlvbkVycm9yOjpjcmVhdGUoY29kZSwgZXJy
b3ItPm1lc3NhZ2UoKSk7Ci19Ci0jZW5kaWYKLQotR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpH
ZW9Ob3RpZmllcihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24sIFBhc3NSZWZQdHI8UG9zaXRpb25D
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbk9wdGlvbnM+IG9wdGlvbnMpCi0g
ICAgOiBtX2dlb2xvY2F0aW9uKGdlb2xvY2F0aW9uKQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2so
c3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCi0g
ICAgLCBtX29wdGlvbnMob3B0aW9ucykKLSAgICAsIG1fdGltZXIodGhpcywgJkdlb2xvY2F0aW9u
OjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZCkKLSAgICAsIG1fdXNlQ2FjaGVkUG9zaXRpb24oZmFs
c2UpCi17Ci0gICAgQVNTRVJUKG1fZ2VvbG9jYXRpb24pOwotICAgIEFTU0VSVChtX3N1Y2Nlc3ND
YWxsYmFjayk7Ci0gICAgLy8gSWYgbm8gb3B0aW9ucyB3ZXJlIHN1cHBsaWVkIGZyb20gSlMsIHdl
IHNob3VsZCBoYXZlIGNyZWF0ZWQgYSBkZWZhdWx0IHNldAotICAgIC8vIG9mIG9wdGlvbnMgaW4g
SlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAuCi0gICAgQVNTRVJUKG1fb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpzZXRGYXRhbEVycm9yKFBhc3NSZWZQdHI8UG9z
aXRpb25FcnJvcj4gZXJyb3IpCi17Ci0gICAgLy8gSWYgYSBmYXRhbCBlcnJvciBoYXMgYWxyZWFk
eSBiZWVuIHNldCwgc3RpY2sgd2l0aCBpdC4gVGhpcyBtYWtlcyBzdXJlIHRoYXQKLSAgICAvLyB3
aGVuIHBlcm1pc3Npb24gaXMgZGVuaWVkLCB0aGlzIGlzIHRoZSBlcnJvciByZXBvcnRlZCwgYXMg
cmVxdWlyZWQgYnkgdGhlCi0gICAgLy8gc3BlYy4KLSAgICBpZiAobV9mYXRhbEVycm9yKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2ZhdGFsRXJyb3IgPSBlcnJvcjsKLSAgICAvLyBBbiBleGlz
dGluZyB0aW1lciBtYXkgbm90IGhhdmUgYSB6ZXJvIHRpbWVvdXQuCi0gICAgbV90aW1lci5zdG9w
KCk7Ci0gICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246
Okdlb05vdGlmaWVyOjpzZXRVc2VDYWNoZWRQb3NpdGlvbigpCi17Ci0gICAgbV91c2VDYWNoZWRQ
b3NpdGlvbiA9IHRydWU7Ci0gICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLWJvb2wg
R2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpoYXNaZXJvVGltZW91dCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fb3B0aW9ucy0+aGFzVGltZW91dCgpICYmIG1fb3B0aW9ucy0+dGltZW91dCgpID09
IDA7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpydW5TdWNjZXNzQ2FsbGJh
Y2soR2VvcG9zaXRpb24qIHBvc2l0aW9uKQotewotICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5k
bGVFdmVudChwb3NpdGlvbik7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVyOjpz
dGFydFRpbWVySWZOZWVkZWQoKQotewotICAgIGlmIChtX29wdGlvbnMtPmhhc1RpbWVvdXQoKSkK
LSAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QobV9vcHRpb25zLT50aW1lb3V0KCkgLyAxMDAw
LjApOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpHZW9Ob3RpZmllcjo6dGltZXJGaXJlZChUaW1l
cjxHZW9Ob3RpZmllcj4qKQotewotICAgIG1fdGltZXIuc3RvcCgpOwotCi0gICAgLy8gUHJvdGVj
dCB0aGlzIEdlb05vdGlmaWVyIG9iamVjdCwgc2luY2UgaXQKLSAgICAvLyBjb3VsZCBiZSBkZWxl
dGVkIGJ5IGEgY2FsbCB0byBjbGVhcldhdGNoIGluIGEgY2FsbGJhY2suCi0gICAgUmVmUHRyPEdl
b05vdGlmaWVyPiBwcm90ZWN0KHRoaXMpOwotCi0gICAgLy8gVGVzdCBmb3IgZmF0YWwgZXJyb3Ig
Zmlyc3QuIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBGcmFtZSBpcwot
ICAgIC8vIGRpc2Nvbm5lY3RlZCBhbmQgcmVxdWVzdHMgYXJlIGNhbmNlbGxlZC4KLSAgICBpZiAo
bV9mYXRhbEVycm9yKSB7Ci0gICAgICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spCi0gICAgICAgICAg
ICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fZmF0YWxFcnJvci5nZXQoKSk7Ci0gICAg
ICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB0aGlzIG5vdGlmaWVyIHRvIGJlIGRlbGV0ZWQuCi0gICAg
ICAgIG1fZ2VvbG9jYXRpb24tPmZhdGFsRXJyb3JPY2N1cnJlZCh0aGlzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmIChtX3VzZUNhY2hlZFBvc2l0aW9uKSB7Ci0gICAgICAgIC8v
IENsZWFyIHRoZSBjYWNoZWQgcG9zaXRpb24gZmxhZyBpbiBjYXNlIHRoaXMgaXMgYSB3YXRjaCBy
ZXF1ZXN0LCB3aGljaAotICAgICAgICAvLyB3aWxsIGNvbnRpbnVlIHRvIHJ1bi4KLSAgICAgICAg
bV91c2VDYWNoZWRQb3NpdGlvbiA9IGZhbHNlOwotICAgICAgICBtX2dlb2xvY2F0aW9uLT5yZXF1
ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4g
ZXJyb3IgPSBQb3NpdGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6VElNRU9VVCwgIlRp
bWVvdXQgZXhwaXJlZCIpOwotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KGVy
cm9yLmdldCgpKTsKLSAgICB9Ci0gICAgbV9nZW9sb2NhdGlvbi0+cmVxdWVzdFRpbWVkT3V0KHRo
aXMpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6c2V0KGludCBpZCwgUGFzc1Jl
ZlB0cjxHZW9Ob3RpZmllcj4gcHJwTm90aWZpZXIpCi17Ci0gICAgQVNTRVJUKGlkID4gMCk7Ci0g
ICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9IHBycE5vdGlmaWVyOwotCi0gICAgbV9p
ZFRvTm90aWZpZXJNYXAuc2V0KGlkLCBub3RpZmllci5nZXQoKSk7Ci0gICAgbV9ub3RpZmllclRv
SWRNYXAuc2V0KG5vdGlmaWVyLnJlbGVhc2UoKSwgaWQpOwotfQotCi1HZW9sb2NhdGlvbjo6R2Vv
Tm90aWZpZXIqIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6ZmluZChpbnQgaWQpCi17Ci0gICAgQVNT
RVJUKGlkID4gMCk7Ci0gICAgSWRUb05vdGlmaWVyTWFwOjppdGVyYXRvciBpdGVyID0gbV9pZFRv
Tm90aWZpZXJNYXAuZmluZChpZCk7Ci0gICAgaWYgKGl0ZXIgPT0gbV9pZFRvTm90aWZpZXJNYXAu
ZW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBpdGVyLT5zZWNvbmQuZ2V0KCk7
Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OldhdGNoZXJzOjpyZW1vdmUoaW50IGlkKQotewotICAg
IEFTU0VSVChpZCA+IDApOwotICAgIElkVG9Ob3RpZmllck1hcDo6aXRlcmF0b3IgaXRlciA9IG1f
aWRUb05vdGlmaWVyTWFwLmZpbmQoaWQpOwotICAgIGlmIChpdGVyID09IG1faWRUb05vdGlmaWVy
TWFwLmVuZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9ub3RpZmllclRvSWRNYXAucmVtb3Zl
KGl0ZXItPnNlY29uZCk7Ci0gICAgbV9pZFRvTm90aWZpZXJNYXAucmVtb3ZlKGl0ZXIpOwotfQot
Ci12b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6cmVtb3ZlKEdlb05vdGlmaWVyKiBub3RpZmll
cikKLXsKLSAgICBOb3RpZmllclRvSWRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX25vdGlmaWVyVG9J
ZE1hcC5maW5kKG5vdGlmaWVyKTsKLSAgICBpZiAoaXRlciA9PSBtX25vdGlmaWVyVG9JZE1hcC5l
bmQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1faWRUb05vdGlmaWVyTWFwLnJlbW92ZShpdGVy
LT5zZWNvbmQpOwotICAgIG1fbm90aWZpZXJUb0lkTWFwLnJlbW92ZShpdGVyKTsKLX0KLQotYm9v
bCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmNvbnRhaW5zKEdlb05vdGlmaWVyKiBub3RpZmllcikg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9ub3RpZmllclRvSWRNYXAuY29udGFpbnMobm90aWZpZXIp
OwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpXYXRjaGVyczo6Y2xlYXIoKQotewotICAgIG1faWRU
b05vdGlmaWVyTWFwLmNsZWFyKCk7Ci0gICAgbV9ub3RpZmllclRvSWRNYXAuY2xlYXIoKTsKLX0K
LQotYm9vbCBHZW9sb2NhdGlvbjo6V2F0Y2hlcnM6OmlzRW1wdHkoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2lkVG9Ob3RpZmllck1hcC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246
OldhdGNoZXJzOjpnZXROb3RpZmllcnNWZWN0b3IoR2VvTm90aWZpZXJWZWN0b3ImIGNvcHkpIGNv
bnN0Ci17Ci0gICAgY29weVZhbHVlc1RvVmVjdG9yKG1faWRUb05vdGlmaWVyTWFwLCBjb3B5KTsK
LX0KLQotR2VvbG9jYXRpb246Okdlb2xvY2F0aW9uKEZyYW1lKiBmcmFtZSkKLSAgICA6IERPTVdp
bmRvd1Byb3BlcnR5KGZyYW1lKQotI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9O
KQotICAgICwgbV9zZXJ2aWNlKEdlb2xvY2F0aW9uU2VydmljZTo6Y3JlYXRlKHRoaXMpKQotI2Vu
ZGlmCi0gICAgLCBtX2FsbG93R2VvbG9jYXRpb24oVW5rbm93bikKLXsKLSAgICBpZiAoIW1fZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0g
ICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9sb2NhdGlvbih0cnVlKTsKLX0KLQot
R2VvbG9jYXRpb246On5HZW9sb2NhdGlvbigpCi17Ci0gICAgQVNTRVJUKG1fYWxsb3dHZW9sb2Nh
dGlvbiAhPSBJblByb2dyZXNzKTsKLSAgICBBU1NFUlQoIW1fZnJhbWUpOwotfQotCi1QYWdlKiBH
ZW9sb2NhdGlvbjo6cGFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUgPyBtX2ZyYW1l
LT5wYWdlKCkgOiAwOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpyZXNldCgpCi17Ci0gICAgUGFn
ZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAocGFnZSAmJiBtX2FsbG93R2VvbG9jYXRp
b24gPT0gSW5Qcm9ncmVzcykgewotI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04p
Ci0gICAgICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5jYW5jZWxQZXJtaXNzaW9u
UmVxdWVzdCh0aGlzKTsKLSNlbHNlCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
Y2FuY2VsR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEZvckZyYW1lKG1fZnJhbWUsIHRoaXMp
OwotI2VuZGlmCi0gICAgfQotICAgIC8vIFRoZSBmcmFtZSBtYXkgYmUgbW92aW5nIHRvIGEgbmV3
IHBhZ2UgYW5kIHdlIHdhbnQgdG8gZ2V0IHRoZSBwZXJtaXNzaW9ucyBmcm9tIHRoZSBuZXcgcGFn
ZSdzIGNsaWVudC4KLSAgICBtX2FsbG93R2VvbG9jYXRpb24gPSBVbmtub3duOwotICAgIGNhbmNl
bEFsbFJlcXVlc3RzKCk7Ci0gICAgc3RvcFVwZGF0aW5nKCk7Ci0jaWYgVVNFKFBSRUVNUFRfR0VP
TE9DQVRJT05fUEVSTUlTU0lPTikKLSAgICBtX3BlbmRpbmdGb3JQZXJtaXNzaW9uTm90aWZpZXJz
LmNsZWFyKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6ZGlzY29ubmVjdEZyYW1l
KCkKLXsKLSAgICAvLyBPbmNlIHdlIGFyZSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgRnJhbWUsIGl0
IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byBwZXJmb3JtIGFueSBvcGVyYXRpb25zLgotICAgIHJl
c2V0KCk7Ci0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2V0VXNpbmdHZW9sb2NhdGlvbihmYWxzZSk7Ci0gICAgRE9N
V2luZG93UHJvcGVydHk6OmRpc2Nvbm5lY3RGcmFtZSgpOwotfQotCi1HZW9wb3NpdGlvbiogR2Vv
bG9jYXRpb246Omxhc3RQb3NpdGlvbigpCi17Ci0jaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9M
T0NBVElPTikKLSAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBtX2xhc3RQb3NpdGlvbiA9IGNyZWF0ZUdlb3Bvc2l0
aW9uKHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5sYXN0UG9zaXRpb24oKSk7Ci0jZWxz
ZQotICAgIG1fbGFzdFBvc2l0aW9uID0gbV9zZXJ2aWNlLT5sYXN0UG9zaXRpb24oKTsKLSNlbmRp
ZgotCi0gICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgpOwotfQotCi12b2lkIEdlb2xvY2F0
aW9uOjpnZXRDdXJyZW50UG9zaXRpb24oUGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykKLXsKLSAgICBpZiAoIW1f
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZp
ZXIgPSBzdGFydFJlcXVlc3Qoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBvcHRpb25z
KTsKLSAgICBBU1NFUlQobm90aWZpZXIpOwotCi0gICAgbV9vbmVTaG90cy5hZGQobm90aWZpZXIp
OwotfQotCi1pbnQgR2VvbG9jYXRpb246OndhdGNoUG9zaXRpb24oUGFzc1JlZlB0cjxQb3NpdGlv
bkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykK
LXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPEdl
b05vdGlmaWVyPiBub3RpZmllciA9IHN0YXJ0UmVxdWVzdChzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIG9wdGlvbnMpOwotICAgIEFTU0VSVChub3RpZmllcik7Ci0KLSAgICBzdGF0aWMg
aW50IG5leHRBdmFpbGFibGVXYXRjaElkID0gZmlyc3RBdmFpbGFibGVXYXRjaElkOwotICAgIC8v
IEluIGNhc2Ugb2Ygb3ZlcmZsb3csIG1ha2Ugc3VyZSB0aGUgSUQgcmVtYWlucyBwb3NpdGl2ZSwg
YnV0IHJldXNlIHRoZSBJRCB2YWx1ZXMuCi0gICAgaWYgKG5leHRBdmFpbGFibGVXYXRjaElkIDwg
MSkKLSAgICAgICAgbmV4dEF2YWlsYWJsZVdhdGNoSWQgPSAxOwotICAgIG1fd2F0Y2hlcnMuc2V0
KG5leHRBdmFpbGFibGVXYXRjaElkLCBub3RpZmllci5yZWxlYXNlKCkpOwotICAgIHJldHVybiBu
ZXh0QXZhaWxhYmxlV2F0Y2hJZCsrOwotfQotCi1QYXNzUmVmUHRyPEdlb2xvY2F0aW9uOjpHZW9O
b3RpZmllcj4gR2VvbG9jYXRpb246OnN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25zPiBvcHRpb25zKQotewot
ICAgIFJlZlB0cjxHZW9Ob3RpZmllcj4gbm90aWZpZXIgPSBHZW9Ob3RpZmllcjo6Y3JlYXRlKHRo
aXMsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgb3B0aW9ucyk7Ci0KLSAgICAvLyBD
aGVjayB3aGV0aGVyIHBlcm1pc3Npb25zIGhhdmUgYWxyZWFkeSBiZWVuIGRlbmllZC4gTm90ZSB0
aGF0IGlmIHRoaXMgaXMgdGhlIGNhc2UsCi0gICAgLy8gdGhlIHBlcm1pc3Npb24gc3RhdGUgY2Fu
IG5vdCBjaGFuZ2UgYWdhaW4gaW4gdGhlIGxpZmV0aW1lIG9mIHRoaXMgcGFnZS4KLSAgICBpZiAo
aXNEZW5pZWQoKSkKLSAgICAgICAgbm90aWZpZXItPnNldEZhdGFsRXJyb3IoUG9zaXRpb25FcnJv
cjo6Y3JlYXRlKFBvc2l0aW9uRXJyb3I6OlBFUk1JU1NJT05fREVOSUVELCBwZXJtaXNzaW9uRGVu
aWVkRXJyb3JNZXNzYWdlKSk7Ci0gICAgZWxzZSBpZiAoaGF2ZVN1aXRhYmxlQ2FjaGVkUG9zaXRp
b24obm90aWZpZXItPm1fb3B0aW9ucy5nZXQoKSkpCi0gICAgICAgIG5vdGlmaWVyLT5zZXRVc2VD
YWNoZWRQb3NpdGlvbigpOwotICAgIGVsc2UgaWYgKG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgp
KQotICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7Ci0jaWYgVVNFKFBSRUVN
UFRfR0VPTE9DQVRJT05fUEVSTUlTU0lPTikKLSAgICBlbHNlIGlmICghaXNBbGxvd2VkKCkpIHsK
LSAgICAgICAgLy8gaWYgd2UgZG9uJ3QgeWV0IGhhdmUgcGVybWlzc2lvbiwgcmVxdWVzdCBmb3Ig
cGVybWlzc2lvbiBiZWZvcmUgY2FsbGluZyBzdGFydFVwZGF0aW5nKCkKLSAgICAgICAgbV9wZW5k
aW5nRm9yUGVybWlzc2lvbk5vdGlmaWVycy5hZGQobm90aWZpZXIpOwotICAgICAgICByZXF1ZXN0
UGVybWlzc2lvbigpOwotICAgIH0KLSNlbmRpZgotICAgIGVsc2UgaWYgKHN0YXJ0VXBkYXRpbmco
bm90aWZpZXIuZ2V0KCkpKQotICAgICAgICBub3RpZmllci0+c3RhcnRUaW1lcklmTmVlZGVkKCk7
Ci0gICAgZWxzZQotICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9y
OjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGZhaWxlZFRvU3Rh
cnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7Ci0KLSAgICByZXR1cm4gbm90aWZpZXIucmVsZWFzZSgp
OwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpmYXRhbEVycm9yT2NjdXJyZWQoR2VvbG9jYXRpb246
Okdlb05vdGlmaWVyKiBub3RpZmllcikKLXsKLSAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGZhaWxl
ZCBmYXRhbGx5LiBSZW1vdmUgaXQgZnJvbSBvdXIgbGlzdHMuCi0gICAgbV9vbmVTaG90cy5yZW1v
dmUobm90aWZpZXIpOwotICAgIG1fd2F0Y2hlcnMucmVtb3ZlKG5vdGlmaWVyKTsKLQotICAgIGlm
ICghaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIHN0b3BVcGRhdGluZygpOwotfQotCi12b2lkIEdl
b2xvY2F0aW9uOjpyZXF1ZXN0VXNlc0NhY2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKiBub3RpZmll
cikKLXsKLSAgICAvLyBUaGlzIGlzIGNhbGxlZCBhc3luY2hyb25vdXNseSwgc28gdGhlIHBlcm1p
c3Npb25zIGNvdWxkIGhhdmUgYmVlbiBkZW5pZWQKLSAgICAvLyBzaW5jZSB3ZSBsYXN0IGNoZWNr
ZWQgaW4gc3RhcnRSZXF1ZXN0LgotICAgIGlmIChpc0RlbmllZCgpKSB7Ci0gICAgICAgIG5vdGlm
aWVyLT5zZXRGYXRhbEVycm9yKFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQ
RVJNSVNTSU9OX0RFTklFRCwgcGVybWlzc2lvbkRlbmllZEVycm9yTWVzc2FnZSkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9yZXF1ZXN0c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24u
YWRkKG5vdGlmaWVyKTsKLQotICAgIC8vIElmIHBlcm1pc3Npb25zIGFyZSBhbGxvd2VkLCBtYWtl
IHRoZSBjYWxsYmFjawotICAgIGlmIChpc0FsbG93ZWQoKSkgewotICAgICAgICBtYWtlQ2FjaGVk
UG9zaXRpb25DYWxsYmFja3MoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJl
cXVlc3QgcGVybWlzc2lvbnMsIHdoaWNoIG1heSBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25v
dXMuCi0gICAgcmVxdWVzdFBlcm1pc3Npb24oKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6bWFr
ZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCkKLXsKLSAgICAvLyBBbGwgbW9kaWZpY2F0aW9ucyB0
byBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbiBhcmUgZG9uZQotICAgIC8vIGFzeW5j
aHJvbm91c2x5LCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIG1vZGlm
aWVkIGZyb20KLSAgICAvLyB0aGUgY2FsbGJhY2tzLgotICAgIEdlb05vdGlmaWVyU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5lbmQoKTsK
LSAgICBmb3IgKEdlb05vdGlmaWVyU2V0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9yZXF1ZXN0
c0F3YWl0aW5nQ2FjaGVkUG9zaXRpb24uYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVyLT5nZXQoKTsKLSAgICAgICAgbm90
aWZpZXItPnJ1blN1Y2Nlc3NDYWxsYmFjayhtX2NhY2hlZFBvc2l0aW9uLmdldCgpKTsKLQotICAg
ICAgICAvLyBJZiB0aGlzIGlzIGEgb25lLXNob3QgcmVxdWVzdCwgc3RvcCBpdC4gT3RoZXJ3aXNl
LCBpZiB0aGUgd2F0Y2ggc3RpbGwKLSAgICAgICAgLy8gZXhpc3RzLCBzdGFydCB0aGUgc2Vydmlj
ZSB0byBnZXQgdXBkYXRlcy4KLSAgICAgICAgaWYgKG1fb25lU2hvdHMuY29udGFpbnMobm90aWZp
ZXIpKQotICAgICAgICAgICAgbV9vbmVTaG90cy5yZW1vdmUobm90aWZpZXIpOwotICAgICAgICBl
bHNlIGlmIChtX3dhdGNoZXJzLmNvbnRhaW5zKG5vdGlmaWVyKSkgewotICAgICAgICAgICAgaWYg
KG5vdGlmaWVyLT5oYXNaZXJvVGltZW91dCgpIHx8IHN0YXJ0VXBkYXRpbmcobm90aWZpZXIpKQot
ICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zdGFydFRpbWVySWZOZWVkZWQoKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlv
bkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGZhaWxl
ZFRvU3RhcnRTZXJ2aWNlRXJyb3JNZXNzYWdlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBt
X3JlcXVlc3RzQXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVhcigpOwotCi0gICAgaWYgKCFoYXNM
aXN0ZW5lcnMoKSkKLSAgICAgICAgc3RvcFVwZGF0aW5nKCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b246OnJlcXVlc3RUaW1lZE91dChHZW9Ob3RpZmllciogbm90aWZpZXIpCi17Ci0gICAgLy8gSWYg
dGhpcyBpcyBhIG9uZS1zaG90IHJlcXVlc3QsIHN0b3AgaXQuCi0gICAgbV9vbmVTaG90cy5yZW1v
dmUobm90aWZpZXIpOwotCi0gICAgaWYgKCFoYXNMaXN0ZW5lcnMoKSkKLSAgICAgICAgc3RvcFVw
ZGF0aW5nKCk7Ci19Ci0KLWJvb2wgR2VvbG9jYXRpb246OmhhdmVTdWl0YWJsZUNhY2hlZFBvc2l0
aW9uKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKLXsKLSAgICBpZiAoIW1fY2FjaGVkUG9zaXRp
b24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW9wdGlvbnMtPmhhc01heGltdW1B
Z2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFvcHRpb25zLT5tYXhpbXVtQWdl
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBET01UaW1lU3RhbXAgY3VycmVudFRpbWVN
aWxsaXMgPSBjb252ZXJ0U2Vjb25kc1RvRE9NVGltZVN0YW1wKGN1cnJlbnRUaW1lKCkpOwotICAg
IHJldHVybiBtX2NhY2hlZFBvc2l0aW9uLT50aW1lc3RhbXAoKSA+IGN1cnJlbnRUaW1lTWlsbGlz
IC0gb3B0aW9ucy0+bWF4aW11bUFnZSgpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpjbGVhcldh
dGNoKGludCB3YXRjaElkKQotewotICAgIGlmICh3YXRjaElkIDwgZmlyc3RBdmFpbGFibGVXYXRj
aElkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoUFJFRU1QVF9HRU9MT0NBVElPTl9QRVJN
SVNTSU9OKQotICAgIGlmIChHZW9Ob3RpZmllciogbm90aWZpZXIgPSBtX3dhdGNoZXJzLmZpbmQo
d2F0Y2hJZCkpCi0gICAgICAgIG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMucmVtb3Zl
KG5vdGlmaWVyKTsKLSNlbmRpZgotICAgIG1fd2F0Y2hlcnMucmVtb3ZlKHdhdGNoSWQpOwotICAg
IAotICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIHN0b3BVcGRhdGluZygpOwotfQot
Ci12b2lkIEdlb2xvY2F0aW9uOjpzZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKQotewotICAgIC8v
IFByb3RlY3QgdGhlIEdlb2xvY2F0aW9uIG9iamVjdCBmcm9tIGdhcmJhZ2UgY29sbGVjdGlvbiBk
dXJpbmcgYSBjYWxsYmFjay4KLSAgICBSZWZQdHI8R2VvbG9jYXRpb24+IHByb3RlY3QodGhpcyk7
Ci0KLSAgICAvLyBUaGlzIG1heSBiZSBkdWUgdG8gZWl0aGVyIGEgbmV3IHBvc2l0aW9uIGZyb20g
dGhlIHNlcnZpY2UsIG9yIGEgY2FjaGVkCi0gICAgLy8gcG9zaXRpb24uCi0gICAgbV9hbGxvd0dl
b2xvY2F0aW9uID0gYWxsb3dlZCA/IFllcyA6IE5vOwotICAgIAotI2lmIFVTRShQUkVFTVBUX0dF
T0xPQ0FUSU9OX1BFUk1JU1NJT04pCi0gICAgLy8gUGVybWlzc2lvbiByZXF1ZXN0IHdhcyBtYWRl
IGR1cmluZyB0aGUgc3RhcnRSZXF1ZXN0IHByb2Nlc3MKLSAgICBpZiAoIW1fcGVuZGluZ0ZvclBl
cm1pc3Npb25Ob3RpZmllcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGhhbmRsZVBlbmRpbmdQZXJt
aXNzaW9uTm90aWZpZXJzKCk7Ci0gICAgICAgIG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmll
cnMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFp
c0FsbG93ZWQoKSkgewotICAgICAgICBSZWZQdHI8UG9zaXRpb25FcnJvcj4gZXJyb3IgPSBQb3Np
dGlvbkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1p
c3Npb25EZW5pZWRFcnJvck1lc3NhZ2UpOwotICAgICAgICBlcnJvci0+c2V0SXNGYXRhbCh0cnVl
KTsKLSAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IuZ2V0KCkpOwotICAgICAgICBtX3JlcXVlc3Rz
QXdhaXRpbmdDYWNoZWRQb3NpdGlvbi5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgLy8gSWYgdGhlIHNlcnZpY2UgaGFzIGEgbGFzdCBwb3NpdGlvbiwgdXNlIGl0IHRvIGNh
bGwgYmFjayBmb3IgYWxsIHJlcXVlc3RzLgotICAgIC8vIElmIGFueSBvZiB0aGUgcmVxdWVzdHMg
YXJlIHdhaXRpbmcgZm9yIHBlcm1pc3Npb24gZm9yIGEgY2FjaGVkIHBvc2l0aW9uLAotICAgIC8v
IHRoZSBwb3NpdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIHdpbGwgYmUgYXQgbGVhc3QgYXMgZnJlc2gu
Ci0gICAgaWYgKGxhc3RQb3NpdGlvbigpKQotICAgICAgICBtYWtlU3VjY2Vzc0NhbGxiYWNrcygp
OwotICAgIGVsc2UKLSAgICAgICAgbWFrZUNhY2hlZFBvc2l0aW9uQ2FsbGJhY2tzKCk7Ci19Ci0K
LXZvaWQgR2VvbG9jYXRpb246OnNlbmRFcnJvcihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZpZXJz
LCBQb3NpdGlvbkVycm9yKiBlcnJvcikKLXsKLSAgICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKLSAgICAgZm9yIChHZW9Ob3RpZmllclZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0gKml0OwotICAg
ICAgICAgCi0gICAgICAgICBpZiAobm90aWZpZXItPm1fZXJyb3JDYWxsYmFjaykKLSAgICAgICAg
ICAgICBub3RpZmllci0+bV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChlcnJvcik7Ci0gICAg
IH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6c2VuZFBvc2l0aW9uKEdlb05vdGlmaWVyVmVjdG9y
JiBub3RpZmllcnMsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbikKLXsKLSAgICBHZW9Ob3RpZmllclZl
Y3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbm90aWZpZXJzLmVuZCgpOwotICAgIGZvciAoR2Vv
Tm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBSZWZQdHI8R2VvTm90aWZpZXI+IG5vdGlmaWVyID0g
Kml0OwotICAgICAgICBBU1NFUlQobm90aWZpZXItPm1fc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICAg
ICAgCi0gICAgICAgIG5vdGlmaWVyLT5tX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQocG9z
aXRpb24pOwotICAgIH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6c3RvcFRpbWVyKEdlb05vdGlm
aWVyVmVjdG9yJiBub3RpZmllcnMpCi17Ci0gICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG5vdGlmaWVycy5lbmQoKTsKLSAgICBmb3IgKEdlb05vdGlmaWVyVmVjdG9y
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG5vdGlmaWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgUmVmUHRyPEdlb05vdGlmaWVyPiBub3RpZmllciA9ICppdDsKLSAgICAgICAg
bm90aWZpZXItPm1fdGltZXIuc3RvcCgpOwotICAgIH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6
c3RvcFRpbWVyc0Zvck9uZVNob3RzKCkKLXsKLSAgICBHZW9Ob3RpZmllclZlY3RvciBjb3B5Owot
ICAgIGNvcHlUb1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsKLSAgICAKLSAgICBzdG9wVGltZXIo
Y29weSk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OnN0b3BUaW1lcnNGb3JXYXRjaGVycygpCi17
Ci0gICAgR2VvTm90aWZpZXJWZWN0b3IgY29weTsKLSAgICBtX3dhdGNoZXJzLmdldE5vdGlmaWVy
c1ZlY3Rvcihjb3B5KTsKLSAgICAKLSAgICBzdG9wVGltZXIoY29weSk7Ci19Ci0KLXZvaWQgR2Vv
bG9jYXRpb246OnN0b3BUaW1lcnMoKQotewotICAgIHN0b3BUaW1lcnNGb3JPbmVTaG90cygpOwot
ICAgIHN0b3BUaW1lcnNGb3JXYXRjaGVycygpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpjYW5j
ZWxSZXF1ZXN0cyhHZW9Ob3RpZmllclZlY3RvciYgbm90aWZpZXJzKQotewotICAgIEdlb05vdGlm
aWVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBlbmQgPSBub3RpZmllcnMuZW5kKCk7Ci0gICAgZm9y
IChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBub3RpZmllcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0RmF0YWxFcnJvcihQb3NpdGlv
bkVycm9yOjpjcmVhdGUoUG9zaXRpb25FcnJvcjo6UE9TSVRJT05fVU5BVkFJTEFCTEUsIGZyYW1l
bGVzc0RvY3VtZW50RXJyb3JNZXNzYWdlKSk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb246OmNhbmNl
bEFsbFJlcXVlc3RzKCkKLXsKLSAgICBHZW9Ob3RpZmllclZlY3RvciBjb3B5OwotICAgIGNvcHlU
b1ZlY3RvcihtX29uZVNob3RzLCBjb3B5KTsKLSAgICBjYW5jZWxSZXF1ZXN0cyhjb3B5KTsKLSAg
ICBtX3dhdGNoZXJzLmdldE5vdGlmaWVyc1ZlY3Rvcihjb3B5KTsKLSAgICBjYW5jZWxSZXF1ZXN0
cyhjb3B5KTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6ZXh0cmFjdE5vdGlmaWVyc1dpdGhDYWNo
ZWRQb3NpdGlvbihHZW9Ob3RpZmllclZlY3RvciYgbm90aWZpZXJzLCBHZW9Ob3RpZmllclZlY3Rv
ciogY2FjaGVkKQotewotICAgIEdlb05vdGlmaWVyVmVjdG9yIG5vbkNhY2hlZDsKLSAgICBHZW9O
b3RpZmllclZlY3Rvcjo6aXRlcmF0b3IgZW5kID0gbm90aWZpZXJzLmVuZCgpOwotICAgIGZvciAo
R2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbm90aWZpZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdC0+
Z2V0KCk7Ci0gICAgICAgIGlmIChub3RpZmllci0+bV91c2VDYWNoZWRQb3NpdGlvbikgewotICAg
ICAgICAgICAgaWYgKGNhY2hlZCkKLSAgICAgICAgICAgICAgICBjYWNoZWQtPmFwcGVuZChub3Rp
Zmllcik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbm9uQ2FjaGVkLmFwcGVuZChub3Rp
Zmllcik7Ci0gICAgfQotICAgIG5vdGlmaWVycy5zd2FwKG5vbkNhY2hlZCk7Ci19Ci0KLXZvaWQg
R2VvbG9jYXRpb246OmNvcHlUb1NldChjb25zdCBHZW9Ob3RpZmllclZlY3RvciYgc3JjLCBHZW9O
b3RpZmllclNldCYgZGVzdCkKLXsKLSAgICAgR2VvTm90aWZpZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IHNyYy5lbmQoKTsKLSAgICAgZm9yIChHZW9Ob3RpZmllclZlY3Rvcjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBzcmMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICBH
ZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdC0+Z2V0KCk7Ci0gICAgICAgICBkZXN0LmFkZChub3Rp
Zmllcik7Ci0gICAgIH0KLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6aGFuZGxlRXJyb3IoUG9zaXRp
b25FcnJvciogZXJyb3IpCi17Ci0gICAgQVNTRVJUKGVycm9yKTsKLSAgICAKLSAgICBHZW9Ob3Rp
ZmllclZlY3RvciBvbmVTaG90c0NvcHk7Ci0gICAgY29weVRvVmVjdG9yKG1fb25lU2hvdHMsIG9u
ZVNob3RzQ29weSk7Ci0KLSAgICBHZW9Ob3RpZmllclZlY3RvciB3YXRjaGVyc0NvcHk7Ci0gICAg
bV93YXRjaGVycy5nZXROb3RpZmllcnNWZWN0b3Iod2F0Y2hlcnNDb3B5KTsKLQotICAgIC8vIENs
ZWFyIHRoZSBsaXN0cyBiZWZvcmUgd2UgbWFrZSB0aGUgY2FsbGJhY2tzLCB0byBhdm9pZCBjbGVh
cmluZyBub3RpZmllcnMKLSAgICAvLyBhZGRlZCBieSBjYWxscyB0byBHZW9sb2NhdGlvbiBtZXRo
b2RzIGZyb20gdGhlIGNhbGxiYWNrcywgYW5kIHRvIHByZXZlbnQKLSAgICAvLyBmdXJ0aGVyIGNh
bGxiYWNrcyB0byB0aGVzZSBub3RpZmllcnMuCi0gICAgR2VvTm90aWZpZXJWZWN0b3Igb25lU2hv
dHNXaXRoQ2FjaGVkUG9zaXRpb247Ci0gICAgbV9vbmVTaG90cy5jbGVhcigpOwotICAgIGlmIChl
cnJvci0+aXNGYXRhbCgpKQotICAgICAgICBtX3dhdGNoZXJzLmNsZWFyKCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIC8vIERvbid0IHNlbmQgbm9uLWZhdGFsIGVycm9ycyB0byBub3RpZmllcnMgZHVl
IHRvIHJlY2VpdmUgYSBjYWNoZWQgcG9zaXRpb24uCi0gICAgICAgIGV4dHJhY3ROb3RpZmllcnNX
aXRoQ2FjaGVkUG9zaXRpb24ob25lU2hvdHNDb3B5LCAmb25lU2hvdHNXaXRoQ2FjaGVkUG9zaXRp
b24pOwotICAgICAgICBleHRyYWN0Tm90aWZpZXJzV2l0aENhY2hlZFBvc2l0aW9uKHdhdGNoZXJz
Q29weSwgMCk7Ci0gICAgfQotCi0gICAgc2VuZEVycm9yKG9uZVNob3RzQ29weSwgZXJyb3IpOwot
ICAgIHNlbmRFcnJvcih3YXRjaGVyc0NvcHksIGVycm9yKTsKLQotICAgIC8vIGhhc0xpc3RlbmVy
cygpIGRvZXNuJ3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBub3RpZmllcnMgZHVlIHRvIHJlY2VpdmUg
YQotICAgIC8vIGNhY2hlZCBwb3NpdGlvbiBhbmQgdGhvc2UgcmVxdWlyaW5nIGEgZnJlc2ggcG9z
aXRpb24uIFBlcmZvcm0gdGhlIGNoZWNrCi0gICAgLy8gYmVmb3JlIHJlc3RvcmluZyB0aGUgbm90
aWZpZXJzIGJlbG93LgotICAgIGlmICghaGFzTGlzdGVuZXJzKCkpCi0gICAgICAgIHN0b3BVcGRh
dGluZygpOwotCi0gICAgLy8gTWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIGNhY2hlZCBub3Rp
ZmllcnMgdW50aWwgdGhlaXIgdGltZXIgZmlyZXMuCi0gICAgY29weVRvU2V0KG9uZVNob3RzV2l0
aENhY2hlZFBvc2l0aW9uLCBtX29uZVNob3RzKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6cmVx
dWVzdFBlcm1pc3Npb24oKQotewotICAgIGlmIChtX2FsbG93R2VvbG9jYXRpb24gPiBVbmtub3du
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAg
IGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hbGxvd0dlb2xvY2F0aW9uID0g
SW5Qcm9ncmVzczsKLQotICAgIC8vIEFzayB0aGUgZW1iZWRkZXI6IGl0IG1haW50YWlucyB0aGUg
Z2VvbG9jYXRpb24gY2hhbGxlbmdlIHBvbGljeSBpdHNlbGYuCi0jaWYgRU5BQkxFKENMSUVOVF9C
QVNFRF9HRU9MT0NBVElPTikKLSAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRyb2xsZXIoKS0+cmVx
dWVzdFBlcm1pc3Npb24odGhpcyk7Ci0jZWxzZQotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKG1fZnJhbWUsIHRoaXMpOwot
I2VuZGlmCi19Ci0KLXZvaWQgR2VvbG9jYXRpb246OnBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCkK
LXsKLSAgICBtX2NhY2hlZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uKCk7Ci0KLSAgICAvLyBTdG9w
IGFsbCBjdXJyZW50bHkgcnVubmluZyB0aW1lcnMuCi0gICAgc3RvcFRpbWVycygpOwotCi0gICAg
aWYgKCFpc0FsbG93ZWQoKSkgewotICAgICAgICAvLyByZXF1ZXN0UGVybWlzc2lvbigpIHdpbGwg
YXNrIHRoZSBjaHJvbWUgZm9yIHBlcm1pc3Npb24uIFRoaXMgbWF5IGJlCi0gICAgICAgIC8vIGlt
cGxlbWVudGVkIHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkuIEluIGJvdGggY2FzZXMs
Ci0gICAgICAgIC8vIG1ha2VTdWNjZXNzQ2FsbGJhY2tzKCkgd2lsbCBiZSBjYWxsZWQgaWYgcGVy
bWlzc2lvbiBpcyBncmFudGVkLCBzbwotICAgICAgICAvLyB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0
byBkbyBoZXJlLgotICAgICAgICByZXF1ZXN0UGVybWlzc2lvbigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbWFrZVN1Y2Nlc3NDYWxsYmFja3MoKTsKLX0KLQotdm9pZCBHZW9sb2Nh
dGlvbjo6bWFrZVN1Y2Nlc3NDYWxsYmFja3MoKQotewotICAgIEFTU0VSVChsYXN0UG9zaXRpb24o
KSk7Ci0gICAgQVNTRVJUKGlzQWxsb3dlZCgpKTsKLSAgICAKLSAgICBHZW9Ob3RpZmllclZlY3Rv
ciBvbmVTaG90c0NvcHk7Ci0gICAgY29weVRvVmVjdG9yKG1fb25lU2hvdHMsIG9uZVNob3RzQ29w
eSk7Ci0gICAgCi0gICAgR2VvTm90aWZpZXJWZWN0b3Igd2F0Y2hlcnNDb3B5OwotICAgIG1fd2F0
Y2hlcnMuZ2V0Tm90aWZpZXJzVmVjdG9yKHdhdGNoZXJzQ29weSk7Ci0gICAgCi0gICAgLy8gQ2xl
YXIgdGhlIGxpc3RzIGJlZm9yZSB3ZSBtYWtlIHRoZSBjYWxsYmFja3MsIHRvIGF2b2lkIGNsZWFy
aW5nIG5vdGlmaWVycwotICAgIC8vIGFkZGVkIGJ5IGNhbGxzIHRvIEdlb2xvY2F0aW9uIG1ldGhv
ZHMgZnJvbSB0aGUgY2FsbGJhY2tzLCBhbmQgdG8gcHJldmVudAotICAgIC8vIGZ1cnRoZXIgY2Fs
bGJhY2tzIHRvIHRoZXNlIG5vdGlmaWVycy4KLSAgICBtX29uZVNob3RzLmNsZWFyKCk7Ci0KLSAg
ICBzZW5kUG9zaXRpb24ob25lU2hvdHNDb3B5LCBsYXN0UG9zaXRpb24oKSk7Ci0gICAgc2VuZFBv
c2l0aW9uKHdhdGNoZXJzQ29weSwgbGFzdFBvc2l0aW9uKCkpOwotCi0gICAgaWYgKCFoYXNMaXN0
ZW5lcnMoKSkKLSAgICAgICAgc3RvcFVwZGF0aW5nKCk7Ci19Ci0KLSNpZiBFTkFCTEUoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKQotCi12b2lkIEdlb2xvY2F0aW9uOjpwb3NpdGlvbkNoYW5nZWQo
KQotewotICAgIHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7Ci19Ci0KLXZvaWQgR2VvbG9jYXRp
b246OnNldEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqIGVycm9yKQotewotICAgIFJlZlB0cjxQb3Np
dGlvbkVycm9yPiBwb3NpdGlvbkVycm9yID0gY3JlYXRlUG9zaXRpb25FcnJvcihlcnJvcik7Ci0g
ICAgaGFuZGxlRXJyb3IocG9zaXRpb25FcnJvci5nZXQoKSk7Ci19Ci0KLSNlbHNlCi0KLXZvaWQg
R2VvbG9jYXRpb246Omdlb2xvY2F0aW9uU2VydmljZVBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlv
blNlcnZpY2UqIHNlcnZpY2UpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChzZXJ2aWNlLCBzZXJ2aWNl
ID09IG1fc2VydmljZSk7Ci0gICAgQVNTRVJUKG1fc2VydmljZS0+bGFzdFBvc2l0aW9uKCkpOwot
Ci0gICAgcG9zaXRpb25DaGFuZ2VkSW50ZXJuYWwoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbjo6
Z2VvbG9jYXRpb25TZXJ2aWNlRXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvblNlcnZpY2UqIHNlcnZp
Y2UpCi17Ci0gICAgQVNTRVJUKHNlcnZpY2UtPmxhc3RFcnJvcigpKTsKLQotICAgIC8vIE5vdGUg
dGhhdCB3ZSBkbyBub3Qgc3RvcCB0aW1lcnMgaGVyZS4gRm9yIG9uZS1zaG90cywgdGhlIHJlcXVl
c3QgaXMKLSAgICAvLyBjbGVhcmVkIGluIGhhbmRsZUVycm9yLiBGb3Igd2F0Y2hlcnMsIHRoZSBz
cGVjIHJlcXVpcmVzIHRoYXQgdGhlIHRpbWVyIGlzCi0gICAgLy8gbm90IGNsZWFyZWQuCi0gICAg
aGFuZGxlRXJyb3Ioc2VydmljZS0+bGFzdEVycm9yKCkpOwotfQotCi0jZW5kaWYKLQotYm9vbCBH
ZW9sb2NhdGlvbjo6c3RhcnRVcGRhdGluZyhHZW9Ob3RpZmllciogbm90aWZpZXIpCi17Ci0jaWYg
RU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLSAgICBQYWdlKiBwYWdlID0gdGhpcy0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcGFn
ZS0+Z2VvbG9jYXRpb25Db250cm9sbGVyKCktPmFkZE9ic2VydmVyKHRoaXMsIG5vdGlmaWVyLT5t
X29wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNl
Ci0gICAgcmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRpb25z
LmdldCgpKTsKLSNlbmRpZgotfQotCi12b2lkIEdlb2xvY2F0aW9uOjpzdG9wVXBkYXRpbmcoKQot
ewotI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0gICAgUGFnZSogcGFnZSA9
IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHBh
Z2UtPmdlb2xvY2F0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVPYnNlcnZlcih0aGlzKTsKLSNlbHNl
Ci0gICAgbV9zZXJ2aWNlLT5zdG9wVXBkYXRpbmcoKTsKLSNlbmRpZgotCi19Ci0KLSNpZiBVU0Uo
UFJFRU1QVF9HRU9MT0NBVElPTl9QRVJNSVNTSU9OKQotdm9pZCBHZW9sb2NhdGlvbjo6aGFuZGxl
UGVuZGluZ1Blcm1pc3Npb25Ob3RpZmllcnMoKQotewotICAgIC8vIFdoaWxlIHdlIGl0ZXJhdGUg
dGhyb3VnaCB0aGUgbGlzdCwgd2UgbmVlZCBub3Qgd29ycnkgYWJvdXQgbGlzdCBiZWluZyBtb2Rp
ZmllZCBhcyB0aGUgcGVybWlzc2lvbiAKLSAgICAvLyBpcyBhbHJlYWR5IHNldCB0byBZZXMvTm8g
YW5kIG5vIG5ldyBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgcGVuZGluZyBsaXN0Ci0g
ICAgR2VvTm90aWZpZXJTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fcGVuZGluZ0ZvclBlcm1p
c3Npb25Ob3RpZmllcnMuZW5kKCk7Ci0gICAgZm9yIChHZW9Ob3RpZmllclNldDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fcGVuZGluZ0ZvclBlcm1pc3Npb25Ob3RpZmllcnMuYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBHZW9Ob3RpZmllciogbm90aWZpZXIgPSBpdGVy
LT5nZXQoKTsKLQotICAgICAgICBpZiAoaXNBbGxvd2VkKCkpIHsKLSAgICAgICAgICAgIC8vIHN0
YXJ0IGFsbCBwZW5kaW5nIG5vdGlmaWNhdGlvbiByZXF1ZXN0cyBhcyBwZXJtaXNzaW9uIGdyYW50
ZWQuCi0gICAgICAgICAgICAvLyBUaGUgbm90aWZpZXIgaXMgYWx3YXlzIHJlZidlZCBieSBtX29u
ZVNob3RzIG9yIG1fd2F0Y2hlcnMuCi0gICAgICAgICAgICBpZiAoc3RhcnRVcGRhdGluZyhub3Rp
ZmllcikpCi0gICAgICAgICAgICAgICAgbm90aWZpZXItPnN0YXJ0VGltZXJJZk5lZWRlZCgpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG5vdGlmaWVyLT5zZXRGYXRhbEVycm9y
KFBvc2l0aW9uRXJyb3I6OmNyZWF0ZShQb3NpdGlvbkVycm9yOjpQT1NJVElPTl9VTkFWQUlMQUJM
RSwgZmFpbGVkVG9TdGFydFNlcnZpY2VFcnJvck1lc3NhZ2UpKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBub3RpZmllci0+c2V0RmF0YWxFcnJvcihQb3NpdGlvbkVycm9yOjpjcmVhdGUo
UG9zaXRpb25FcnJvcjo6UEVSTUlTU0lPTl9ERU5JRUQsIHBlcm1pc3Npb25EZW5pZWRFcnJvck1l
c3NhZ2UpKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZWxzZQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgR2VvbG9jYXRpb246OmNsZWFyV2F0
Y2goaW50KSB7fQotCi12b2lkIEdlb2xvY2F0aW9uOjpyZXNldCgpIHt9Ci0KLXZvaWQgR2VvbG9j
YXRpb246OmRpc2Nvbm5lY3RGcmFtZSgpIHt9Ci0KLUdlb2xvY2F0aW9uOjpHZW9sb2NhdGlvbihG
cmFtZSopIDogRE9NV2luZG93UHJvcGVydHkoMCkge30KLQotR2VvbG9jYXRpb246On5HZW9sb2Nh
dGlvbigpIHt9Ci0KLXZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dlZChib29sKSB7fQotCi19
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotI2VuZGlmIC8vIEVOQUJMRShHRU9MT0NBVElPTikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uLmgJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxOTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBHZW9s
b2NhdGlvbl9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uX2gKLQotI2luY2x1ZGUgIkRPTVdpbmRvd1By
b3BlcnR5LmgiCi0jaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKLSNpbmNsdWRlICJQb3NpdGlvbkNh
bGxiYWNrLmgiCi0jaW5jbHVkZSAiUG9zaXRpb25FcnJvci5oIgotI2luY2x1ZGUgIlBvc2l0aW9u
RXJyb3JDYWxsYmFjay5oIgotI2luY2x1ZGUgIlBvc2l0aW9uT3B0aW9ucy5oIgotI2luY2x1ZGUg
IlRpbWVyLmgiCi0KLSNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLSNpbmNs
dWRlICJHZW9sb2NhdGlvblNlcnZpY2UuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEZyYW1lOwotI2lmIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi1j
bGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOwotY2xhc3MgR2VvbG9jYXRpb25FcnJvcjsKLSNlbmRp
ZgotY2xhc3MgUGFnZTsKLQotY2xhc3MgR2VvbG9jYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxH
ZW9sb2NhdGlvbj4sIHB1YmxpYyBET01XaW5kb3dQcm9wZXJ0eQotI2lmICFFTkFCTEUoQ0xJRU5U
X0JBU0VEX0dFT0xPQ0FUSU9OKSAmJiBFTkFCTEUoR0VPTE9DQVRJT04pCi0gICAgLCBwdWJsaWMg
R2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50Ci0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IEdlb2xvY2F0aW9uKGZyYW1lKSk7IH0KLSAgICB+R2VvbG9jYXRpb24oKTsKLQot
ICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0RnJhbWUoKSBPVkVSUklERTsKLSAgICB2b2lkIHJl
c2V0KCk7Ci0KLSAgICB2b2lkIGdldEN1cnJlbnRQb3NpdGlvbihQYXNzUmVmUHRyPFBvc2l0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
UG9zaXRpb25PcHRpb25zPik7Ci0gICAgaW50IHdhdGNoUG9zaXRpb24oUGFzc1JlZlB0cjxQb3Np
dGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4pOwotICAgIHZvaWQgY2xlYXJXYXRjaChpbnQgd2F0Y2hJZCk7
Ci0KLSAgICB2b2lkIHNldElzQWxsb3dlZChib29sKTsKLQotI2lmIEVOQUJMRShDTElFTlRfQkFT
RURfR0VPTE9DQVRJT04pCi0gICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQoKTsKLSAgICB2b2lkIHNl
dEVycm9yKEdlb2xvY2F0aW9uRXJyb3IqKTsKLSNlbHNlCi0gICAgR2VvbG9jYXRpb25TZXJ2aWNl
KiBnZXRHZW9sb2NhdGlvblNlcnZpY2UoKSBjb25zdCB7IHJldHVybiBtX3NlcnZpY2UuZ2V0KCk7
IH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsK
LQotICAgIGJvb2wgaXNBbGxvd2VkKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0dlb2xvY2F0aW9u
ID09IFllczsgfQotICAgIGJvb2wgaXNEZW5pZWQoKSBjb25zdCB7IHJldHVybiBtX2FsbG93R2Vv
bG9jYXRpb24gPT0gTm87IH0KLQotICAgIGV4cGxpY2l0IEdlb2xvY2F0aW9uKEZyYW1lKik7Ci0K
LSAgICBQYWdlKiBwYWdlKCkgY29uc3Q7Ci0KLSAgICBjbGFzcyBHZW9Ob3RpZmllciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdlb05vdGlmaWVyPiB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9Ob3RpZmllcj4gY3JlYXRlKEdlb2xvY2F0aW9uKiBnZW9sb2NhdGlvbiwg
UGFzc1JlZlB0cjxQb3NpdGlvbkNhbGxiYWNrPiBwb3NpdGlvbkNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4gcG9zaXRpb25FcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRy
PFBvc2l0aW9uT3B0aW9ucz4gb3B0aW9ucykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb05vdGlm
aWVyKGdlb2xvY2F0aW9uLCBwb3NpdGlvbkNhbGxiYWNrLCBwb3NpdGlvbkVycm9yQ2FsbGJhY2ss
IG9wdGlvbnMpKTsgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBzZXRGYXRhbEVycm9yKFBhc3NS
ZWZQdHI8UG9zaXRpb25FcnJvcj4pOwotICAgICAgICBib29sIGhhc1plcm9UaW1lb3V0KCkgY29u
c3Q7Ci0gICAgICAgIHZvaWQgc2V0VXNlQ2FjaGVkUG9zaXRpb24oKTsKLSAgICAgICAgdm9pZCBy
dW5TdWNjZXNzQ2FsbGJhY2soR2VvcG9zaXRpb24qKTsKLSAgICAgICAgdm9pZCBzdGFydFRpbWVy
SWZOZWVkZWQoKTsKLSAgICAgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiop
OwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPEdlb2xvY2F0aW9uPiBtX2dlb2xvY2F0aW9uOwot
ICAgICAgICBSZWZQdHI8UG9zaXRpb25DYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Ci0gICAg
ICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKLSAgICAg
ICAgUmVmUHRyPFBvc2l0aW9uT3B0aW9ucz4gbV9vcHRpb25zOwotICAgICAgICBUaW1lcjxHZW9O
b3RpZmllcj4gbV90aW1lcjsKLSAgICAgICAgUmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fZmF0YWxF
cnJvcjsKLSAgICAgICAgYm9vbCBtX3VzZUNhY2hlZFBvc2l0aW9uOwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgR2VvTm90aWZpZXIoR2VvbG9jYXRpb24qLCBQYXNzUmVmUHRyPFBvc2l0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9z
aXRpb25PcHRpb25zPik7Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxHZW9O
b3RpZmllcj4gPiBHZW9Ob3RpZmllclZlY3RvcjsKLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRy
PEdlb05vdGlmaWVyPiA+IEdlb05vdGlmaWVyU2V0OwotCi0gICAgY2xhc3MgV2F0Y2hlcnMgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBzZXQoaW50IGlkLCBQYXNzUmVmUHRyPEdlb05vdGlm
aWVyPik7Ci0gICAgICAgIEdlb05vdGlmaWVyKiBmaW5kKGludCBpZCk7Ci0gICAgICAgIHZvaWQg
cmVtb3ZlKGludCBpZCk7Ci0gICAgICAgIHZvaWQgcmVtb3ZlKEdlb05vdGlmaWVyKik7Ci0gICAg
ICAgIGJvb2wgY29udGFpbnMoR2VvTm90aWZpZXIqKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGVh
cigpOwotICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKLSAgICAgICAgdm9pZCBnZXROb3Rp
ZmllcnNWZWN0b3IoR2VvTm90aWZpZXJWZWN0b3ImKSBjb25zdDsKLSAgICBwcml2YXRlOgotICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8R2VvTm90aWZpZXI+ID4gSWRUb05vdGlm
aWVyTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPEdlb05vdGlmaWVyPiwgaW50
PiBOb3RpZmllclRvSWRNYXA7Ci0gICAgICAgIElkVG9Ob3RpZmllck1hcCBtX2lkVG9Ob3RpZmll
ck1hcDsKLSAgICAgICAgTm90aWZpZXJUb0lkTWFwIG1fbm90aWZpZXJUb0lkTWFwOwotICAgIH07
Ci0KLSAgICBib29sIGhhc0xpc3RlbmVycygpIGNvbnN0IHsgcmV0dXJuICFtX29uZVNob3RzLmlz
RW1wdHkoKSB8fCAhbV93YXRjaGVycy5pc0VtcHR5KCk7IH0KLQotICAgIHZvaWQgc2VuZEVycm9y
KEdlb05vdGlmaWVyVmVjdG9yJiwgUG9zaXRpb25FcnJvciopOwotICAgIHZvaWQgc2VuZFBvc2l0
aW9uKEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvcG9zaXRpb24qKTsKLQotICAgIHN0YXRpYyB2b2lk
IGV4dHJhY3ROb3RpZmllcnNXaXRoQ2FjaGVkUG9zaXRpb24oR2VvTm90aWZpZXJWZWN0b3ImIG5v
dGlmaWVycywgR2VvTm90aWZpZXJWZWN0b3IqIGNhY2hlZCk7Ci0gICAgc3RhdGljIHZvaWQgY29w
eVRvU2V0KGNvbnN0IEdlb05vdGlmaWVyVmVjdG9yJiwgR2VvTm90aWZpZXJTZXQmKTsKLQotICAg
IHN0YXRpYyB2b2lkIHN0b3BUaW1lcihHZW9Ob3RpZmllclZlY3RvciYpOwotICAgIHZvaWQgc3Rv
cFRpbWVyc0Zvck9uZVNob3RzKCk7Ci0gICAgdm9pZCBzdG9wVGltZXJzRm9yV2F0Y2hlcnMoKTsK
LSAgICB2b2lkIHN0b3BUaW1lcnMoKTsKLQotICAgIHZvaWQgY2FuY2VsUmVxdWVzdHMoR2VvTm90
aWZpZXJWZWN0b3ImKTsKLSAgICB2b2lkIGNhbmNlbEFsbFJlcXVlc3RzKCk7Ci0KLSAgICB2b2lk
IHBvc2l0aW9uQ2hhbmdlZEludGVybmFsKCk7Ci0gICAgdm9pZCBtYWtlU3VjY2Vzc0NhbGxiYWNr
cygpOwotICAgIHZvaWQgaGFuZGxlRXJyb3IoUG9zaXRpb25FcnJvciopOwotCi0gICAgdm9pZCBy
ZXF1ZXN0UGVybWlzc2lvbigpOwotCi0gICAgYm9vbCBzdGFydFVwZGF0aW5nKEdlb05vdGlmaWVy
Kik7Ci0gICAgdm9pZCBzdG9wVXBkYXRpbmcoKTsKLQotI2lmIFVTRShQUkVFTVBUX0dFT0xPQ0FU
SU9OX1BFUk1JU1NJT04pCi0gICAgdm9pZCBoYW5kbGVQZW5kaW5nUGVybWlzc2lvbk5vdGlmaWVy
cygpOwotI2VuZGlmCi0KLSNpZiAhRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikgJiYg
RU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIC8vIEdlb2xvY2F0aW9uU2VydmljZUNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCBnZW9sb2NhdGlvblNlcnZpY2VQb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRp
b25TZXJ2aWNlKik7Ci0gICAgdmlydHVhbCB2b2lkIGdlb2xvY2F0aW9uU2VydmljZUVycm9yT2Nj
dXJyZWQoR2VvbG9jYXRpb25TZXJ2aWNlKik7Ci0jZW5kaWYKLQotICAgIFBhc3NSZWZQdHI8R2Vv
Tm90aWZpZXI+IHN0YXJ0UmVxdWVzdChQYXNzUmVmUHRyPFBvc2l0aW9uQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFBvc2l0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQdHI8UG9zaXRpb25PcHRpb25z
Pik7Ci0KLSAgICB2b2lkIGZhdGFsRXJyb3JPY2N1cnJlZChHZW9Ob3RpZmllciopOwotICAgIHZv
aWQgcmVxdWVzdFRpbWVkT3V0KEdlb05vdGlmaWVyKik7Ci0gICAgdm9pZCByZXF1ZXN0VXNlc0Nh
Y2hlZFBvc2l0aW9uKEdlb05vdGlmaWVyKik7Ci0gICAgYm9vbCBoYXZlU3VpdGFibGVDYWNoZWRQ
b3NpdGlvbihQb3NpdGlvbk9wdGlvbnMqKTsKLSAgICB2b2lkIG1ha2VDYWNoZWRQb3NpdGlvbkNh
bGxiYWNrcygpOwotCi0gICAgR2VvTm90aWZpZXJTZXQgbV9vbmVTaG90czsKLSAgICBXYXRjaGVy
cyBtX3dhdGNoZXJzOwotI2lmICFFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotICAg
IE93blB0cjxHZW9sb2NhdGlvblNlcnZpY2U+IG1fc2VydmljZTsKLSNlbmRpZgotI2lmIFVTRShQ
UkVFTVBUX0dFT0xPQ0FUSU9OX1BFUk1JU1NJT04pCi0gICAgR2VvTm90aWZpZXJTZXQgbV9wZW5k
aW5nRm9yUGVybWlzc2lvbk5vdGlmaWVyczsKLSNlbmRpZgotICAgIFJlZlB0cjxHZW9wb3NpdGlv
bj4gbV9sYXN0UG9zaXRpb247Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgVW5rbm93biwKLSAgICAg
ICAgSW5Qcm9ncmVzcywKLSAgICAgICAgWWVzLAotICAgICAgICBObwotICAgIH0gbV9hbGxvd0dl
b2xvY2F0aW9uOwotCi0jaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQotICAgIFJlZlB0cjxHZW9wb3Np
dGlvbj4gbV9jYWNoZWRQb3NpdGlvbjsKLSNlbmRpZgotICAgIEdlb05vdGlmaWVyU2V0IG1fcmVx
dWVzdHNBd2FpdGluZ0NhY2hlZFBvc2l0aW9uOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEdlb2xvY2F0aW9uX2gKLQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9HZW9sb2NhdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvbi5pZGwJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGNvcmUgewotCi0g
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvZ2VvbG9jYXRpb24tQVBJLyNnZW9sb2NhdGlvbl9p
bnRlcmZhY2UKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1HRU9MT0NBVElP
TiwgCi0gICAgICAgIEpTR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsRnJhbWUsCi0gICAgICAgIE9t
aXRDb25zdHJ1Y3RvcgotICAgIF0gR2VvbG9jYXRpb24gewotICAgICAgICBbQ3VzdG9tXSB2b2lk
IGdldEN1cnJlbnRQb3NpdGlvbihpbiBQb3NpdGlvbkNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBQ
b3NpdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBQb3NpdGlvbk9wdGlvbnMgb3B0aW9u
cyk7Ci0KLSAgICAgICAgW0N1c3RvbV0gbG9uZyB3YXRjaFBvc2l0aW9uKGluIFBvc2l0aW9uQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gW09wdGlvbmFsXSBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIFtPcHRpb25hbF0gUG9zaXRpb25P
cHRpb25zIG9wdGlvbnMpOwotCi0gICAgICAgIHZvaWQgY2xlYXJXYXRjaChpbiBsb25nIHdhdGNo
SWQpOwotICAgIH07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25D
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJHZW9sb2NhdGlvblBvc2l0aW9uLmgiCi0KLSNp
ZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQotCi0jaW5jbHVkZSAiR2VvbG9jYXRp
b25DbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HZW9sb2NhdGlvbkNvbnRyb2xs
ZXI6Okdlb2xvY2F0aW9uQ29udHJvbGxlcihQYWdlKiBwYWdlLCBHZW9sb2NhdGlvbkNsaWVudCog
Y2xpZW50KQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAgLCBtX2NsaWVudChjbGllbnQpCi17Ci19
Ci0KLUdlb2xvY2F0aW9uQ29udHJvbGxlcjo6fkdlb2xvY2F0aW9uQ29udHJvbGxlcigpCi17Ci0g
ICAgQVNTRVJUKG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgIG1fY2xpZW50LT5nZW9sb2NhdGlvbkRlc3Ryb3llZCgpOwotfQotCi1QYXNzT3duUHRy
PEdlb2xvY2F0aW9uQ29udHJvbGxlcj4gR2VvbG9jYXRpb25Db250cm9sbGVyOjpjcmVhdGUoUGFn
ZSogcGFnZSwgR2VvbG9jYXRpb25DbGllbnQqIGNsaWVudCkKLXsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IEdlb2xvY2F0aW9uQ29udHJvbGxlcihwYWdlLCBjbGllbnQpKTsKLX0KLQotdm9pZCBH
ZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmFkZE9ic2VydmVyKEdlb2xvY2F0aW9uKiBvYnNlcnZlciwg
Ym9vbCBlbmFibGVIaWdoQWNjdXJhY3kpCi17Ci0gICAgLy8gVGhpcyBtYXkgYmUgY2FsbGVkIG11
bHRpcGxlIHRpbWVzIHdpdGggdGhlIHNhbWUgb2JzZXJ2ZXIsIHRob3VnaCByZW1vdmVPYnNlcnZl
cigpCi0gICAgLy8gaXMgY2FsbGVkIG9ubHkgb25jZSB3aXRoIGVhY2guCi0gICAgYm9vbCB3YXNF
bXB0eSA9IG1fb2JzZXJ2ZXJzLmlzRW1wdHkoKTsKLSAgICBtX29ic2VydmVycy5hZGQob2JzZXJ2
ZXIpOwotICAgIGlmIChlbmFibGVIaWdoQWNjdXJhY3kpCi0gICAgICAgIG1faGlnaEFjY3VyYWN5
T2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7Ci0KLSAgICBpZiAobV9jbGllbnQpIHsgICAgICAgIAot
ICAgICAgICBpZiAoZW5hYmxlSGlnaEFjY3VyYWN5KQotICAgICAgICAgICAgbV9jbGllbnQtPnNl
dEVuYWJsZUhpZ2hBY2N1cmFjeSh0cnVlKTsKLSAgICAgICAgaWYgKHdhc0VtcHR5KQotICAgICAg
ICAgICAgbV9jbGllbnQtPnN0YXJ0VXBkYXRpbmcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VvbG9j
YXRpb25Db250cm9sbGVyOjpyZW1vdmVPYnNlcnZlcihHZW9sb2NhdGlvbiogb2JzZXJ2ZXIpCi17
Ci0gICAgaWYgKCFtX29ic2VydmVycy5jb250YWlucyhvYnNlcnZlcikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fb2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Ci0gICAgbV9oaWdoQWNjdXJh
Y3lPYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsKLQotICAgIGlmIChtX2NsaWVudCkgewotICAg
ICAgICBpZiAobV9vYnNlcnZlcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgbV9jbGllbnQtPnN0
b3BVcGRhdGluZygpOwotICAgICAgICBlbHNlIGlmIChtX2hpZ2hBY2N1cmFjeU9ic2VydmVycy5p
c0VtcHR5KCkpCi0gICAgICAgICAgICBtX2NsaWVudC0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5KGZh
bHNlKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VvbG9jYXRpb25Db250cm9sbGVyOjpyZXF1ZXN0UGVy
bWlzc2lvbihHZW9sb2NhdGlvbiogZ2VvbG9jYXRpb24pCi17Ci0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+cmVxdWVzdFBlcm1pc3Npb24oZ2VvbG9jYXRpb24pOwotfQotCi12
b2lkIEdlb2xvY2F0aW9uQ29udHJvbGxlcjo6Y2FuY2VsUGVybWlzc2lvblJlcXVlc3QoR2VvbG9j
YXRpb24qIGdlb2xvY2F0aW9uKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGll
bnQtPmNhbmNlbFBlcm1pc3Npb25SZXF1ZXN0KGdlb2xvY2F0aW9uKTsKLX0KLQotdm9pZCBHZW9s
b2NhdGlvbkNvbnRyb2xsZXI6OnBvc2l0aW9uQ2hhbmdlZChHZW9sb2NhdGlvblBvc2l0aW9uKiBw
b3NpdGlvbikKLXsKLSAgICBtX2xhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgIFZlY3RvcjxS
ZWZQdHI8R2VvbG9jYXRpb24+ID4gb2JzZXJ2ZXJzVmVjdG9yOwotICAgIGNvcHlUb1ZlY3Rvciht
X29ic2VydmVycywgb2JzZXJ2ZXJzVmVjdG9yKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9ic2VydmVyc1ZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgb2JzZXJ2ZXJzVmVjdG9yW2ld
LT5wb3NpdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvbkNvbnRyb2xsZXI6OmVy
cm9yT2NjdXJyZWQoR2VvbG9jYXRpb25FcnJvciogZXJyb3IpCi17Ci0gICAgVmVjdG9yPFJlZlB0
cjxHZW9sb2NhdGlvbj4gPiBvYnNlcnZlcnNWZWN0b3I7Ci0gICAgY29weVRvVmVjdG9yKG1fb2Jz
ZXJ2ZXJzLCBvYnNlcnZlcnNWZWN0b3IpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jz
ZXJ2ZXJzVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICBvYnNlcnZlcnNWZWN0b3JbaV0tPnNl
dEVycm9yKGVycm9yKTsKLX0KLQotR2VvbG9jYXRpb25Qb3NpdGlvbiogR2VvbG9jYXRpb25Db250
cm9sbGVyOjpsYXN0UG9zaXRpb24oKQotewotICAgIGlmIChtX2xhc3RQb3NpdGlvbi5nZXQoKSkK
LSAgICAgICAgcmV0dXJuIG1fbGFzdFBvc2l0aW9uLmdldCgpOwotCi0gICAgaWYgKCFtX2NsaWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jbGllbnQtPmxhc3RQb3NpdGlv
bigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ0xJ
RU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvbkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uQ29udHJvbGxlci5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCi0jZGVmaW5l
IEdlb2xvY2F0aW9uQ29udHJvbGxlcl9oCi0KLSNpZiBFTkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xP
Q0FUSU9OKQotCi0jaW5jbHVkZSAiR2VvbG9jYXRpb24uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHZW9sb2NhdGlvbkNsaWVudDsKLWNs
YXNzIEdlb2xvY2F0aW9uRXJyb3I7Ci1jbGFzcyBHZW9sb2NhdGlvblBvc2l0aW9uOwotY2xhc3Mg
UGFnZTsKLQotY2xhc3MgR2VvbG9jYXRpb25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShHZW9sb2NhdGlvbkNvbnRyb2xsZXIpOwotcHVibGljOgotICAgIH5HZW9sb2NhdGlv
bkNvbnRyb2xsZXIoKTsKLQotICAgIHN0YXRpYyBQYXNzT3duUHRyPEdlb2xvY2F0aW9uQ29udHJv
bGxlcj4gY3JlYXRlKFBhZ2UqLCBHZW9sb2NhdGlvbkNsaWVudCopOwotCi0gICAgdm9pZCBhZGRP
YnNlcnZlcihHZW9sb2NhdGlvbiosIGJvb2wgZW5hYmxlSGlnaEFjY3VyYWN5KTsKLSAgICB2b2lk
IHJlbW92ZU9ic2VydmVyKEdlb2xvY2F0aW9uKik7Ci0KLSAgICB2b2lkIHJlcXVlc3RQZXJtaXNz
aW9uKEdlb2xvY2F0aW9uKik7Ci0gICAgdm9pZCBjYW5jZWxQZXJtaXNzaW9uUmVxdWVzdChHZW9s
b2NhdGlvbiopOwotCi0gICAgdm9pZCBwb3NpdGlvbkNoYW5nZWQoR2VvbG9jYXRpb25Qb3NpdGlv
biopOwotICAgIHZvaWQgZXJyb3JPY2N1cnJlZChHZW9sb2NhdGlvbkVycm9yKik7Ci0KLSAgICBH
ZW9sb2NhdGlvblBvc2l0aW9uKiBsYXN0UG9zaXRpb24oKTsKLQotICAgIEdlb2xvY2F0aW9uQ2xp
ZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQotCi1wcml2YXRlOgotICAgIEdlb2xv
Y2F0aW9uQ29udHJvbGxlcihQYWdlKiwgR2VvbG9jYXRpb25DbGllbnQqKTsKLQotICAgIFBhZ2Uq
IG1fcGFnZTsKLSAgICBHZW9sb2NhdGlvbkNsaWVudCogbV9jbGllbnQ7Ci0KLSAgICBSZWZQdHI8
R2VvbG9jYXRpb25Qb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247Ci0gICAgdHlwZWRlZiBIYXNoU2V0
PFJlZlB0cjxHZW9sb2NhdGlvbj4gPiBPYnNlcnZlcnNTZXQ7Ci0gICAgLy8gQWxsIG9ic2VydmVy
czsgYm90aCB0aG9zZSByZXF1ZXN0aW5nIGhpZ2ggYWNjdXJhY3kgYW5kIHRob3NlIG5vdC4KLSAg
ICBPYnNlcnZlcnNTZXQgbV9vYnNlcnZlcnM7Ci0gICAgT2JzZXJ2ZXJzU2V0IG1faGlnaEFjY3Vy
YWN5T2JzZXJ2ZXJzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLQotI2VuZGlmIC8vIEdlb2xvY2F0aW9u
Q29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uRXJyb3IuaAko
cmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbkVycm9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
R2VvbG9jYXRpb25FcnJvcl9oCi0jZGVmaW5lIEdlb2xvY2F0aW9uRXJyb3JfaAotCi0jaWYgRU5B
QkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBHZW9sb2NhdGlvbkVycm9yIDogcHVibGljIFJlZkNvdW50ZWQ8R2VvbG9jYXRpb25FcnJv
cj4gewotcHVibGljOgotICAgIGVudW0gRXJyb3JDb2RlIHsKLSAgICAgICAgUGVybWlzc2lvbkRl
bmllZCwKLSAgICAgICAgUG9zaXRpb25VbmF2YWlsYWJsZQotICAgIH07Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHZW9sb2NhdGlvbkVycm9yPiBjcmVhdGUoRXJyb3JDb2RlIGNvZGUsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb2xvY2F0aW9uRXJyb3Io
Y29kZSwgbWVzc2FnZSkpOyB9Ci0KLSAgICBFcnJvckNvZGUgY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVzc2FnZTsgfQotCi1wcml2YXRlOgotICAgIEdlb2xvY2F0aW9uRXJyb3IoRXJyb3JDb2RlIGNv
ZGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAg
ICAgLCBtX21lc3NhZ2UobWVzc2FnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgRXJyb3JDb2RlIG1f
Y29kZTsKLSAgICBTdHJpbmcgbV9tZXNzYWdlOyAKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShDTElFTlRfQkFTRURfR0VPTE9DQVRJT04pCi0KLSNlbmRp
ZiAvLyBHZW9sb2NhdGlvbkVycm9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25Qb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvbG9j
YXRpb25Qb3NpdGlvbi5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0dlb2xvY2F0aW9uUG9zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgR2VvbG9jYXRpb25Qb3NpdGlvbl9oCi0jZGVmaW5lIEdlb2xv
Y2F0aW9uUG9zaXRpb25faAotCi0jaWYgRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikK
LQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgR2VvbG9jYXRpb25Qb3NpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdlb2xvY2F0aW9uUG9z
aXRpb24+IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9sb2NhdGlvblBvc2l0
aW9uPiBjcmVhdGUoZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9u
Z2l0dWRlLCBkb3VibGUgYWNjdXJhY3kpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBHZW9sb2NhdGlv
blBvc2l0aW9uKHRpbWVzdGFtcCwgbGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3kpKTsgfQot
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2VvbG9jYXRpb25Qb3NpdGlvbj4gY3JlYXRlKGRvdWJs
ZSB0aW1lc3RhbXAsIGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIHByb3ZpZGVzQWx0aXR1ZGUsIGRvdWJsZSBhbHRpdHVkZSwgYm9vbCBwcm92
aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGRvdWJsZSBhbHRpdHVkZUFjY3VyYWN5LCBib29sIHByb3Zp
ZGVzSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgcHJvdmlkZXNTcGVlZCwgZG91YmxlIHNw
ZWVkKSB7IHJldHVybiBhZG9wdFJlZihuZXcgR2VvbG9jYXRpb25Qb3NpdGlvbih0aW1lc3RhbXAs
IGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVk
ZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hl
YWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKSk7IH0KLQotICAgIGRvdWJsZSB0
aW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQotCi0gICAgZG91YmxlIGxh
dGl0dWRlKCkgY29uc3QgeyByZXR1cm4gbV9sYXRpdHVkZTsgfQotICAgIGRvdWJsZSBsb25naXR1
ZGUoKSBjb25zdCB7IHJldHVybiBtX2xvbmdpdHVkZTsgfQotICAgIGRvdWJsZSBhY2N1cmFjeSgp
IGNvbnN0IHsgcmV0dXJuIG1fYWNjdXJhY3k7IH0KLSAgICBkb3VibGUgYWx0aXR1ZGUoKSBjb25z
dCB7IHJldHVybiBtX2FsdGl0dWRlOyB9Ci0gICAgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3koKSBj
b25zdCB7IHJldHVybiBtX2FsdGl0dWRlQWNjdXJhY3k7IH0KLSAgICBkb3VibGUgaGVhZGluZygp
IGNvbnN0IHsgcmV0dXJuIG1faGVhZGluZzsgfQotICAgIGRvdWJsZSBzcGVlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3BlZWQ7IH0KLQotICAgIGJvb2wgY2FuUHJvdmlkZUFsdGl0dWRlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYW5Qcm92aWRlQWx0aXR1ZGU7IH0KLSAgICBib29sIGNhblByb3ZpZGVBbHRp
dHVkZUFjY3VyYWN5KCkgY29uc3QgeyByZXR1cm4gbV9jYW5Qcm92aWRlQWx0aXR1ZGVBY2N1cmFj
eTsgfQotICAgIGJvb2wgY2FuUHJvdmlkZUhlYWRpbmcoKSBjb25zdCB7IHJldHVybiBtX2NhblBy
b3ZpZGVIZWFkaW5nOyB9Ci0gICAgYm9vbCBjYW5Qcm92aWRlU3BlZWQoKSBjb25zdCB7IHJldHVy
biBtX2NhblByb3ZpZGVTcGVlZDsgfQotCi1wcml2YXRlOgotICAgIEdlb2xvY2F0aW9uUG9zaXRp
b24oZG91YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBk
b3VibGUgYWNjdXJhY3kpCi0gICAgICAgIDogbV90aW1lc3RhbXAodGltZXN0YW1wKQotICAgICAg
ICAsIG1fbGF0aXR1ZGUobGF0aXR1ZGUpCi0gICAgICAgICwgbV9sb25naXR1ZGUobG9uZ2l0dWRl
KQotICAgICAgICAsIG1fYWNjdXJhY3koYWNjdXJhY3kpCi0gICAgICAgICwgbV9hbHRpdHVkZSgw
KQotICAgICAgICAsIG1fYWx0aXR1ZGVBY2N1cmFjeSgwKQotICAgICAgICAsIG1faGVhZGluZygw
KQotICAgICAgICAsIG1fc3BlZWQoMCkKLSAgICAgICAgLCBtX2NhblByb3ZpZGVBbHRpdHVkZShm
YWxzZSkKLSAgICAgICAgLCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5KGZhbHNlKQotICAg
ICAgICAsIG1fY2FuUHJvdmlkZUhlYWRpbmcoZmFsc2UpCi0gICAgICAgICwgbV9jYW5Qcm92aWRl
U3BlZWQoZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIEdlb2xvY2F0aW9uUG9zaXRpb24oZG91
YmxlIHRpbWVzdGFtcCwgZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3VibGUg
YWNjdXJhY3ksIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIHBy
b3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgZG91YmxlIGFsdGl0dWRlQWNjdXJhY3ksIGJvb2wgcHJv
dmlkZXNIZWFkaW5nLCBkb3VibGUgaGVhZGluZywgYm9vbCBwcm92aWRlc1NwZWVkLCBkb3VibGUg
c3BlZWQpCi0gICAgICAgIDogbV90aW1lc3RhbXAodGltZXN0YW1wKQotICAgICAgICAsIG1fbGF0
aXR1ZGUobGF0aXR1ZGUpCi0gICAgICAgICwgbV9sb25naXR1ZGUobG9uZ2l0dWRlKQotICAgICAg
ICAsIG1fYWNjdXJhY3koYWNjdXJhY3kpCi0gICAgICAgICwgbV9hbHRpdHVkZShhbHRpdHVkZSkK
LSAgICAgICAgLCBtX2FsdGl0dWRlQWNjdXJhY3koYWx0aXR1ZGVBY2N1cmFjeSkKLSAgICAgICAg
LCBtX2hlYWRpbmcoaGVhZGluZykKLSAgICAgICAgLCBtX3NwZWVkKHNwZWVkKQotICAgICAgICAs
IG1fY2FuUHJvdmlkZUFsdGl0dWRlKHByb3ZpZGVzQWx0aXR1ZGUpCi0gICAgICAgICwgbV9jYW5Q
cm92aWRlQWx0aXR1ZGVBY2N1cmFjeShwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3kpCi0gICAgICAg
ICwgbV9jYW5Qcm92aWRlSGVhZGluZyhwcm92aWRlc0hlYWRpbmcpCi0gICAgICAgICwgbV9jYW5Q
cm92aWRlU3BlZWQocHJvdmlkZXNTcGVlZCkKLSAgICB7Ci0gICAgfQotCi0gICAgZG91YmxlIG1f
dGltZXN0YW1wOwotCi0gICAgZG91YmxlIG1fbGF0aXR1ZGU7Ci0gICAgZG91YmxlIG1fbG9uZ2l0
dWRlOwotICAgIGRvdWJsZSBtX2FjY3VyYWN5OwotICAgIGRvdWJsZSBtX2FsdGl0dWRlOwotICAg
IGRvdWJsZSBtX2FsdGl0dWRlQWNjdXJhY3k7Ci0gICAgZG91YmxlIG1faGVhZGluZzsKLSAgICBk
b3VibGUgbV9zcGVlZDsKLQotICAgIGJvb2wgbV9jYW5Qcm92aWRlQWx0aXR1ZGU7Ci0gICAgYm9v
bCBtX2NhblByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5OwotICAgIGJvb2wgbV9jYW5Qcm92aWRlSGVh
ZGluZzsKLSAgICBib29sIG1fY2FuUHJvdmlkZVNwZWVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKLQot
I2VuZGlmIC8vIEdlb2xvY2F0aW9uUG9zaXRpb25faApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9HZW9wb3NpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9z
aXRpb24uaAkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9HZW9wb3Np
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBHZW9wb3NpdGlvbl9oCi0jZGVm
aW5lIEdlb3Bvc2l0aW9uX2gKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVzLmgiCi0jaW5jbHVkZSAi
RXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2VvcG9zaXRpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxHZW9wb3NpdGlvbj4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEdlb3Bvc2l0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDb29yZGluYXRlcz4gY29vcmRp
bmF0ZXMsIERPTVRpbWVTdGFtcCB0aW1lc3RhbXApCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEdlb3Bvc2l0aW9uKGNvb3JkaW5hdGVzLCB0aW1lc3RhbXApKTsKLSAgICB9Ci0K
LSAgICBQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBpc29sYXRlZENvcHkoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdlb3Bvc2l0aW9uOjpjcmVhdGUobV9jb29yZGluYXRlcy0+aXNvbGF0
ZWRDb3B5KCksIG1fdGltZXN0YW1wKTsKLSAgICB9Ci0KLSAgICBET01UaW1lU3RhbXAgdGltZXN0
YW1wKCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KLSAgICBDb29yZGluYXRlcyogY29v
cmRzKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlcy5nZXQoKTsgfQotICAgIAotcHJpdmF0
ZToKLSAgICBHZW9wb3NpdGlvbihQYXNzUmVmUHRyPENvb3JkaW5hdGVzPiBjb29yZGluYXRlcywg
RE9NVGltZVN0YW1wIHRpbWVzdGFtcCkKLSAgICAgICAgOiBtX2Nvb3JkaW5hdGVzKGNvb3JkaW5h
dGVzKQotICAgICAgICAsIG1fdGltZXN0YW1wKHRpbWVzdGFtcCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2Nvb3JkaW5hdGVzKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8Q29vcmRpbmF0ZXM+IG1f
Y29vcmRpbmF0ZXM7Ci0gICAgRE9NVGltZVN0YW1wIG1fdGltZXN0YW1wOwotfTsKLSAgICAKLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdlb3Bvc2l0aW9uX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaWRsCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1vZHVs
ZSBjb3JlIHsKLQotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUdFT0xPQ0FU
SU9OLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKLSAgICBdIEdlb3Bvc2l0aW9uIHsKLSAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIENvb3JkaW5hdGVzIGNvb3JkczsKLSAgICAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERPTVRpbWVTdGFtcCB0aW1lc3RhbXA7Ci0gICAgfTsKLX0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAxMDg0NDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgUG9zaXRpb25DYWxsYmFja19oCi0jZGVmaW5lIFBvc2l0aW9uQ2FsbGJhY2tf
aAotCi0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci0gICAgY2xhc3MgR2VvcG9zaXRpb247Ci0KLSAgICBjbGFzcyBQb3NpdGlvbkNhbGxiYWNrIDog
cHVibGljIFJlZkNvdW50ZWQ8UG9zaXRpb25DYWxsYmFjaz4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgdmlydHVhbCB+UG9zaXRpb25DYWxsYmFjaygpIHsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wg
aGFuZGxlRXZlbnQoR2VvcG9zaXRpb24qKSA9IDA7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUG9zaXRpb25DYWxsYmFja19oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25DYWxsYmFjay5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotbW9kdWxlIGNvcmUgewotICAgIGludGVyZmFjZSBb
Ci0gICAgICAgIENvbmRpdGlvbmFsPUdFT0xPQ0FUSU9OLAotICAgICAgICBDYWxsYmFjawotICAg
IF0gUG9zaXRpb25DYWxsYmFjayB7Ci0gICAgICAgIGJvb2xlYW4gaGFuZGxlRXZlbnQoaW4gR2Vv
cG9zaXRpb24gcG9zaXRpb24pOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L1Bvc2l0aW9uRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0
aW9uRXJyb3IuaAkocmV2aXNpb24gMTA4NDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Qb3Np
dGlvbkVycm9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvc2l0aW9uRXJyb3Jf
aAotI2RlZmluZSBQb3NpdGlvbkVycm9yX2gKLQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBQb3NpdGlvbkVycm9yIDogcHVi
bGljIFJlZkNvdW50ZWQ8UG9zaXRpb25FcnJvcj4gewotcHVibGljOgotICAgIGVudW0gRXJyb3JD
b2RlIHsKLSAgICAgICAgUEVSTUlTU0lPTl9ERU5JRUQgPSAxLAotICAgICAgICBQT1NJVElPTl9V
TkFWQUlMQUJMRSA9IDIsCi0gICAgICAgIFRJTUVPVVQgPSAzCi0gICAgfTsKLSAgICAKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQb3NpdGlvbkVycm9yPiBjcmVhdGUoRXJyb3JDb2RlIGNvZGUsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0aW9uRXJyb3Io
Y29kZSwgbWVzc2FnZSkpOyB9Ci0KLSAgICBFcnJvckNvZGUgY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY29kZTsgfQotICAgIGNvbnN0IFN0cmluZyYgbWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWVzc2FnZTsgfQotICAgIHZvaWQgc2V0SXNGYXRhbChib29sIGlzRmF0YWwpIHsgbV9pc0ZhdGFs
ID0gaXNGYXRhbDsgfQotICAgIGJvb2wgaXNGYXRhbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGYXRh
bDsgfQotICAgIAotcHJpdmF0ZToKLSAgICBQb3NpdGlvbkVycm9yKEVycm9yQ29kZSBjb2RlLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIAotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAs
IG1fbWVzc2FnZShtZXNzYWdlKQotICAgICAgICAsIG1faXNGYXRhbChmYWxzZSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIEVycm9yQ29kZSBtX2NvZGU7Ci0gICAgU3RyaW5nIG1fbWVzc2FnZTsK
LSAgICAvLyBXaGV0aGVyIHRoZSBlcnJvciBpcyBmYXRhbCwgc3VjaCB0aGF0IG5vIHJlcXVlc3Qg
Y2FuIGV2ZXIgb2J0YWluIGEgZ29vZAotICAgIC8vIHBvc2l0aW9uIGZpeCBpbiB0aGUgZnV0dXJl
LgotICAgIGJvb2wgbV9pc0ZhdGFsOwotfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFBvc2l0aW9uRXJyb3JfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
b3NpdGlvbkVycm9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0
aW9uRXJyb3IuaWRsCShyZXZpc2lvbiAxMDg0NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Bv
c2l0aW9uRXJyb3IuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGNvcmUgewotCi0g
ICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9R0VPTE9DQVRJT04KLSAgICBdIFBv
c2l0aW9uRXJyb3IgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQg
Y29kZTsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwotCi0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBFUk1JU1NJT05fREVOSUVEID0gMTsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUE9TSVRJT05fVU5BVkFJTEFCTEUgPSAyOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBUSU1FT1VUID0gMzsKLSAgICB9OwotCi19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHJldmlzaW9uIDEw
ODQ0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFBvc2l0aW9uRXJyb3JDYWxsYmFja19oCi0jZGVm
aW5lIFBvc2l0aW9uRXJyb3JDYWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBQb3NpdGlvbkVycm9yOwotCi0g
ICAgY2xhc3MgUG9zaXRpb25FcnJvckNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8UG9zaXRp
b25FcnJvckNhbGxiYWNrPiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5Qb3NpdGlv
bkVycm9yQ2FsbGJhY2soKSB7IH0KLSAgICAgICAgdmlydHVhbCBib29sIGhhbmRsZUV2ZW50KFBv
c2l0aW9uRXJyb3IqKSA9IDA7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUG9zaXRpb25FcnJvckNhbGxiYWNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5pZGwJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvUG9zaXRpb25FcnJvckNhbGxiYWNrLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1tb2R1bGUgY29yZSB7Ci0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9R0VPTE9DQVRJT04sCi0gICAgICAgIENhbGxi
YWNrCi0gICAgXSBQb3NpdGlvbkVycm9yQ2FsbGJhY2sgewotICAgICAgICBib29sZWFuIGhhbmRs
ZUV2ZW50KGluIFBvc2l0aW9uRXJyb3IgZXJyb3IpOwotICAgIH07Ci19CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1Bvc2l0aW9uT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmgJKHJldmlzaW9uIDEwODQ0OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUG9zaXRpb25PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIFBvc2l0aW9uT3B0aW9uc19oCi0jZGVmaW5lIFBvc2l0aW9uT3B0aW9uc19oCi0KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIFBvc2l0aW9uT3B0aW9ucyA6IHB1YmxpYyBS
ZWZDb3VudGVkPFBvc2l0aW9uT3B0aW9ucz4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBvc2l0aW9uT3B0aW9ucz4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFBvc2l0
aW9uT3B0aW9ucygpKTsgfQotCi0gICAgYm9vbCBlbmFibGVIaWdoQWNjdXJhY3koKSBjb25zdCB7
IHJldHVybiBtX2hpZ2hBY2N1cmFjeTsgfQotICAgIHZvaWQgc2V0RW5hYmxlSGlnaEFjY3VyYWN5
KGJvb2wgZW5hYmxlKSB7IG1faGlnaEFjY3VyYWN5ID0gZW5hYmxlOyB9Ci0gICAgYm9vbCBoYXNU
aW1lb3V0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNUaW1lb3V0OyB9Ci0gICAgaW50IHRpbWVvdXQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1RpbWVvdXQoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3RpbWVvdXQ7Ci0gICAgfQotICAgIHZvaWQgc2V0VGltZW91dChpbnQgdGltZW91dCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVCh0aW1lb3V0ID49IDApOwotICAgICAgICBtX2hhc1RpbWVv
dXQgPSB0cnVlOwotICAgICAgICBtX3RpbWVvdXQgPSB0aW1lb3V0OwotICAgIH0KLSAgICBib29s
IGhhc01heGltdW1BZ2UoKSBjb25zdCB7IHJldHVybiBtX2hhc01heGltdW1BZ2U7IH0KLSAgICBp
bnQgbWF4aW11bUFnZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaGFzTWF4aW11bUFn
ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1fbWF4aW11bUFnZTsKLSAgICB9Ci0gICAgdm9pZCBjbGVh
ck1heGltdW1BZ2UoKSB7IG1faGFzTWF4aW11bUFnZSA9IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRN
YXhpbXVtQWdlKGludCBhZ2UpCi0gICAgewotICAgICAgICBBU1NFUlQoYWdlID49IDApOwotICAg
ICAgICBtX2hhc01heGltdW1BZ2UgPSB0cnVlOwotICAgICAgICBtX21heGltdW1BZ2UgPSBhZ2U7
Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICBQb3NpdGlvbk9wdGlvbnMoKQotICAgICAgICA6
IG1faGlnaEFjY3VyYWN5KGZhbHNlKQotICAgICAgICAsIG1faGFzVGltZW91dChmYWxzZSkKLSAg
ICB7Ci0gICAgICAgIHNldE1heGltdW1BZ2UoMCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgbV9o
aWdoQWNjdXJhY3k7Ci0gICAgYm9vbCBtX2hhc1RpbWVvdXQ7Ci0gICAgaW50IG1fdGltZW91dDsK
LSAgICBib29sIG1faGFzTWF4aW11bUFnZTsKLSAgICBpbnQgbV9tYXhpbXVtQWdlOwotfTsKLSAg
ICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBvc2l0aW9uT3B0aW9uc19o
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>