<?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>225752</bug_id>
          
          <creation_ts>2021-05-13 04:46:47 -0700</creation_ts>
          <short_desc>[LFC] Move base formatting geometry to its own class</short_desc>
          <delta_ts>2021-05-15 18:57:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>225731</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1759631</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 04:46:47 -0700</bug_when>
    <thetext>This is part of bug 225731 activity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759661</commentid>
    <comment_count>1</comment_count>
      <attachid>428500</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 05:45:31 -0700</bug_when>
    <thetext>Created attachment 428500
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760523</commentid>
    <comment_count>2</comment_count>
      <attachid>428758</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 18:28:53 -0700</bug_when>
    <thetext>Created attachment 428758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760531</commentid>
    <comment_count>3</comment_count>
      <attachid>428761</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 18:55:33 -0700</bug_when>
    <thetext>Created attachment 428761
[fast-cq] Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760532</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-15 18:57:02 -0700</bug_when>
    <thetext>Committed r277556 (237784@main): &lt;https://commits.webkit.org/237784@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428761.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760533</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-15 18:57:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78067356&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428500</attachid>
            <date>2021-05-13 05:45:31 -0700</date>
            <delta_ts>2021-05-15 18:28:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225752-20210513054530.patch</filename>
            <type>text/plain</type>
            <size>195957</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uNzhhZTk2ZmI4ZDQyODFiYzlhMDA3OGY2YjU0M2Nm
NGRiNTY0ZDg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTA1LTEzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJhc2UgZm9y
bWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3duIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3NTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGF5b3V0U3RhdGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmxheW91dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpn
ZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5OjpCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4p
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nR2VvbWV0cnk6OkZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3Jt
YXR0aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6Oklu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4pOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRp
bmdHZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0
dGluZ0dlb21ldHJ5KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxl
L1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nUXVpcmtzOjpnZW9t
ZXRyeSBjb25zdCk6CisKIDIwMjEtMDUtMDUgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxhYm95YUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gV2ViS2l0TWVkaWFTcmMgcmV3
b3JrIHYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDA4OWY2ODEyOGFlYzNjMzA1ZTk3NjRjMzI0OWJkOTA0
YjE3YzViZmIuLjkyYjg0NjNkOTY0NDViMjI3YmVhMTBmNjU4MTk3ODM5N2ZiYTY0MzMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xNTExLDcgKzE1MTEsNyBAQCBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0
d29ya0FnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50
LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKLWxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKK2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAogbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L0Zvcm1hdHRpbmdT
dGF0ZS5jcHAKIGxheW91dC9MYXlvdXRDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUzODgwMThkMjUwMzk2MGRi
YzBkZDIzNmZjNGFiYmQ0YTU2YTk1YTcuLjlmN2UzODFkMGE0ZmQzOGRiOTlkNzdhOTllODFiODhh
Y2JkZjNjMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTIxMzEsNiArMjEzMSw3IEBACiAJCTZGMjZCQjZDMjMzNDNFNkYwMDJG
MkJFQSAvKiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29udGV4dC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZF
QjQ4MjM0MDA0QTUwMDY5MDZFMiAvKiBJbmxpbmVMaW5lQnVpbGRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUy
IC8qIElubGluZUxpbmVCdWlsZGVyLmggKi87IH07CiAJCTZGMjkxRjRBMjY0ODgyMUUwMEIxNTc4
NSAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGMjkxRjQ5MjY0ODgyMUUwMEIxNTc4NSAvKiBJbmxpbmVG
b3JtYXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk2RjM0MEVBMjI2NDg4NTJEMDBBNjNBMDAgLyogRm9ybWF0dGluZ0dlb21l
dHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjM0
MEVBMTI2NDg4NTJEMDBBNjNBMDAgLyogRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkYzNjBFNTAyMzk5OTQyMTAw
MTUxMkE3IC8qIElubGluZVNvZnRMaW5lQnJlYWtJdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5s
aW5lU29mdExpbmVCcmVha0l0ZW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk2RjNGQkE5ODI1NTZFMzEzMDAzNTMwRkQgLyogTGF5b3V0SW50ZWdy
YXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkYzRkJBOTcyNTU2RTMxMjAwMzUzMEZEIC8qIExheW91dEludGVn
cmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2RjQwREE4MjI1MTMwMzNBMDBFQzA0QjcgLyogSW5saW5l
UmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkY0
MERBODEyNTEzMDMzQTAwRUMwNEI3IC8qIElubGluZVJlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTk2NCw2ICs5OTY1LDcgQEAKIAkJNkYy
NkJCNkIyMzM0M0U1QjAwMkYyQkVBIC8qIExheW91dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGF5b3V0Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjI2RUI0NjIz
NDAwNEE1MDA2OTA2RTIgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkYzNDBFQTEyNjQ4ODUy
RDAwQTYzQTAwIC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb3JtYXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNkYzNUVGQUYyMTg3Q0JENTAwNDRFMEY0IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0
aW5nR2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjM2MEU0RTIz
OTk5NDIwMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRkJBOTYyNTU2RTMwODAwMzUzMEZEIC8qIExheW91dElu
dGVncmF0aW9uSW5saW5lQ29udGVudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5
b3V0SW50ZWdyYXRpb25JbmxpbmVDb250ZW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMDAyOCw3ICsxMDAzMCw3IEBACiAJCTZGQjdEMkQ4MjUwRkQ3RUYwMDAy
MDdBQSAvKiBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsZXhG
b3JtYXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkI3RDJE
OTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2RkI3RDJEQTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1h
dHRpbmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGV4Rm9ybWF0
dGluZ1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGQkI4NjA1MjBCNDY0
QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0dlb21ldHJ5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGQzNGOTQ1MjUxNjc1NjYwMEE0OUJFQSAvKiBJbmxpbmVM
aW5lUnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVSdW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZF
IC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZv
cm1hdHRpbmdRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1Q0E5
MjIyRTM1OTkzMDBCMTNFMTEgLyogVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTgyNTIsMTQgKzE4MjU0LDE0IEBACiAJCQkJNkZENEZFM0UyNDcwQjNBRDAwNzM3
NENDIC8qIHRhYmxld3JhcHBlciAqLywKIAkJCQkxMTVDRkE2RDIwOEFGQUI2MDAxRTY5OTEgLyog
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJMTE1Q0ZBNkMyMDhBRkFCNjAwMUU2
OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2Rjc5RjBDMDI2NDg3QzRD
MDA2OTgyQjYgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJCQk2RjA4MzBERjIw
QjQ2OTUxMDA4QTk0NUIgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwICovLAotCQkJCTZG
OUQxQUY5MjY0NzYxMzUwMEY1RDNBRCAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLywKKwkJ
CQk2Rjc5RjBDMDI2NDg3QzRDMDA2OTgyQjYgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAq
LywKIAkJCQk2RjhGNDYwMzIxQjAzQkM2MDA0MUFDM0EgLyogQmxvY2tGb3JtYXR0aW5nUXVpcmtz
LmNwcCAqLywKKwkJCQk2RjlEMUFGOTI2NDc2MTM1MDBGNUQzQUQgLyogQmxvY2tGb3JtYXR0aW5n
UXVpcmtzLmggKi8sCiAJCQkJMTE1Q0ZBNzkyMDhCOEQ5RDAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0
dGluZ1N0YXRlLmNwcCAqLywKIAkJCQkxMTVDRkE3ODIwOEI4RDlEMDAxRTY5OTEgLyogQmxvY2tG
b3JtYXR0aW5nU3RhdGUuaCAqLywKLQkJCQk2RjZERjM2RTI2NDcyMkVBMDA5M0U4MzQgLyogQmxv
Y2tNYXJnaW5Db2xsYXBzZS5oICovLAogCQkJCTExNUNGQTg5MjA4QjkyMUEwMDFFNjk5MSAvKiBC
bG9ja01hcmdpbkNvbGxhcHNlLmNwcCAqLywKKwkJCQk2RjZERjM2RTI2NDcyMkVBMDA5M0U4MzQg
LyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oICovLAogCQkJCTZGQUUxNkJBMjQwNkRFN0UwMEE0ODQx
NCAvKiBQcmVjb21wdXRlZEJsb2NrTWFyZ2luQ29sbGFwc2UuY3BwICovLAogCQkJKTsKIAkJCXBh
dGggPSBibG9jazsKQEAgLTE4MjczLDEwICsxODI3NSwxMCBAQAogCQkJCTZGRTE5ODE1MjE3ODM5
N0MwMDQ0NkYwOCAvKiBJbmxpbmVDb250ZW50QnJlYWtlci5oICovLAogCQkJCTZGN0NBM0M5MjA4
QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNkY3
Q0EzQzgyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0J
CQkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5o
ICovLAogCQkJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJbmxpbmVGb3JtYXR0aW5nR2Vv
bWV0cnkuY3BwICovLAotCQkJCTZGRTYzNkU3MjY0Nzk2MjkwMEYwOTUxRSAvKiBJbmxpbmVGb3Jt
YXR0aW5nUXVpcmtzLmggKi8sCisJCQkJNkYyOTFGNDkyNjQ4ODIxRTAwQjE1Nzg1IC8qIElubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovLAogCQkJCTZGMTBCMDg2MjJCODU2OEQwMDkwRTY5QyAv
KiBJbmxpbmVGb3JtYXR0aW5nUXVpcmtzLmNwcCAqLywKKwkJCQk2RkU2MzZFNzI2NDc5NjI5MDBG
MDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTExNUNGQTdEMjA4QjhF
MTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3BwICovLAogCQkJCTExNUNGQTdD
MjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCAqLywKIAkJCQk2RjdC
OENFQzIzNjI2RTY2MDBDOUZGMTUgLyogSW5saW5lSXRlbS5jcHAgKi8sCkBAIC0yMjYzMSw5ICsy
MjYzMywxMCBAQAogCQkJCTZGQzVDQTkxMjJFMzU5MzMwMEIxM0UxMSAvKiB0YWJsZSAqLywKIAkJ
CQkxMTVDRkE2OTIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAog
CQkJCTExNUNGQTY4MjA4QUY3RDAwMDFFNjk5MSAvKiBGb3JtYXR0aW5nQ29udGV4dC5oICovLAot
CQkJCTZGQkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcCAqLywKLQkJCQk2RjU2QjQ0NjI2NDc5RTYxMDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJr
cy5oICovLAorCQkJCTZGQkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5nR2VvbWV0
cnkuY3BwICovLAorCQkJCTZGMzQwRUExMjY0ODg1MkQwMEE2M0EwMCAvKiBGb3JtYXR0aW5nR2Vv
bWV0cnkuaCAqLywKIAkJCQk2RjhGNDYwMTIxQjAzQkI0MDA0MUFDM0EgLyogRm9ybWF0dGluZ1F1
aXJrcy5jcHAgKi8sCisJCQkJNkY1NkI0NDYyNjQ3OUU2MTAwQUFFMjU3IC8qIEZvcm1hdHRpbmdR
dWlya3MuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZm9ybWF0dGluZ0NvbnRleHRzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTIyNjU0LDggKzIyNjU3LDggQEAKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTZGQjdEMkQ3MjUwRkQ3RTUwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGluZ0NvbnRl
eHQuY3BwICovLAogCQkJCTZGQjdEMkQ5MjUwRkQ3RkMwMDAyMDdBQSAvKiBGbGV4Rm9ybWF0dGlu
Z0NvbnRleHQuaCAqLywKLQkJCQk2RkY5MTFGNjI2NDg3RkM4MDAyMDIxREYgLyogRmxleEZvcm1h
dHRpbmdHZW9tZXRyeS5oICovLAogCQkJCTZGNzBERUREMjUxMTI2RjMwMEYwRkM3OCAvKiBGbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKKwkJCQk2RkY5MTFGNjI2NDg3RkM4MDAyMDIxREYg
LyogRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oICovLAogCQkJCTZGQjdEMkQ4MjUwRkQ3RUYwMDAy
MDdBQSAvKiBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcCAqLywKIAkJCQk2RkI3RDJEQTI1MEZEN0ZD
MDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdTdGF0ZS5oICovLAogCQkJKTsKQEAgLTIyNjY3LDEw
ICsyMjY3MCwxMCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNkZDNUNBOTQyMkUzNTk5NDAwQjEz
RTExIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZGQzVDQTk1MjJFMzU5
OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0JCQkJNkZGOUEwODMy
NjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCiAJCQkJMTFE
MTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywK
LQkJCQk2RjQ5QzNFNjI2NDc5QjNCMDA1MTk1M0QgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmgg
Ki8sCisJCQkJNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21l
dHJ5LmggKi8sCiAJCQkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0dGlu
Z1F1aXJrcy5jcHAgKi8sCisJCQkJNkY0OUMzRTYyNjQ3OUIzQjAwNTE5NTNEIC8qIFRhYmxlRm9y
bWF0dGluZ1F1aXJrcy5oICovLAogCQkJCTZGQzVDQTkyMjJFMzU5OTMwMEIxM0UxMSAvKiBUYWJs
ZUZvcm1hdHRpbmdTdGF0ZS5jcHAgKi8sCiAJCQkJNkZDNUNBOTYyMkUzNTk5NTAwQjEzRTExIC8q
IFRhYmxlRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJNkY1QjdFQUEyMzAwQTc5RTAwNjdEOUMz
IC8qIFRhYmxlR3JpZC5jcHAgKi8sCkBAIC0yMjY5OCw4ICsyMjcwMSw4IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQk2RjE3MjY0QzI0NzBDNUY3MDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJNkYxNzI2NEUyNDcwQzYwQTAwNTE4Qzk2IC8q
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCAqLywKLQkJCQk2RjE1NTIyMDI2
NDc2QjVCMDBFMzUzQzYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmggKi8s
CiAJCQkJNkY2NjM4RDQyNDlFMjY4QjAwMTkyNUZDIC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5jcHAgKi8sCisJCQkJNkYxNTUyMjAyNjQ3NkI1QjAwRTM1M0M2IC8qIFRhYmxl
V3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0YWJs
ZXdyYXBwZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzE0NTYsNyArMzE0NTks
NiBAQAogCQkJCTMxQTc5NUM3MTg4OEJDQjIwMDM4MkY5MCAvKiBBTkdMRUluc3RhbmNlZEFycmF5
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1h
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFu
aW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDQ5RDg2NEYyNjQwQzlDNTAwMDEy
MkRFIC8qIEhpZ2hsaWdodFZpc2liaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2
MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MTFBRDEyNjIzNkQ4NkU1MDA2RkYzN0MgLyogQW5pbWF0aW9uRXZlbnRC
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxNjA1LDcgKzMxNjA3LDYgQEAKIAkJCQk4M0I5ODcw
OTI1MjI1RjcyMDBBOTM5RjEgLyogQXVkaW9Xb3JrbGV0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODNCOTg3MEEyNTIyNUY3NjAwQTkzOUYxIC8qIEF1ZGlvV29ya2xldE5vZGVPcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4M0JCOEI1RjI1MjY3NzY0MDBEODlGMEIgLyogQXVkaW9Xb3Jr
bGV0UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RkY5QTA4NDI2NDg4MzQyMDAxMjUw
RDggLyogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMjc0
RkNGMjUyRTI2QjcwMDFFMzVEQyAvKiBBdWRpb1dvcmtsZXRQcm9jZXNzb3JDb25zdHJ1Y3Rpb25E
YXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk4MzcyNkVGQjI1MjY3OUM1MDBDNjExNEUgLyogQXVk
aW9Xb3JrbGV0UHJvY2Vzc29yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRkM5
OTRCMjUyNTU3RUEwMDE3NzYxOCAvKiBBdWRpb1dvcmtsZXRUaHJlYWQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzE2OTAsNyArMzE2OTEsMTAgQEAKIAkJCQkyRUI0QkNEMzEyMUYwM0UzMDBFQzQ4ODUg
LyogQmxvYlJlc291cmNlSGFuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzZENkM3RjEyMkI4
QTNEMDAxRkQxRjcgLyogQmxvYlVSTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBNkUyMDhB
RkFCNzAwMUU2OTkxIC8qIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTZGNzlGMEMxMjY0ODdDNEMwMDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkY5RDFBRkEyNjQ3NjEzNjAwRjVEM0FEIC8qIEJsb2NrRm9y
bWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBN0EyMDhCOEQ5RDAwMUU2
OTkxIC8qIEJsb2NrRm9ybWF0dGluZ1N0YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjZERjM2
RjI2NDcyMkVBMDA5M0U4MzQgLyogQmxvY2tNYXJnaW5Db2xsYXBzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkM1RUI1RTEwRTgxQkU4NzAwQjI1OTY1IC8qIEJvcmRlckRhdGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTU4OTU1NkVEMThENEE0NDAwMDc2NEIwMyAvKiBCb3JkZXJFZGdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzVFQjVEQjBFODFCN0VBMDBCMjU5NjUgLyogQm9yZGVyVmFsdWUuaCBp
biBIZWFkZXJzICovLApAQCAtMzE4MTgsNyArMzE4MjIsNiBAQAogCQkJCTdDM0E5MUU2MUM5NjNC
ODgwMEQxQTdFMyAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg1MDMxQjQwMEE0NEVGQzcwMEY5OTJFMCAvKiBDbGlwYm9hcmRFdmVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRjRDNUYyMDcyNDc5RTg4MjAwRTlCNEY1IC8qIENsaXBib2FyZEltYWdlUmVhZGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk2RjlEMUFGQTI2NDc2MTM2MDBGNUQzQUQgLyogQmxvY2tG
b3JtYXR0aW5nUXVpcmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDQwRTc3QjIzM0Q5NEQ3MDA2
M0Y5QUIgLyogQ2xpcGJvYXJkSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ2QzQ0N0UyMzQ2
NTQ1NDAwMzlBNzlEIC8qIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY0RDA3NTU4MjM0RDgyMkQwMDg4MUU3MyAvKiBDbGlwYm9hcmRJdGVtRGF0
YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTg1NCw3ICszMTg1Nyw2IEBACiAJCQkJQkNE
RDQ1NEUxMjM2Qzk1QzAwOUE3OTg1IC8qIENvbHVtbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQzRURENjdGMUI0ODVEQkYwMDY0MEU3NSAvKiBDb21iaW5lZEZpbHRlcnNBbHBoYWJldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjZFOTQ0RDkxQUM0QjJERDAwN0I4NUI1IC8qIENvbWJpbmVkVVJM
RmlsdGVycy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkYxNTUyMjEyNjQ3NkI1QzAwRTM1M0M2IC8q
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU4NEZFMzUxODY0RDVBRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJSG9zdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTU4NEZFMkMxODYzODcwRjAwODQzQjEwIC8qIENvbW1hbmRMaW5lQVBJTW9k
dWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0RkUyNjE4NjM3REFCMDA4NDNCMTAgLyogQ29t
bWFuZExpbmVBUElNb2R1bGVTb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzI0OTcsNiArMzI0
OTksNyBAQAogCQkJCTM3MkMwMEQ5MTI5NjE5RjgwMDVDOTU3NSAvKiBGaW5kT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNEYwQTE1NEYwOTAwMEE0MjM0IC8qIEZpeGVkVGFibGVM
YXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjdEMkREMjUwRkQ4MjgwMDAyMDdBQSAvKiBG
bGV4Rm9ybWF0dGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZGRjkxMUY3MjY0ODdG
QzgwMDIwMjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk2RkI3RDJERTI1MEZEODJFMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZGREM0NDIyMTJFRkYxNzAwQTlDQTkxIC8qIEZsb2F0QXZvaWRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwNzNCQUEwQzM5OUIxRjAwMEY1OTc5IC8qIEZsb2F0Q29u
dmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjU1MCw2ICszMjU1Myw4IEBACiAJCQkJRDA1
Q0VEMkEwQTQwQkIyQzAwQzVBRjM4IC8qIEZvcm1hdEJsb2NrQ29tbWFuZC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0NFNkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZBNkEyMDhBRjdEMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjM0MEVBMjI2NDg4NTJEMDBBNjNBMDAgLyog
Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjU2QjQ0NzI2NDc5RTYy
MDBBQUUyNTcgLyogRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTE1Q0ZB
NzYyMDhBRkUzMDAwMUU2OTkxIC8qIEZvcm1hdHRpbmdTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRjUwNjY0RjgxNTdGNTJEQzAwQUMyMjZGIC8qIEZvcm1Db250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTRDNzY3MDBDRTkyM0ExMDA3RUYzQ0QgLyogRm9ybURhdGEuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzI2NzgsNiArMzI2ODMsNyBAQAogCQkJCTQ0MzBEMDBCMjU3NUE4M0UwMDQ2
RDQwMSAvKiBIaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEQ0ZBQkJEMThDMEFGNzgw
MDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NDMwRDAwRDI1
NzVBOEE1MDA0NkQ0MDEgLyogSGlnaGxpZ2h0UmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTQ0OUQ4NjRGMjY0MEM5QzUwMDAxMjJERSAvKiBIaWdobGlnaHRWaXNpYmlsaXR5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzk0RDE1NDBDMjc1QzhCMDA2QkM2MTcgLyogSGlzdG9yeS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTdEQ0UyMDIxMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTc0MUQxMTBCMDcyNTlBMDBFRDQ0MkMgLyogSGlz
dG9yeUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzI5NTMsNiArMzI5NTksOCBAQAogCQkJCUI1
N0NCNTJFMTgyQTNFRkMwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOENGRjVFMzBBMTU1QTA1MDAwQTQyMzQgLyogSW5saW5lRmxvd0JveC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkY3Q0EzQ0EyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRp
bmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjI5MUY0QTI2NDg4MjFFMDBCMTU3ODUg
LyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RkU2MzZF
ODI2NDc5NjI5MDBGMDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTE1Q0ZBN0UyMDhCOEUxMDAwMUU2OTkxIC8qIElubGluZUZvcm1hdHRpbmdTdGF0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZFN0NGQTIyMTc3RUVGMjAwNUIxNTczIC8qIElubGlu
ZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTc4OTE2MTEyMEQ2MDgwMDYwRUNFNSAvKiBJ
bmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzkxMyw3ICszMzkyMSw2IEBACiAJ
CQkJMUE3NjJDN0EwQTA3NEYyNjAwOTg5RjVCIC8qIEpTWFBhdGhSZXN1bHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTgzQjc0RUY2MUYzRTBCRjIwMDk5NkJDNyAvKiBLZWVwYWxpdmVS
ZXF1ZXN0VHJhY2tlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkYyOTFGNEEyNjQ4ODIxRTAwQjE1
Nzg1IC8qIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODUw
MzFCNDQwQTQ0RUZDNzAwRjk5MkUwIC8qIEtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRTAwRDU5MTgyREFDOEQwMDA4N0RENyAvKiBLZXllZENvZGluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4g
SGVhZGVycyAqLywKQEAgLTM0MDQ3LDcgKzM0MDU0LDYgQEAKIAkJCQlGQUJFNzJGNTEwNTlDMUVC
MDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDRBMjhBQUMx
MkRGQjhBQzAwQUU5MjNCIC8qIE1hdGhNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwQkNGODNGNzEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MRnJhY3Rpb25FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk2RjQ5QzNFNzI2NDc5QjNDMDA1MTk1M0QgLyogVGFibGVGb3Jt
YXR0aW5nUXVpcmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQUJFNzJGOTEwNTlDMUVCMDBEOTk5
REQgLyogTWF0aE1MTWF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0QTI4QUFGMTJE
RkI4QkYwMEFFOTIzQiAvKiBNYXRoTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkE2NTRB
NkMxMTA4QUJFRDAwMjYxNkYxIC8qIE1hdGhNTE9wZXJhdG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zNDIwMyw3ICszNDIwOSw2IEBACiAJCQkJMDdCOTNGRkMyM0I5NEVDNzAwMzZGOEVB
IC8qIE1JTUVUeXBlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzcyQzRGMEM0RUIzMDQw
MDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkYxMDg2
NjE2MkI2REE4MDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNkY1NkI0NDcyNjQ3OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWlya3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRTA4NjY0MjQ4OUQzNTMwMEU0OTZEOSAvKiBNb2NrQXBwbGVQYXlT
ZXR1cEZlYXR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMkRFRjFEMjNBOTE4NjYwMEQ4NDBG
NiAvKiBNb2NrQXVkaW9TaGFyZWRVbml0LmggaW4gSGVhZGVycyAqLywKIAkJCQlDREYyQjAxMTE4
MjA1NDA2MDBGMkI0MjQgLyogTW9ja0JveC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDkxOSw3ICsz
NDkyNCw2IEBACiAJCQkJRTQ2QjQxRjkxQ0IyNEU3MDAwOEYxMURFIC8qIFNjcmlwdERpc2FsbG93
ZWRTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk5OEFFRDIxM0ZCMjI0RDAwOTBCMUFBIC8q
IFNjcmlwdGVkQW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhBNDg0
NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUU0RDg2RTZEMjY0MDM5NEMwMEI2MjQyNSAvKiBTdHlsZVNjb3BlT3JkaW5hbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTNFNEUyQTgxRTNCMTcxMDAwMjNCQjhBIC8qIFNjcmlwdEVsZW1lbnRDYWNo
ZWRTY3JpcHRGZXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTFDOUQ5QjBFQjM2ODEyMDBF
NDA5REIgLyogU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEx
MjIzQkEyNjAyNDRGRTAwQjBBMEI2IC8qIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTM1MjM1LDYgKzM1MjM5LDcgQEAKIAkJCQlFNDk0NkVBRjE1
NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Rjk0RjM3RTIzNjYxNjI2MDAzQUE1QzcgLyogU3R5bGVSdWxlVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ2MUQ2NUYxQkIwQzgwRDAwQ0I1NjQ1IC8qIFN0eWxlU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUU0RDg2RTZEMjY0MDM5NEMwMEI2MjQyNSAvKiBTdHlsZVNjb3BlT3JkaW5hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNEE0RjQ4QUExNkIwREZDMDAwRURCQjI5IC8qIFN0eWxlU2Nv
cGVSdWxlU2V0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQ3QTVFM0UxOTVCOEM4QTAwNDgzMTAw
IC8qIFN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUQ2MzgwMTAx
QUYxNzMyMjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdubWVudERhdGEuaCBpbiBIZWFkZXJzICov
LApAQCAtMzUzNjYsNyArMzUzNzEsNiBAQAogCQkJCUIyMjI3QTU5MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RjAxMURGNkE1ODAw
NTU1QjAyIC8qIFNWR1BhdGhQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTVCMEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RkU2MzZF
ODI2NDc5NjI5MDBGMDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjIyMjdBODEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1BhdGhTZWdMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NDc2QzlFNjExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEI2Qjk3ODEyMEYxM0U1MDBCOEVGQUYg
LyogU1ZHUGF0aFNlZ0xpc3RTb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMzU0NjAsOCArMzU0
NjQsMTEgQEAKIAkJCQlFM0MwNDEzODI1NENCMzBEMDAyMUQwRTYgLyogU3lzdGVtU291bmREZWxl
Z2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNDMDQxMkYyNTRDQTI5QjAwMjFEMEU2IC8qIFN5
c3RlbVNvdW5kTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUQ1OTc1QjMxOTYzNUYxMTAw
RDAwODc4IC8qIFN5c3RlbVZlcnNpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTZGRjlBMDg0MjY0
ODgzNDIwMDEyNTBEOCAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNkY0OUMzRTcyNjQ3OUIzQzAwNTE5NTNEIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNTEwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5
b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjE3MjY0RjI0NzBDNjBCMDA1MThDOTYgLyogVGFi
bGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkYx
NTUyMjEyNjQ3NkI1QzAwRTM1M0M2IC8qIFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ1F1aXJr
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJM0JCNkI4MTEyMkE3RDMxMzAwM0EyQTY5IC8qIFRhYlNp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2M0VCNjIzMUI4Nzg5RTAwMDk2RUQ1MSAvKiBUYWdD
b2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5QjBBQkNBRTIzNkJCNDMxMDBCNDUwODUg
LyogVGFza1NvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTU4OCw3ICszNTU5NSw2IEBACiAJ
CQkJNEJBRkQwRDkyMTkyMUVBMDAwQzBBQjY0IC8qIFR5cGVkT01DU1NVbnBhcnNlZFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxQTA5OUU2NDkyMDA1NkU1ODEgLyogVHlwaW5nQ29t
bWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcxNTJCNkUyMUNEOTk1RDAwMEMzN0NBIC8qIFUy
ZkNvbW1hbmRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkY2REYzNkYyNjQ3MjJF
QTAwOTNFODM0IC8qIEJsb2NrTWFyZ2luQ29sbGFwc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3
MTUyQjdDMjFERDhCQTEwMDBDMzdDQSAvKiBVMmZSZXNwb25zZUNvbnZlcnRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODUwMzFCNEUwQTQ0RUZDNzAwRjk5MkUwIC8qIFVJRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgzRkU3Q0E3MURBOUYxQTcwMDM3MjM3QyAvKiBVSUV2ZW50SW5pdC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNTY0Myw3ICszNTY0OSw2IEBACiAJCQkJRjUxM0EzRUExNUZGNDg0
MTAwMTUyNkRCIC8qIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNUM3NzA4RDEwMEQzQzZCMDA1QkEyNjcgLyogVmFsaWRpdHlTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQzMTYwQUYxMkIwMjZGNzAwQzFBMzU5IC8qIFZlY3Rvck1hdGguaCBpbiBIZWFk
ZXJzICovLAotCQkJCTZGNzlGMEMxMjY0ODdDNEMwMDY5ODJCNiAvKiBCbG9ja0Zvcm1hdHRpbmdH
ZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8q
IFZlbG9jaXR5RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREY0RTM4RTAyNTI3OTU5NTAwMkE3
NDgxIC8qIFZlcnNpb25DaGVja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQTI1NzE1MTI5M0Mw
MTAwMDdBMjYzRCAvKiBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzU4NzcsNyArMzU4ODIsNiBAQAogCQkJCUJDODI0M0U5MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5k
b3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U5OUFGNTMwQjEzODQ2NDY4RkIwMUE1
IC8qIFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4
NUZDQjQxQkI0QzRFODAwMTI4OThGIC8qIFdpbmRvd09yV29ya2VyR2xvYmFsU2NvcGVJbmRleGVk
RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGRjkxMUY3MjY0ODdGQzgwMDIwMjFERiAv
KiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NjM1MjFBRDIw
ODEwOTJBMDBDMjg5MjIgLyogV2luZG93UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRTFC
RjAwMTE1RkY2RkIwMDZGNTJDQSAvKiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTAxQkFBQTkxMzk1MEUyQzAwRjdBQ0VCIC8qIFdpbmRSdWxlLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggODUxZTViNjc4MjFlODk4OGEy
ZmFlMDZmNDMzZTFjN2VhOTM5YmQxZi4uMDM0YjU4ZDE5MzRiNjIzOTRiZjQ1ZTdhMTFmNjdiNTFj
OWUwMzZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCisjaW5jbHVkZSAiRm9y
bWF0dGluZ0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVk
ZSAiRm9ybWF0dGluZ1F1aXJrcy5oIgogI2luY2x1ZGUgIkludmFsaWRhdGlvblN0YXRlLmgiCkBA
IC0yNzEsNiArMjcyLDExIEBAIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RPdXRPZkZs
b3dEZXNjZW5kYW50c0lmTmVlZGVkKCkKICAgICB9CiB9CiAKK0Zvcm1hdHRpbmdHZW9tZXRyeSBG
b3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkoKSBjb25zdAoreworICAgIHJldHVybiBGb3JtYXR0
aW5nR2VvbWV0cnkoKnRoaXMpOworfQorCiBGb3JtYXR0aW5nUXVpcmtzIEZvcm1hdHRpbmdDb250
ZXh0OjpxdWlya3MoKSBjb25zdAogewogICAgIHJldHVybiBGb3JtYXR0aW5nUXVpcmtzKCp0aGlz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBhMjUzYTExZWU1NWUyZmJlOTcwYThhNWIx
N2EyNzJhNGQzYmU5NjQxLi5jNDBjZDc1NDhjMWYzODQ5ZjFkYWQyZWJhZWMzODQzOGQyNTMyZThj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zv
cm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC00MSwyMSArNDEsMTIgQEAgc3RydWN0IExl
bmd0aDsKIG5hbWVzcGFjZSBMYXlvdXQgewogCiBjbGFzcyBCb3hHZW9tZXRyeTsKLWNsYXNzIFJl
cGxhY2VkQm94Owotc3RydWN0IENvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbjsKLXN0cnVjdCBDb21w
dXRlZFZlcnRpY2FsTWFyZ2luOwogY2xhc3MgQ29udGFpbmVyQm94Owotc3RydWN0IENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47Ci1zdHJ1Y3QgQ29udGVudFdpZHRoQW5kTWFyZ2luOwotc3RydWN0IEVk
Z2VzOworY2xhc3MgRm9ybWF0dGluZ0dlb21ldHJ5OwogY2xhc3MgRm9ybWF0dGluZ1N0YXRlOwog
Y2xhc3MgRm9ybWF0dGluZ1F1aXJrczsKLXN0cnVjdCBIb3Jpem9udGFsR2VvbWV0cnk7CiBjbGFz
cyBJbnZhbGlkYXRpb25TdGF0ZTsKIGNsYXNzIExheW91dFN0YXRlOwotc3RydWN0IE92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzOwotc3RydWN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlczsKLXN0
cnVjdCBWZXJ0aWNhbEdlb21ldHJ5OwogCiBjbGFzcyBGb3JtYXR0aW5nQ29udGV4dCB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChGb3JtYXR0aW5nQ29udGV4dCk7CkBAIC0xMTEsODMgKzEw
Miw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdDsKICAg
ICBjb25zdCBGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0dGluZ1N0YXRlOyB9CiAKKyAgICBGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnko
KSBjb25zdDsKICAgICBGb3JtYXR0aW5nUXVpcmtzIHF1aXJrcygpIGNvbnN0OwogCi0gICAgLy8g
VGhpcyBjbGFzcyBpbXBsZW1lbnRzIGdlbmVyaWMgcG9zaXRpb25pbmcgYW5kIHNpemluZy4KLSAg
ICBjbGFzcyBHZW9tZXRyeSB7Ci0gICAgcHVibGljOgotICAgICAgICBWZXJ0aWNhbEdlb21ldHJ5
IG91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5W
ZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBIb3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZG
bG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcyYpOwotCi0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdD
b250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJh
aW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBD
b250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3Qg
Qm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGlubGluZVJl
cGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+LCBjb25z
dCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgQ29udGVudFdpZHRo
QW5kTWFyZ2luIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxh
Y2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8VmVydGljYWxD
b25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAg
ICAgTGF5b3V0U2l6ZSBpbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgQ29udGVudEhl
aWdodEFuZE1hcmdpbiBjb21wbGljYXRlZENhc2VzKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0Owot
ICAgICAgICBMYXlvdXRVbml0IHNocmlua1RvRml0V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCk7Ci0KLSAgICAgICAgRWRnZXMgY29tcHV0ZWRCb3JkZXIoY29uc3Qg
Qm94JikgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPEVkZ2VzPiBjb21wdXRlZFBhZGRpbmcoY29u
c3QgQm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3Q7Ci0KLSAgICAg
ICAgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKLSAgICAgICAgQ29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbiBjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotCi0gICAgICAgIE9wdGlvbmFsPExh
eW91dFVuaXQ+IGNvbXB1dGVkVmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5LCBM
YXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gZml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNv
bnN0OwotCi0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluSGVpZ2h0KGNv
bnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IFdU
Rjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVk
TWF4SGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9j
a0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0KLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gY29tcHV0ZWRNaW5XaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNYXhXaWR0
aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgICAg
ICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBjb25zdHJhaW5C
eU1pbk1heFdpZHRoKGNvbnN0IEJveCYsIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpIGNvbnN0
OwotCi0gICAgICAgIExheW91dFVuaXQgY29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0
Um9vdChjb25zdCBDb250YWluZXJCb3gmKSBjb25zdDsKLQotICAgICAgICBDb25zdHJhaW50c0Zv
ck91dE9mRmxvd0NvbnRlbnQgY29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnN0IENv
bnRhaW5lckJveCYpOwotICAgICAgICBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgY29uc3Ry
YWludHNGb3JJbkZsb3dDb250ZW50KGNvbnN0IENvbnRhaW5lckJveCYsIE9wdGlvbmFsPEVzY2Fw
ZVJlYXNvbj4gPSBXVEY6Om51bGxvcHQpOwotCi0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IGNvbXB1dGVkSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5p
bmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFsPExh
eW91dFVuaXQ+IGNvbXB1dGVkV2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5n
QmxvY2tXaWR0aCk7Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBGb3Jt
YXR0aW5nQ29udGV4dDsKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQm
KTsKLQotICAgICAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KLSAgICAgICAgTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlKCkgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRT
dGF0ZSgpOyB9Ci0gICAgICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRleHQ7IH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdl
b21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwg
Y29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cyYpIGNvbnN0OwotICAgICAgICBIb3Jpem9udGFsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRI
b3Jpem9udGFsR2VvbWV0cnkoY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd05v
blJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIEhvcml6b250YWxHZW9tZXRy
eSBvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBDb250YWluZXJC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcyYpOwotCi0gICAgICAgIENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gZmxvYXRpbmdS
ZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBj
b25zdDsKLSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGZsb2F0aW5nUmVwbGFjZWRDb250
ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29u
c3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwotCi0gICAgICAg
IENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgTGF5b3V0VW5pdCBzdGF0aWNW
ZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0gICAgICAgIExheW91dFVuaXQgc3RhdGljSG9y
aXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKLQotICAgICAgICBlbnVtIGNsYXNzIEhlaWdo
dFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+
IGNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgQm94JiwgSGVpZ2h0VHlwZSwgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdDsKLQotICAgICAgICBlbnVtIGNs
YXNzIFdpZHRoVHlwZSB7IE1pbiwgTWF4LCBOb3JtYWwgfTsKLSAgICAgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gY29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYsIFdpZHRoVHlwZSwgTGF5b3V0
VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0KLSAgICAgICAgY29uc3QgRm9ybWF0dGluZ0Nv
bnRleHQmIG1fZm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgfTsKLSAgICBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBHZW9tZXRyeSgqdGhpcyk7IH0K
LQogcHJvdGVjdGVkOgogICAgIHVzaW5nIExheW91dFF1ZXVlID0gVmVjdG9yPGNvbnN0IEJveCo+
OwogCkBAIC0yMDgsMTEgKzEyNSw2IEBAIHByaXZhdGU6CiAgICAgRm9ybWF0dGluZ1N0YXRlJiBt
X2Zvcm1hdHRpbmdTdGF0ZTsKIH07CiAKLWlubGluZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6Okdlb21ldHJ5KGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCkK
LSAgICA6IG1fZm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHQpCi17Ci19Ci0KIGlu
bGluZSB2b2lkIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOjpl
eHBhbmQoTGF5b3V0VW5pdCBob3Jpem9udGFsVmFsdWUpCiB7CiAgICAgbWluaW11bSArPSBob3Jp
em9udGFsVmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViMTk2NTdiOGJlNzE5OWFhM2ZmYzIwNmY1
NzIxYTcyY2Q2MmM4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTE2NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0
LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUg
IkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5o
IgotI2luY2x1ZGUgIkZsb2F0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUu
aCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJMYXlvdXRD
b250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgotI2lu
Y2x1ZGUgIkxheW91dFJlcGxhY2VkQm94LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1
ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBMYXlvdXQgewotCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNIZWlnaHRBdXRvKGNvbnN0IEJv
eCYgbGF5b3V0Qm94KQotewotICAgIC8vIDEwLjUgQ29udGVudCBoZWlnaHQ6IHRoZSAnaGVpZ2h0
JyBwcm9wZXJ0eQotICAgIC8vCi0gICAgLy8gVGhlIHBlcmNlbnRhZ2UgaXMgY2FsY3VsYXRlZCB3
aXRoIHJlc3BlY3QgdG8gdGhlIGhlaWdodCBvZiB0aGUgZ2VuZXJhdGVkIGJveCdzIGNvbnRhaW5p
bmcgYmxvY2suCi0gICAgLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jayBp
cyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVudCBo
ZWlnaHQpLAotICAgIC8vIGFuZCB0aGlzIGVsZW1lbnQgaXMgbm90IGFic29sdXRlbHkgcG9zaXRp
b25lZCwgdGhlIHVzZWQgaGVpZ2h0IGlzIGNhbGN1bGF0ZWQgYXMgaWYgJ2F1dG8nIHdhcyBzcGVj
aWZpZWQuCi0KLSAgICBhdXRvIGhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKTsKLSAgICBpZiAoaGVpZ2h0LmlzQXV0bygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmIChoZWlnaHQuaXNQZXJjZW50KCkpIHsKLSAgICAgICAgaWYgKGxheW91dEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICByZXR1cm4gIWxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKS5pc0ZpeGVkKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1PcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0
VmFsdWUoY29uc3QgQm94JiBsYXlvdXRCb3gsIEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewotICAgIGF1dG8m
IHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBoZWlnaHQgPSBoZWlnaHRUeXBl
ID09IEhlaWdodFR5cGU6Ok5vcm1hbCA/IHN0eWxlLmxvZ2ljYWxIZWlnaHQoKSA6IGhlaWdodFR5
cGUgPT0gSGVpZ2h0VHlwZTo6TWluID8gc3R5bGUubG9naWNhbE1pbkhlaWdodCgpIDogc3R5bGUu
bG9naWNhbE1heEhlaWdodCgpOwotICAgIGlmIChoZWlnaHQuaXNVbmRlZmluZWQoKSB8fCBoZWln
aHQuaXNBdXRvKCkgfHwgaGVpZ2h0LmlzTWF4Q29udGVudCgpIHx8IGhlaWdodC5pc01pbkNvbnRl
bnQoKSB8fCBoZWlnaHQuaXNGaXRDb250ZW50KCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICBpZiAoaGVpZ2h0LmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBoZWln
aHQudmFsdWUoKSB9OwotCi0gICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpIHsKLSAgICAg
ICAgaWYgKGxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCi0gICAgICAgICAgICBjb250YWlu
aW5nQmxvY2tIZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLmhlaWdodFZhbHVl
T2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91dEJveCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tM
b2dpY2FsSGVpZ2h0ID0gWyZdIHsKLSAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBibG9jayBs
ZXZlbCBib3ggaXMgYSBkaXJlY3QgY2hpbGQgb2YgYW4gaW5saW5lIGxldmVsIGJveCAoPHNwYW4+
PGRpdj48L2Rpdj48L3NwYW4+KSBhbmQgd2Ugd3JhcCBpdCBpbnRvIGEgY29udGludWF0aW9uLAot
ICAgICAgICAgICAgICAgIC8vIHRoZSBjb250YWluaW5nIGJsb2NrIChhbm9ueW1vdXMgd3JhcHBl
cikgaXMgbm90IHRoZSBib3ggd2UgbmVlZCB0byBjaGVjayBmb3IgZml4ZWQgaGVpZ2h0LgotICAg
ICAgICAgICAgICAgIGF1dG8mIGluaXRpYWxDb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guaW5p
dGlhbENvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgICAgIGZvciAoYXV0byogY29udGFp
bmluZ0Jsb2NrID0gJmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsgY29udGFpbmluZ0Jsb2Nr
ICE9ICZpbml0aWFsQ29udGFpbmluZ0Jsb2NrOyBjb250YWluaW5nQmxvY2sgPSAmY29udGFpbmlu
Z0Jsb2NrLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY29u
dGFpbmluZ0Jsb2NrLT5pc0Fub255bW91cygpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPnN0eWxl
KCkubG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5pdGlhbENvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKLSAg
ICAgICAgICAgIH07Ci0gICAgICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBmaXhlZFZh
bHVlKG5vbkFub255bW91c0NvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBpZiAoIWNvbnRhaW5pbmdCbG9ja0hlaWdodCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLQotICAgIHJldHVybiB2YWx1ZUZvckxlbmd0aChoZWlnaHQsICpjb250YWluaW5n
QmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25h
bDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQpIGNvbnN0Ci17Ci0gICAgaWYgKGF1
dG8gaGVpZ2h0ID0gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok5v
cm1hbCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSkgewotICAgICAgICBpZiAobGF5b3V0Qm94LnN0
eWxlKCkuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94KQotICAgICAgICAgICAg
cmV0dXJuIGhlaWdodDsKLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgIHJldHVybiAqaGVpZ2h0
IC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBh
ZGRpbmcoKS52YWx1ZU9yKDApKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotT3B0aW9u
YWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFdpZHRo
VmFsdWUoY29uc3QgQm94JiBsYXlvdXRCb3gsIFdpZHRoVHlwZSB3aWR0aFR5cGUsIExheW91dFVu
aXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCi17Ci0gICAgLy8gQXBwbGllcyB0bzogYWxsIGVsZW1l
bnRzIGV4Y2VwdCBub24tcmVwbGFjZWQgaW5saW5lcyAob3V0LW9mLWZsb3cgY2hlY2sgaXMgcmVx
dWlyZWQgZm9yIHBvc2l0aW9uZWQgPGJyPiBhcyBmb3Igc29tZSByZWFzb24gd2UgZG9uJ3QgYmxv
Y2tpZnkgdGhlbSkuCi0gICAgQVNTRVJUKCFsYXlvdXRCb3guaXNJbmxpbmVCb3goKSB8fCBsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgYXV0byB3aWR0aCA9IFsmXSB7
Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgICAgIHN3aXRj
aCAod2lkdGhUeXBlKSB7Ci0gICAgICAgIGNhc2UgV2lkdGhUeXBlOjpOb3JtYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIGNhc2UgV2lkdGhUeXBl
OjpNaW46Ci0gICAgICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbE1pbldpZHRoKCk7Ci0gICAg
ICAgIGNhc2UgV2lkdGhUeXBlOjpNYXg6Ci0gICAgICAgICAgICByZXR1cm4gc3R5bGUubG9naWNh
bE1heFdpZHRoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBzdHlsZS5sb2dpY2FsV2lkdGgoKTsKLSAgICB9KCk7Ci0gICAgaWYgKGF1
dG8gY29tcHV0ZWRWYWx1ZSA9IHRoaXMtPmNvbXB1dGVkVmFsdWUod2lkdGgsIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkVmFsdWU7Ci0KLSAgICBpZiAod2lk
dGguaXNNaW5Db250ZW50KCkgfHwgd2lkdGguaXNNYXhDb250ZW50KCkgfHwgd2lkdGguaXNGaXRD
b250ZW50KCkpIHsKLSAgICAgICAgaWYgKCFpczxDb250YWluZXJCb3g+KGxheW91dEJveCkpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3du
Y2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCk7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBzcGxpdHRpbmcgdXAgY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHNvIHRoYXQg
d2UgY291bGQgY29tcHV0ZWQgdGhlIG1pbiBhbmQgbWF4IHZhbHVlcyBzZXBhcmF0ZWx5LgotICAg
ICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0gewotICAgICAgICAgICAg
aWYgKCFjb250YWluZXJCb3guaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyAwX2x1LCBjb250YWluaW5n
QmxvY2tXaWR0aCB9OwotICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5lckJveC5lc3RhYmxpc2hl
c0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRl
ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVGb3JtYXR0aW5nU3RhdGUoY29udGFpbmVyQm94KTsKLSAg
ICAgICAgICAgIGlmIChhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5n
U3RhdGUuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKQotICAgICAgICAgICAgICAgIHJldHVy
biAqaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAgICAgICAgICAgIHJldHVybiBMYXlvdXRD
b250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4dChjb250YWluZXJCb3gsIGxheW91dFN0YXRl
KCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgfSgpOwot
ICAgICAgICBpZiAod2lkdGguaXNNaW5Db250ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtOwotICAgICAgICBpZiAod2lkdGguaXNNYXhD
b250ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5t
YXhpbXVtOwotICAgICAgICBBU1NFUlQod2lkdGguaXNGaXRDb250ZW50KCkpOwotICAgICAgICAv
LyBJZiB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIGEgZ2l2ZW4gYXhpcyBpcyBkZWZpbml0ZSwgZXF1
YWwgdG8gbWluKG1heC1jb250ZW50IHNpemUsCi0gICAgICAgIC8vIG1heChtaW4tY29udGVudCBz
aXplLCBzdHJldGNoLWZpdCBzaXplKSkuIE90aGVyd2lzZSwgZXF1YWwgdG8gdGhlIG1heC1jb250
ZW50IHNpemUgaW4gdGhhdCBheGlzLgotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgeWV0IGhh
dmUgaW5kZWZpbml0ZSBhdmFpbGFibGUgc2l6ZS4KLSAgICAgICAgcmV0dXJuIHN0ZDo6bWluKGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSwgc3RkOjptYXgoaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5taW5pbXVtLCBjb250YWluaW5nQmxvY2tXaWR0aCkpOwotICAgIH0KLSAgICBy
ZXR1cm4geyB9OwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbXB1dGVkV2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpCi17Ci0gICAgaWYgKGF1dG8gY29tcHV0ZWRXaWR0aCA9IGNv
bXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6Tm9ybWFsLCBjb250YWluaW5n
QmxvY2tXaWR0aCkpIHsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LSAgICAgICAgLy8gTm9uLXF1YW50aXRhdGl2ZSB2YWx1ZXMgc3VjaCBhcyBhdXRvIGFuZCBtaW4t
Y29udGVudCBhcmUgbm90IGluZmx1ZW5jZWQgYnkgdGhlIGJveC1zaXppbmcgcHJvcGVydHkuCi0g
ICAgICAgIGlmIChzdHlsZS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkNvbnRlbnRCb3ggfHwg
c3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICAgICAgcmV0dXJuIGNv
bXB1dGVkV2lkdGg7Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICByZXR1cm4gKmNvbXB1dGVk
V2lkdGggLSAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbEJvcmRlcigpICsgYm94R2VvbWV0cnkuaG9y
aXpvbnRhbFBhZGRpbmcoKS52YWx1ZU9yKDApKTsKLSAgICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0K
LQotTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQ29udGFpbmVyQm94JiBmb3JtYXR0aW5nQ29u
dGV4dFJvb3QpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Um9vdC5lc3Rh
Ymxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwotICAgIEFTU0VSVChpc0hlaWdodEF1dG8oZm9y
bWF0dGluZ0NvbnRleHRSb290KSB8fCBmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNU
YWJsZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmlzVGFibGVD
ZWxsKCkpOwotICAgIGF1dG8gdXNlZENvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsgfTsgCi0g
ICAgYXV0byBoYXNDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290Lmhhc0luRmxvd09yRmxv
YXRpbmdDaGlsZCgpOwotICAgIC8vIFRoZSB1c2VkIGhlaWdodCBvZiB0aGUgY29udGFpbm1lbnQg
Ym94IGlzIGRldGVybWluZWQgYXMgaWYgcGVyZm9ybWluZyBhIG5vcm1hbCBsYXlvdXQgb2YgdGhl
IGJveCwgZXhjZXB0IHRoYXQgaXQgaXMgdHJlYXRlZCBhcyBoYXZpbmcgbm8gY29udGVudC4KLSAg
ICBhdXRvIHNob3VsZElnbm9yZUNvbnRlbnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNTaXpl
Q29udGFpbm1lbnRCb3goKTsKLSAgICBpZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3JlQ29u
dGVudCkKLSAgICAgICAgdXNlZENvbnRlbnRIZWlnaHQgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVG
b3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dFJvb3QsIGNvbnN0X2Nhc3Q8TGF5b3V0
U3RhdGUmPihsYXlvdXRTdGF0ZSgpKSktPnVzZWRDb250ZW50SGVpZ2h0KCk7Ci0gICAgcmV0dXJu
IHVzZWRDb250ZW50SGVpZ2h0OwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkVmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVBy
b3BlcnR5LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdAotewotICAgIC8v
ICBJbiBnZW5lcmFsLCB0aGUgY29tcHV0ZWQgdmFsdWUgcmVzb2x2ZXMgdGhlIHNwZWNpZmllZCB2
YWx1ZSBhcyBmYXIgYXMgcG9zc2libGUgd2l0aG91dCBsYXlpbmcgb3V0IHRoZSBjb250ZW50Lgot
ICAgIGlmIChnZW9tZXRyeVByb3BlcnR5LmlzRml4ZWQoKSB8fCBnZW9tZXRyeVByb3BlcnR5Lmlz
UGVyY2VudCgpIHx8IGdlb21ldHJ5UHJvcGVydHkuaXNDYWxjdWxhdGVkKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZUZvckxlbmd0aChnZW9tZXRyeVByb3BlcnR5LCBjb250YWluaW5nQmxvY2tXaWR0
aCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpmaXhlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9w
ZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIWdlb21ldHJ5UHJvcGVydHkuaXNGaXhlZCgpKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBMYXlvdXRVbml0IHsgZ2VvbWV0cnlQcm9wZXJ0
eS52YWx1ZSgpIH07Ci19Ci0KLS8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1MyMi92aXN1ZGV0
Lmh0bWwjbWluLW1heC1oZWlnaHRzCi0vLyBTcGVjaWZpZXMgYSBwZXJjZW50YWdlIGZvciBkZXRl
cm1pbmluZyB0aGUgdXNlZCB2YWx1ZS4gVGhlIHBlcmNlbnRhZ2UgaXMgY2FsY3VsYXRlZCB3aXRo
IHJlc3BlY3QgdG8gdGhlIGhlaWdodCBvZiB0aGUgZ2VuZXJhdGVkIGJveCdzIGNvbnRhaW5pbmcg
YmxvY2suCi0vLyBJZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIG5vdCBz
cGVjaWZpZWQgZXhwbGljaXRseSAoaS5lLiwgaXQgZGVwZW5kcyBvbiBjb250ZW50IGhlaWdodCks
IGFuZCB0aGlzIGVsZW1lbnQgaXMgbm90IGFic29sdXRlbHkgcG9zaXRpb25lZCwKLS8vIHRoZSBw
ZXJjZW50YWdlIHZhbHVlIGlzIHRyZWF0ZWQgYXMgJzAnIChmb3IgJ21pbi1oZWlnaHQnKSBvciAn
bm9uZScgKGZvciAnbWF4LWhlaWdodCcpLgotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1heEhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewot
ICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6TWF4
LCBjb250YWluaW5nQmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxMYXlvdXRVbml0PiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBl
OjpNaW4sIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNaW5XaWR0aChjb25zdCBCb3gm
IGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkKLXsKLSAgICByZXR1
cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhUeXBlOjpNaW4sIGNvbnRhaW5p
bmdCbG9ja1dpZHRoKTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlv
dXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotewotICAgIHJldHVybiBjb21wdXRlZFdpZHRo
VmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwot
fQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljVmVydGlj
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNv
bnN0IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICAvLyBG
b3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiBhbmQgdGhlIG5leHQsIHRoZSB0ZXJtICJz
dGF0aWMgcG9zaXRpb24iIChvZiBhbiBlbGVtZW50KSByZWZlcnMsIHJvdWdobHksIHRvIHRoZSBw
b3NpdGlvbiBhbiBlbGVtZW50IHdvdWxkIGhhdmUKLSAgICAvLyBoYWQgaW4gdGhlIG5vcm1hbCBm
bG93LiBNb3JlIHByZWNpc2VseSwgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgJ3RvcCcgaXMgdGhl
IGRpc3RhbmNlIGZyb20gdGhlIHRvcCBlZGdlIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHRvIHRo
ZSB0b3AgbWFyZ2luCi0gICAgLy8gZWRnZSBvZiBhIGh5cG90aGV0aWNhbCBib3ggdGhhdCB3b3Vs
ZCBoYXZlIGJlZW4gdGhlIGZpcnN0IGJveCBvZiB0aGUgZWxlbWVudCBpZiBpdHMgc3BlY2lmaWVk
ICdwb3NpdGlvbicgdmFsdWUgaGFkIGJlZW4gJ3N0YXRpYycgYW5kIGl0cyBzcGVjaWZpZWQKLSAg
ICAvLyAnZmxvYXQnIGhhZCBiZWVuICdub25lJyBhbmQgaXRzIHNwZWNpZmllZCAnY2xlYXInIGhh
ZCBiZWVuICdub25lJy4gKE5vdGUgdGhhdCBkdWUgdG8gdGhlIHJ1bGVzIGluIHNlY3Rpb24gOS43
IHRoaXMgbWlnaHQgcmVxdWlyZSBhbHNvIGFzc3VtaW5nIGEgZGlmZmVyZW50Ci0gICAgLy8gY29t
cHV0ZWQgdmFsdWUgZm9yICdkaXNwbGF5Jy4pIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSBpZiB0aGUg
aHlwb3RoZXRpY2FsIGJveCBpcyBhYm92ZSB0aGUgY29udGFpbmluZyBibG9jay4KLQotICAgIC8v
IFN0YXJ0IHdpdGggdGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRoZSBwYXJlbnQn
cyBib3JkZXIgYm94LgotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKLSAgICBMYXlvdXRVbml0IHRvcDsKLSAgICBpZiAobGF5b3V0Qm94LnBy
ZXZpb3VzSW5GbG93U2libGluZygpICYmIGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmco
KS0+aXNCbG9ja0xldmVsQm94KCkpIHsKLSAgICAgICAgLy8gQWRkIHNpYmxpbmcgb2Zmc2V0Ci0g
ICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93U2libGluZyA9ICpsYXlvdXRCb3gucHJldmlvdXNJ
bkZsb3dTaWJsaW5nKCk7Ci0gICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChwcmV2aW91c0luRmxvd1NpYmxpbmcs
IEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7Ci0gICAgICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihs
YXlvdXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZvckJveChwcmV2aW91c0luRmxvd1NpYmxpbmcp
KTsKLSAgICAgICAgYXV0byB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveCA9IGZvcm1h
dHRpbmdTdGF0ZS51c2VkVmVydGljYWxNYXJnaW4ocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKLQot
ICAgICAgICB0b3AgKz0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QocHJldmlvdXNJbkZsb3dC
b3hHZW9tZXRyeSkuYm90dG9tKCkgKyB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveC5u
b25Db2xsYXBzZWRWYWx1ZXMuYWZ0ZXI7Ci0gICAgfSBlbHNlCi0gICAgICAgIHRvcCA9IGZvcm1h
dHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRXNjYXBlUmVh
c29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250ZW50Qm94VG9wKCk7Ci0K
LSAgICAvLyBSZXNvbHZlIHRvcCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFpbmluZyBibG9j
ay4KLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7Ci0gICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0
aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KLSAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJmxheW91
dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5jZXN0b3IgPSAm
YW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBFc2NhcGVSZWFz
b246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpOwotICAgICAgICAvLyBCb3hHZW9t
ZXRyeTo6dG9wIGlzIHRoZSBib3JkZXIgYm94IHRvcCBwb3NpdGlvbiBpbiBpdHMgY29udGFpbmlu
ZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICB0b3AgKz0gQm94R2VvbWV0cnk6
OmJvcmRlckJveFRvcChib3hHZW9tZXRyeSk7Ci0gICAgICAgIEFTU0VSVCghYW5jZXN0b3ItPmlz
UG9zaXRpb25lZCgpIHx8IGxheW91dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKLSAgICB9Ci0g
ICAgLy8gTW92ZSB0aGUgc3RhdGljIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJv
eC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgot
ICAgIHJldHVybiB0b3AgLSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci19Ci0KLUxh
eW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKLXsKLSAg
ICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKLSAgICAvLyBTZWUg
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgZm9yIHRoZSBkZWZp
bml0aW9uIG9mIHRoZSBzdGF0aWMgcG9zaXRpb24uCi0KLSAgICAvLyBTdGFydCB3aXRoIHRoaXMg
Ym94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAg
ICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0g
ICAgYXV0byBsZWZ0ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
LnBhcmVudCgpLCBFc2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkp
LmNvbnRlbnRCb3hMZWZ0KCk7Ci0KLSAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAg
dG8gdGhlIGNvbnRhaW5pbmcgYmxvY2suCi0gICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwotICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBz
aW5jZSB3ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCi0gICAgZm9yIChh
dXRvKiBhbmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWlu
aW5nQmxvY2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewotICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KCphbmNlc3RvciwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5
KTsKLSAgICAgICAgLy8gQm94R2VvbWV0cnk6OmxlZnQgaXMgdGhlIGJvcmRlciBib3ggbGVmdCBw
b3NpdGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAg
ICAgICBsZWZ0ICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hMZWZ0KGJveEdlb21ldHJ5KTsKLSAg
ICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRml4
ZWRQb3NpdGlvbmVkKCkpOwotICAgIH0KLSAgICAvLyBNb3ZlIHRoZSBzdGF0aWMgcG9zaXRpb24g
cmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lmaWMgdG8gYWJv
bHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCi0gICAgcmV0dXJuIGxlZnQgLSBob3Jpem9udGFsQ29u
c3RyYWludHMubG9naWNhbExlZnQ7Ci19Ci0KLUxheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRS
b290LCBMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdIC0+IHNocmluayB0byBm
aXQgLT4gdW5zdXBwb3J0ZWQgLT4gd2lkdGgoIiA8PCBMYXlvdXRVbml0IHsgfSA8PCAicHgpIGxh
eW91dEJveDogIiA8PCAmZm9ybWF0dGluZ0NvbnRleHRSb290IDw8ICIpIik7Ci0gICAgQVNTRVJU
KGZvcm1hdHRpbmdDb250ZXh0Um9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOwot
Ci0gICAgLy8gQ2FsY3VsYXRpb24gb2YgdGhlIHNocmluay10by1maXQgd2lkdGggaXMgc2ltaWxh
ciB0byBjYWxjdWxhdGluZyB0aGUgd2lkdGggb2YgYSB0YWJsZSBjZWxsIHVzaW5nIHRoZSBhdXRv
bWF0aWMgdGFibGUgbGF5b3V0IGFsZ29yaXRobS4KLSAgICAvLyBSb3VnaGx5OiBjYWxjdWxhdGUg
dGhlIHByZWZlcnJlZCB3aWR0aCBieSBmb3JtYXR0aW5nIHRoZSBjb250ZW50IHdpdGhvdXQgYnJl
YWtpbmcgbGluZXMgb3RoZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwK
LSAgICAvLyBhbmQgYWxzbyBjYWxjdWxhdGUgdGhlIHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBl
LmcuLCBieSB0cnlpbmcgYWxsIHBvc3NpYmxlIGxpbmUgYnJlYWtzLiBDU1MgMi4yIGRvZXMgbm90
IGRlZmluZSB0aGUgZXhhY3QgYWxnb3JpdGhtLgotICAgIC8vIFRoaXJkbHksIGZpbmQgdGhlIGF2
YWlsYWJsZSB3aWR0aDogaW4gdGhpcyBjYXNlLCB0aGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBtaW51cyB0aGUgdXNlZCB2YWx1ZXMgb2YgJ21hcmdpbi1sZWZ0JywgJ2Jv
cmRlci1sZWZ0LXdpZHRoJywKLSAgICAvLyAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQn
LCAnYm9yZGVyLXJpZ2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcsIGFuZCB0aGUgd2lkdGhzIG9m
IGFueSByZWxldmFudCBzY3JvbGwgYmFycy4KLQotICAgIC8vIFRoZW4gdGhlIHNocmluay10by1m
aXQgd2lkdGggaXM6IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3
aWR0aCksIHByZWZlcnJlZCB3aWR0aCkuCi0gICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzID0gSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07Ci0gICAgYXV0byBoYXNDb250ZW50
ID0gaXM8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpICYmIGRvd25jYXN0PENv
bnRhaW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KS5oYXNJbkZsb3dPckZsb2F0aW5nQ2hp
bGQoKTsKLSAgICAvLyBUaGUgdXNlZCB3aWR0aCBvZiB0aGUgY29udGFpbm1lbnQgYm94IGlzIGRl
dGVybWluZWQgYXMgaWYgcGVyZm9ybWluZyBhIG5vcm1hbCBsYXlvdXQgb2YgdGhlIGJveCwgZXhj
ZXB0IHRoYXQgaXQgaXMgdHJlYXRlZCBhcyBoYXZpbmcgbm8gY29udGVudC4KLSAgICBhdXRvIHNo
b3VsZElnbm9yZUNvbnRlbnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNTaXplQ29udGFpbm1l
bnRCb3goKTsgIAotICAgIGlmIChoYXNDb250ZW50ICYmICFzaG91bGRJZ25vcmVDb250ZW50KSB7
Ci0gICAgICAgIGF1dG8mIHJvb3QgPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdD
b250ZXh0Um9vdCk7Ci0gICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZUZvclJvb3QgPSBsYXlv
dXRTdGF0ZSgpLmVuc3VyZUZvcm1hdHRpbmdTdGF0ZShyb290KTsKLSAgICAgICAgYXV0byBwcmVj
b21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBmb3JtYXR0aW5nU3RhdGVGb3JSb290
LmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgaWYgKCFwcmVjb21wdXRlZElu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMpCi0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQocm9vdCwgbGF5
b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gKnByZWNvbXB1
dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAgICB9Ci0gICAgcmV0dXJuIHN0ZDo6bWlu
KHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgYXZhaWxhYmxlV2lk
dGgpLCBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0pOwotfQotCi1WZXJ0aWNhbEdl
b21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRW
ZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxD
b25zdHJhaW50cyYgdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxh
eW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSk7Ci0gICAgQVNTRVJUKHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodCk7Ci0K
LSAgICAvLyAxMC42LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVu
dHMKLSAgICAvLwotICAgIC8vIEZvciBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsIHRo
ZSB1c2VkIHZhbHVlcyBvZiB0aGUgdmVydGljYWwgZGltZW5zaW9ucyBtdXN0IHNhdGlzZnkgdGhp
cyBjb25zdHJhaW50OgotICAgIC8vICd0b3AnICsgJ21hcmdpbi10b3AnICsgJ2JvcmRlci10b3At
d2lkdGgnICsgJ3BhZGRpbmctdG9wJyArICdoZWlnaHQnICsgJ3BhZGRpbmctYm90dG9tJyArICdi
b3JkZXItYm90dG9tLXdpZHRoJyArICdtYXJnaW4tYm90dG9tJyArICdib3R0b20nCi0gICAgLy8g
PSBoZWlnaHQgb2YgY29udGFpbmluZyBibG9jawotCi0gICAgLy8gSWYgYWxsIHRocmVlIG9mICd0
b3AnLCAnaGVpZ2h0JywgYW5kICdib3R0b20nIGFyZSBhdXRvLCBzZXQgJ3RvcCcgdG8gdGhlIHN0
YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3cuCi0KLSAgICAv
LyBJZiBub25lIG9mIHRoZSB0aHJlZSBhcmUgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0
aGUgZXh0cmEKLSAgICAvLyBjb25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIGdldCBlcXVh
bCB2YWx1ZXMuIElmIG9uZSBvZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlzICdh
dXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgotICAgIC8vIElmIHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20n
IGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KLQotICAgIC8vIE90aGVyd2lzZSwgcGljayB0aGUg
b25lIG9mIHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KLQotICAgIC8vIDEu
ICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8n
LCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQgcGVyIDEwLjYuNywKLSAg
ICAvLyAgICAgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1i
b3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAvLyAyLiAndG9wJyBhbmQgJ2Jv
dHRvbScgYXJlICdhdXRvJyBhbmQgJ2hlaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiBzZXQgJ3Rv
cCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yCi0gICAgLy8g
ICAgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAn
Ym90dG9tJwotICAgIC8vIDMuICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAn
dG9wJyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSBoZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRl
bnQgcGVyIDEwLjYuNywgc2V0ICdhdXRvJwotICAgIC8vICAgICB2YWx1ZXMgZm9yICdtYXJnaW4t
dG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2JvdHRvbScKLSAg
ICAvLyA0LiAndG9wJyBpcyAnYXV0bycsICdoZWlnaHQnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdh
dXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2lu
LWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJwotICAgIC8vIDUuICdoZWlnaHQnIGlz
ICdhdXRvJywgJ3RvcCcgYW5kICdib3R0b20nIGFyZSBub3QgJ2F1dG8nLCB0aGVuICdhdXRvJyB2
YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIGFyZSBzZXQgdG8gMCBh
bmQgc29sdmUgZm9yICdoZWlnaHQnCi0gICAgLy8gNi4gJ2JvdHRvbScgaXMgJ2F1dG8nLCAndG9w
JyBhbmQgJ2hlaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9y
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAgYW5kIHNvbHZlIGZvciAnYm90
dG9tJwotCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29u
dGV4dCgpOwotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMu
bG9naWNhbEhlaWdodDsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRh
bENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLQotICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGJv
dHRvbSA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCk7Ci0gICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVp
Z2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRI
ZWlnaHQobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tIZWlnaHQpOwotICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICBVc2VkVmVydGljYWxNYXJnaW46Ok5v
bkNvbGxhcHNlZFZhbHVlcyB1c2VkVmVydGljYWxNYXJnaW47IAotICAgIGF1dG8gcGFkZGluZ1Rv
cCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gcGFkZGlu
Z0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOwotICAgIGF1
dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7Ci0gICAgYXV0byBib3JkZXJC
b3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKLQotICAgIGlmICghdG9wICYmICFo
ZWlnaHQgJiYgIWJvdHRvbSkKLSAgICAgICAgdG9wID0gc3RhdGljVmVydGljYWxQb3NpdGlvbkZv
ck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKTsKLQot
ICAgIGlmICh0b3AgJiYgaGVpZ2h0ICYmIGJvdHRvbSkgewotICAgICAgICBpZiAoIWNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlICYmICFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKSB7
Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkJlZm9yZUFuZEFmdGVyID0gY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRp
bmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKLSAgICAgICAgICAgIHVzZWRWZXJ0
aWNhbE1hcmdpbiA9IHsgbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgLyAyLCBtYXJnaW5CZWZvcmVBbmRB
ZnRlciAvIDIgfTsKLSAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUpIHsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA9ICpjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwotICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGlu
Z1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIpIHsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUgPSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7Ci0gICAgICAgICAgICB1c2Vk
VmVydGljYWxNYXJnaW4uYWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVz
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7ICpjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luLmJlZm9yZSwgKmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIgfTsKLSAgICAgICAg
Ly8gT3Zlci1jb25zdHJhaW5lZD8KLSAgICAgICAgYXV0byBib3hIZWlnaHQgPSAqdG9wICsgdXNl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0
ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRl
ciArICpib3R0b207Ci0gICAgICAgIGlmIChib3hIZWlnaHQgIT0gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0KQotICAgICAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3Ag
KyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpo
ZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRvcCAmJiAhaGVpZ2h0ICYmIGJvdHRvbSkgewot
ICAgICAgICAvLyAjMQotICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGxheW91dEJveCk7Ci0gICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsg
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAgICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9j
a0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGlu
Z1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7IAotICAgIH0KLQotICAgIGlmICghdG9wICYmICFi
b3R0b20gJiYgaGVpZ2h0KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHRvcCA9IHN0YXRpY1Zl
cnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdmVydGljYWxD
b25zdHJhaW50cyk7Ci0gICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRl
ci52YWx1ZU9yKDApIH07Ci0gICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAt
ICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5hZnRlcik7Ci0gICAgfQotCi0gICAgaWYgKCFoZWlnaHQgJiYgIWJvdHRvbSAmJiB0
b3ApIHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZvckZv
cm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOwotICAgICAgICB1c2VkVmVydGljYWxNYXJn
aW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBib3R0b20gPSBjb250
YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBi
b3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJC
b3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwotICAgIH0KLQotICAgIGlmICghdG9w
ICYmIGhlaWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgLy8gIzQKLSAgICAgICAgdXNlZFZlcnRp
Y2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgdG9wID0g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3Jk
ZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0
b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWhlaWdodCAmJiB0b3AgJiYgYm90dG9tKSB7Ci0gICAgICAgIC8vICM1Ci0gICAgICAgIHVz
ZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVP
cigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAgICAg
IGhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAgfQot
Ci0gICAgaWYgKCFib3R0b20gJiYgdG9wICYmIGhlaWdodCkgewotICAgICAgICAvLyAjNgotICAg
ICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9Owot
ICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0
aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBh
ZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwot
ICAgIH0KLQotICAgIEFTU0VSVCh0b3ApOwotICAgIEFTU0VSVChib3R0b20pOwotICAgIEFTU0VS
VChoZWlnaHQpOwotCi0gICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBjb250YWlu
aW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNlc3Rvci4K
LSAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRoZSBjb29y
ZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9y
ZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRp
bmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci0gICAgKnRv
cCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAgICpib3R0b20gKz0g
Y29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLQotICAgIExPR19XSVRIX1NUUkVB
TShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25dW0hlaWdodF1b
TWFyZ2luXSAtPiBvdXQtb2YtZmxvdyBub24tcmVwbGFjZWQgLT4gdG9wKCIgPDwgKnRvcCA8PCAi
cHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIgPDwgKmhlaWdodCA8PCAi
cHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiICA8PCB1
c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94
IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyAqaGVpZ2h0LCB1c2VkVmVy
dGljYWxNYXJnaW4gfSB9OwotfQotCi1Ib3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25z
dCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBo
b3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAK
LSAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVu
dHMKLSAgICAvLwotICAgIC8vICdsZWZ0JyArICdtYXJnaW4tbGVmdCcgKyAnYm9yZGVyLWxlZnQt
d2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmlnaHQnICsgJ2Jv
cmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyArICdyaWdodCcKLSAgICAvLyA9IHdp
ZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKLQotICAgIC8vIElmIGFsbCB0aHJlZSBvZiAnbGVmdCcs
ICd3aWR0aCcsIGFuZCAncmlnaHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkgJ2F1dG8nIHZh
bHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4KLSAgICAvLyBU
aGVuLCBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNo
aW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJyBzZXQgJ2xl
ZnQnIHRvIHRoZSBzdGF0aWMKLSAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIg
dGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlv
biBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgotICAgIC8vCi0gICAgLy8gSWYgbm9u
ZSBvZiB0aGUgdGhyZWUgaXMgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJn
aW4tcmlnaHQnIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEg
Y29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLAotICAgIC8v
IHVubGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVu
IGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQg
J21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCi0gICAgLy8gc29sdmUg
Zm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdtYXJnaW4tbGVm
dCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRo
YXQgdmFsdWUuCi0gICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdu
b3JlIHRoZSB2YWx1ZSBmb3IgJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0
eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JwotICAgIC8vIChp
biBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0g
ICAgLy8KLSAgICAvLyBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLWxl
ZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLCBhbmQgcGljayB0aGUgb25lIG9mIHRoZSBmb2xs
b3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KLSAgICAvLwotICAgIC8vIDEuICdsZWZ0JyBh
bmQgJ3dpZHRoJyBhcmUgJ2F1dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhl
IHdpZHRoIGlzIHNocmluay10by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAgIC8vIDIu
ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5vdCAnYXV0bycs
IHRoZW4gaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlz
aGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIAotICAgIC8vICAgIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndpc2Ugc2V0ICdy
aWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KLSAgICAvLyAgICBUaGVuIHNvbHZlIGZvciAn
bGVmdCcgKGlmICdkaXJlY3Rpb24gaXMgJ3J0bCcpIG9yICdyaWdodCcgKGlmICdkaXJlY3Rpb24n
IGlzICdsdHInKS4KLSAgICAvLyAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5k
ICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0IC4g
VGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JwotICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0bycsICd3aWR0
aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdsZWZ0JwotICAg
IC8vIDUuICd3aWR0aCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0
bycsIHRoZW4gc29sdmUgZm9yICd3aWR0aCcKLSAgICAvLyA2LiAncmlnaHQnIGlzICdhdXRvJywg
J2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAncmlnaHQn
Ci0KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0
KCk7Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBib3hH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dp
Y2FsV2lkdGg7Ci0gICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIAot
ICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byB3aWR0aCA9IG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lkdGgp
OwotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAg
VXNlZEhvcml6b250YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47Ci0gICAgYXV0byBwYWRk
aW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLSAgICBhdXRv
IHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7Ci0g
ICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwotICAgIGF1dG8g
Ym9yZGVyUmlnaHQgPSBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpOwotICAgIGlmICghbGVmdCAm
JiAhd2lkdGggJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vIElmIGFsbCB0aHJlZSBvZiAnbGVmdCcs
ICd3aWR0aCcsIGFuZCAncmlnaHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkgJ2F1dG8nIHZh
bHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4KLSAgICAgICAg
Ly8gVGhlbiwgaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFi
bGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgc2V0
ICdsZWZ0JyB0byB0aGUgc3RhdGljCi0gICAgICAgIC8vIHBvc2l0aW9uIGFuZCBhcHBseSBydWxl
IG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGlj
IHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUgYmVsb3cuCi0gICAgICAgIHVzZWRI
b3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVP
cigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0KLSAgICAg
ICAgYXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRp
b25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
KTsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICBsZWZ0
ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
aWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKLSAgICB9IGVsc2UgaWYgKGxlZnQgJiYg
d2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgaXMgJ2F1
dG8nOiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSAnYXV0bycs
IHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0
d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLAotICAgICAgICAvLyB1bmxlc3MgdGhpcyB3b3Vs
ZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rpb24gb2YgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdt
YXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAotICAgICAgICAvLyBzb2x2ZSBmb3IgJ21hcmdpbi1y
aWdodCcgKCdtYXJnaW4tbGVmdCcpLiBJZiBvbmUgb2YgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2lu
LXJpZ2h0JyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAg
ICAgICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2
YWx1ZSBmb3IgJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUg
Y29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JwotICAgICAgICAvLyAoaW4gY2Fz
ZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgotICAgICAg
ICBpZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiAhY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZCkgewotICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFydEFuZEVuZCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsg
KndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwotICAgICAgICAg
ICAgaWYgKG1hcmdpblN0YXJ0QW5kRW5kID49IDApCi0gICAgICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4gPSB7IG1hcmdpblN0YXJ0QW5kRW5kIC8gMiwgbWFyZ2luU3RhcnRBbmRFbmQg
LyAyIH07Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNMZWZ0VG9S
aWdodERpcmVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA9IDBfbHU7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJn
aW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmln
aHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gMF9sdTsKLSAgICAg
ICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5nQmxv
Y2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJp
Z2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCkgewotICAgICAgICAgICAgdXNlZEhv
cml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7Ci0gICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRo
IC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1Jp
Z2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwot
ICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kKSB7Ci0gICAg
ICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4uc3RhcnQ7Ci0gICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsg
Ym9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQgKyAqcmlnaHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4gPSB7ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQsICpjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kIH07Ci0gICAgICAgICAgICAvLyBPdmVyY29uc3RyYWluZWQ/
IElnbm9yZSByaWdodCAobGVmdCkuCi0gICAgICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVj
dGlvbikKLSAgICAgICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVz
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGVmdCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdp
bi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBvZiB0aGUg
Zm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0gICAgICAgIHVzZWRIb3Jpem9udGFs
TWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0gICAgfQotCi0gICAgaWYg
KCFsZWZ0ICYmICF3aWR0aCAmJiByaWdodCkgewotICAgICAgICAvLyAjMQotICAgICAgICAvLyBD
YWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFmdGVy
IHNldHRpbmcgJ2xlZnQnIChpbiBjYXNlIDEpIHRvIDAKLSAgICAgICAgbGVmdCA9IExheW91dFVu
aXQgeyAwIH07Ci0gICAgICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRh
bE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgo
bGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxv
Y2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jp
em9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgfSBlbHNlIGlmICghbGVmdCAmJiAhcmln
aHQgJiYgd2lkdGgpIHsKLSAgICAgICAgLy8gIzIKLSAgICAgICAgYXV0byBzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlv
bmVkKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAgICAgaWYgKGlzTGVm
dFRvUmlnaHREaXJlY3Rpb24pIHsKLSAgICAgICAgICAgIGxlZnQgPSBzdGF0aWNIb3Jpem9udGFs
UG9zaXRpb247Ci0gICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCps
ZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByaWdodCA9IHN0YXRp
Y0hvcml6b250YWxQb3NpdGlvbjsKLSAgICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250
YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXdpZHRo
ICYmICFyaWdodCAmJiBsZWZ0KSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIC8vIENhbGN1bGF0
ZSB0aGUgYXZhaWxhYmxlIHdpZHRoIGJ5IHNvbHZpbmcgZm9yICd3aWR0aCcgYWZ0ZXIgc2V0dGlu
ZyAncmlnaHQnIChpbiBjYXNlIDMpIHRvIDAKLSAgICAgICAgcmlnaHQgPSBMYXlvdXRVbml0IHsg
MCB9OwotICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Jsb2NrV2lkdGgg
LSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91
dEJveCwgYXZhaWxhYmxlV2lkdGgpOwotICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgfSBlbHNlIGlmICghbGVmdCAmJiB3aWR0aCAmJiBy
aWdodCkgewotICAgICAgICAvLyAjNAotICAgICAgICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgfSBlbHNlIGlmICghd2lkdGggJiYgbGVmdCAmJiBy
aWdodCkgewotICAgICAgICAvLyAjNQotICAgICAgICB3aWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgfSBlbHNlIGlmICghcmlnaHQgJiYgbGVmdCAmJiB3
aWR0aCkgewotICAgICAgICAvLyAjNgotICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCk7Ci0gICAgfQotCi0gICAgQVNTRVJUKGxlZnQpOwotICAgIEFT
U0VSVChyaWdodCk7Ci0gICAgQVNTRVJUKHdpZHRoKTsKLQotICAgIC8vIEZvciBvdXQtb2YtZmxv
dyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcg
ZWRnZSBvZiB0aGUgYW5jZXN0b3IuCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25l
ZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBM
ZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgYXV0
byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gaG9yaXpvbnRhbENvbnN0cmFp
bnRzLmxvZ2ljYWxMZWZ0OwotICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0
aWNhbEVkZ2U7Ci0gICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVk
Z2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVh
bSA8PCAiW1Bvc2l0aW9uXVtXaWR0aF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyBub24tcmVwbGFj
ZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJpZ2h0IDw8ICJweCkg
d2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCA8PCAicHgsICIgIDw8IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA8PCAicHgpIGxh
eW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4geyAqbGVmdCwgKnJp
Z2h0LCB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfSB9OwotfQotCi1WZXJ0aWNhbEdl
b21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0
aWNhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChyZXBs
YWNlZEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0gICAgQVNTRVJUKHZlcnRpY2FsQ29u
c3RyYWludHMubG9naWNhbEhlaWdodCk7Ci0KLSAgICAvLyAxMC42LjUgQWJzb2x1dGVseSBwb3Np
dGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gVGhlIHVzZWQgdmFsdWUg
b2YgJ2hlaWdodCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRz
LgotICAgIC8vIElmICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgc3BlY2lmaWVk
IGFzICdhdXRvJyBpdHMgdXNlZCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxv
dy4KLSAgICAvLyAxLiBJZiBib3RoICd0b3AnIGFuZCAnYm90dG9tJyBoYXZlIHRoZSB2YWx1ZSAn
YXV0bycsIHJlcGxhY2UgJ3RvcCcgd2l0aCB0aGUgZWxlbWVudCdzIHN0YXRpYyBwb3NpdGlvbi4K
LSAgICAvLyAyLiBJZiAnYm90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAn
bWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIHdpdGggJzAnLgotICAgIC8vIDMuIElmIGF0
IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc3Rp
bGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLgotICAgIC8vIDQuIElm
IGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20n
IGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KLQotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0
ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2Vk
Qm94LnN0eWxlKCk7Ci0gICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5n
ZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tIZWln
aHQgPSAqdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsSGVpZ2h0OwotICAgIGF1dG8gY29udGFp
bmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOwotCi0g
ICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dp
Y2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGhlaWdodCA9IGlu
bGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1
ZXMpLmNvbnRlbnRIZWlnaHQ7Ci0gICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2Vv
bWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7Ci0gICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5BZnRlciA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXI7Ci0gICAgYXV0byBw
YWRkaW5nVG9wID0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0
byBwYWRkaW5nQm90dG9tID0gYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7
Ci0gICAgYXV0byBib3JkZXJUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKTsKLSAgICBhdXRv
IGJvcmRlckJvdHRvbSA9IGJveEdlb21ldHJ5LmJvcmRlckJvdHRvbSgpOwotCi0gICAgaWYgKCF0
b3AgJiYgIWJvdHRvbSkgewotICAgICAgICAvLyAjMQotICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0
aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgdmVydGljYWxD
b25zdHJhaW50cyk7Ci0gICAgfQotCi0gICAgaWYgKCFib3R0b20pIHsKLSAgICAgICAgLy8gIzIK
LSAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3Jl
LnZhbHVlT3IoMCk7Ci0gICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7
Ci0gICAgfQotCi0gICAgaWYgKCF1c2VkTWFyZ2luQmVmb3JlICYmICF1c2VkTWFyZ2luQWZ0ZXIp
IHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKLSAgICAgICAg
dXNlZE1hcmdpbkJlZm9yZSA9IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMjsKLSAgICAgICAgdXNl
ZE1hcmdpbkFmdGVyID0gdXNlZE1hcmdpbkJlZm9yZTsKLSAgICB9Ci0KLSAgICAvLyAjNAotICAg
IGlmICghdG9wKQotICAgICAgICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICp1c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tKTsKLQotICAg
IGlmICghYm90dG9tKQotICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAo
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsKLQot
ICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSkKLSAgICAgICAgdXNlZE1hcmdpbkJlZm9yZSA9IGNv
bnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhl
aWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsg
KmJvdHRvbSk7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5BZnRlcikKLSAgICAgICAgdXNlZE1hcmdp
bkFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9y
ZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9y
ZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0KLSAgICAvLyAjNQotICAgIGF1dG8gYm94SGVpZ2h0ID0g
KnRvcCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdo
dCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJv
dHRvbTsKLSAgICBpZiAoYm94SGVpZ2h0ID4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KQotICAgICAg
ICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArICp1c2VkTWFyZ2luQmVm
b3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBi
b3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyKTsgCi0KLSAgICAvLyBGb3Igb3V0LW9mLWZs
b3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5n
IGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9u
ZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4g
TGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IHZlcnRpY2FsQ29uc3RyYWlu
dHMubG9naWNhbFRvcDsKLSAgICAqdG9wICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7Ci0gICAgKmJvdHRvbSArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
OwotCi0gICAgQVNTRVJUKHRvcCk7Ci0gICAgQVNTRVJUKGJvdHRvbSk7Ci0gICAgQVNTRVJUKHVz
ZWRNYXJnaW5CZWZvcmUpOwotICAgIEFTU0VSVCh1c2VkTWFyZ2luQWZ0ZXIpOwotICAgIExPR19X
SVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRpb25d
W0hlaWdodF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiB0b3AoIiA8PCAqdG9w
IDw8ICJweCkgYm90dG9tKCIgIDw8ICpib3R0b20gPDwgInB4KSBoZWlnaHQoIiA8PCBoZWlnaHQg
PDwgInB4KSBtYXJnaW4oIiA8PCAqdXNlZE1hcmdpbkJlZm9yZSA8PCAicHgsICIgIDw8ICp1c2Vk
TWFyZ2luQWZ0ZXIgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsK
LSAgICByZXR1cm4geyAqdG9wLCAqYm90dG9tLCB7IGhlaWdodCwgeyAqdXNlZE1hcmdpbkJlZm9y
ZSwgKnVzZWRNYXJnaW5BZnRlciB9IH0gfTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0
cnkoY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYg
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICAvLyAxMC4zLjggQWJzb2x1dGVseSBwb3NpdGlv
bmVkLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vIEluIHRoaXMgY2FzZSwgc2VjdGlvbiAxMC4z
LjcgYXBwbGllcyB1cCB0aHJvdWdoIGFuZCBpbmNsdWRpbmcgdGhlIGNvbnN0cmFpbnQgZXF1YXRp
b24sIGJ1dCB0aGUgcmVzdCBvZiBzZWN0aW9uIDEwLjMuNyBpcyByZXBsYWNlZCBieSB0aGUgZm9s
bG93aW5nIHJ1bGVzOgotICAgIC8vCi0gICAgLy8gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBp
cyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuIElmICdtYXJnaW4t
bGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRvJyBpdHMgdXNlZCB2
YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxvdy4KLSAgICAvLyAxLiBJZiBib3Ro
ICdsZWZ0JyBhbmQgJ3JpZ2h0JyBoYXZlIHRoZSB2YWx1ZSAnYXV0bycsIHRoZW4gaWYgdGhlICdk
aXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGlj
LXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsCi0gICAgLy8gICBzZXQgJ2xlZnQn
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb247IGVsc2UgaWYgJ2RpcmVjdGlvbicgaXMgJ3J0bCcsIHNl
dCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2xlZnQnIG9y
ICdyaWdodCcgYXJlICdhdXRvJywgcmVwbGFjZSBhbnkgJ2F1dG8nIG9uICdtYXJnaW4tbGVmdCcg
b3IgJ21hcmdpbi1yaWdodCcgd2l0aCAnMCcuCi0gICAgLy8gMy4gSWYgYXQgdGhpcyBwb2ludCBi
b3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFyZSBzdGlsbCAnYXV0bycsIHNv
bHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28g
bWFyZ2lucyBtdXN0IGdldCBlcXVhbCB2YWx1ZXMsCi0gICAgLy8gICB1bmxlc3MgdGhpcyB3b3Vs
ZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiB0aGUgZGlyZWN0aW9uIG9m
IHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2luLWxlZnQn
ICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKLSAgICAvLyAgIHNvbHZlIGZvciAnbWFyZ2lu
LXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuCi0gICAgLy8gNC4gSWYgYXQgdGhpcyBwb2ludCB0aGVy
ZSBpcyBhbiAnYXV0bycgbGVmdCwgc29sdmUgdGhlIGVxdWF0aW9uIGZvciB0aGF0IHZhbHVlLgot
ICAgIC8vIDUuIElmIGF0IHRoaXMgcG9pbnQgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5l
ZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgZWl0aGVyICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVj
dGlvbicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yCi0gICAg
Ly8gICAncmlnaHQnIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9y
IHRoYXQgdmFsdWUuCi0KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byYgc3R5bGUgPSByZXBsYWNlZEJveC5zdHlsZSgpOwot
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
cmVwbGFjZWRCb3gpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOwotICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlv
biA9IHJlcGxhY2VkQm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpOwotCi0gICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2Fs
TGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byByaWdodCA9IGNvbXB1dGVk
VmFsdWUoc3R5bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0OwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5FbmQgPSBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4uZW5kOwotICAgIGF1dG8gd2lkdGggPSBpbmxpbmVSZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2
ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykuY29udGVudFdp
ZHRoOwotICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZh
bHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmln
aHQoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRl
ckxlZnQoKTsKLSAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQo
KTsKLQotICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAg
YXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25G
b3JPdXRPZkZsb3dQb3NpdGlvbmVkKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikKLSAgICAgICAgICAgIGxlZnQg
PSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJp
Z2h0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgIH0KLQotICAgIGlmICghbGVmdCB8
fCAhcmlnaHQpIHsKLSAgICAgICAgLy8gIzIKLSAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCk7Ci0gICAgICAgIHVzZWRNYXJn
aW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCk7Ci0gICAgfQot
Ci0gICAgaWYgKCF1c2VkTWFyZ2luU3RhcnQgJiYgIXVzZWRNYXJnaW5FbmQpIHsKLSAgICAgICAg
Ly8gIzMKLSAgICAgICAgYXV0byBtYXJnaW5TdGFydEFuZEVuZCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5n
UmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0gICAgICAgIGlmIChtYXJnaW5TdGFydEFu
ZEVuZCA+PSAwKSB7Ci0gICAgICAgICAgICB1c2VkTWFyZ2luU3RhcnQgPSBtYXJnaW5TdGFydEFu
ZEVuZCAvIDI7Ci0gICAgICAgICAgICB1c2VkTWFyZ2luRW5kID0gdXNlZE1hcmdpblN0YXJ0Owot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICB1c2VkTWFyZ2luU3RhcnQgPSAwX2x1OwotICAgICAgICAgICAg
ICAgIHVzZWRNYXJnaW5FbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1c2Vk
TWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IDBfbHU7Ci0gICAgICAgICAgICAgICAgdXNlZE1h
cmdpblN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRN
YXJnaW5FbmQgKyAqcmlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gIzQKLSAgICBpZiAoIWxlZnQpCi0gICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0
KTsKLQotICAgIGlmICghcmlnaHQpCi0gICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lk
dGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0
ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kKTsK
LQotICAgIGlmICghdXNlZE1hcmdpblN0YXJ0KQotICAgICAgICB1c2VkTWFyZ2luU3RhcnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAr
IHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpy
aWdodCk7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5FbmQpCi0gICAgICAgIHVzZWRNYXJnaW5FbmQg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1c2VkTWFyZ2luU3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0
ICsgKnJpZ2h0KTsKLQotICAgIGF1dG8gYm94V2lkdGggPSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBi
b3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKLSAgICBpZiAoYm94V2lkdGgg
PiBjb250YWluaW5nQmxvY2tXaWR0aCkgewotICAgICAgICAvLyAjNSBPdmVyLWNvbnN0cmFpbmVk
PwotICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlvbikKLSAgICAgICAgICAgIHJpZ2h0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICp1c2VkTWFyZ2luRW5kKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGVmdCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKCp1c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFk
ZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJn
aW5FbmQgKyAqcmlnaHQpOwotICAgIH0KLQotICAgIEFTU0VSVChsZWZ0KTsKLSAgICBBU1NFUlQo
cmlnaHQpOwotICAgIEFTU0VSVCh1c2VkTWFyZ2luU3RhcnQpOwotICAgIEFTU0VSVCh1c2VkTWFy
Z2luRW5kKTsKLQotICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmlu
ZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCi0g
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRp
bmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRl
ciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5n
VmVydGljYWxFZGdlID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OwotICAgICps
ZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0gICAgKnJpZ2h0ICs9
IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0KLSAgICBMT0dfV0lUSF9TVFJF
QU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtXaWR0aF1b
TWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiBsZWZ0KCIgPDwgKmxlZnQgPDwgInB4
KSByaWdodCgiICA8PCAqcmlnaHQgPDwgInB4KSB3aWR0aCgiIDw8IHdpZHRoIDw8ICJweCkgbWFy
Z2luKCIgPDwgKnVzZWRNYXJnaW5TdGFydCA8PCAicHgsICIgIDw8ICp1c2VkTWFyZ2luRW5kIDw8
ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsg
KmxlZnQsICpyaWdodCwgeyB3aWR0aCwgeyAqdXNlZE1hcmdpblN0YXJ0LCAqdXNlZE1hcmdpbkVu
ZCB9IH0gfTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAg
ICBBU1NFUlQoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOwotICAgIC8vIFRPRE86IFVzZSBj
b21wbGljYXRlZC1jYXNlIGZvciBkb2N1bWVudCByZW5kZXJlciBmb3Igbm93IChzZWUgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbikuCi0gICAg
QVNTRVJUKChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkgJiYgbGF5b3V0Qm94LmlzSW5GbG93
KCkgJiYgIWxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKSB8fCBsYXlvdXRCb3guaXNJbmxp
bmVCbG9ja0JveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpIHx8IGxheW91
dEJveC5pc0RvY3VtZW50Qm94KCkgfHwgbGF5b3V0Qm94LmlzVGFibGVCb3goKSk7Ci0KLSAgICAv
LyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKLSAgICAvLwotICAgIC8vIEJsb2NrLWxldmVsLCBu
b24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRvZXMg
bm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJvcGVy
dHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCi0gICAgLy8g
J0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KLSAgICAvLyBGbG9hdGluZywg
bm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIC8vCi0gICAgLy8gMS4gSWYgJ21hcmdpbi10b3An
LCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAwLgot
ICAgIC8vIDIuIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBkZXBlbmRzIG9uIHRo
ZSBlbGVtZW50J3MgZGVzY2VuZGFudHMgcGVyIDEwLjYuNy4KLQotICAgIGF1dG8gaGVpZ2h0ID0g
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7Ci0gICAgYXV0byBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4o
bGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotICAgIC8vICMxCi0gICAgYXV0byB1
c2VkVmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVl
cyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKLSAgICAvLyAjMgotICAgIGlmICghaGVp
Z2h0KSB7Ci0gICAgICAgIEFTU0VSVChpc0hlaWdodEF1dG8obGF5b3V0Qm94KSk7Ci0gICAgICAg
IGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWluZXJC
b3g+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCi0gICAgICAgICAgICBo
ZWlnaHQgPSAwX2x1OwotICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNEb2N1bWVudEJveCgp
ICYmICFsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvJiBkb2N1bWVudEJveCA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94
KTsKLSAgICAgICAgICAgIGF1dG8gdG9wID0gQm94R2VvbWV0cnk6Om1hcmdpbkJveFJlY3QoZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqZG9jdW1lbnRCb3guZmlyc3RJbkZsb3dD
aGlsZCgpKSkudG9wKCk7Ci0gICAgICAgICAgICBhdXRvIGJvdHRvbSA9IEJveEdlb21ldHJ5Ojpt
YXJnaW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3VtZW50
Qm94Lmxhc3RJbkZsb3dDaGlsZCgpKSkuYm90dG9tKCk7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IGEgc3BlY2lhbCAocXVpcms/KSBiZWhhdmlvciBzaW5jZSB0aGUgZG9jdW1lbnQgYm94IGlzIG5v
dCBhIGZvcm1hdHRpbmcgY29udGV4dCByb290IGFuZAotICAgICAgICAgICAgLy8gYWxsIHRoZSBm
bG9hdCBib3hlcyBlbmQgdXAgYXQgdGhlIElDQiBsZXZlbC4KLSAgICAgICAgICAgIGF1dG8mIGlu
aXRpYWxDb250YWluaW5nQmxvY2sgPSBkb2N1bWVudEJveC5mb3JtYXR0aW5nQ29udGV4dFJvb3Qo
KTsKLSAgICAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0IHsg
Zm9ybWF0dGluZ0NvbnRleHQoKSwgbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZEZvcm1hdHRpbmdT
dGF0ZShpbml0aWFsQ29udGFpbmluZ0Jsb2NrKS5mbG9hdGluZ1N0YXRlKCkgfTsKLSAgICAgICAg
ICAgIGlmIChhdXRvIGZsb2F0Qm90dG9tID0gZmxvYXRpbmdDb250ZXh0LmJvdHRvbSgpKSB7Ci0g
ICAgICAgICAgICAgICAgYm90dG9tID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oKmZsb2F0Qm90dG9t
LCBib3R0b20pOwotICAgICAgICAgICAgICAgIGF1dG8gZmxvYXRUb3AgPSBmbG9hdGluZ0NvbnRl
eHQudG9wKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0VG9wKTsKLSAgICAgICAgICAg
ICAgICB0b3AgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PigqZmxvYXRUb3AsIHRvcCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBoZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBBU1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSk7Ci0gICAgICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZs
b2F0aW5nIG5vbi1yZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFyZ2lu
KCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRpY2Fs
TWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIp
OwotICAgIHJldHVybiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsgKmhlaWdodCwgdXNlZFZlcnRp
Y2FsTWFyZ2luIH07Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLQotICAgIC8vIDEwLjMu
NSBGbG9hdGluZywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyAxLiBJZiAn
bWFyZ2luLWxlZnQnLCBvciAnbWFyZ2luLXJpZ2h0JyBhcmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0
aGVpciB1c2VkIHZhbHVlIGlzICcwJy4KLSAgICAvLyAyLiBJZiAnd2lkdGgnIGlzIGNvbXB1dGVk
IGFzICdhdXRvJywgdGhlIHVzZWQgdmFsdWUgaXMgdGhlICJzaHJpbmstdG8tZml0IiB3aWR0aC4K
LQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0KLSAg
ICAvLyAjMQotICAgIGF1dG8gdXNlZEhvcml6b250YWxsTWFyZ2luID0gVXNlZEhvcml6b250YWxN
YXJnaW4geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07Ci0gICAgLy8gIzIKLSAgICBhdXRv
IHdpZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKLSAgICBpZiAoIXdpZHRoKQotICAgICAgICB3aWR0
aCA9IHNocmlua1RvRml0V2lkdGgobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9n
aWNhbFdpZHRoKTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91
dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdpbl0gLT4gZmxvYXRpbmcgbm9uLXJlcGxhY2VkIC0+
IHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6b250YWxsTWFy
Z2luLnN0YXJ0IDw8ICJweCwgIiA8PCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4uZW5kIDw8ICJweCkg
LT4gbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiBDb250ZW50
V2lkdGhBbmRNYXJnaW4geyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsbE1hcmdpbiB9OwotfQotCi1D
b250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRp
bmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxh
Y2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1
ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQb3NpdGlvbmVk
KCkpOwotCi0gICAgLy8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2
ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snCi0gICAg
Ly8gcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2Vk
IGVsZW1lbnRzCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJl
Y3RlZCB0byBpbmxpbmUgcmVwbGFjZWQiKTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250
ZW50SGVpZ2h0QW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsg
fSwgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2lu
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJU
KHJlcGxhY2VkQm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwotCi0gICAgLy8gMTAuMy42IEZs
b2F0aW5nLCByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gMS4gSWYgJ21hcmdpbi1s
ZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBhcmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGVpciB1c2Vk
IHZhbHVlIGlzICcwJy4KLSAgICAvLyAyLiBUaGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGRl
dGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4KLSAgICBhdXRvIGNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4o
cmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0KLSAgICBMT0dfV0lUSF9TVFJF
QU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAt
PiBmbG9hdGluZyByZXBsYWNlZCAtPiByZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNlZCIpOwot
ICAgIGF1dG8gdXNlZE1hcmdpbiA9IFVzZWRIb3Jpem9udGFsTWFyZ2luIHsgY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQudmFsdWVPcigwKSB9OwotICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFu
ZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsgb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGgsIHVzZWRNYXJnaW4gfSk7Ci19Ci0KLVZlcnRpY2Fs
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdl
b21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGlj
YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxv
d1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0g
ICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoZG93bmNh
c3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRp
Y2FsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIG91
dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5
b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVy
cmlkZGVuVmVydGljYWxWYWx1ZXMpOwotfQotCi1Ib3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBj
b25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0K
LSAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCi0gICAgICAgIHJldHVybiBvdXRP
ZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShkb3duY2FzdDxDb250YWluZXJCb3g+
KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMpOwotICAgIHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShk
b3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2
ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci19Ci0KLUNv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGlu
Z0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAgICBB
U1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOwotCi0gICAgaWYgKCFsYXlv
dXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhs
YXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
KTsKLSAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93
bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3Zl
cnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6ZmxvYXRpbmdDb250ZW50V2lkdGhBbmRNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9z
aXRpb25lZCgpKTsKLQotICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAg
ICAgcmV0dXJuIGZsb2F0aW5nTm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0
Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsK
LSAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2Fz
dDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3Ry
YWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50
cz4gdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBv
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Ci17Ci0gICAgLy8gMTAuNi4yIElubGluZSBy
ZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFs
IGZsb3csICdpbmxpbmUtYmxvY2snIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFu
ZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gMS4gSWYgJ21hcmdp
bi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBp
cyAwLgotICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRl
ZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNvIGhhcyBhbiBpbnRyaW5zaWMg
aGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAn
aGVpZ2h0Jy4KLSAgICAvLyAzLiBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVk
IHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgcmF0aW8g
dGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpczoKLSAgICAvLyAgICAodXNlZCB3aWR0
aCkgLyAoaW50cmluc2ljIHJhdGlvKQotICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcg
aGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGlu
dHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZh
bHVlIG9mICdoZWlnaHQnLgotICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEg
Y29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92
ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIG11c3QgYmUgc2V0IHRv
Ci0gICAgLy8gICAgdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCByZWN0YW5nbGUgdGhhdCBoYXMg
YSAyOjEgcmF0aW8sIGhhcyBhIGhlaWdodCBub3QgZ3JlYXRlciB0aGFuIDE1MHB4LCBhbmQgaGFz
IGEgd2lkdGggbm90IGdyZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdpZHRoLgotCi0gICAgLy8gIzEK
LSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7
Ci0gICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkVmVy
dGljYWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgYXV0
byB1c2VkVmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgIGF1dG8mIHN0eWxlID0gcmVw
bGFjZWRCb3guc3R5bGUoKTsKLQotICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVydGlj
YWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdodCA6IFdURjo6bnVsbG9wdCk7Ci0gICAgYXV0byBo
ZWlnaHRJc0F1dG8gPSAhb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCAmJiBpc0hlaWdo
dEF1dG8ocmVwbGFjZWRCb3gpOwotICAgIGF1dG8gd2lkdGhJc0F1dG8gPSBzdHlsZS5sb2dpY2Fs
V2lkdGgoKS5pc0F1dG8oKTsKLQotICAgIGlmIChoZWlnaHRJc0F1dG8gJiYgd2lkdGhJc0F1dG8g
JiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gIzIKLSAg
ICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgfSBlbHNl
IGlmIChoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljUmF0aW8oKSkgewot
ICAgICAgICAvLyAjMwotICAgICAgICBhdXRvIHVzZWRXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KHJlcGxhY2VkQm94KS5jb250ZW50Qm94V2lkdGgoKTsKLSAgICAgICAg
aGVpZ2h0ID0gdXNlZFdpZHRoIC8gcmVwbGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsKLSAgICB9
IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQo
KSkgewotICAgICAgICAvLyAjNAotICAgICAgICBoZWlnaHQgPSByZXBsYWNlZEJveC5pbnRyaW5z
aWNIZWlnaHQoKTsKLSAgICB9IGVsc2UgaWYgKGhlaWdodElzQXV0bykgewotICAgICAgICAvLyAj
NQotICAgICAgICBoZWlnaHQgPSB7IDE1MCB9OwotICAgIH0KLQotICAgIEFTU0VSVChoZWlnaHQp
OwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0g
PDwgIltIZWlnaHRdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IGhlaWdodCgiIDw8ICpo
ZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJw
eCwgIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8
PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsKLSAgICByZXR1cm4geyAqaGVpZ2h0LCB1c2VkVmVydGlj
YWxNYXJnaW4gfTsKLX0KLQotQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVw
bGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4gdmVydGljYWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKQotewotICAgIC8vIDEwLjMuMiBJbmxpbmUsIHJlcGxhY2VkIGVsZW1l
bnRzCi0gICAgLy8KLSAgICAvLyBBIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJyBmb3IgJ21hcmdp
bi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBiZWNvbWVzIGEgdXNlZCB2YWx1ZSBvZiAnMCcuCi0g
ICAgLy8KLSAgICAvLyAxLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0
ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2lj
IHdpZHRoLCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3
aWR0aCcuCi0gICAgLy8KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhh
dmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgaGFzIG5vIGludHJp
bnNpYyB3aWR0aCwgYnV0IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgaGVpZ2h0IGFuZCBpbnRyaW5z
aWMgcmF0aW87Ci0gICAgLy8gICAgb3IgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycsICdoZWlnaHQnIGhhcyBzb21lIG90aGVyIGNvbXB1dGVkIHZhbHVlLCBhbmQgdGhl
IGVsZW1lbnQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyByYXRpbzsKLSAgICAvLyAgICB0aGVuIHRo
ZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXM6ICh1c2VkIGhlaWdodCkgKiAoaW50cmluc2ljIHJh
dGlvKQotICAgIC8vCi0gICAgLy8gMy4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZl
IGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5z
aWMgcmF0aW8gYnV0IG5vIGludHJpbnNpYyBoZWlnaHQgb3Igd2lkdGgsCi0gICAgLy8gICAgdGhl
biB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIHVuZGVmaW5lZCBpbiBDU1MgMi4yLiBIb3dl
dmVyLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCwgaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyB3aWR0
aCBkb2VzIG5vdCBpdHNlbGYgZGVwZW5kIG9uIHRoZSByZXBsYWNlZAotICAgIC8vICAgIGVsZW1l
bnQncyB3aWR0aCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGNhbGN1bGF0ZWQg
ZnJvbSB0aGUgY29uc3RyYWludCBlcXVhdGlvbiB1c2VkIGZvciBibG9jay1sZXZlbCwgbm9uLXJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LgotICAgIC8vCi0gICAgLy8gNC4gT3RoZXJ3
aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBl
bGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgd2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5zaWMgd2lkdGgg
aXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJy4KLSAgICAvLwotICAgIC8vIDUuIE90aGVyd2lz
ZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1dCBub25lIG9m
IHRoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJyBiZWNvbWVzIDMwMHB4LgotICAgIC8vICAgIElmIDMwMHB4IGlzIHRvbyB3aWRlIHRvIGZp
dCB0aGUgZGV2aWNlLCBVQXMgc2hvdWxkIHVzZSB0aGUgd2lkdGggb2YgdGhlIGxhcmdlc3QgcmVj
dGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvIGFuZCBmaXRzIHRoZSBkZXZpY2UgaW5zdGVhZC4K
LQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLQot
ICAgIGF1dG8gdXNlZE1hcmdpblN0YXJ0ID0gWyZdIHsKLSAgICAgICAgaWYgKG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzLm1hcmdpbikKLSAgICAgICAgICAgIHJldHVybiBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcy5tYXJnaW4tPnN0YXJ0OwotICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMF9sdSk7Ci0gICAgfTsKLQotICAgIGF1dG8gdXNl
ZE1hcmdpbkVuZCA9IFsmXSB7Ci0gICAgICAgIGlmIChvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cy5tYXJnaW4pCi0gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMu
bWFyZ2luLT5lbmQ7Ci0gICAgICAgIHJldHVybiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
LnZhbHVlT3IoMF9sdSk7Ci0gICAgfTsKLQotICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9y
aXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDog
Y29tcHV0ZWRXaWR0aChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aCk7Ci0gICAgYXV0byBoZWlnaHRJc0F1dG8gPSBpc0hlaWdodEF1dG8ocmVwbGFjZWRCb3gp
OwotICAgIGF1dG8gaGVpZ2h0ID0gY29tcHV0ZWRIZWlnaHQocmVwbGFjZWRCb3gsIHZlcnRpY2Fs
Q29uc3RyYWludHMgPyB2ZXJ0aWNhbENvbnN0cmFpbnRzLT5sb2dpY2FsSGVpZ2h0IDogV1RGOjpu
dWxsb3B0KTsKLQotICAgIGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94
Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgd2lkdGggPSBy
ZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgpOwotICAgIH0gZWxzZSBpZiAoKCF3aWR0aCAmJiBo
ZWlnaHRJc0F1dG8gJiYgIXJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkgJiYgcmVwbGFj
ZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkgJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljUmF0
aW8oKSkKLSAgICAgICAgfHwgKCF3aWR0aCAmJiBoZWlnaHQgJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljUmF0aW8oKSkpIHsKLSAgICAgICAgLy8gIzIKLSAgICAgICAgd2lkdGggPSBoZWlnaHQu
dmFsdWVPcihyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgKiByZXBsYWNlZEJveC5p
bnRyaW5zaWNSYXRpbygpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoICYmIGhlaWdodElzQXV0byAm
JiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpICYmICFyZXBsYWNlZEJveC5oYXNJbnRy
aW5zaWNXaWR0aCgpICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgewotICAg
ICAgICAvLyAjMwotICAgICAgICAvLyBGSVhNRTogdW5kZWZpbmVkIGJ1dCBzdXJlbHkgZG9hYmxl
LgotICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgIH0gZWxzZSBpZiAo
IXdpZHRoICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgLy8g
IzQKLSAgICAgICAgd2lkdGggPSByZXBsYWNlZEJveC5pbnRyaW5zaWNXaWR0aCgpOwotICAgIH0g
ZWxzZSBpZiAoIXdpZHRoKSB7Ci0gICAgICAgIC8vICM1Ci0gICAgICAgIHdpZHRoID0geyAzMDAg
fTsKLSAgICB9Ci0KLSAgICBBU1NFUlQod2lkdGgpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZv
cm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBpbmZs
b3cgcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2Vk
TWFyZ2luU3RhcnQoKSA8PCAicHgsICIgPDwgdXNlZE1hcmdpbkVuZCgpIDw8ICJweCkgLT4gbGF5
b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKndpZHRoLCB7
IHVzZWRNYXJnaW5TdGFydCgpLCB1c2VkTWFyZ2luRW5kKCkgfSB9OwotfQotCi1MYXlvdXRTaXpl
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zm
c2V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cykgY29uc3QKLXsKLSAgICBBU1NFUlQobGF5b3V0Qm94LmlzSW5G
bG93UG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDkuNC4zIFJlbGF0aXZlIHBvc2l0aW9uaW5nCi0g
ICAgLy8KLSAgICAvLyBUaGUgJ3RvcCcgYW5kICdib3R0b20nIHByb3BlcnRpZXMgbW92ZSByZWxh
dGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVudChzKSB1cCBvciBkb3duIHdpdGhvdXQgY2hhbmdpbmcg
dGhlaXIgc2l6ZS4KLSAgICAvLyBUb3AnIG1vdmVzIHRoZSBib3hlcyBkb3duLCBhbmQgJ2JvdHRv
bScgbW92ZXMgdGhlbSB1cC4gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJldGNoZWQg
YXMgYSByZXN1bHQgb2YgJ3RvcCcgb3IgJ2JvdHRvbScsIHRoZSB1c2VkIHZhbHVlcyBhcmUgYWx3
YXlzOiB0b3AgPSAtYm90dG9tLgotICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCBhcmUgJ2F1dG8n
LCB0aGVpciB1c2VkIHZhbHVlcyBhcmUgYm90aCAnMCcuCi0gICAgLy8gMi4gSWYgb25lIG9mIHRo
ZW0gaXMgJ2F1dG8nLCBpdCBiZWNvbWVzIHRoZSBuZWdhdGl2ZSBvZiB0aGUgb3RoZXIuCi0gICAg
Ly8gMy4gSWYgbmVpdGhlciBpcyAnYXV0bycsICdib3R0b20nIGlzIGlnbm9yZWQgKGkuZS4sIHRo
ZSB1c2VkIHZhbHVlIG9mICdib3R0b20nIHdpbGwgYmUgbWludXMgdGhlIHZhbHVlIG9mICd0b3An
KS4KLQotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0K
LSAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgaWYgKCF0b3AgJiYg
IWJvdHRvbSkgewotICAgICAgICAvLyAjMQotICAgICAgICB0b3AgPSBib3R0b20gPSB7IDAgfTsK
LSAgICB9IGVsc2UgaWYgKCF0b3ApIHsKLSAgICAgICAgLy8gIzIKLSAgICAgICAgdG9wID0gLSpi
b3R0b207Ci0gICAgfSBlbHNlIGlmICghYm90dG9tKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAg
IGJvdHRvbSA9IC0qdG9wOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAgIGJv
dHRvbSA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0KLSAgICAvLyBGb3IgcmVsYXRpdmVseSBwb3Np
dGlvbmVkIGVsZW1lbnRzLCAnbGVmdCcgYW5kICdyaWdodCcgbW92ZSB0aGUgYm94KGVzKSBob3Jp
em9udGFsbHksIHdpdGhvdXQgY2hhbmdpbmcgdGhlaXIgc2l6ZS4KLSAgICAvLyAnTGVmdCcgbW92
ZXMgdGhlIGJveGVzIHRvIHRoZSByaWdodCwgYW5kICdyaWdodCcgbW92ZXMgdGhlbSB0byB0aGUg
bGVmdC4KLSAgICAvLyBTaW5jZSBib3hlcyBhcmUgbm90IHNwbGl0IG9yIHN0cmV0Y2hlZCBhcyBh
IHJlc3VsdCBvZiAnbGVmdCcgb3IgJ3JpZ2h0JywgdGhlIHVzZWQgdmFsdWVzIGFyZSBhbHdheXM6
IGxlZnQgPSAtcmlnaHQuCi0gICAgLy8KLSAgICAvLyAxLiBJZiBib3RoICdsZWZ0JyBhbmQgJ3Jp
Z2h0JyBhcmUgJ2F1dG8nICh0aGVpciBpbml0aWFsIHZhbHVlcyksIHRoZSB1c2VkIHZhbHVlcyBh
cmUgJzAnIChpLmUuLCB0aGUgYm94ZXMgc3RheSBpbiB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbiku
Ci0gICAgLy8gMi4gSWYgJ2xlZnQnIGlzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgaXMgbWludXMg
dGhlIHZhbHVlIG9mICdyaWdodCcgKGkuZS4sIHRoZSBib3hlcyBtb3ZlIHRvIHRoZSBsZWZ0IGJ5
IHRoZSB2YWx1ZSBvZiAncmlnaHQnKS4KLSAgICAvLyAzLiBJZiAncmlnaHQnIGlzIHNwZWNpZmll
ZCBhcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVlIGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAnbGVmdCcu
Ci0gICAgLy8gNC4gSWYgbmVpdGhlciAnbGVmdCcgbm9yICdyaWdodCcgaXMgJ2F1dG8nLCB0aGUg
cG9zaXRpb24gaXMgb3Zlci1jb25zdHJhaW5lZCwgYW5kIG9uZSBvZiB0aGVtIGhhcyB0byBiZSBp
Z25vcmVkLgotICAgIC8vICAgIElmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAnbHRyJywgdGhlIHZhbHVlIG9mICdsZWZ0JyB3aW5zIGFuZCAncmln
aHQnIGJlY29tZXMgLSdsZWZ0Jy4KLSAgICAvLyAgICBJZiAnZGlyZWN0aW9uJyBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBpcyAncnRsJywgJ3JpZ2h0JyB3aW5zIGFuZCAnbGVmdCcgaXMgaWdub3Jl
ZC4KLQotICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVlKHN0
eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0KLSAgICBpZiAoIWxl
ZnQgJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAgIGxlZnQgPSByaWdodCA9IHsg
MCB9OwotICAgIH0gZWxzZSBpZiAoIWxlZnQpIHsKLSAgICAgICAgLy8gIzIKLSAgICAgICAgbGVm
dCA9IC0qcmlnaHQ7Ci0gICAgfSBlbHNlIGlmICghcmlnaHQpIHsKLSAgICAgICAgLy8gIzMKLSAg
ICAgICAgcmlnaHQgPSAtKmxlZnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gIzQKLSAgICAg
ICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgICAgICBpZiAoaXNMZWZ0
VG9SaWdodERpcmVjdGlvbikKLSAgICAgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBsZWZ0ID0gV1RGOjpudWxsb3B0OwotICAgIH0KLQotICAgIEFTU0VS
VCghYm90dG9tIHx8ICp0b3AgPT0gLSpib3R0b20pOwotICAgIEFTU0VSVCghbGVmdCB8fCAqbGVm
dCA9PSAtKnJpZ2h0KTsKLQotICAgIGF1dG8gdG9wUG9zaXRpb25PZmZzZXQgPSAqdG9wOwotICAg
IGF1dG8gbGVmdFBvc2l0aW9uT2Zmc2V0ID0gbGVmdC52YWx1ZU9yKC0qcmlnaHQpOwotCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3Np
dGlvbl0gLT4gcG9zaXRpb25lZCBpbmZsb3cgLT4gdG9wIG9mZnNldCgiIDw8IHRvcFBvc2l0aW9u
T2Zmc2V0IDw8ICJweCkgbGVmdCBvZmZzZXQoIiA8PCBsZWZ0UG9zaXRpb25PZmZzZXQgPDwgInB4
KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgbGVmdFBv
c2l0aW9uT2Zmc2V0LCB0b3BQb3NpdGlvbk9mZnNldCB9OwotfQotCi1pbmxpbmUgc3RhdGljIFdy
aXRpbmdNb2RlIHVzZWRXcml0aW5nTW9kZShjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICAv
LyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXdyaXRpbmctbW9kZXMtNC8jbG9naWNhbC1kaXJl
Y3Rpb24tbGF5b3V0Ci0gICAgLy8gRmxvdy1yZWxhdGl2ZSBkaXJlY3Rpb25zIGFyZSBjYWxjdWxh
dGVkIHdpdGggcmVzcGVjdCB0byB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBjb250YWluaW5nIGJs
b2NrIG9mIHRoZSBib3guCi0gICAgLy8gRm9yIGlubGluZS1sZXZlbCBib3hlcywgdGhlIHdyaXRp
bmcgbW9kZSBvZiB0aGUgcGFyZW50IGJveCBpcyB1c2VkIGluc3RlYWQuCi0gICAgcmV0dXJuIGxh
eW91dEJveC5pc0lubGluZUxldmVsQm94KCkgPyBsYXlvdXRCb3gucGFyZW50KCkuc3R5bGUoKS53
cml0aW5nTW9kZSgpIDogbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkud3JpdGlu
Z01vZGUoKTsKLX0KLQotRWRnZXMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRl
ZEJvcmRlcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9
IGxheW91dEJveC5zdHlsZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4
dExheW91dCwgc3RyZWFtIDw8ICJbQm9yZGVyXSAtPiBsYXlvdXRCb3g6ICIgPDwgJmxheW91dEJv
eCk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgeyBMYXlvdXRVbml0KHN0eWxlLmJvcmRlckxlZnRX
aWR0aCgpKSwgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJSaWdodFdpZHRoKCkpIH0sCi0gICAgICAg
IHsgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJUb3BXaWR0aCgpKSwgTGF5b3V0VW5pdChzdHlsZS5i
b3JkZXJCb3R0b21XaWR0aCgpKSB9Ci0gICAgfTsKLX0KLQotT3B0aW9uYWw8RWRnZXM+IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBjb25zdCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdAotewotICAg
IGlmICghbGF5b3V0Qm94LmlzUGFkZGluZ0FwcGxpY2FibGUoKSkKLSAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKLQotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAg
TE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQYWRk
aW5nXSAtPiBsYXlvdXRCb3g6ICIgPDwgJmxheW91dEJveCk7Ci0gICAgcmV0dXJuIEVkZ2VzIHsK
LSAgICAgICAgeyB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nTGVmdCgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdSaWdodCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCkgfSwKLSAgICAgICAgeyB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5n
VG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGlu
Z0JvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfQotICAgIH07Ci19Ci0KLUNvbXB1dGVk
SG9yaXpvbnRhbE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9y
aXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxheW91dEJveCkpKQotICAgICAgICByZXR1cm4geyBj
b21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkxlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBj
b21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9
OwotICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luVG9wKCksIGNvbnRhaW5p
bmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Cb3R0b20oKSwgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIH07Ci19Ci0KLUNvbXB1dGVkVmVydGljYWxNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50
cykgY29uc3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdp
ZHRoOwotICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSh1c2VkV3JpdGluZ01vZGUobGF5
b3V0Qm94KSkpCi0gICAgICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luVG9w
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Cb3R0
b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07Ci0gICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1
ZShzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1
ZShzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfTsKLX0KLQotRm9y
bWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoKSBjb25zdAotewotICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBtaW5XaWR0aCA9IGZp
eGVkVmFsdWUoc3R5bGUubG9naWNhbE1pbldpZHRoKCkpOwotICAgIGF1dG8gbWF4V2lkdGggPSBm
aXhlZFZhbHVlKHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpKTsKLSAgICBpZiAoIW1pbldpZHRoICYm
ICFtYXhXaWR0aCkKLSAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOwotCi0gICAgaWYgKG1h
eFdpZHRoKSB7Ci0gICAgICAgIGludHJpbnNpY1dpZHRoLm1pbmltdW0gPSBzdGQ6Om1pbigqbWF4
V2lkdGgsIGludHJpbnNpY1dpZHRoLm1pbmltdW0pOwotICAgICAgICBpbnRyaW5zaWNXaWR0aC5t
YXhpbXVtID0gc3RkOjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAg
ICB9Ci0KLSAgICBpZiAobWluV2lkdGgpIHsKLSAgICAgICAgaW50cmluc2ljV2lkdGgubWluaW11
bSA9IHN0ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWluaW11bSk7Ci0gICAgICAg
IGludHJpbnNpY1dpZHRoLm1heGltdW0gPSBzdGQ6Om1heCgqbWluV2lkdGgsIGludHJpbnNpY1dp
ZHRoLm1heGltdW0pOwotICAgIH0KLQotICAgIEFTU0VSVChpbnRyaW5zaWNXaWR0aC5taW5pbXVt
IDw9IGludHJpbnNpY1dpZHRoLm1heGltdW0pOwotICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsK
LX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCkKLXsKLSAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY29udGFpbmVyQm94KTsK
LSAgICByZXR1cm4gewotICAgICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCksIGJv
eEdlb21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpIH0sCi0gICAgICAgIHsgYm94R2VvbWV0cnkucGFk
ZGluZ0JveFRvcCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCkgfSwKLSAgICAgICAg
Ym94R2VvbWV0cnkuY29udGVudEJveFdpZHRoKCkgfTsKLX0KLQotRm9ybWF0dGluZ0NvbnRleHQ6
OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6
OmNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5l
ckJveCwgT3B0aW9uYWw8RXNjYXBlUmVhc29uPiBlc2NhcGVSZWFzb24pCi17Ci0gICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5l
ckJveCwgZXNjYXBlUmVhc29uKTsKLSAgICByZXR1cm4geyB7IGJveEdlb21ldHJ5LmNvbnRlbnRC
b3hMZWZ0KCksIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsgYm94R2VvbWV0cnku
Y29udGVudEJveFRvcCgpLCBjb21wdXRlZEhlaWdodChjb250YWluZXJCb3gpIH0gfTsKLX0KLQot
fQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Nh
MGU3NDIwOGMyZDEwM2QxMWY4NGI1ZTA2YTM1ZmExN2RlMWZiZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21l
dHJ5LmNwcApAQCAtMCwwICsxLDExNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRm9ybWF0dGluZ0dlb21ldHJ5LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VU
X0ZPUk1BVFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIkJsb2NrRm9ybWF0dGluZ1N0YXRlLmgi
CisjaW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsb2F0aW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkZsb2F0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5
b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUgIkxheW91dFJlcGxhY2VkQm94
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNIZWlnaHRBdXRvKGNvbnN0IEJveCYgbGF5b3V0Qm94KQoreworICAgIC8v
IDEwLjUgQ29udGVudCBoZWlnaHQ6IHRoZSAnaGVpZ2h0JyBwcm9wZXJ0eQorICAgIC8vCisgICAg
Ly8gVGhlIHBlcmNlbnRhZ2UgaXMgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGhlaWdo
dCBvZiB0aGUgZ2VuZXJhdGVkIGJveCdzIGNvbnRhaW5pbmcgYmxvY2suCisgICAgLy8gSWYgdGhl
IGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0
bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVudCBoZWlnaHQpLAorICAgIC8vIGFuZCB0aGlz
IGVsZW1lbnQgaXMgbm90IGFic29sdXRlbHkgcG9zaXRpb25lZCwgdGhlIHVzZWQgaGVpZ2h0IGlz
IGNhbGN1bGF0ZWQgYXMgaWYgJ2F1dG8nIHdhcyBzcGVjaWZpZWQuCisKKyAgICBhdXRvIGhlaWdo
dCA9IGxheW91dEJveC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0Lmlz
QXV0bygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChoZWlnaHQuaXNQZXJjZW50
KCkpIHsKKyAgICAgICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gIWxheW91dEJveC5jb250
YWluaW5nQmxvY2soKS5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKS5pc0ZpeGVkKCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGb3JtYXR0aW5nR2VvbWV0cnk6OkZvcm1hdHRpbmdH
ZW9tZXRyeShjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQpCisgICAg
OiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0KQoreworfQorCitPcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29u
c3QgQm94JiBsYXlvdXRCb3gsIEhlaWdodFR5cGUgaGVpZ2h0VHlwZSwgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAoreworICAgIGF1dG8mIHN0eWxlID0g
bGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBoZWlnaHQgPSBoZWlnaHRUeXBlID09IEhlaWdo
dFR5cGU6Ok5vcm1hbCA/IHN0eWxlLmxvZ2ljYWxIZWlnaHQoKSA6IGhlaWdodFR5cGUgPT0gSGVp
Z2h0VHlwZTo6TWluID8gc3R5bGUubG9naWNhbE1pbkhlaWdodCgpIDogc3R5bGUubG9naWNhbE1h
eEhlaWdodCgpOworICAgIGlmIChoZWlnaHQuaXNVbmRlZmluZWQoKSB8fCBoZWlnaHQuaXNBdXRv
KCkgfHwgaGVpZ2h0LmlzTWF4Q29udGVudCgpIHx8IGhlaWdodC5pc01pbkNvbnRlbnQoKSB8fCBo
ZWlnaHQuaXNGaXRDb250ZW50KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBpZiAoaGVp
Z2h0LmlzRml4ZWQoKSkKKyAgICAgICAgcmV0dXJuIExheW91dFVuaXQgeyBoZWlnaHQudmFsdWUo
KSB9OworCisgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpIHsKKyAgICAgICAgaWYgKGxh
eW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCkpCisgICAgICAgICAgICBjb250YWluaW5nQmxvY2tI
ZWlnaHQgPSBmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLmhlaWdodFZhbHVlT2ZOZWFyZXN0
Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KGxheW91dEJveCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgYXV0byBub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2FsSGVp
Z2h0ID0gWyZdIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBibG9jayBsZXZlbCBib3gg
aXMgYSBkaXJlY3QgY2hpbGQgb2YgYW4gaW5saW5lIGxldmVsIGJveCAoPHNwYW4+PGRpdj48L2Rp
dj48L3NwYW4+KSBhbmQgd2Ugd3JhcCBpdCBpbnRvIGEgY29udGludWF0aW9uLAorICAgICAgICAg
ICAgICAgIC8vIHRoZSBjb250YWluaW5nIGJsb2NrIChhbm9ueW1vdXMgd3JhcHBlcikgaXMgbm90
IHRoZSBib3ggd2UgbmVlZCB0byBjaGVjayBmb3IgZml4ZWQgaGVpZ2h0LgorICAgICAgICAgICAg
ICAgIGF1dG8mIGluaXRpYWxDb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guaW5pdGlhbENvbnRh
aW5pbmdCbG9jaygpOworICAgICAgICAgICAgICAgIGZvciAoYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gJmxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsgY29udGFpbmluZ0Jsb2NrICE9ICZpbml0
aWFsQ29udGFpbmluZ0Jsb2NrOyBjb250YWluaW5nQmxvY2sgPSAmY29udGFpbmluZ0Jsb2NrLT5j
b250YWluaW5nQmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbmluZ0Js
b2NrLT5pc0Fub255bW91cygpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluaW5nQmxvY2stPnN0eWxlKCkubG9naWNh
bEhlaWdodCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gaW5p
dGlhbENvbnRhaW5pbmdCbG9jay5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBmaXhlZFZhbHVlKG5vbkFu
b255bW91c0NvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIWNvbnRhaW5pbmdCbG9ja0hlaWdodCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiB2YWx1ZUZvckxlbmd0aChoZWlnaHQsICpjb250YWluaW5nQmxvY2tIZWln
aHQpOworfQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1
dGVkSGVpZ2h0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250
YWluaW5nQmxvY2tIZWlnaHQpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gaGVpZ2h0ID0gY29tcHV0
ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Js
b2NrSGVpZ2h0KSkgeworICAgICAgICBpZiAobGF5b3V0Qm94LnN0eWxlKCkuYm94U2l6aW5nKCkg
PT0gQm94U2l6aW5nOjpDb250ZW50Qm94KQorICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAg
ICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KGxheW91dEJveCk7CisgICAgICAgIHJldHVybiAqaGVpZ2h0IC0gKGJveEdlb21ldHJ5LnZl
cnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDAp
KTsKKyAgICB9CisgICAgcmV0dXJuIHsgfTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9y
bWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFdpZHRoVmFsdWUoY29uc3QgQm94JiBsYXlvdXRCb3gs
IFdpZHRoVHlwZSB3aWR0aFR5cGUsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCit7
CisgICAgLy8gQXBwbGllcyB0bzogYWxsIGVsZW1lbnRzIGV4Y2VwdCBub24tcmVwbGFjZWQgaW5s
aW5lcyAob3V0LW9mLWZsb3cgY2hlY2sgaXMgcmVxdWlyZWQgZm9yIHBvc2l0aW9uZWQgPGJyPiBh
cyBmb3Igc29tZSByZWFzb24gd2UgZG9uJ3QgYmxvY2tpZnkgdGhlbSkuCisgICAgQVNTRVJUKCFs
YXlvdXRCb3guaXNJbmxpbmVCb3goKSB8fCBsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpOworCisgICAgYXV0byB3aWR0aCA9IFsmXSB7CisgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5
b3V0Qm94LnN0eWxlKCk7CisgICAgICAgIHN3aXRjaCAod2lkdGhUeXBlKSB7CisgICAgICAgIGNh
c2UgV2lkdGhUeXBlOjpOb3JtYWw6CisgICAgICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdp
ZHRoKCk7CisgICAgICAgIGNhc2UgV2lkdGhUeXBlOjpNaW46CisgICAgICAgICAgICByZXR1cm4g
c3R5bGUubG9naWNhbE1pbldpZHRoKCk7CisgICAgICAgIGNhc2UgV2lkdGhUeXBlOjpNYXg6Cisg
ICAgICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbE1heFdpZHRoKCk7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBzdHlsZS5sb2dpY2Fs
V2lkdGgoKTsKKyAgICB9KCk7CisgICAgaWYgKGF1dG8gY29tcHV0ZWRWYWx1ZSA9IHRoaXMtPmNv
bXB1dGVkVmFsdWUod2lkdGgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVkVmFsdWU7CisKKyAgICBpZiAod2lkdGguaXNNaW5Db250ZW50KCkgfHwgd2lkdGgu
aXNNYXhDb250ZW50KCkgfHwgd2lkdGguaXNGaXRDb250ZW50KCkpIHsKKyAgICAgICAgaWYgKCFp
czxDb250YWluZXJCb3g+KGxheW91dEJveCkpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICBhdXRvJiBjb250YWluZXJCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCk7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBzcGxpdHRpbmcgdXAgY29tcHV0ZWRJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIHNvIHRoYXQgd2UgY291bGQgY29tcHV0ZWQgdGhlIG1pbiBh
bmQgbWF4IHZhbHVlcyBzZXBhcmF0ZWx5LgorICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMgPSBbJl0geworICAgICAgICAgICAgaWYgKCFjb250YWluZXJCb3guaGFzSW5GbG93
T3JGbG9hdGluZ0NoaWxkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZvcm1hdHRpbmdDb250
ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwgY29udGFpbmluZ0Jsb2NrV2lk
dGggfTsKKyAgICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3guZXN0YWJsaXNoZXNGb3JtYXR0
aW5nQ29udGV4dCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91
dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5lckJveCk7CisgICAgICAgICAg
ICBpZiAoYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRlLmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKmludHJp
bnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgICAgICAgICByZXR1cm4gTGF5b3V0Q29udGV4dDo6
Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgIH0oKTsKKyAgICAgICAg
aWYgKHdpZHRoLmlzTWluQ29udGVudCgpKQorICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMubWluaW11bTsKKyAgICAgICAgaWYgKHdpZHRoLmlzTWF4Q29udGVudCgp
KQorICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bTsK
KyAgICAgICAgQVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsKKyAgICAgICAgLy8gSWYgdGhl
IGF2YWlsYWJsZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVmaW5pdGUsIGVxdWFsIHRvIG1p
bihtYXgtY29udGVudCBzaXplLAorICAgICAgICAvLyBtYXgobWluLWNvbnRlbnQgc2l6ZSwgc3Ry
ZXRjaC1maXQgc2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRoZSBtYXgtY29udGVudCBzaXpl
IGluIHRoYXQgYXhpcy4KKyAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IHlldCBoYXZlIGluZGVm
aW5pdGUgYXZhaWxhYmxlIHNpemUuCisgICAgICAgIHJldHVybiBzdGQ6Om1pbihpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHMubWluaW11bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKKyAgICB9CisgICAgcmV0dXJuIHsg
fTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRl
ZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKQoreworICAgIGlmIChhdXRvIGNvbXB1dGVkV2lkdGggPSBjb21wdXRlZFdpZHRoVmFsdWUo
bGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Cisg
ICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgICAgIC8vIE5vbi1x
dWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0byBhbmQgbWluLWNvbnRlbnQgYXJlIG5vdCBp
bmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHByb3BlcnR5LgorICAgICAgICBpZiAoc3R5bGUu
Ym94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250ZW50Qm94IHx8IHN0eWxlLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFdpZHRoOworICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKKyAgICAgICAgcmV0dXJuICpjb21wdXRlZFdpZHRoIC0gKGJveEdlb21l
dHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCku
dmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK0xheW91dFVuaXQgRm9y
bWF0dGluZ0dlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNv
bnN0IENvbnRhaW5lckJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290KSBjb25zdAoreworICAgIEFT
U0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgp
KTsKKyAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgfHwgZm9y
bWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpIHx8
IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1RhYmxlQ2VsbCgpKTsKKyAgICBhdXRvIHVzZWRDb250
ZW50SGVpZ2h0ID0gTGF5b3V0VW5pdCB7IH07IAorICAgIGF1dG8gaGFzQ29udGVudCA9IGZvcm1h
dHRpbmdDb250ZXh0Um9vdC5oYXNJbkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKKyAgICAvLyBUaGUg
dXNlZCBoZWlnaHQgb2YgdGhlIGNvbnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBl
cmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRy
ZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCisgICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50
ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7CisgICAgaWYg
KGhhc0NvbnRlbnQgJiYgIXNob3VsZElnbm9yZUNvbnRlbnQpCisgICAgICAgIHVzZWRDb250ZW50
SGVpZ2h0ID0gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGlu
Z0NvbnRleHRSb290LCBjb25zdF9jYXN0PExheW91dFN0YXRlJj4obGF5b3V0U3RhdGUoKSkpLT51
c2VkQ29udGVudEhlaWdodCgpOworICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdodDsKK30KKwor
T3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZhbHVlKGNv
bnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tX
aWR0aCkgY29uc3QKK3sKKyAgICAvLyAgSW4gZ2VuZXJhbCwgdGhlIGNvbXB1dGVkIHZhbHVlIHJl
c29sdmVzIHRoZSBzcGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlIHdpdGhvdXQgbGF5
aW5nIG91dCB0aGUgY29udGVudC4KKyAgICBpZiAoZ2VvbWV0cnlQcm9wZXJ0eS5pc0ZpeGVkKCkg
fHwgZ2VvbWV0cnlQcm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9tZXRyeVByb3BlcnR5LmlzQ2Fs
Y3VsYXRlZCgpKQorICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoZ2VvbWV0cnlQcm9wZXJ0
eSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIHJldHVybiB7IH07Cit9CisKK09wdGlvbmFs
PExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Zml4ZWRWYWx1ZShjb25zdCBMZW5ndGgm
IGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0Cit7CisgICAgaWYgKCFnZW9tZXRyeVByb3BlcnR5Lmlz
Rml4ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGdl
b21ldHJ5UHJvcGVydHkudmFsdWUoKSB9OworfQorCisvLyBodHRwczovL3d3dy53My5vcmcvVFIv
Q1NTMjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVpZ2h0cworLy8gU3BlY2lmaWVzIGEgcGVyY2Vu
dGFnZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQgdmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNh
bGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gn
cyBjb250YWluaW5nIGJsb2NrLgorLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBi
bG9jayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29u
dGVudCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9u
ZWQsCisvLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBpcyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4t
aGVpZ2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1oZWlnaHQnKS4KK09wdGlvbmFsPExheW91dFVu
aXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94JiBsYXlv
dXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QK
K3sKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdodFR5cGU6
Ok1heCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Rm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAorewor
ICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwgSGVpZ2h0VHlwZTo6TWlu
LCBjb250YWluaW5nQmxvY2tIZWlnaHQpOworfQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3Jt
YXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCit7CisgICAgcmV0dXJuIGNvbXB1dGVkV2lk
dGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tXaWR0aCk7
Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRN
YXhXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tX
aWR0aCkKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhU
eXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKK30KKworTGF5b3V0VW5pdCBGb3JtYXR0
aW5nR2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVk
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNh
bENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpOworCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24g
YW5kIHRoZSBuZXh0LCB0aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAob2YgYW4gZWxlbWVudCkg
cmVmZXJzLCByb3VnaGx5LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3VsZCBoYXZlCisg
ICAgLy8gaGFkIGluIHRoZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRoZSBzdGF0aWMg
cG9zaXRpb24gZm9yICd0b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0
aGUgY29udGFpbmluZyBibG9jayB0byB0aGUgdG9wIG1hcmdpbgorICAgIC8vIGVkZ2Ugb2YgYSBo
eXBvdGhldGljYWwgYm94IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhl
IGVsZW1lbnQgaWYgaXRzIHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVlIGhhZCBiZWVuICdzdGF0
aWMnIGFuZCBpdHMgc3BlY2lmaWVkCisgICAgLy8gJ2Zsb2F0JyBoYWQgYmVlbiAnbm9uZScgYW5k
IGl0cyBzcGVjaWZpZWQgJ2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChOb3RlIHRoYXQgZHVlIHRv
IHRoZSBydWxlcyBpbiBzZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVpcmUgYWxzbyBhc3N1bWlu
ZyBhIGRpZmZlcmVudAorICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAnZGlzcGxheScuKSBUaGUg
dmFsdWUgaXMgbmVnYXRpdmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJvdmUgdGhlIGNv
bnRhaW5pbmcgYmxvY2suCisKKyAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJv
eCBvZmZzZXQgZnJvbSB0aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KKyAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgTGF5b3V0VW5pdCB0
b3A7CisgICAgaWYgKGxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSAmJiBsYXlvdXRC
b3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJveCgpKSB7CisgICAgICAg
IC8vIEFkZCBzaWJsaW5nIG9mZnNldAorICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd1NpYmxp
bmcgPSAqbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpOworICAgICAgICBhdXRvJiBw
cmV2aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gocHJldmlvdXNJbkZsb3dTaWJsaW5nLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29u
OjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsKKyAgICAgICAgYXV0byYgZm9ybWF0
dGluZ1N0YXRlID0gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlKCku
Zm9ybWF0dGluZ1N0YXRlRm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZykpOworICAgICAgICBh
dXRvIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94ID0gZm9ybWF0dGluZ1N0YXRlLnVz
ZWRWZXJ0aWNhbE1hcmdpbihwcmV2aW91c0luRmxvd1NpYmxpbmcpOworCisgICAgICAgIHRvcCAr
PSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChwcmV2aW91c0luRmxvd0JveEdlb21ldHJ5KS5i
b3R0b20oKSArIHVzZWRWZXJ0aWNhbE1hcmdpbkZvclByZXZpb3VzQm94Lm5vbkNvbGxhcHNlZFZh
bHVlcy5hZnRlcjsKKyAgICB9IGVsc2UKKyAgICAgICAgdG9wID0gZm9ybWF0dGluZ0NvbnRleHQu
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNj
YXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KS5jb250ZW50Qm94VG9w
KCk7CisKKyAgICAvLyBSZXNvbHZlIHRvcCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFpbmlu
ZyBibG9jay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQg
dGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0g
JmxheW91dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5jZXN0
b3IgPSAmYW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBGb3Jt
YXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21l
dHJ5KTsKKyAgICAgICAgLy8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVyIGJveCB0b3Ag
cG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KKyAg
ICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94R2VvbWV0cnkpOworICAg
ICAgICBBU1NFUlQoIWFuY2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGaXhl
ZFBvc2l0aW9uZWQoKSk7CisgICAgfQorICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBwb3NpdGlvbiBy
ZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyB0byBhYm9s
dXRlbHkgcG9zaXRpb25lZCBib3hlcy4KKyAgICByZXR1cm4gdG9wIC0gdmVydGljYWxDb25zdHJh
aW50cy5sb2dpY2FsVG9wOworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdHZW9tZXRyeTo6c3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmIGxh
eW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWlu
dHMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQo
KSk7CisgICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlv
bmVkIGZvciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGljIHBvc2l0aW9uLgorCisgICAgLy8g
U3RhcnQgd2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhlIHBhcmVudCdz
IGJvcmRlciBib3guCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0
aW5nQ29udGV4dCgpOworICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNv
bjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJveExlZnQoKTsKKwor
ICAgIC8vIFJlc29sdmUgbGVmdCBhbGwgdGhlIHdheSB1cCB0byB0aGUgY29udGFpbmluZyBibG9j
ay4KKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBsYXlvdXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0
aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KKyAgICBmb3IgKGF1dG8qIGFuY2VzdG9yID0gJmxheW91
dEJveC5wYXJlbnQoKTsgYW5jZXN0b3IgIT0gJmNvbnRhaW5pbmdCbG9jazsgYW5jZXN0b3IgPSAm
YW5jZXN0b3ItPmNvbnRhaW5pbmdCbG9jaygpKSB7CisgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmFuY2VzdG9yLCBGb3JtYXR0aW5n
Q29udGV4dDo6RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsK
KyAgICAgICAgLy8gQm94R2VvbWV0cnk6OmxlZnQgaXMgdGhlIGJvcmRlciBib3ggbGVmdCBwb3Np
dGlvbiBpbiBpdHMgY29udGFpbmluZyBibG9jaydzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgICAg
ICBsZWZ0ICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hMZWZ0KGJveEdlb21ldHJ5KTsKKyAgICAg
ICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94LmlzRml4ZWRQ
b3NpdGlvbmVkKCkpOworICAgIH0KKyAgICAvLyBNb3ZlIHRoZSBzdGF0aWMgcG9zaXRpb24gcmVs
YXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lmaWMgdG8gYWJvbHV0
ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCisgICAgcmV0dXJuIGxlZnQgLSBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbExlZnQ7Cit9CisKK0xheW91dFVuaXQgRm9ybWF0dGluZ0dlb21ldHJ5Ojpz
aHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYgZm9ybWF0dGluZ0NvbnRleHRSb290LCBMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29u
dGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdIC0+IHNocmluayB0byBmaXQgLT4gdW5zdXBw
b3J0ZWQgLT4gd2lkdGgoIiA8PCBMYXlvdXRVbml0IHsgfSA8PCAicHgpIGxheW91dEJveDogIiA8
PCAmZm9ybWF0dGluZ0NvbnRleHRSb290IDw8ICIpIik7CisgICAgQVNTRVJUKGZvcm1hdHRpbmdD
b250ZXh0Um9vdC5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpOworCisgICAgLy8gQ2Fs
Y3VsYXRpb24gb2YgdGhlIHNocmluay10by1maXQgd2lkdGggaXMgc2ltaWxhciB0byBjYWxjdWxh
dGluZyB0aGUgd2lkdGggb2YgYSB0YWJsZSBjZWxsIHVzaW5nIHRoZSBhdXRvbWF0aWMgdGFibGUg
bGF5b3V0IGFsZ29yaXRobS4KKyAgICAvLyBSb3VnaGx5OiBjYWxjdWxhdGUgdGhlIHByZWZlcnJl
ZCB3aWR0aCBieSBmb3JtYXR0aW5nIHRoZSBjb250ZW50IHdpdGhvdXQgYnJlYWtpbmcgbGluZXMg
b3RoZXIgdGhhbiB3aGVyZSBleHBsaWNpdCBsaW5lIGJyZWFrcyBvY2N1ciwKKyAgICAvLyBhbmQg
YWxzbyBjYWxjdWxhdGUgdGhlIHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBlLmcuLCBieSB0cnlp
bmcgYWxsIHBvc3NpYmxlIGxpbmUgYnJlYWtzLiBDU1MgMi4yIGRvZXMgbm90IGRlZmluZSB0aGUg
ZXhhY3QgYWxnb3JpdGhtLgorICAgIC8vIFRoaXJkbHksIGZpbmQgdGhlIGF2YWlsYWJsZSB3aWR0
aDogaW4gdGhpcyBjYXNlLCB0aGlzIGlzIHRoZSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBtaW51cyB0aGUgdXNlZCB2YWx1ZXMgb2YgJ21hcmdpbi1sZWZ0JywgJ2JvcmRlci1sZWZ0LXdp
ZHRoJywKKyAgICAvLyAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQnLCAnYm9yZGVyLXJp
Z2h0LXdpZHRoJywgJ21hcmdpbi1yaWdodCcsIGFuZCB0aGUgd2lkdGhzIG9mIGFueSByZWxldmFu
dCBzY3JvbGwgYmFycy4KKworICAgIC8vIFRoZW4gdGhlIHNocmluay10by1maXQgd2lkdGggaXM6
IG1pbihtYXgocHJlZmVycmVkIG1pbmltdW0gd2lkdGgsIGF2YWlsYWJsZSB3aWR0aCksIHByZWZl
cnJlZCB3aWR0aCkuCisgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gRm9ybWF0
dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OworICAgIGF1dG8gaGFz
Q29udGVudCA9IGlzPENvbnRhaW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSAmJiBkb3du
Y2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkuaGFzSW5GbG93T3JGbG9h
dGluZ0NoaWxkKCk7CisgICAgLy8gVGhlIHVzZWQgd2lkdGggb2YgdGhlIGNvbnRhaW5tZW50IGJv
eCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRoZSBi
b3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCisgICAg
YXV0byBzaG91bGRJZ25vcmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6ZUNv
bnRhaW5tZW50Qm94KCk7ICAKKyAgICBpZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3JlQ29u
dGVudCkgeworICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3Jt
YXR0aW5nQ29udGV4dFJvb3QpOworICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGVGb3JSb290
ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVGb3JtYXR0aW5nU3RhdGUocm9vdCk7CisgICAgICAgIGF1
dG8gcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0YXRl
Rm9yUm9vdC5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgIGlmICghcHJlY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKQorICAgICAgICAgICAgaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KHJv
b3QsIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9ICpw
cmVjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgfQorICAgIHJldHVybiBz
dGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2YWls
YWJsZVdpZHRoKSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtKTsKK30KKworVmVy
dGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVy
dGljYWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5pc1JlcGxhY2VkQm94
KCkpOworICAgIEFTU0VSVCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOworCisg
ICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRz
CisgICAgLy8KKyAgICAvLyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVsZW1lbnRzLCB0aGUg
dXNlZCB2YWx1ZXMgb2YgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBzYXRpc2Z5IHRoaXMg
Y29uc3RyYWludDoKKyAgICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdib3JkZXItdG9wLXdp
ZHRoJyArICdwYWRkaW5nLXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJvdHRvbScgKyAnYm9y
ZGVyLWJvdHRvbS13aWR0aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9tJworICAgIC8vID0g
aGVpZ2h0IG9mIGNvbnRhaW5pbmcgYmxvY2sKKworICAgIC8vIElmIGFsbCB0aHJlZSBvZiAndG9w
JywgJ2hlaWdodCcsIGFuZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3AnIHRvIHRoZSBzdGF0
aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93LgorCisgICAgLy8g
SWYgbm9uZSBvZiB0aGUgdGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhl
IGV4dHJhCisgICAgLy8gY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwg
dmFsdWVzLiBJZiBvbmUgb2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyBpcyAnYXV0
bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KKyAgICAvLyBJZiB0aGUgdmFs
dWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciAnYm90dG9tJyBh
bmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisKKyAgICAvLyBPdGhlcndpc2UsIHBpY2sgdGhlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisKKyAgICAvLyAxLiAn
dG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMgbm90ICdhdXRvJywg
dGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAxMC42LjcsCisgICAg
Ly8gICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90
dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8gMi4gJ3RvcCcgYW5kICdib3R0
b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRoZW4gc2V0ICd0b3An
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZvcgorICAgIC8vICAg
ICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ2Jv
dHRvbScKKyAgICAvLyAzLiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdhdXRvJyBhbmQgJ3Rv
cCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50
IHBlciAxMC42LjcsIHNldCAnYXV0bycKKyAgICAvLyAgICAgdmFsdWVzIGZvciAnbWFyZ2luLXRv
cCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdib3R0b20nCisgICAg
Ly8gNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0
bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1i
b3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKKyAgICAvLyA1LiAnaGVpZ2h0JyBpcyAn
YXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhlbiAnYXV0bycgdmFs
dWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc2V0IHRvIDAgYW5k
IHNvbHZlIGZvciAnaGVpZ2h0JworICAgIC8vIDYuICdib3R0b20nIGlzICdhdXRvJywgJ3RvcCcg
YW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAn
bWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2ZSBmb3IgJ2JvdHRv
bScKKworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRl
eHQoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8mIGJv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsK
KyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0aWNhbENvbnN0cmFpbnRzLmxv
Z2ljYWxIZWlnaHQ7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxD
b25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisKKyAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWUo
c3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byBib3R0
b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOworICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdo
dCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVp
Z2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKKyAgICBhdXRvIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJn
aW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIFVzZWRWZXJ0aWNhbE1h
cmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHVzZWRWZXJ0aWNhbE1hcmdpbjsgCisgICAgYXV0byBw
YWRkaW5nVG9wID0gYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0
byBwYWRkaW5nQm90dG9tID0gYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7
CisgICAgYXV0byBib3JkZXJUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKTsKKyAgICBhdXRv
IGJvcmRlckJvdHRvbSA9IGJveEdlb21ldHJ5LmJvcmRlckJvdHRvbSgpOworCisgICAgaWYgKCF0
b3AgJiYgIWhlaWdodCAmJiAhYm90dG9tKQorICAgICAgICB0b3AgPSBzdGF0aWNWZXJ0aWNhbFBv
c2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIHZlcnRpY2FsQ29uc3RyYWlu
dHMpOworCisgICAgaWYgKHRvcCAmJiBoZWlnaHQgJiYgYm90dG9tKSB7CisgICAgICAgIGlmICgh
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgJiYgIWNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIpIHsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgPSBjb250YWlu
aW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0
ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0b20pOworICAgICAgICAgICAg
dXNlZFZlcnRpY2FsTWFyZ2luID0geyBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDIsIG1hcmdpbkJl
Zm9yZUFuZEFmdGVyIC8gMiB9OworICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luLmJlZm9yZSkgeworICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyID0g
KmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXI7CisgICAgICAgICAgICB1c2VkVmVydGljYWxN
YXJnaW4uYmVmb3JlID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1
c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcikgeworICAgICAgICAgICAgdXNlZFZlcnRpY2Fs
TWFyZ2luLmJlZm9yZSA9ICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKKyAgICAgICAg
ICAgIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgq
dG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3Ag
KyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0b20pOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgKmNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLCAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciB9Owor
ICAgICAgICAvLyBPdmVyLWNvbnN0cmFpbmVkPworICAgICAgICBhdXRvIGJveEhlaWdodCA9ICp0
b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCAr
ICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFy
Z2luLmFmdGVyICsgKmJvdHRvbTsKKyAgICAgICAgaWYgKGJveEhlaWdodCAhPSBjb250YWluaW5n
QmxvY2tIZWlnaHQpCisgICAgICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQg
LSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5n
VG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIpOworICAgIH0KKworICAgIGlmICghdG9wICYmICFoZWlnaHQgJiYgYm90
dG9tKSB7CisgICAgICAgIC8vICMxCisgICAgICAgIGhlaWdodCA9IGNvbnRlbnRIZWlnaHRGb3JG
b3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKKyAgICAgICAgdXNlZFZlcnRpY2FsTWFy
Z2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRl
ZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAgICAgICAgdG9wID0gY29udGFp
bmluZ0Jsb2NrSGVpZ2h0IC0gKHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1
c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tKTsgCisgICAgfQorCisgICAgaWYgKCF0
b3AgJiYgIWJvdHRvbSAmJiBoZWlnaHQpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgdG9wID0g
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB2
ZXJ0aWNhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21w
dXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKKyAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsg
cGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNl
ZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAgICB9CisKKyAgICBpZiAoIWhlaWdodCAmJiAhYm90
dG9tICYmIHRvcCkgeworICAgICAgICAvLyAjMworICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVp
Z2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dEJveCk7CisgICAgICAgIHVzZWRWZXJ0
aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwg
Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIGJvdHRv
bSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSAr
IGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7CisgICAgfQorCisgICAg
aWYgKCF0b3AgJiYgaGVpZ2h0ICYmIGJvdHRvbSkgeworICAgICAgICAvLyAjNAorICAgICAgICB1
c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVl
T3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAgICAg
ICB0b3AgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAodXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9y
ZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJv
cmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOworICAgIH0K
KworICAgIGlmICghaGVpZ2h0ICYmIHRvcCAmJiBib3R0b20pIHsKKyAgICAgICAgLy8gIzUKKyAg
ICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9y
ZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsK
KyAgICAgICAgaGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVy
dGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0
b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9tKTsK
KyAgICB9CisKKyAgICBpZiAoIWJvdHRvbSAmJiB0b3AgJiYgaGVpZ2h0KSB7CisgICAgICAgIC8v
ICM2CisgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07CisgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
dXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVp
Z2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlcik7CisgICAgfQorCisgICAgQVNTRVJUKHRvcCk7CisgICAgQVNTRVJUKGJvdHRvbSk7Cisg
ICAgQVNTRVJUKGhlaWdodCk7CisKKyAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFu
Y2VzdG9yLgorICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBp
dCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IHZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbFRvcDsK
KyAgICAqdG9wICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CisgICAgKmJv
dHRvbSArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworCisgICAgTE9HX1dJ
VEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1b
SGVpZ2h0XVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IG5vbi1yZXBsYWNlZCAtPiB0b3AoIiA8PCAq
dG9wIDw8ICJweCkgYm90dG9tKCIgIDw8ICpib3R0b20gPDwgInB4KSBoZWlnaHQoIiA8PCAqaGVp
Z2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgs
ICIgIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIGxheW91dEJveCgiIDw8ICZs
YXlvdXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4geyAqdG9wLCAqYm90dG9tLCB7ICpoZWlnaHQs
IHVzZWRWZXJ0aWNhbE1hcmdpbiB9IH07Cit9CisKK0hvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0
aW5nR2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0
IENvbnRhaW5lckJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworICAgIAor
ICAgIC8vIDEwLjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50
cworICAgIC8vCisgICAgLy8gJ2xlZnQnICsgJ21hcmdpbi1sZWZ0JyArICdib3JkZXItbGVmdC13
aWR0aCcgKyAncGFkZGluZy1sZWZ0JyArICd3aWR0aCcgKyAncGFkZGluZy1yaWdodCcgKyAnYm9y
ZGVyLXJpZ2h0LXdpZHRoJyArICdtYXJnaW4tcmlnaHQnICsgJ3JpZ2h0JworICAgIC8vID0gd2lk
dGggb2YgY29udGFpbmluZyBibG9jaworCisgICAgLy8gSWYgYWxsIHRocmVlIG9mICdsZWZ0Jywg
J3dpZHRoJywgYW5kICdyaWdodCcgYXJlICdhdXRvJzogRmlyc3Qgc2V0IGFueSAnYXV0bycgdmFs
dWVzIGZvciAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLgorICAgIC8vIFRo
ZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hp
bmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInIHNldCAnbGVm
dCcgdG8gdGhlIHN0YXRpYworICAgIC8vIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciB0
aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9u
IGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUgYmVsb3cuCisgICAgLy8KKyAgICAvLyBJZiBub25l
IG9mIHRoZSB0aHJlZSBpcyAnYXV0byc6IElmIGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdp
bi1yaWdodCcgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIGdldCBlcXVhbCB2YWx1ZXMsCisgICAgLy8g
dW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4g
ZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAn
bWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKKyAgICAvLyBzb2x2ZSBm
b3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLiBJZiBvbmUgb2YgJ21hcmdpbi1sZWZ0
JyBvciAnbWFyZ2luLXJpZ2h0JyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhh
dCB2YWx1ZS4KKyAgICAvLyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25v
cmUgdGhlIHZhbHVlIGZvciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5
IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvciAncmlnaHQnCisgICAgLy8gKGlu
IGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKyAg
ICAvLworICAgIC8vIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVm
dCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAsIGFuZCBwaWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxv
d2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAgIC8vCisgICAgLy8gMS4gJ2xlZnQnIGFu
ZCAnd2lkdGgnIGFyZSAnYXV0bycgYW5kICdyaWdodCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUg
d2lkdGggaXMgc2hyaW5rLXRvLWZpdC4gVGhlbiBzb2x2ZSBmb3IgJ2xlZnQnCisgICAgLy8gMi4g
J2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgYW5kICd3aWR0aCcgaXMgbm90ICdhdXRvJywg
dGhlbiBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNo
aW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gCisgICAgLy8gICAgY29udGFpbmluZyBibG9jayBpcyAn
bHRyJyBzZXQgJ2xlZnQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIG90aGVyd2lzZSBzZXQgJ3Jp
Z2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgorICAgIC8vICAgIFRoZW4gc29sdmUgZm9yICds
ZWZ0JyAoaWYgJ2RpcmVjdGlvbiBpcyAncnRsJykgb3IgJ3JpZ2h0JyAoaWYgJ2RpcmVjdGlvbicg
aXMgJ2x0cicpLgorICAgIC8vIDMuICd3aWR0aCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQg
J2xlZnQnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQgLiBU
aGVuIHNvbHZlIGZvciAncmlnaHQnCisgICAgLy8gNC4gJ2xlZnQnIGlzICdhdXRvJywgJ3dpZHRo
JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBmb3IgJ2xlZnQnCisgICAg
Ly8gNS4gJ3dpZHRoJyBpcyAnYXV0bycsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgbm90ICdhdXRv
JywgdGhlbiBzb2x2ZSBmb3IgJ3dpZHRoJworICAgIC8vIDYuICdyaWdodCcgaXMgJ2F1dG8nLCAn
bGVmdCcgYW5kICd3aWR0aCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICdyaWdodCcK
KworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQo
KTsKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAg
ICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2lj
YWxXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisgICAgCisg
ICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTGVmdCgpLCBjb250YWlu
aW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byByaWdodCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9n
aWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIHdpZHRoID0gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cy53aWR0aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tXaWR0aCk7
CisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cyk7CisgICAgVXNlZEhvcml6b250YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJnaW47CisgICAg
YXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsK
KyAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVl
T3IoMCk7CisgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwor
ICAgIGF1dG8gYm9yZGVyUmlnaHQgPSBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpOworICAgIGlm
ICghbGVmdCAmJiAhd2lkdGggJiYgIXJpZ2h0KSB7CisgICAgICAgIC8vIElmIGFsbCB0aHJlZSBv
ZiAnbGVmdCcsICd3aWR0aCcsIGFuZCAncmlnaHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkg
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4K
KyAgICAgICAgLy8gVGhlbiwgaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVt
ZW50IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMg
J2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljCisgICAgICAgIC8vIHBvc2l0aW9uIGFuZCBh
cHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdzsgb3RoZXJ3aXNlLCBzZXQgJ3JpZ2h0JyB0byB0
aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciBvbmUgYmVsb3cuCisgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3Rh
cnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07
CisKKyAgICAgICAgYXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9u
dGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKTsKKyAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAg
ICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByaWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICB9IGVsc2UgaWYg
KGxlZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKKyAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgdGhy
ZWUgaXMgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIGFy
ZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0aGUgZXh0cmEgY29uc3RyYWludCB0
aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVzLAorICAgICAgICAvLyB1bmxlc3Mg
dGhpcyB3b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNoIGNhc2Ugd2hlbiBkaXJlY3Rp
b24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdtYXJnaW4t
bGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAorICAgICAgICAvLyBzb2x2ZSBmb3Ig
J21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLiBJZiBvbmUgb2YgJ21hcmdpbi1sZWZ0JyBv
ciAnbWFyZ2luLXJpZ2h0JyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2
YWx1ZS4KKyAgICAgICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdu
b3JlIHRoZSB2YWx1ZSBmb3IgJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0
eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0JworICAgICAgICAv
LyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVl
LgorICAgICAgICBpZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCAmJiAhY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCkgeworICAgICAgICAgICAgYXV0byBtYXJnaW5TdGFydEFu
ZEVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRp
bmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwor
ICAgICAgICAgICAgaWYgKG1hcmdpblN0YXJ0QW5kRW5kID49IDApCisgICAgICAgICAgICAgICAg
dXNlZEhvcml6b250YWxNYXJnaW4gPSB7IG1hcmdpblN0YXJ0QW5kRW5kIC8gMiwgbWFyZ2luU3Rh
cnRBbmRFbmQgLyAyIH07CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
aXNMZWZ0VG9SaWdodERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCA9IDBfbHU7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gMF9s
dTsKKyAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3
aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCkgeworICAgICAgICAg
ICAgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kID0gKmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5l
bmQ7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9IGNvbnRhaW5pbmdC
bG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsg
cGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAq
cmlnaHQpOworICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
KSB7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCA9ICpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4uc3RhcnQ7CisgICAgICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbi5l
bmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0
ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
dXNlZEhvcml6b250YWxNYXJnaW4gPSB7ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQs
ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kIH07CisgICAgICAgICAgICAvLyBPdmVyY29u
c3RyYWluZWQ/IElnbm9yZSByaWdodCAobGVmdCkuCisgICAgICAgICAgICBpZiAoaXNMZWZ0VG9S
aWdodERpcmVjdGlvbikKKyAgICAgICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgKmxlZnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBm
b3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCisgICAgICAgIHVzZWRI
b3Jpem9udGFsTWFyZ2luID0geyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVP
cigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH07CisgICAgfQor
CisgICAgaWYgKCFsZWZ0ICYmICF3aWR0aCAmJiByaWdodCkgeworICAgICAgICAvLyAjMQorICAg
ICAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lk
dGgnIGFmdGVyIHNldHRpbmcgJ2xlZnQnIChpbiBjYXNlIDEpIHRvIDAKKyAgICAgICAgbGVmdCA9
IExheW91dFVuaXQgeyAwIH07CisgICAgICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgICAgICB3aWR0aCA9IHNocmlua1Rv
Rml0V2lkdGgobGF5b3V0Qm94LCBhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIGxlZnQgPSBjb250
YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCAgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgfSBlbHNlIGlmICghbGVm
dCAmJiAhcmlnaHQgJiYgd2lkdGgpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAgYXV0byBzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZs
b3dQb3NpdGlvbmVkKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAg
aWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgIGxlZnQgPSBzdGF0aWNI
b3Jpem9udGFsUG9zaXRpb247CisgICAgICAgICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaWdo
dCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICAgICAgICAgIGxlZnQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQg
KyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNl
ZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAoIXdpZHRoICYmICFyaWdodCAmJiBsZWZ0KSB7CisgICAgICAgIC8vICMzCisgICAgICAgIC8v
IENhbGN1bGF0ZSB0aGUgYXZhaWxhYmxlIHdpZHRoIGJ5IHNvbHZpbmcgZm9yICd3aWR0aCcgYWZ0
ZXIgc2V0dGluZyAncmlnaHQnIChpbiBjYXNlIDMpIHRvIDAKKyAgICAgICAgcmlnaHQgPSBMYXlv
dXRVbml0IHsgMCB9OworICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFpbmluZ0Js
b2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6
b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdp
ZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpOworICAgICAgICByaWdodCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgfSBlbHNlIGlmICghbGVmdCAmJiB3
aWR0aCAmJiByaWdodCkgeworICAgICAgICAvLyAjNAorICAgICAgICBsZWZ0ID0gY29udGFpbmlu
Z0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgfSBlbHNlIGlmICghd2lkdGggJiYg
bGVmdCAmJiByaWdodCkgeworICAgICAgICAvLyAjNQorICAgICAgICB3aWR0aCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRI
b3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgfSBlbHNlIGlmICghcmlnaHQgJiYg
bGVmdCAmJiB3aWR0aCkgeworICAgICAgICAvLyAjNgorICAgICAgICByaWdodCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3Jk
ZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCk7CisgICAgfQorCisgICAgQVNTRVJUKGxlZnQp
OworICAgIEFTU0VSVChyaWdodCk7CisgICAgQVNTRVJUKHdpZHRoKTsKKworICAgIC8vIEZvciBv
dXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhl
IHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUg
cG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRp
bmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0u
CisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gaG9yaXpvbnRh
bENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OworICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1Bh
ZGRpbmdWZXJ0aWNhbEVkZ2U7CisgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdW
ZXJ0aWNhbEVkZ2U7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXVtXaWR0aF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyBu
b24tcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICpsZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJpZ2h0
IDw8ICJweCkgd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCA8PCAicHgsICIgIDw8IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA8
PCAicHgpIGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4geyAq
bGVmdCwgKnJpZ2h0LCB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxNYXJnaW4gfSB9OworfQorCitW
ZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRWZXJ0
aWNhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAoreworICAgIEFTU0VSVChyZXBs
YWNlZEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CisgICAgQVNTRVJUKHZlcnRpY2FsQ29u
c3RyYWludHMubG9naWNhbEhlaWdodCk7CisKKyAgICAvLyAxMC42LjUgQWJzb2x1dGVseSBwb3Np
dGlvbmVkLCByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gVGhlIHVzZWQgdmFsdWUg
b2YgJ2hlaWdodCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRz
LgorICAgIC8vIElmICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRvbScgaXMgc3BlY2lmaWVk
IGFzICdhdXRvJyBpdHMgdXNlZCB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBydWxlcyBiZWxv
dy4KKyAgICAvLyAxLiBJZiBib3RoICd0b3AnIGFuZCAnYm90dG9tJyBoYXZlIHRoZSB2YWx1ZSAn
YXV0bycsIHJlcGxhY2UgJ3RvcCcgd2l0aCB0aGUgZWxlbWVudCdzIHN0YXRpYyBwb3NpdGlvbi4K
KyAgICAvLyAyLiBJZiAnYm90dG9tJyBpcyAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAn
bWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIHdpdGggJzAnLgorICAgIC8vIDMuIElmIGF0
IHRoaXMgcG9pbnQgYm90aCAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgc3Rp
bGwgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLgorICAgIC8vIDQuIElm
IGF0IHRoaXMgcG9pbnQgdGhlcmUgaXMgb25seSBvbmUgJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBl
cXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KKyAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2
YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdib3R0b20n
IGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0
ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2Vk
Qm94LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5n
ZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWln
aHQgPSAqdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsSGVpZ2h0OworICAgIGF1dG8gY29udGFp
bmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOworCisg
ICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOworICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dp
Y2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGhlaWdodCA9IGlu
bGluZVJlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1
ZXMpLmNvbnRlbnRIZWlnaHQ7CisgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9y
bWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKKyAgICBPcHRpb25hbDxMYXlv
dXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwor
ICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52
YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7
CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKKwor
ICAgIGlmICghdG9wICYmICFib3R0b20pIHsKKyAgICAgICAgLy8gIzEKKyAgICAgICAgdG9wID0g
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMpOworICAgIH0KKworICAgIGlmICghYm90dG9tKSB7CisgICAg
ICAgIC8vICMyCisgICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApOworICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFy
Z2luQmVmb3JlOworICAgIH0KKworICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSAmJiAhdXNlZE1h
cmdpbkFmdGVyKSB7CisgICAgICAgIC8vICMzCisgICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5k
QWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7
CisgICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDI7Cisg
ICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7CisgICAgfQorCisgICAg
Ly8gIzQKKyAgICBpZiAoIXRvcCkKKyAgICAgICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0
IC0gKCp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJvdHRv
bSk7CisKKyAgICBpZiAoIWJvdHRvbSkKKyAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlcik7CisKKyAgICBpZiAoIXVzZWRNYXJnaW5CZWZvcmUpCisgICAgICAgIHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJn
aW5BZnRlciArICpib3R0b20pOworCisgICAgaWYgKCF1c2VkTWFyZ2luQWZ0ZXIpCisgICAgICAg
IHVzZWRNYXJnaW5BZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0b20pOworCisgICAgLy8gIzUKKyAgICBhdXRvIGJv
eEhlaWdodCA9ICp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlciArICpib3R0b207CisgICAgaWYgKGJveEhlaWdodCA+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkKKyAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNl
ZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlcik7IAorCisgICAgLy8gRm9y
IG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0
aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRo
ZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFk
ZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3Rl
bS4KKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNh
bENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7CisgICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRk
aW5nVmVydGljYWxFZGdlOworICAgICpib3R0b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1Zl
cnRpY2FsRWRnZTsKKworICAgIEFTU0VSVCh0b3ApOworICAgIEFTU0VSVChib3R0b20pOworICAg
IEFTU0VSVCh1c2VkTWFyZ2luQmVmb3JlKTsKKyAgICBBU1NFUlQodXNlZE1hcmdpbkFmdGVyKTsK
KyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
W1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gdG9w
KCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIg
PDwgaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgKnVzZWRNYXJnaW5CZWZvcmUgPDwgInB4LCAi
ICA8PCAqdXNlZE1hcmdpbkFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94
IDw8ICIpIik7CisgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBoZWlnaHQsIHsgKnVzZWRN
YXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07Cit9CisKK0hvcml6b250YWxHZW9t
ZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21l
dHJ5KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMm
IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNP
dXRPZkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgLy8gMTAuMy44IEFic29sdXRlbHkgcG9zaXRp
b25lZCwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLyBJbiB0aGlzIGNhc2UsIHNlY3Rpb24gMTAu
My43IGFwcGxpZXMgdXAgdGhyb3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJhaW50IGVxdWF0
aW9uLCBidXQgdGhlIHJlc3Qgb2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQgYnkgdGhlIGZv
bGxvd2luZyBydWxlczoKKyAgICAvLworICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcg
aXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiBJZiAnbWFyZ2lu
LWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzIHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQg
dmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCisgICAgLy8gMS4gSWYgYm90
aCAnbGVmdCcgYW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVuIGlmIHRoZSAn
ZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRp
Yy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLAorICAgIC8vICAgc2V0ICdsZWZ0
JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24nIGlzICdydGwnLCBz
ZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgorICAgIC8vIDIuIElmICdsZWZ0JyBv
ciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFyZ2luLWxlZnQn
IG9yICdtYXJnaW4tcmlnaHQnIHdpdGggJzAnLgorICAgIC8vIDMuIElmIGF0IHRoaXMgcG9pbnQg
Ym90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3RpbGwgJ2F1dG8nLCBz
b2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdv
IG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLAorICAgIC8vICAgdW5sZXNzIHRoaXMgd291
bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gdGhlIGRpcmVjdGlvbiBv
ZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21hcmdpbi1sZWZ0
JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCisgICAgLy8gICBzb2x2ZSBmb3IgJ21hcmdp
bi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgorICAgIC8vIDQuIElmIGF0IHRoaXMgcG9pbnQgdGhl
cmUgaXMgYW4gJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4K
KyAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWlu
ZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yIGVpdGhlciAnbGVmdCcgKGluIGNhc2UgdGhlICdkaXJl
Y3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnKSBvcgorICAg
IC8vICAgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZv
ciB0aGF0IHZhbHVlLgorCisgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3Jt
YXR0aW5nQ29udGV4dCgpOworICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUoKTsK
KyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KHJlcGxhY2VkQm94KTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRh
bENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKKyAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rp
b24gPSByZXBsYWNlZEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKTsKKworICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNh
bExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gcmlnaHQgPSBjb21wdXRl
ZFZhbHVlKHN0eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAg
YXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsK
KyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQ7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkVu
ZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7CisgICAgYXV0byB3aWR0aCA9IGlubGlu
ZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29u
c3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVz
KS5jb250ZW50V2lkdGg7CisgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21ldHJ5LnBhZGRp
bmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGJveEdlb21ldHJ5
LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2Vv
bWV0cnkuYm9yZGVyTGVmdCgpOworICAgIGF1dG8gYm9yZGVyUmlnaHQgPSBib3hHZW9tZXRyeS5i
b3JkZXJSaWdodCgpOworCisgICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgeworICAgICAgICAvLyAj
MQorICAgICAgICBhdXRvIHN0YXRpY0hvcml6b250YWxQb3NpdGlvbiA9IHN0YXRpY0hvcml6b250
YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQorICAgICAg
ICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgfQorCisgICAg
aWYgKCFsZWZ0IHx8ICFyaWdodCkgeworICAgICAgICAvLyAjMgorICAgICAgICB1c2VkTWFyZ2lu
U3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKTsKKyAgICAg
ICAgdXNlZE1hcmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigw
KTsKKyAgICB9CisKKyAgICBpZiAoIXVzZWRNYXJnaW5TdGFydCAmJiAhdXNlZE1hcmdpbkVuZCkg
eworICAgICAgICAvLyAjMworICAgICAgICBhdXRvIG1hcmdpblN0YXJ0QW5kRW5kID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0
aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAgICAgaWYgKG1h
cmdpblN0YXJ0QW5kRW5kID49IDApIHsKKyAgICAgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IG1h
cmdpblN0YXJ0QW5kRW5kIC8gMjsKKyAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSB1c2VkTWFy
Z2luU3RhcnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNMZWZ0VG9SaWdo
dERpcmVjdGlvbikgeworICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5TdGFydCA9IDBfbHU7Cisg
ICAgICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCps
ZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRo
ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICB1c2VkTWFyZ2luRW5kID0gMF9sdTsKKyAgICAgICAgICAg
ICAgICB1c2VkTWFyZ2luU3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyAjNAorICAgIGlmICghbGVmdCkKKyAgICAgICAgbGVmdCA9IGNvbnRh
aW5pbmdCbG9ja1dpZHRoIC0gKCp1c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGlu
Z0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5F
bmQgKyAqcmlnaHQpOworCisgICAgaWYgKCFyaWdodCkKKyAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsg
cGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRN
YXJnaW5FbmQpOworCisgICAgaWYgKCF1c2VkTWFyZ2luU3RhcnQpCisgICAgICAgIHVzZWRNYXJn
aW5TdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBh
ZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFy
Z2luRW5kICsgKnJpZ2h0KTsKKworICAgIGlmICghdXNlZE1hcmdpbkVuZCkKKyAgICAgICAgdXNl
ZE1hcmdpbkVuZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5T
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyAqcmlnaHQpOworCisgICAgYXV0byBib3hXaWR0aCA9ICgqbGVmdCArICp1
c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRp
bmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOworICAgIGlm
IChib3hXaWR0aCA+IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB7CisgICAgICAgIC8vICM1IE92ZXIt
Y29uc3RyYWluZWQ/CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQorICAgICAg
ICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1c2VkTWFyZ2lu
U3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCAr
IGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBsZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKnVzZWRNYXJnaW5TdGFydCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisgICAgfQorCisgICAgQVNTRVJUKGxlZnQpOwor
ICAgIEFTU0VSVChyaWdodCk7CisgICAgQVNTRVJUKHVzZWRNYXJnaW5TdGFydCk7CisgICAgQVNT
RVJUKHVzZWRNYXJnaW5FbmQpOworCisgICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBh
bmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQg
aXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbExl
ZnQ7CisgICAgKmxlZnQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKyAg
ICAqcmlnaHQgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKworICAgIExP
R19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUG9zaXRp
b25dW1dpZHRoXVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IHJlcGxhY2VkIC0+IGxlZnQoIiA8PCAq
bGVmdCA8PCAicHgpIHJpZ2h0KCIgIDw8ICpyaWdodCA8PCAicHgpIHdpZHRoKCIgPDwgd2lkdGgg
PDwgInB4KSBtYXJnaW4oIiA8PCAqdXNlZE1hcmdpblN0YXJ0IDw8ICJweCwgIiAgPDwgKnVzZWRN
YXJnaW5FbmQgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsKKyAg
ICByZXR1cm4geyAqbGVmdCwgKnJpZ2h0LCB7IHdpZHRoLCB7ICp1c2VkTWFyZ2luU3RhcnQsICp1
c2VkTWFyZ2luRW5kIH0gfSB9OworfQorCitDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRp
bmdHZW9tZXRyeTo6Y29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3Qg
SG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAorewor
ICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisgICAgLy8gVE9ETzogVXNl
IGNvbXBsaWNhdGVkLWNhc2UgZm9yIGRvY3VtZW50IHJlbmRlcmVyIGZvciBub3cgKHNlZSBCbG9j
a0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93SGVpZ2h0QW5kTWFyZ2luKS4KKyAgICBBU1NFUlQo
KGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSAmJiBsYXlvdXRCb3guaXNJbkZsb3coKSAmJiAh
bGF5b3V0Qm94LmlzT3ZlcmZsb3dWaXNpYmxlKCkpIHx8IGxheW91dEJveC5pc0lubGluZUJsb2Nr
Qm94KCkgfHwgbGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkgfHwgbGF5b3V0Qm94Lmlz
RG9jdW1lbnRCb3goKSB8fCBsYXlvdXRCb3guaXNUYWJsZUJveCgpKTsKKworICAgIC8vIDEwLjYu
NiBDb21wbGljYXRlZCBjYXNlcworICAgIC8vCisgICAgLy8gQmxvY2stbGV2ZWwsIG5vbi1yZXBs
YWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyB3aGVuICdvdmVyZmxvdycgZG9lcyBub3QgY29t
cHV0ZSB0byAndmlzaWJsZScgKGV4Y2VwdCBpZiB0aGUgJ292ZXJmbG93JyBwcm9wZXJ0eSdzIHZh
bHVlIGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlIHZpZXdwb3J0KS4KKyAgICAvLyAnSW5saW5l
LWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgorICAgIC8vIEZsb2F0aW5nLCBub24tcmVw
bGFjZWQgZWxlbWVudHMuCisgICAgLy8KKyAgICAvLyAxLiBJZiAnbWFyZ2luLXRvcCcsIG9yICdt
YXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCB0aGVpciB1c2VkIHZhbHVlIGlzIDAuCisgICAgLy8g
Mi4gSWYgJ2hlaWdodCcgaXMgJ2F1dG8nLCB0aGUgaGVpZ2h0IGRlcGVuZHMgb24gdGhlIGVsZW1l
bnQncyBkZXNjZW5kYW50cyBwZXIgMTAuNi43LgorCisgICAgYXV0byBoZWlnaHQgPSBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdo
dC52YWx1ZSgpIDogY29tcHV0ZWRIZWlnaHQobGF5b3V0Qm94KTsKKyAgICBhdXRvIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJn
aW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworICAgIC8vICMxCisgICAgYXV0
byB1c2VkVmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKKyAgICAvLyAjMgorICAgIGlmICgh
aGVpZ2h0KSB7CisgICAgICAgIEFTU0VSVChpc0hlaWdodEF1dG8obGF5b3V0Qm94KSk7CisgICAg
ICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpIHx8ICFkb3duY2FzdDxDb250YWlu
ZXJCb3g+KGxheW91dEJveCkuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCkpCisgICAgICAgICAg
ICBoZWlnaHQgPSAwX2x1OworICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNEb2N1bWVudEJv
eCgpICYmICFsYXlvdXRCb3guZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAg
ICAgICAgICBhdXRvJiBkb2N1bWVudEJveCA9IGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0
Qm94KTsKKyAgICAgICAgICAgIGF1dG8gdG9wID0gQm94R2VvbWV0cnk6Om1hcmdpbkJveFJlY3Qo
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqZG9jdW1lbnRCb3guZmlyc3RJbkZs
b3dDaGlsZCgpKSkudG9wKCk7CisgICAgICAgICAgICBhdXRvIGJvdHRvbSA9IEJveEdlb21ldHJ5
OjptYXJnaW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3Vt
ZW50Qm94Lmxhc3RJbkZsb3dDaGlsZCgpKSkuYm90dG9tKCk7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgc3BlY2lhbCAocXVpcms/KSBiZWhhdmlvciBzaW5jZSB0aGUgZG9jdW1lbnQgYm94IGlz
IG5vdCBhIGZvcm1hdHRpbmcgY29udGV4dCByb290IGFuZAorICAgICAgICAgICAgLy8gYWxsIHRo
ZSBmbG9hdCBib3hlcyBlbmQgdXAgYXQgdGhlIElDQiBsZXZlbC4KKyAgICAgICAgICAgIGF1dG8m
IGluaXRpYWxDb250YWluaW5nQmxvY2sgPSBkb2N1bWVudEJveC5mb3JtYXR0aW5nQ29udGV4dFJv
b3QoKTsKKyAgICAgICAgICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0ID0gRmxvYXRpbmdDb250ZXh0
IHsgZm9ybWF0dGluZ0NvbnRleHQoKSwgbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZEZvcm1hdHRp
bmdTdGF0ZShpbml0aWFsQ29udGFpbmluZ0Jsb2NrKS5mbG9hdGluZ1N0YXRlKCkgfTsKKyAgICAg
ICAgICAgIGlmIChhdXRvIGZsb2F0Qm90dG9tID0gZmxvYXRpbmdDb250ZXh0LmJvdHRvbSgpKSB7
CisgICAgICAgICAgICAgICAgYm90dG9tID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oKmZsb2F0Qm90
dG9tLCBib3R0b20pOworICAgICAgICAgICAgICAgIGF1dG8gZmxvYXRUb3AgPSBmbG9hdGluZ0Nv
bnRleHQudG9wKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZsb2F0VG9wKTsKKyAgICAgICAg
ICAgICAgICB0b3AgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PigqZmxvYXRUb3AsIHRvcCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBoZWlnaHQgPSBib3R0b20gLSB0b3A7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSk7CisgICAgICAgICAgICBoZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0
dGluZ0NvbnRleHRSb290KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoaGVpZ2h0KTsKKworICAgIExPR19XSVRIX1NUUkVB
TShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+
IGZsb2F0aW5nIG5vbi1yZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFy
Z2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAi
KSIpOworICAgIHJldHVybiBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIHsgKmhlaWdodCwgdXNlZFZl
cnRpY2FsTWFyZ2luIH07Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmZsb2F0aW5nTm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94
JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKKworICAgIC8vIDEwLjMuNSBGbG9h
dGluZywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyAxLiBJZiAnbWFyZ2lu
LWxlZnQnLCBvciAnbWFyZ2luLXJpZ2h0JyBhcmUgY29tcHV0ZWQgYXMgJ2F1dG8nLCB0aGVpciB1
c2VkIHZhbHVlIGlzICcwJy4KKyAgICAvLyAyLiBJZiAnd2lkdGgnIGlzIGNvbXB1dGVkIGFzICdh
dXRvJywgdGhlIHVzZWQgdmFsdWUgaXMgdGhlICJzaHJpbmstdG8tZml0IiB3aWR0aC4KKworICAg
IGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21w
dXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwor
CisgICAgLy8gIzEKKyAgICBhdXRvIHVzZWRIb3Jpem9udGFsbE1hcmdpbiA9IFVzZWRIb3Jpem9u
dGFsTWFyZ2luIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OworICAgIC8vICMyCisgICAg
YXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7CisgICAgaWYgKCF3aWR0aCkKKyAgICAgICAg
d2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRM
YXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1yZXBsYWNl
ZCAtPiB3aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jpem9udGFs
bE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVuZCA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4gQ29u
dGVudFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4gfTsKK30K
KworQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmZsb2F0aW5nUmVw
bGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNv
bnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBj
b25zdAoreworICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsK
KworICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJworICAgIC8vIHJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVt
ZW50cworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQg
dG8gaW5saW5lIHJlcGxhY2VkIik7CisgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudEhl
aWdodEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIG92
ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3Jt
YXR0aW5nR2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29u
c3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChyZXBsYWNlZEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKKworICAgIC8vIDEwLjMuNiBGbG9hdGluZywgcmVwbGFj
ZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIDEuIElmICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdp
bi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcu
CisgICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZv
ciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgYXV0byBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4gPSBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihyZXBs
YWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKworICAgIExPR19XSVRIX1NUUkVBTShG
b3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZs
b2F0aW5nIHJlcGxhY2VkIC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJlcGxhY2VkIik7CisgICAg
YXV0byB1c2VkTWFyZ2luID0gVXNlZEhvcml6b250YWxNYXJnaW4geyBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52
YWx1ZU9yKDApIH07CisgICAgcmV0dXJuIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFy
Z2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIHsgfSwgeyBvdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcy53aWR0aCwgdXNlZE1hcmdpbiB9KTsKK30KKworVmVydGljYWxHZW9t
ZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91dE9mRmxvd1ZlcnRpY2FsR2VvbWV0cnkoY29uc3Qg
Qm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENv
bnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRz
LCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
KTsKKworICAgIGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJu
IG91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShkb3duY2FzdDxDb250YWluZXJC
b3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKKyAgICByZXR1cm4gb3V0T2ZGbG93UmVwbGFj
ZWRWZXJ0aWNhbEdlb21ldHJ5KGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jp
em9udGFsQ29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyk7Cit9CisKK0hvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91
dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2Fs
Q29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5
b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIGlmICghbGF5b3V0Qm94Lmlz
UmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIG91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpv
bnRhbEdlb21ldHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7CisgICAgcmV0dXJuIG91
dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGRvd25jYXN0PFJlcGxhY2VkQm94Pihs
YXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2FsQ29uc3RyYWludHMsIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKK30KKworQ29udGVudEhlaWdodEFuZE1hcmdpbiBG
b3JtYXR0aW5nR2VvbWV0cnk6OmZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29u
c3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRp
Y2FsVmFsdWVzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0
aW9uZWQoKSk7CisKKyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAg
IHJldHVybiBjb21wbGljYXRlZENhc2VzKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRz
LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworICAgIHJldHVybiBmbG9hdGluZ1JlcGxhY2Vk
Q29udGVudEhlaWdodEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitD
b250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ0NvbnRlbnRX
aWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0
Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBs
YWNlZEJveCgpKQorICAgICAgICByZXR1cm4gZmxvYXRpbmdOb25SZXBsYWNlZENvbnRlbnRXaWR0
aEFuZE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhv
cml6b250YWxWYWx1ZXMpOworICAgIHJldHVybiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudFdpZHRo
QW5kTWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29u
c3RyYWludHMsIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKK30KKworQ29udGVudEhlaWdo
dEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZVJlcGxhY2VkQ29udGVudEhlaWdo
dEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250
YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBPcHRpb25hbDxWZXJ0aWNhbENv
bnN0cmFpbnRzPiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxW
YWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICAvLyAxMC42LjIg
SW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9jay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBp
biBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycgcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFs
IGZsb3cgYW5kIGZsb2F0aW5nIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyAxLiBJ
ZiAnbWFyZ2luLXRvcCcsIG9yICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCB0aGVpciB1c2Vk
IHZhbHVlIGlzIDAuCisgICAgLy8gMi4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZl
IGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFuIGlu
dHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZh
bHVlIG9mICdoZWlnaHQnLgorICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEg
Y29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNp
YyByYXRpbyB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzOgorICAgIC8vICAgICh1
c2VkIHdpZHRoKSAvIChpbnRyaW5zaWMgcmF0aW8pCisgICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiAn
aGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBo
YXMgYW4gaW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhl
IHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcuCisgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0
JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1dCBub25lIG9mIHRoZSBjb25kaXRp
b25zIGFib3ZlIGFyZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgbXVzdCBi
ZSBzZXQgdG8KKyAgICAvLyAgICB0aGUgaGVpZ2h0IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0
aGF0IGhhcyBhIDI6MSByYXRpbywgaGFzIGEgaGVpZ2h0IG5vdCBncmVhdGVyIHRoYW4gMTUwcHgs
IGFuZCBoYXMgYSB3aWR0aCBub3QgZ3JlYXRlciB0aGFuIHRoZSBkZXZpY2Ugd2lkdGguCisKKyAg
ICAvLyAjMQorICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0Nv
bnRleHQoKTsKKyAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgYXV0byB1c2VkVmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJn
aW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZh
bHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAg
IGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3guc3R5bGUoKTsKKworICAgIGF1dG8gaGVpZ2h0ID0g
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94LCB2ZXJ0aWNhbENv
bnN0cmFpbnRzID8gdmVydGljYWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdodCA6IFdURjo6bnVs
bG9wdCk7CisgICAgYXV0byBoZWlnaHRJc0F1dG8gPSAhb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
LmhlaWdodCAmJiBpc0hlaWdodEF1dG8ocmVwbGFjZWRCb3gpOworICAgIGF1dG8gd2lkdGhJc0F1
dG8gPSBzdHlsZS5sb2dpY2FsV2lkdGgoKS5pc0F1dG8oKTsKKworICAgIGlmIChoZWlnaHRJc0F1
dG8gJiYgd2lkdGhJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsK
KyAgICAgICAgLy8gIzIKKyAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVp
Z2h0KCk7CisgICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljUmF0aW8oKSkgeworICAgICAgICAvLyAjMworICAgICAgICBhdXRvIHVzZWRXaWR0aCA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KHJlcGxhY2VkQm94KS5jb250ZW50Qm94
V2lkdGgoKTsKKyAgICAgICAgaGVpZ2h0ID0gdXNlZFdpZHRoIC8gcmVwbGFjZWRCb3guaW50cmlu
c2ljUmF0aW8oKTsKKyAgICB9IGVsc2UgaWYgKGhlaWdodElzQXV0byAmJiByZXBsYWNlZEJveC5o
YXNJbnRyaW5zaWNIZWlnaHQoKSkgeworICAgICAgICAvLyAjNAorICAgICAgICBoZWlnaHQgPSBy
ZXBsYWNlZEJveC5pbnRyaW5zaWNIZWlnaHQoKTsKKyAgICB9IGVsc2UgaWYgKGhlaWdodElzQXV0
bykgeworICAgICAgICAvLyAjNQorICAgICAgICBoZWlnaHQgPSB7IDE1MCB9OworICAgIH0KKwor
ICAgIEFTU0VSVChoZWlnaHQpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250
ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2Vk
IC0+IGhlaWdodCgiIDw8ICpoZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxN
YXJnaW4uYmVmb3JlIDw8ICJweCwgIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPDwgInB4
KSAtPiBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4geyAq
aGVpZ2h0LCB1c2VkVmVydGljYWxNYXJnaW4gfTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2lu
IEZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4o
Y29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWlu
dHMmIGhvcml6b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8VmVydGljYWxDb25zdHJhaW50cz4g
dmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIC8vIDEwLjMuMiBJbmxpbmUsIHJlcGxh
Y2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyBBIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJyBm
b3IgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBiZWNvbWVzIGEgdXNlZCB2YWx1ZSBv
ZiAnMCcuCisgICAgLy8KKyAgICAvLyAxLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhh
dmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4g
aW50cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZh
bHVlIG9mICd3aWR0aCcuCisgICAgLy8KKyAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRo
JyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgaGFz
IG5vIGludHJpbnNpYyB3aWR0aCwgYnV0IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgaGVpZ2h0IGFu
ZCBpbnRyaW5zaWMgcmF0aW87CisgICAgLy8gICAgb3IgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRl
ZCB2YWx1ZSBvZiAnYXV0bycsICdoZWlnaHQnIGhhcyBzb21lIG90aGVyIGNvbXB1dGVkIHZhbHVl
LCBhbmQgdGhlIGVsZW1lbnQgZG9lcyBoYXZlIGFuIGludHJpbnNpYyByYXRpbzsKKyAgICAvLyAg
ICB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXM6ICh1c2VkIGhlaWdodCkgKiAoaW50
cmluc2ljIHJhdGlvKQorICAgIC8vCisgICAgLy8gMy4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcg
Ym90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhhcyBh
biBpbnRyaW5zaWMgcmF0aW8gYnV0IG5vIGludHJpbnNpYyBoZWlnaHQgb3Igd2lkdGgsCisgICAg
Ly8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIHVuZGVmaW5lZCBpbiBDU1Mg
Mi4yLiBIb3dldmVyLCBpdCBpcyBzdWdnZXN0ZWQgdGhhdCwgaWYgdGhlIGNvbnRhaW5pbmcgYmxv
Y2sncyB3aWR0aCBkb2VzIG5vdCBpdHNlbGYgZGVwZW5kIG9uIHRoZSByZXBsYWNlZAorICAgIC8v
ICAgIGVsZW1lbnQncyB3aWR0aCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzIGNh
bGN1bGF0ZWQgZnJvbSB0aGUgY29uc3RyYWludCBlcXVhdGlvbiB1c2VkIGZvciBibG9jay1sZXZl
bCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LgorICAgIC8vCisgICAgLy8g
NC4gT3RoZXJ3aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywg
YW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgd2lkdGgsIHRoZW4gdGhhdCBpbnRyaW5z
aWMgd2lkdGggaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJy4KKyAgICAvLworICAgIC8vIDUu
IE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1
dCBub25lIG9mIHRoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFs
dWUgb2YgJ3dpZHRoJyBiZWNvbWVzIDMwMHB4LgorICAgIC8vICAgIElmIDMwMHB4IGlzIHRvbyB3
aWRlIHRvIGZpdCB0aGUgZGV2aWNlLCBVQXMgc2hvdWxkIHVzZSB0aGUgd2lkdGggb2YgdGhlIGxh
cmdlc3QgcmVjdGFuZ2xlIHRoYXQgaGFzIGEgMjoxIHJhdGlvIGFuZCBmaXRzIHRoZSBkZXZpY2Ug
aW5zdGVhZC4KKworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGlu
Z0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250
YWxDb25zdHJhaW50cyk7CisKKyAgICBhdXRvIHVzZWRNYXJnaW5TdGFydCA9IFsmXSB7CisgICAg
ICAgIGlmIChvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4pCisgICAgICAgICAgICBy
ZXR1cm4gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luLT5zdGFydDsKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpOworICAg
IH07CisKKyAgICBhdXRvIHVzZWRNYXJnaW5FbmQgPSBbJl0geworICAgICAgICBpZiAob3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luKQorICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRk
ZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbi0+ZW5kOworICAgICAgICByZXR1cm4gY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpOworICAgIH07CisKKyAgICBhdXRvIHdp
ZHRoID0gb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcy53aWR0aCA6IGNvbXB1dGVkV2lkdGgocmVwbGFjZWRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOworICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gaXNIZWln
aHRBdXRvKHJlcGxhY2VkQm94KTsKKyAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0KHJl
cGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVydGljYWxDb25zdHJhaW50cy0+bG9n
aWNhbEhlaWdodCA6IFdURjo6bnVsbG9wdCk7CisKKyAgICBpZiAoIXdpZHRoICYmIGhlaWdodElz
QXV0byAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7CisgICAgICAgIC8vICMx
CisgICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKKyAgICB9IGVs
c2UgaWYgKCghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5z
aWNXaWR0aCgpICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hlaWdodCgpICYmIHJlcGxhY2Vk
Qm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpCisgICAgICAgIHx8ICghd2lkdGggJiYgaGVpZ2h0ICYm
IHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpKSB7CisgICAgICAgIC8vICMyCisgICAg
ICAgIHdpZHRoID0gaGVpZ2h0LnZhbHVlT3IocmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0
KCkpICogcmVwbGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsKKyAgICB9IGVsc2UgaWYgKCF3aWR0
aCAmJiBoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljUmF0aW8oKSAmJiAh
cmVwbGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSAmJiAhcmVwbGFjZWRCb3guaGFzSW50cmlu
c2ljSGVpZ2h0KCkpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgLy8gRklYTUU6IHVuZGVmaW5l
ZCBidXQgc3VyZWx5IGRvYWJsZS4KKyAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQo
KTsKKyAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0
aCgpKSB7CisgICAgICAgIC8vICM0CisgICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmlu
c2ljV2lkdGgoKTsKKyAgICB9IGVsc2UgaWYgKCF3aWR0aCkgeworICAgICAgICAvLyAjNQorICAg
ICAgICB3aWR0aCA9IHsgMzAwIH07CisgICAgfQorCisgICAgQVNTRVJUKHdpZHRoKTsKKworICAg
IExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lk
dGhdW01hcmdpbl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgKndpZHRoIDw8ICJw
eCkgbWFyZ2luKCIgPDwgdXNlZE1hcmdpblN0YXJ0KCkgPDwgInB4LCAiIDw8IHVzZWRNYXJnaW5F
bmQoKSA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOworICAg
IHJldHVybiB7ICp3aWR0aCwgeyB1c2VkTWFyZ2luU3RhcnQoKSwgdXNlZE1hcmdpbkVuZCgpIH0g
fTsKK30KKworTGF5b3V0U2l6ZSBGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQ
b3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91
dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7CisKKyAgICAvLyA5LjQuMyBSZWxhdGl2ZSBwb3Np
dGlvbmluZworICAgIC8vCisgICAgLy8gVGhlICd0b3AnIGFuZCAnYm90dG9tJyBwcm9wZXJ0aWVz
IG1vdmUgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnQocykgdXAgb3IgZG93biB3aXRob3V0
IGNoYW5naW5nIHRoZWlyIHNpemUuCisgICAgLy8gVG9wJyBtb3ZlcyB0aGUgYm94ZXMgZG93biwg
YW5kICdib3R0b20nIG1vdmVzIHRoZW0gdXAuIFNpbmNlIGJveGVzIGFyZSBub3Qgc3BsaXQgb3Ig
c3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICd0b3AnIG9yICdib3R0b20nLCB0aGUgdXNlZCB2YWx1
ZXMgYXJlIGFsd2F5czogdG9wID0gLWJvdHRvbS4KKyAgICAvLworICAgIC8vIDEuIElmIGJvdGgg
YXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZXMgYXJlIGJvdGggJzAnLgorICAgIC8vIDIuIElm
IG9uZSBvZiB0aGVtIGlzICdhdXRvJywgaXQgYmVjb21lcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG90
aGVyLgorICAgIC8vIDMuIElmIG5laXRoZXIgaXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVk
IChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAnYm90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1
ZSBvZiAndG9wJykuCisKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNh
bFdpZHRoOworCisgICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3Ao
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKworICAgIGlm
ICghdG9wICYmICFib3R0b20pIHsKKyAgICAgICAgLy8gIzEKKyAgICAgICAgdG9wID0gYm90dG9t
ID0geyAwIH07CisgICAgfSBlbHNlIGlmICghdG9wKSB7CisgICAgICAgIC8vICMyCisgICAgICAg
IHRvcCA9IC0qYm90dG9tOworICAgIH0gZWxzZSBpZiAoIWJvdHRvbSkgeworICAgICAgICAvLyAj
MworICAgICAgICBib3R0b20gPSAtKnRvcDsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyAjNAor
ICAgICAgICBib3R0b20gPSBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgLy8gRm9yIHJlbGF0
aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgJ2xlZnQnIGFuZCAncmlnaHQnIG1vdmUgdGhlIGJv
eChlcykgaG9yaXpvbnRhbGx5LCB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNpemUuCisgICAgLy8g
J0xlZnQnIG1vdmVzIHRoZSBib3hlcyB0byB0aGUgcmlnaHQsIGFuZCAncmlnaHQnIG1vdmVzIHRo
ZW0gdG8gdGhlIGxlZnQuCisgICAgLy8gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJl
dGNoZWQgYXMgYSByZXN1bHQgb2YgJ2xlZnQnIG9yICdyaWdodCcsIHRoZSB1c2VkIHZhbHVlcyBh
cmUgYWx3YXlzOiBsZWZ0ID0gLXJpZ2h0LgorICAgIC8vCisgICAgLy8gMS4gSWYgYm90aCAnbGVm
dCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyAodGhlaXIgaW5pdGlhbCB2YWx1ZXMpLCB0aGUgdXNl
ZCB2YWx1ZXMgYXJlICcwJyAoaS5lLiwgdGhlIGJveGVzIHN0YXkgaW4gdGhlaXIgb3JpZ2luYWwg
cG9zaXRpb24pLgorICAgIC8vIDIuIElmICdsZWZ0JyBpcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVl
IGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAncmlnaHQnIChpLmUuLCB0aGUgYm94ZXMgbW92ZSB0byB0
aGUgbGVmdCBieSB0aGUgdmFsdWUgb2YgJ3JpZ2h0JykuCisgICAgLy8gMy4gSWYgJ3JpZ2h0JyBp
cyBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMgdXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUg
b2YgJ2xlZnQnLgorICAgIC8vIDQuIElmIG5laXRoZXIgJ2xlZnQnIG5vciAncmlnaHQnIGlzICdh
dXRvJywgdGhlIHBvc2l0aW9uIGlzIG92ZXItY29uc3RyYWluZWQsIGFuZCBvbmUgb2YgdGhlbSBo
YXMgdG8gYmUgaWdub3JlZC4KKyAgICAvLyAgICBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsIHRoZSB2YWx1ZSBvZiAnbGVmdCcgd2lu
cyBhbmQgJ3JpZ2h0JyBiZWNvbWVzIC0nbGVmdCcuCisgICAgLy8gICAgSWYgJ2RpcmVjdGlvbicg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcsICdyaWdodCcgd2lucyBhbmQgJ2xlZnQn
IGlzIGlnbm9yZWQuCisKKyAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2lj
YWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIHJpZ2h0ID0gY29tcHV0
ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCisg
ICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgeworICAgICAgICAvLyAjMQorICAgICAgICBsZWZ0ID0g
cmlnaHQgPSB7IDAgfTsKKyAgICB9IGVsc2UgaWYgKCFsZWZ0KSB7CisgICAgICAgIC8vICMyCisg
ICAgICAgIGxlZnQgPSAtKnJpZ2h0OworICAgIH0gZWxzZSBpZiAoIXJpZ2h0KSB7CisgICAgICAg
IC8vICMzCisgICAgICAgIHJpZ2h0ID0gLSpsZWZ0OworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
ICM0CisgICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250
YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKKyAgICAgICAg
aWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICByaWdodCA9IC0qbGVmdDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGVmdCA9IFdURjo6bnVsbG9wdDsKKyAgICB9CisK
KyAgICBBU1NFUlQoIWJvdHRvbSB8fCAqdG9wID09IC0qYm90dG9tKTsKKyAgICBBU1NFUlQoIWxl
ZnQgfHwgKmxlZnQgPT0gLSpyaWdodCk7CisKKyAgICBhdXRvIHRvcFBvc2l0aW9uT2Zmc2V0ID0g
KnRvcDsKKyAgICBhdXRvIGxlZnRQb3NpdGlvbk9mZnNldCA9IGxlZnQudmFsdWVPcigtKnJpZ2h0
KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUG9zaXRpb25dIC0+IHBvc2l0aW9uZWQgaW5mbG93IC0+IHRvcCBvZmZzZXQoIiA8PCB0
b3BQb3NpdGlvbk9mZnNldCA8PCAicHgpIGxlZnQgb2Zmc2V0KCIgPDwgbGVmdFBvc2l0aW9uT2Zm
c2V0IDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOworICAgIHJldHVy
biB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9wUG9zaXRpb25PZmZzZXQgfTsKK30KKworaW5saW5l
IHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3JpdGluZ01vZGUoY29uc3QgQm94JiBsYXlvdXRCb3gp
Cit7CisgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy13cml0aW5nLW1vZGVzLTQvI2xv
Z2ljYWwtZGlyZWN0aW9uLWxheW91dAorICAgIC8vIEZsb3ctcmVsYXRpdmUgZGlyZWN0aW9ucyBh
cmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBvZiB0aGUgYm94LgorICAgIC8vIEZvciBpbmxpbmUtbGV2ZWwgYm94ZXMs
IHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIHBhcmVudCBib3ggaXMgdXNlZCBpbnN0ZWFkLgorICAg
IHJldHVybiBsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpID8gbGF5b3V0Qm94LnBhcmVudCgp
LnN0eWxlKCkud3JpdGluZ01vZGUoKSA6IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHls
ZSgpLndyaXRpbmdNb2RlKCk7Cit9CisKK0VkZ2VzIEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0
ZWRCb3JkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7CisgICAgYXV0byYgc3R5bGUg
PSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRl
eHRMYXlvdXQsIHN0cmVhbSA8PCAiW0JvcmRlcl0gLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRC
b3gpOworICAgIHJldHVybiB7CisgICAgICAgIHsgTGF5b3V0VW5pdChzdHlsZS5ib3JkZXJMZWZ0
V2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpKSB9LAorICAgICAg
ICB7IExheW91dFVuaXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyQm90dG9tV2lkdGgoKSkgfQorICAgIH07Cit9CisKK09wdGlvbmFsPEVkZ2VzPiBGb3Jt
YXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBCb3gmIGxheW91dEJveCwgY29u
c3QgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QKK3sKKyAgICBpZiAoIWxh
eW91dEJveC5pc1BhZGRpbmdBcHBsaWNhYmxlKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbUGFkZGluZ10gLT4g
bGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOworICAgIHJldHVybiBFZGdlcyB7CisgICAgICAg
IHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpIH0sCisgICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ1RvcCgpLCBj
b250YWluaW5nQmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0KKyAgICB9OworfQorCitDb21wdXRlZEhvcml6b250
YWxNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxl
KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50
cy5sb2dpY2FsV2lkdGg7CisgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0
aW5nTW9kZShsYXlvdXRCb3gpKSkKKyAgICAgICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHls
ZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCkgfTsKKyAgICByZXR1cm4geyBj
b21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9
OworfQorCitDb21wdXRlZFZlcnRpY2FsTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Cit7CisgICAgYXV0byYgc3R5
bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKKyAgICBpZiAoaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUodXNlZFdyaXRpbmdNb2RlKGxheW91dEJveCkpKQorICAgICAgICByZXR1cm4g
eyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCks
IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRo
KSB9OworICAgIHJldHVybiB7IGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luTGVmdCgpLCBjb250
YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luUmlnaHQoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpIH07Cit9CisKK0Zvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzIEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0
aChjb25zdCBCb3gmIGxheW91dEJveCwgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgaW50cmluc2ljV2lkdGgpIGNvbnN0Cit7CisgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKKyAgICBhdXRvIG1pbldpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5s
b2dpY2FsTWluV2lkdGgoKSk7CisgICAgYXV0byBtYXhXaWR0aCA9IGZpeGVkVmFsdWUoc3R5bGUu
bG9naWNhbE1heFdpZHRoKCkpOworICAgIGlmICghbWluV2lkdGggJiYgIW1heFdpZHRoKQorICAg
ICAgICByZXR1cm4gaW50cmluc2ljV2lkdGg7CisKKyAgICBpZiAobWF4V2lkdGgpIHsKKyAgICAg
ICAgaW50cmluc2ljV2lkdGgubWluaW11bSA9IHN0ZDo6bWluKCptYXhXaWR0aCwgaW50cmluc2lj
V2lkdGgubWluaW11bSk7CisgICAgICAgIGludHJpbnNpY1dpZHRoLm1heGltdW0gPSBzdGQ6Om1p
bigqbWF4V2lkdGgsIGludHJpbnNpY1dpZHRoLm1heGltdW0pOworICAgIH0KKworICAgIGlmICht
aW5XaWR0aCkgeworICAgICAgICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3RkOjptYXgoKm1p
bldpZHRoLCBpbnRyaW5zaWNXaWR0aC5taW5pbXVtKTsKKyAgICAgICAgaW50cmluc2ljV2lkdGgu
bWF4aW11bSA9IHN0ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWF4aW11bSk7Cisg
ICAgfQorCisgICAgQVNTRVJUKGludHJpbnNpY1dpZHRoLm1pbmltdW0gPD0gaW50cmluc2ljV2lk
dGgubWF4aW11bSk7CisgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOworfQorCitGb3JtYXR0aW5n
Q29udGV4dDo6Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IEZvcm1hdHRpbmdHZW9tZXRy
eTo6Y29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50KGNvbnN0IENvbnRhaW5lckJveCYgY29u
dGFpbmVyQm94KQoreworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChjb250YWluZXJCb3gpOworICAgIHJldHVybiB7CisgICAgICAgIHsg
Ym94R2VvbWV0cnkucGFkZGluZ0JveExlZnQoKSwgYm94R2VvbWV0cnkucGFkZGluZ0JveFdpZHRo
KCkgfSwKKyAgICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94VG9wKCksIGJveEdlb21ldHJ5
LnBhZGRpbmdCb3hIZWlnaHQoKSB9LAorICAgICAgICBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lk
dGgoKSB9OworfQorCitGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50KGNvbnN0
IENvbnRhaW5lckJveCYgY29udGFpbmVyQm94LCBPcHRpb25hbDxGb3JtYXR0aW5nQ29udGV4dDo6
RXNjYXBlUmVhc29uPiBlc2NhcGVSZWFzb24pCit7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5lckJveCwgZXNjYXBlUmVh
c29uKTsKKyAgICByZXR1cm4geyB7IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hMZWZ0KCksIGJveEdl
b21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH0sIHsgYm94R2VvbWV0cnkuY29udGVudEJveFRvcCgp
LCBjb21wdXRlZEhlaWdodChjb250YWluZXJCb3gpIH0gfTsKK30KKworfQorfQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2NkOWMwMTU4OWM5YWEzZmFkMzAz
NWU4NzFlOGQ5MzU4MWNiNjE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaApAQCAtMCwwICsxLDEy
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9GT1JN
QVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgUmVwbGFjZWRCb3g7
CitzdHJ1Y3QgQ29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luOworc3RydWN0IENvbXB1dGVkVmVydGlj
YWxNYXJnaW47CitjbGFzcyBDb250YWluZXJCb3g7CitzdHJ1Y3QgQ29udGVudEhlaWdodEFuZE1h
cmdpbjsKK3N0cnVjdCBDb250ZW50V2lkdGhBbmRNYXJnaW47CitzdHJ1Y3QgRWRnZXM7CitzdHJ1
Y3QgSG9yaXpvbnRhbEdlb21ldHJ5OworY2xhc3MgTGF5b3V0U3RhdGU7CitzdHJ1Y3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXM7CitzdHJ1Y3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzOwor
c3RydWN0IFZlcnRpY2FsR2VvbWV0cnk7CisKKy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBnZW5l
cmljIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcuCitjbGFzcyBGb3JtYXR0aW5nR2VvbWV0cnkgewor
cHVibGljOgorICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShj
b25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAg
SG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gm
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRz
JiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRIZWln
aHRBbmRNYXJnaW4gZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVl
cyYpIGNvbnN0OworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ0NvbnRlbnRXaWR0
aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25z
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOworCisgICAgQ29udGVudEhlaWdodEFuZE1h
cmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0
cmFpbnRzPiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgQ29u
dGVudFdpZHRoQW5kTWFyZ2luIGlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNv
bnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8
VmVydGljYWxDb25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7
CisKKyAgICBMYXlvdXRTaXplIGluRmxvd1Bvc2l0aW9uZWRQb3NpdGlvbk9mZnNldChjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKKworICAgIENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsK
KyAgICBMYXlvdXRVbml0IHNocmlua1RvRml0V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBh
dmFpbGFibGVXaWR0aCk7CisKKyAgICBFZGdlcyBjb21wdXRlZEJvcmRlcihjb25zdCBCb3gmKSBj
b25zdDsKKyAgICBPcHRpb25hbDxFZGdlcz4gY29tcHV0ZWRQYWRkaW5nKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0OworCisgICAgQ29tcHV0ZWRIb3Jp
em9udGFsTWFyZ2luIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBI
b3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKKyAgICBDb21wdXRlZFZlcnRpY2FsTWFyZ2lu
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJikgY29uc3Q7CisKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVl
KGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgY29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gZml4ZWRWYWx1ZShjb25z
dCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHkpIGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gY29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94JiwgT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKKyAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBjb21wdXRlZE1heEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlv
dXRVbml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworCisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNaW5XaWR0aChjb25zdCBCb3gmLCBMYXlv
dXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBj
b21wdXRlZE1heFdpZHRoKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lk
dGgpOworCisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gmLCBGb3JtYXR0aW5nQ29udGV4dDo6SW50
cmluc2ljV2lkdGhDb25zdHJhaW50cykgY29uc3Q7CisKKyAgICBMYXlvdXRVbml0IGNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQ29udGFpbmVyQm94JikgY29uc3Q7
CisKKyAgICBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50
IGNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmKTsKKyAg
ICBGb3JtYXR0aW5nQ29udGV4dDo6Q29uc3RyYWludHNGb3JJbkZsb3dDb250ZW50IGNvbnN0cmFp
bnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmLCBPcHRpb25hbDxGb3JtYXR0
aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uPiA9IFdURjo6bnVsbG9wdCk7CisKKyAgICBPcHRpb25h
bDxMYXlvdXRVbml0PiBjb21wdXRlZEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRV
bml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OworICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkV2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBj
b250YWluaW5nQmxvY2tXaWR0aCk7CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgRm9y
bWF0dGluZ0NvbnRleHQ7CisgICAgRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IEZvcm1hdHRpbmdD
b250ZXh0Jik7CisKKyAgICBjb25zdCBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KKyAgICBMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUoKSB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0
YXRlKCk7IH0KKyAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0OyB9CisKK3ByaXZhdGU6CisgICAg
VmVydGljYWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3Qg
UmVwbGFjZWRCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNh
bENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Cisg
ICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7
CisKKyAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd05vblJlcGxhY2VkVmVydGljYWxHZW9t
ZXRyeShjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBj
b25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JikgY29uc3Q7CisgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxvd05vblJlcGxhY2VkSG9y
aXpvbnRhbEdlb21ldHJ5KGNvbnN0IENvbnRhaW5lckJveCYsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBDb250
ZW50SGVpZ2h0QW5kTWFyZ2luIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7CisgICAgQ29udGVudFdpZHRoQW5kTWFy
Z2luIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcyYpOworCisgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGZsb2F0aW5nTm9uUmVw
bGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIExh
eW91dFVuaXQgc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29u
c3QgQm94JiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OworICAgIExheW91dFVu
aXQgc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBC
b3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKKworICAgIGVudW0gY2xh
c3MgSGVpZ2h0VHlwZSB7IE1pbiwgTWF4LCBOb3JtYWwgfTsKKyAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBjb21wdXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYsIEhlaWdodFR5cGUsIE9wdGlvbmFs
PExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3Q7CisKKyAgICBlbnVtIGNs
YXNzIFdpZHRoVHlwZSB7IE1pbiwgTWF4LCBOb3JtYWwgfTsKKyAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBjb21wdXRlZFdpZHRoVmFsdWUoY29uc3QgQm94JiwgV2lkdGhUeXBlLCBMYXlvdXRVbml0
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKworICAgIGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBt
X2Zvcm1hdHRpbmdDb250ZXh0OworfTsKKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggNWZmYzgwZTFmYmUyYzI5
ZmZhNmI2Nzk0MGI3NDgxMmMzMTNhYzhlNC4uYTIyNzI4ZWRiZTlhMmY1YjVlODRlNzg1YzBkMjE4
ODY3ZGJiZmY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNl
IExheW91dCB7CiAKIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjpCbG9ja0Zvcm1hdHRpbmdHZW9t
ZXRyeShjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBibG9ja0Zvcm1hdHRpbmdDb250ZXh0
KQotICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQpCisgICAgOiBGb3JtYXR0aW5nR2VvbWV0cnkoYmxvY2tGb3JtYXR0aW5nQ29udGV4dCkKIHsK
IH0KIApAQCAtNjgsNyArNjgsNyBAQCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENvbnRlbnRIZWlnaHRBbgogICAgICAgICAv
LyBhbmQgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGJveGVzIGFyZSBjb25zaWRlcmVkIHdpdGhvdXQg
dGhlaXIgb2Zmc2V0KS4gTm90ZSB0aGF0IHRoZSBjaGlsZCBib3ggbWF5IGJlIGFuIGFub255bW91
cyBibG9jayBib3guCiAKICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJv
eCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAgICAgYXV0byBjb21wdXRlZFZlcnRpY2Fs
TWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91
dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKICAgICAgICAgYXV0byBub25Db2xsYXBzZWRN
YXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIudmFsdWVPcigwKSB9OyAKICAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0g
Ym94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVP
cigwKTsKICAgICAgICAgYXV0byBoZWlnaHQgPSBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVp
Z2h0ID8gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodC52YWx1ZSgpIDogY29tcHV0ZWRI
ZWlnaHQobGF5b3V0Qm94KTsKQEAgLTE0OSw3ICsxNDksNyBAQCBDb250ZW50V2lkdGhBbmRNYXJn
aW4gQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRo
QW5kTQogICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKIAogICAgICAgICBhdXRvIHdpZHRoID0gb3ZlcnJpZGRl
bkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0
aCA6IGNvbXB1dGVkV2lkdGgobGF5b3V0Qm94LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAg
ICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9y
aXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAg
IGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21w
dXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwog
ICAgICAgICBVc2VkSG9yaXpvbnRhbE1hcmdpbiB1c2VkSG9yaXpvbnRhbE1hcmdpbjsKICAgICAg
ICAgYXV0byBib3JkZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOwogICAgICAgICBh
dXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCA1YjMyOGY5YzU2YTYzZWQ3
MWIwYzM0OWQwZTQ4MTUyOTljYzJkYTk4Li5hNjRhZDU2YmI1MjhhY2VmZWU5MTVlOTE0ODY2OGRi
MzFiNWJkYmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRy
eS5oCkBAIC0yNywxMyArMjcsMTMgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19D
T05URVhUKQogCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGb3Jt
YXR0aW5nR2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91
dCB7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nIGZv
ciBib3hlcyBwYXJ0aWNpcGF0aW5nIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0LgotY2xh
c3MgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5IHsKK2NsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRp
bmdHZW9tZXRyeSB7CiBwdWJsaWM6CiAgICAgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3Qg
QmxvY2tGb3JtYXR0aW5nQ29udGV4dCYpOwogCkBAIC01Myw3ICs1Myw3IEBAIHByaXZhdGU6CiAg
ICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGluRmxvd05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CiAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGlu
Rmxvd1JlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1
ZXMmKTsKIAotICAgIGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nQ29udGV4dD4oRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsgfQorICAgIGNv
bnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8QmxvY2tGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0dlb21ldHJ5
Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsgfQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0
cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0Zs
ZXhGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4IDE3MWI1Y2ZjMjYxNTUyZGFmOTRjZDIyNjli
YzU5OGU0NzIxODllOTUuLjgzMTk1MGU1ZjI2ZmY2NmQwZjAwNjU1NmU4MGRhODVkNzEyZmI3MGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxl
eC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKIEZs
ZXhGb3JtYXR0aW5nR2VvbWV0cnk6OkZsZXhGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgRmxleEZv
cm1hdHRpbmdDb250ZXh0JiBmbGV4Rm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnkoZmxleEZvcm1hdHRpbmdDb250ZXh0KQorICAgIDogRm9ybWF0dGlu
Z0dlb21ldHJ5KGZsZXhGb3JtYXR0aW5nQ29udGV4dCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxl
eC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggYTdmZTVkODZkYTg1ODhmMjI1YzIwZjAx
OThiMTJjMmFjYjJkNGVhMy4uNjI4YzkzMzUyODJjODEzMjE2YTYyMzFmMTczZGNkZmYyNzlmMjVh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9m
bGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0yNywy
MiArMjcsMjAgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0j
aW5jbHVkZSAiRmxleEZvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250
ZXh0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgIkZvcm1hdHRpbmdH
ZW9tZXRyeS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAog
Ly8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGZsZXgg
aXRlbXMuCi1jbGFzcyBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeSB7CitjbGFzcyBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGlj
IEZvcm1hdHRpbmdHZW9tZXRyeSB7CiBwdWJsaWM6CiAgICAgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eShjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQmKTsKIAogICAgIEZvcm1hdHRpbmdDb250ZXh0
OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoY29u
c3QgQ29udGFpbmVyQm94Jik7CiAKIHByaXZhdGU6Ci0gICAgY29uc3QgRmxleEZvcm1hdHRpbmdD
b250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEZsZXhG
b3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5n
Q29udGV4dCgpKTsgfQorICAgIGNvbnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+
KEZvcm1hdHRpbmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4
IDE4N2RmZjRiZDgyN2MwYjNmZTFmMWQyYmNkNDhhOWI4ODE0YjFkYzguLjczNzNkMWUyYmNmMzI4
ZTdiNWFkNjNlMDcwZTAxZTAxZWVlOTg4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUv
SW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApAQCAtNjY0LDcgKzY2NCw3IEBAIHZvaWQgTGlu
ZUJveEJ1aWxkZXI6OlNpbXBsaWZpZWRWZXJ0aWNhbEFsaWdubWVudDo6YWRqdXN0KGNvbnN0IExp
bmVCb3g6OklubGluZUxlCiB9CiAKIElubGluZUZvcm1hdHRpbmdHZW9tZXRyeTo6SW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeShpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCkKIHsKIH0KIApAQCAtNzA4LDcgKzcwOCw3IEBAIENvbnRlbnRXaWR0aEFuZE1h
cmdpbiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZUJsb2NrQ29udGVudFdpZHRoQW5k
TWFyZ2luCiAgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChmb3JtYXR0aW5nQ29udGV4
dFJvb3QsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOwogCiAgICAgLy8gIzIK
LSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZEhv
cml6b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4oZm9ybWF0dGluZ0NvbnRleHRSb290LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwogCiAgICAgcmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7
ICp3aWR0aCwgeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwX2x1KSwg
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpIH0gfTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggODliZjg3
ZjM0YmFmYTQwNTc4NzhhMmE2YTE5ZTU3Y2NmNjhkODJhMC4uYzZjN2UyZmFmYWRhZjZhNjBhM2Qw
N2Y3M2I2MDA2YjRhMjI5NjY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmgKQEAgLTI3LDEyICsyNywxMiBAQAogCiAjaWYgRU5BQkxFKExBWU9V
VF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKLSNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBu
YW1lc3BhY2UgTGF5b3V0IHsKIAotY2xhc3MgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVi
bGljIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSB7CitjbGFzcyBJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAgICBMaW5l
Qm94IGxpbmVCb3hGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQm
KTsKICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JOZXh0TGluZShjb25zdCBMaW5l
QnVpbGRlcjo6TGluZUNvbnRlbnQmLCBJbmxpbmVMYXlvdXRVbml0IHByZXZpb3VzTGluZUxvZ2lj
YWxCb3R0b20sIGNvbnN0IEZsb2F0aW5nQ29udGV4dCYpIGNvbnN0OwpAQCAtNDQsNyArNDQsNyBA
QCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKICAg
ICBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
KTsKIAotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisgICAgY29u
c3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdHZW9tZXRy
eTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KIAogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9t
ZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxl
L1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAppbmRleCBmYzI5OWQxN2JlOTk1ZTU1YWY2YWIx
Y2FlM2E5OTNjNzU3NDkyOWVjLi40Y2RkMDhiMzU5ZjdjYmZjNDVkMzlkZTg0ODJiZWRjNDdkZjEx
ODdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0
IHsKIAogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNv
bnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRhYmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0
IFRhYmxlR3JpZCYgZ3JpZCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSh0YWJs
ZUZvcm1hdHRpbmdDb250ZXh0KQorICAgIDogRm9ybWF0dGluZ0dlb21ldHJ5KHRhYmxlRm9ybWF0
dGluZ0NvbnRleHQpCiAgICAgLCBtX2dyaWQoZ3JpZCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaAppbmRleCA5NGIxOTZlOTJjMjA5NWZmZWExZDFm
NmNlMmMxMjc1ZTlmNzRkM2YxLi4wZjNkNGZhZWQyNmM1Zjk3ZjQ2Mjc1YmQzNTk1NjE0NTE5NjZj
YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBA
IC0yNywxMiArMjcsMTIgQEAKIAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQogCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5n
R2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAK
LWNsYXNzIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250ZXh0
OjpHZW9tZXRyeSB7CitjbGFzcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3Jt
YXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIExheW91dFVuaXQgY2VsbEhlaWdoKGNvbnN0
IENvbnRhaW5lckJveCYpIGNvbnN0OwogICAgIEVkZ2VzIGNvbXB1dGVkQ2VsbEJvcmRlcihjb25z
dCBUYWJsZUdyaWQ6OkNlbGwmKSBjb25zdDsKQEAgLTQ0LDcgKzQ0LDcgQEAgcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4dDsKICAgICBUYWJsZUZvcm1hdHRp
bmdHZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgVGFibGVHcmlk
Jik7CiAKLSAgICBjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KKyAgICBjb25z
dCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdHZW9tZXRyeTo6
Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KICAgICBjb25zdCBUYWJsZUdyaWQmIG1fZ3JpZDsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMv
dGFibGUvVGFibGVGb3JtYXR0aW5nUXVpcmtzLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oCmluZGV4IGQzMjUx
NWJkZGYyOWVmOGMwMTU3ZjViNTJkNjZjMzU4YjAxODgzZmMuLmFmNjJiMjU4YjliNDU4NzllNWJm
M2NlYTVkZjk4YzRlYjMzYThiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nUXVpcmtzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRp
bmdRdWlya3MuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgY29u
c3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nUXVpcmtzOjpm
b3JtYXR0aW5nQ29udGV4dCgpKTsgfQotICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eSgpOyB9CisgICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5KCk7IH0KIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428758</attachid>
            <date>2021-05-15 18:28:53 -0700</date>
            <delta_ts>2021-05-15 18:55:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225752-20210515182852.patch</filename>
            <type>text/plain</type>
            <size>182743</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmEwM2Q3ZmUwMjk3NWJi
MDQ2MDVjMTAxMjg5YTFiM2RlMGNhOGQ4NC4uMGM0Mzk2MmUxNTk4OTYwOTJmMDI1OWVjOGFiODQ2
MmYyYjk2NTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJhc2UgZm9y
bWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3duIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3NTIKKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0by4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGF5b3V0U3RhdGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmxheW91dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpn
ZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5OjpCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4p
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nR2VvbWV0cnk6OkZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3Jt
YXR0aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6Oklu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4pOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRp
bmdHZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0
dGluZ0dlb21ldHJ5KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxl
L1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nUXVpcmtzOjpnZW9t
ZXRyeSBjb25zdCk6CisKIDIwMjEtMDUtMTUgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdIE1vdmUgdGFibGUgZm9ybWF0dGluZyBnZW9tZXRyeSB0byBpdHMg
b3duIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk5MzEwMDFhZjYzMDFhYjc5YjgyMDBhMTNiMjZh
ODJjM2RkOTUyNzUuLjdmNDEzODUwYTgzYjc0NWVjZDc5ZjZkZGY1YzBhMjcwMGZhYWU3MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBpbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFn
ZW50LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAK
LWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
K2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L0Zvcm1hdHRp
bmdTdGF0ZS5jcHAKIGxheW91dC9MYXlvdXRDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU5ZGY2OTVlNDc3NDQy
MDI1MTI5MDcxZmM5YjE5NTJkNjY0MDllYWIuLjUzZWRmZmI3MzY3YmQwNmJiMWViY2U2YTYyNDhh
OGEyNDQ1YjAxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEzMzMsNiArMTMzMyw3IEBACiAJCTQ2RUZBRjEyMUU1RkI5RjEw
MEU3RjM0QiAvKiBMb3dQb3dlck1vZGVOb3RpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZFRkFGMTAxRTVGQjlFMTAwRTdGMzRCIC8qIExvd1Bv
d2VyTW9kZU5vdGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDZGMDJBMUEyMzczN0Y4MzAwMTA2QTY0IC8qIEV2ZW50TG9vcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwQUJDQTEyMzY3OUFC
MzAwQjQ1MDg1IC8qIEV2ZW50TG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ2RkNCNjE4MUE3MDgyMEUwMEM1QTIxRSAvKiBEaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEMzdCMzc1MTVDMUE3RTEwMDZEQzg5OCAvKiBEaWFnbm9zdGljTG9nZ2luZ0tleXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NzVDODlB
NDI2NTBBQzNDMDBGM0I0NTYgLyogRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NzVDODlBMzI2NTBBQzNCMDBGM0I0NTYg
LyogRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDc4NjM1NjUyNjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0Nzg2MzU2NDI2NTA3QTM3MDBDNUUyRTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0N0M0
RDU3RDI2NTA4QkNCMDBDN0FCMUYgLyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0N0M0RDU3QzI2NTA4QkNB
MDBDN0FCMUYgLyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhD
IC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDdGOTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04MzkwLDYgKzgzOTEsNyBAQAogCQk0NkVGQUYwRjFFNUZCOUUxMDBFN0YzNEIgLyog
TG93UG93ZXJNb2RlTm90aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NkVGQUYxMDFFNUZCOUUxMDBFN0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG93UG93ZXJNb2RlTm90aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOTFCQzkxRkNERDBGRTAwMTU5OUMzIC8q
IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDc1Qzg5QTMyNjUwQUMzQjAwRjNCNDU2IC8qIEZvcm1hdHRpbmdHZW9tZXRy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nR2VvbWV0cnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDc4NjM1NjQyNjUwN0EzNzAwQzVFMkUw
IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ3QzRENTdDMjY1MDhCQ0EwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0N0RBMjY1MDJGMkYw
MDg3OTY4QyAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDAzMCw3ICsxMDAzMiw3IEBACiAJCTZGQjdEMkQ4MjUwRkQ3RUYwMDAyMDdB
QSAvKiBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsZXhGb3Jt
YXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkI3RDJEOTI1
MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RkI3RDJEQTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRp
bmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGV4Rm9ybWF0dGlu
Z1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGQkI4NjA1MjBCNDY0QjYw
MERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGQzNGOTQ1MjUxNjc1NjYwMEE0OUJFQSAvKiBJbmxpbmVMaW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVSdW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZFIC8q
IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1h
dHRpbmdRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1Q0E5MjIy
RTM1OTkzMDBCMTNFMTEgLyogVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI2NDUsNyArMjI2NDcsOCBAQAogCQkJCTZGQzVDQTkxMjJFMzU5MzMwMEIxM0UxMSAv
KiB0YWJsZSAqLywKIAkJCQkxMTVDRkE2OTIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0Nv
bnRleHQuY3BwICovLAogCQkJCTExNUNGQTY4MjA4QUY3RDAwMDFFNjk5MSAvKiBGb3JtYXR0aW5n
Q29udGV4dC5oICovLAotCQkJCTZGQkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcCAqLywKKwkJCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyog
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKKwkJCQk0NzVDODlBMzI2NTBBQzNCMDBGM0I0NTYg
LyogRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCiAJCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNB
IC8qIEZvcm1hdHRpbmdRdWlya3MuY3BwICovLAogCQkJCTZGNTZCNDQ2MjY0NzlFNjEwMEFBRTI1
NyAvKiBGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkpOwpAQCAtMzI1NTQsNiArMzI1NTcsNyBA
QAogCQkJCUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZBMjA4QUY3RDAwMDFFNjk5MSAvKiBG
b3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDc1Qzg5QTQyNjUwQUMzQzAw
RjNCNDU2IC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY1NkI0
NDcyNjQ3OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTExNUNGQTc2MjA4QUZFMzAwMDFFNjk5MSAvKiBGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDU4NGFkMWU2
Y2I1NmI4ZWJkYzEyN2FjMTZjZDEyNDRiY2Y0ZGRjNjMuLjAxODE4MmYyOGFlYmY2YmZkNDg4NTdl
MWQzYWQxMjM1N2MyNmFlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2lu
Y2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3Mu
aCIKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25T
dGF0ZS5oIgpAQCAtMjcxLDYgKzI3MiwxMSBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xs
ZWN0T3V0T2ZGbG93RGVzY2VuZGFudHNJZk5lZWRlZCgpCiAgICAgfQogfQogCitGb3JtYXR0aW5n
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKK30KKwogRm9ybWF0dGluZ1F1aXJrcyBGb3Jt
YXR0aW5nQ29udGV4dDo6cXVpcmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gRm9ybWF0dGluZ1F1
aXJrcygqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYTI1M2ExMWVlNTVlMmZi
ZTk3MGE4YTViMTdhMjcyYTRkM2JlOTY0MS4uYzQwY2Q3NTQ4YzFmMzg0OWYxZGFkMmViYWVjMzg0
MzhkMjUzMmU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsMjEgKzQxLDEyIEBA
IHN0cnVjdCBMZW5ndGg7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94R2VvbWV0cnk7
Ci1jbGFzcyBSZXBsYWNlZEJveDsKLXN0cnVjdCBDb21wdXRlZEhvcml6b250YWxNYXJnaW47Ci1z
dHJ1Y3QgQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbjsKIGNsYXNzIENvbnRhaW5lckJveDsKLXN0cnVj
dCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luOwotc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsK
LXN0cnVjdCBFZGdlczsKK2NsYXNzIEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEZvcm1hdHRp
bmdTdGF0ZTsKIGNsYXNzIEZvcm1hdHRpbmdRdWlya3M7Ci1zdHJ1Y3QgSG9yaXpvbnRhbEdlb21l
dHJ5OwogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7CiBjbGFzcyBMYXlvdXRTdGF0ZTsKLXN0cnVj
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlczsKLXN0cnVjdCBPdmVycmlkZGVuVmVydGljYWxW
YWx1ZXM7Ci1zdHJ1Y3QgVmVydGljYWxHZW9tZXRyeTsKIAogY2xhc3MgRm9ybWF0dGluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwpAQCAt
MTExLDgzICsxMDIsOSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkg
Y29uc3Q7CiAgICAgY29uc3QgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQogCisgICAgRm9ybWF0dGluZ0dlb21ldHJ5
IGdlb21ldHJ5KCkgY29uc3Q7CiAgICAgRm9ybWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsK
IAotICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBnZW5lcmljIHBvc2l0aW9uaW5nIGFuZCBz
aXppbmcuCi0gICAgY2xhc3MgR2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgVmVydGlj
YWxHZW9tZXRyeSBvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBP
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21l
dHJ5IG91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IGZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsK
LSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdp
biBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gm
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFp
bnRzPiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENv
bnRlbnRXaWR0aEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIE9wdGlvbmFs
PFZlcnRpY2FsQ29uc3RyYWludHM+LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYp
OwotCi0gICAgICAgIExheW91dFNpemUgaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGNv
bnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotCi0gICAgICAg
IENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMm
KSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYs
IExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwotCi0gICAgICAgIEVkZ2VzIGNvbXB1dGVkQm9y
ZGVyKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxFZGdlcz4gY29tcHV0ZWRQ
YWRkaW5nKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0
OwotCi0gICAgICAgIENvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0g
ICAgICAgIENvbXB1dGVkVmVydGljYWxNYXJnaW4gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKLQotICAgICAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQ
cm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3Q7Ci0gICAgICAg
IE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVkVmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVBy
b3BlcnR5KSBjb25zdDsKLQotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1p
bkhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tI
ZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiBjb21wdXRlZE1heEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBj
b250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkTWF4V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7
Ci0KLSAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gmLCBJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QoY29uc3QgQ29udGFpbmVyQm94JikgY29uc3Q7Ci0KLSAgICAgICAgQ29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IGNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dChjb25zdCBDb250YWluZXJCb3gmKTsKLSAgICAgICAgQ29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50IGNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmLCBPcHRp
b25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0KTsKLQotICAgICAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBjb21wdXRlZEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgICAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYsIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBmcmllbmQg
Y2xhc3MgRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgICAgIEdlb21ldHJ5KGNvbnN0IEZvcm1hdHRp
bmdDb250ZXh0Jik7Ci0KLSAgICAgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOyB9Ci0gICAg
ICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRl
eHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0OyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2Vk
VmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxv
d1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgVmVydGljYWxHZW9tZXRyeSBv
dXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYs
IGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBIb3Jpem9u
dGFsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3Qg
Q29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ1Jl
cGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsK
LQotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwotCi0gICAgICAgIExheW91dFVu
aXQgc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94
JiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0
IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgZW51bSBj
bGFzcyBIZWlnaHRUeXBlIHsgTWluLCBNYXgsIE5vcm1hbCB9OwotICAgICAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBjb21wdXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYsIEhlaWdodFR5cGUsIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3Q7Ci0KLSAgICAg
ICAgZW51bSBjbGFzcyBXaWR0aFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07Ci0gICAgICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkV2lkdGhWYWx1ZShjb25zdCBCb3gmLCBXaWR0aFR5
cGUsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgICAgIGNvbnN0IEZv
cm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OwotICAgIH07Ci0gICAgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnko
KnRoaXMpOyB9Ci0KIHByb3RlY3RlZDoKICAgICB1c2luZyBMYXlvdXRRdWV1ZSA9IFZlY3Rvcjxj
b25zdCBCb3gqPjsKIApAQCAtMjA4LDExICsxMjUsNiBAQCBwcml2YXRlOgogICAgIEZvcm1hdHRp
bmdTdGF0ZSYgbV9mb3JtYXR0aW5nU3RhdGU7CiB9OwogCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0KQot
ewotfQotCiBpbmxpbmUgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50czo6ZXhwYW5kKExheW91dFVuaXQgaG9yaXpvbnRhbFZhbHVlKQogewogICAgIG1pbmlt
dW0gKz0gaG9yaXpvbnRhbFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjE5NjU3YjhiZTcxOTlh
YTNmZmMyMDZmNTcyMWE3MmNkNjJjODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9G
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtYXR0
aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0K
LSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkZsZXhGb3JtYXR0
aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9h
dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxv
Y2suaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0
byhjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0
aGUgJ2hlaWdodCcgcHJvcGVydHkKLSAgICAvLwotICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNh
bGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gn
cyBjb250YWluaW5nIGJsb2NrLgotICAgIC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9u
IGNvbnRlbnQgaGVpZ2h0KSwKLSAgICAvLyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2VkIGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRv
JyB3YXMgc3BlY2lmaWVkLgotCi0gICAgYXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodC5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoaGVpZ2h0LmlzUGVyY2VudCgpKSB7Ci0gICAgICAgIGlmIChsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcmV0dXJuICFsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5
cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsK
LSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gaGVpZ2h0ID0g
aGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkg
OiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQo
KSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKLSAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVk
KCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQu
aXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRV
bml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKLQotICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0
KSB7Ci0gICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5o
ZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRC
b3gpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBi
b3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRp
bnVhdGlvbiwKLSAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnlt
b3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhl
aWdodC4KLSAgICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5
b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRh
aW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0g
JmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0
ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAq
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewot
ICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWln
aHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKLSAgICAgICAgaWYgKGxh
eW91dEJveC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKLSAg
ICAgICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICByZXR1
cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19
Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBl
LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotewotICAgIC8vIEFwcGxpZXMgdG86
IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJlcGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNo
ZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlvbmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdl
IGRvbid0IGJsb2NraWZ5IHRoZW0pLgotICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94
KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKLQotICAgIGF1dG8gd2lk
dGggPSBbJl0gewotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
ICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFs
OgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBjYXNl
IFdpZHRoVHlwZTo6TWluOgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0
aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWF4OgotICAgICAgICAgICAgcmV0dXJuIHN0
eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgfSgpOwot
ICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUgPSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBj
b250YWluaW5nQmxvY2tXaWR0aCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZFZhbHVlOwotCi0g
ICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpIHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdp
ZHRoLmlzRml0Q29udGVudCgpKSB7Ci0gICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgYXV0byYgY29udGFpbmVy
Qm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVkIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJh
dGVseS4KLSAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKLSAg
ICAgICAgICAgIGlmICghY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGggfTsKLSAgICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3gu
ZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5l
ckJveCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0g
Zm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gKmludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgICAgICAgICByZXR1
cm4gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBs
YXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAg
ICAgIH0oKTsKLSAgICAgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bTsKLSAgICAgICAgaWYgKHdp
ZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMubWF4aW11bTsKLSAgICAgICAgQVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsK
LSAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVm
aW5pdGUsIGVxdWFsIHRvIG1pbihtYXgtY29udGVudCBzaXplLAotICAgICAgICAvLyBtYXgobWlu
LWNvbnRlbnQgc2l6ZSwgc3RyZXRjaC1maXQgc2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRo
ZSBtYXgtY29udGVudCBzaXplIGluIHRoYXQgYXhpcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGRv
bid0IHlldCBoYXZlIGluZGVmaW5pdGUgYXZhaWxhYmxlIHNpemUuCi0gICAgICAgIHJldHVybiBz
dGQ6Om1pbihpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBM
YXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotewotICAgIGlmIChhdXRvIGNvbXB1dGVk
V2lkdGggPSBjb21wdXRlZFdpZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7Ci0gICAgICAgIC8vIE5vbi1xdWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0
byBhbmQgbWluLWNvbnRlbnQgYXJlIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHBy
b3BlcnR5LgotICAgICAgICBpZiAoc3R5bGUuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250
ZW50Qm94IHx8IHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgICAg
IHJldHVybiBjb21wdXRlZFdpZHRoOwotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgcmV0dXJu
ICpjb21wdXRlZFdpZHRoIC0gKGJveEdlb21ldHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdl
b21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVy
biB7IH07Ci19Ci0KLUxheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250
ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9y
bWF0dGluZ0NvbnRleHRSb290KSBjb25zdAotewotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoaXNIZWln
aHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVz
dGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc1RhYmxlQ2VsbCgpKTsKLSAgICBhdXRvIHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5p
dCB7IH07IAotICAgIGF1dG8gaGFzQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJ
bkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAgICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNv
bnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5
b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNv
bnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRS
b290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7Ci0gICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3Vs
ZElnbm9yZUNvbnRlbnQpCi0gICAgICAgIHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4
dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9j
YXN0PExheW91dFN0YXRlJj4obGF5b3V0U3RhdGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOwot
ICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdodDsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYg
Z2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QK
LXsKLSAgICAvLyAgSW4gZ2VuZXJhbCwgdGhlIGNvbXB1dGVkIHZhbHVlIHJlc29sdmVzIHRoZSBz
cGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlIHdpdGhvdXQgbGF5aW5nIG91dCB0aGUg
Y29udGVudC4KLSAgICBpZiAoZ2VvbWV0cnlQcm9wZXJ0eS5pc0ZpeGVkKCkgfHwgZ2VvbWV0cnlQ
cm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9tZXRyeVByb3BlcnR5LmlzQ2FsY3VsYXRlZCgpKQot
ICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoZ2VvbWV0cnlQcm9wZXJ0eSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdl
b21ldHJ5UHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFnZW9tZXRyeVByb3BlcnR5LmlzRml4
ZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGdlb21l
dHJ5UHJvcGVydHkudmFsdWUoKSB9OwotfQotCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NT
MjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVpZ2h0cwotLy8gU3BlY2lmaWVzIGEgcGVyY2VudGFn
ZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQgdmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1
bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBj
b250YWluaW5nIGJsb2NrLgotLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVu
dCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
Ci0vLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBpcyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4taGVp
Z2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1oZWlnaHQnKS4KLU9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94
JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdo
dFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0
VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25z
dCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0KSBjb25zdAotewotICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwg
SGVpZ2h0VHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxM
YXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgo
Y29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCi17
Ci0gICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWlu
LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91
dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkKLXsKLSAgICByZXR1cm4gY29t
cHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKLX0KLQotTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0
YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBj
b25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwot
Ci0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0
aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAob2YgYW4gZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5
LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3VsZCBoYXZlCi0gICAgLy8gaGFkIGluIHRo
ZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0
b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgY29udGFpbmluZyBi
bG9jayB0byB0aGUgdG9wIG1hcmdpbgotICAgIC8vIGVkZ2Ugb2YgYSBoeXBvdGhldGljYWwgYm94
IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRz
IHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVlIGhhZCBiZWVuICdzdGF0aWMnIGFuZCBpdHMgc3Bl
Y2lmaWVkCi0gICAgLy8gJ2Zsb2F0JyBoYWQgYmVlbiAnbm9uZScgYW5kIGl0cyBzcGVjaWZpZWQg
J2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChOb3RlIHRoYXQgZHVlIHRvIHRoZSBydWxlcyBpbiBz
ZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVpcmUgYWxzbyBhc3N1bWluZyBhIGRpZmZlcmVudAot
ICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAnZGlzcGxheScuKSBUaGUgdmFsdWUgaXMgbmVnYXRp
dmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcgYmxvY2su
Ci0KLSAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0
aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRo
aXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgaWYgKGxh
eW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSAmJiBsYXlvdXRCb3gucHJldmlvdXNJbkZs
b3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJveCgpKSB7Ci0gICAgICAgIC8vIEFkZCBzaWJsaW5n
IG9mZnNldAotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94
LnByZXZpb3VzSW5GbG93U2libGluZygpOwotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Jv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocHJldmlvdXNJbkZs
b3dTaWJsaW5nLCBFc2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkp
OwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRp
bmdTdGF0ZT4obGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gocHJldmlvdXNJbkZs
b3dTaWJsaW5nKSk7Ci0gICAgICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNC
b3ggPSBmb3JtYXR0aW5nU3RhdGUudXNlZFZlcnRpY2FsTWFyZ2luKHByZXZpb3VzSW5GbG93U2li
bGluZyk7Ci0KLSAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZp
b3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJl
dmlvdXNCb3gubm9uQ29sbGFwc2VkVmFsdWVzLmFmdGVyOwotICAgIH0gZWxzZQotICAgICAgICB0
b3AgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCks
IEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJv
eFRvcCgpOwotCi0gICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRh
aW5pbmcgYmxvY2suCi0gICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpOwotICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0
ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCi0gICAgZm9yIChhdXRvKiBhbmNlc3Rv
ciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3Rvciwg
RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsKLSAgICAgICAg
Ly8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVyIGJveCB0b3AgcG9zaXRpb24gaW4gaXRz
IGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgdG9wICs9IEJv
eEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94R2VvbWV0cnkpOwotICAgICAgICBBU1NFUlQoIWFu
Y2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7
Ci0gICAgfQotICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUg
cGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25l
ZCBib3hlcy4KLSAgICByZXR1cm4gdG9wIC0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9w
OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9y
aXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0g
ICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGZv
ciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGljIHBvc2l0aW9uLgotCi0gICAgLy8gU3RhcnQg
d2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRl
ciBib3guCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29u
dGV4dCgpOwotICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveC5wYXJlbnQoKSwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxv
d0dlb21ldHJ5KS5jb250ZW50Qm94TGVmdCgpOwotCi0gICAgLy8gUmVzb2x2ZSBsZWZ0IGFsbCB0
aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5nIGJsb2NrLgotICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAvLyBTdGFydCB3aXRoIHRo
ZSBwYXJlbnQgc2luY2Ugd2UgcHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93Lgot
ICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSAmbGF5b3V0Qm94LnBhcmVudCgpOyBhbmNlc3RvciAh
PSAmY29udGFpbmluZ0Jsb2NrOyBhbmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveCgqYW5jZXN0b3IsIEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZs
b3dHZW9tZXRyeSk7Ci0gICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIg
Ym94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5
c3RlbS4KLSAgICAgICAgbGVmdCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9t
ZXRyeSk7Ci0gICAgICAgIEFTU0VSVCghYW5jZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91
dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKLSAgICB9Ci0gICAgLy8gTW92ZSB0aGUgc3RhdGlj
IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNp
ZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgotICAgIHJldHVybiBsZWZ0IC0gaG9y
aXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKLXsKLSAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBz
aHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVkIC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0g
PDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZvcm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOwot
ICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29u
dGV4dCgpKTsKLQotICAgIC8vIENhbGN1bGF0aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRo
IGlzIHNpbWlsYXIgdG8gY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2lu
ZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCi0gICAgLy8gUm91Z2hseTog
Y2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgd2lkdGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3
aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVyIHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVh
a3Mgb2NjdXIsCi0gICAgLy8gYW5kIGFsc28gY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11
bSB3aWR0aCwgZS5nLiwgYnkgdHJ5aW5nIGFsbCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIu
MiBkb2VzIG5vdCBkZWZpbmUgdGhlIGV4YWN0IGFsZ29yaXRobS4KLSAgICAvLyBUaGlyZGx5LCBm
aW5kIHRoZSBhdmFpbGFibGUgd2lkdGg6IGluIHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGgg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbWludXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4t
bGVmdCcsICdib3JkZXItbGVmdC13aWR0aCcsCi0gICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRk
aW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhl
IHdpZHRocyBvZiBhbnkgcmVsZXZhbnQgc2Nyb2xsIGJhcnMuCi0KLSAgICAvLyBUaGVuIHRoZSBz
aHJpbmstdG8tZml0IHdpZHRoIGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBh
dmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQgd2lkdGgpLgotICAgIGF1dG8gaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGF1dG8g
aGFzQ29udGVudCA9IGlzPENvbnRhaW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSAmJiBk
b3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkuaGFzSW5GbG93T3JG
bG9hdGluZ0NoaWxkKCk7Ci0gICAgLy8gVGhlIHVzZWQgd2lkdGggb2YgdGhlIGNvbnRhaW5tZW50
IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRo
ZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0g
ICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6
ZUNvbnRhaW5tZW50Qm94KCk7ICAKLSAgICBpZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3Jl
Q29udGVudCkgewotICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihm
b3JtYXR0aW5nQ29udGV4dFJvb3QpOwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGVGb3JS
b290ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVGb3JtYXR0aW5nU3RhdGUocm9vdCk7Ci0gICAgICAg
IGF1dG8gcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0
YXRlRm9yUm9vdC5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmICghcHJl
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKQotICAgICAgICAgICAgaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KHJvb3QsIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9
ICpwcmVjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfQotICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2
YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtKTsKLX0KLQot
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05v
blJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0
IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAg
IEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOwotICAgIEFTU0VSVCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxI
ZWlnaHQpOwotCi0gICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVs
ZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBz
YXRpc2Z5IHRoaXMgY29uc3RyYWludDoKLSAgICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdi
b3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5nLXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJv
dHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9t
JwotICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRhaW5pbmcgYmxvY2sKLQotICAgIC8vIElmIGFsbCB0
aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFuZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3An
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93
LgotCi0gICAgLy8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhCi0gICAgLy8gY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lu
cyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUgb2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90
dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAv
LyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0KLSAgICAvLyBPdGhlcndpc2Us
IHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0K
LSAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMg
bm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAx
MC42LjcsCi0gICAgLy8gICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCi0gICAgLy8gMi4gJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRo
ZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZv
cgotICAgIC8vICAgICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBz
b2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyAzLiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdh
dXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9u
IHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNldCAnYXV0bycKLSAgICAvLyAgICAgdmFsdWVzIGZv
ciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdi
b3R0b20nCi0gICAgLy8gNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAvLyA1LiAn
aGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhl
biAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUg
c2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0JwotICAgIC8vIDYuICdib3R0b20nIGlzICdh
dXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycg
dmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2
ZSBmb3IgJ2JvdHRvbScKLQotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9y
bWF0dGluZ0NvbnRleHQoKTsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwot
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0aWNhbENv
bnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0KLSAgICBhdXRvIHRvcCA9IGNv
bXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0g
ICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBh
dXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgVXNlZFZlcnRpY2Fs
TWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgdXNlZFZlcnRpY2FsTWFyZ2luOyAKLSAgICBhdXRv
IHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICBh
dXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigw
KTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpOwotICAgIGF1
dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7Ci0KLSAgICBpZiAo
IXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20pCi0gICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2Fs
UG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJh
aW50cyk7Ci0KLSAgICBpZiAodG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgaWYg
KCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlcikgewotICAgICAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWln
aHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgICAg
ICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2lu
QmVmb3JlQW5kQWZ0ZXIgLyAyIH07Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYmVmb3JlKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIg
PSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcjsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRv
cCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOwotICAgICAgICB9IGVsc2UgaWYg
KCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGlj
YWxNYXJnaW4uYmVmb3JlID0gKmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOwotICAgICAg
ICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0g
KCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1Rv
cCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUsICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07
Ci0gICAgICAgIC8vIE92ZXItY29uc3RyYWluZWQ/Ci0gICAgICAgIGF1dG8gYm94SGVpZ2h0ID0g
KnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxN
YXJnaW4uYWZ0ZXIgKyAqYm90dG9tOwotICAgICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5p
bmdCbG9ja0hlaWdodCkKLSAgICAgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0
aWNhbE1hcmdpbi5hZnRlcik7Ci0gICAgfQotCi0gICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBi
b3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOwotICAgICAgICB1c2VkVmVydGljYWxN
YXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICB0b3AgPSBjb250
YWluaW5nQmxvY2tIZWlnaHQgLSAodXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRv
cCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOyAKLSAgICB9Ci0KLSAgICBpZiAo
IXRvcCAmJiAhYm90dG9tICYmIGhlaWdodCkgewotICAgICAgICAvLyAjMgotICAgICAgICB0b3Ag
PSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxv
Y2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1
c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwotICAgIH0KLQotICAgIGlmICghaGVpZ2h0ICYmICFi
b3R0b20gJiYgdG9wKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGhlaWdodCA9IGNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKLSAgICAgICAgdXNlZFZl
cnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90
dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4u
YmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXRvcCAmJiBoZWlnaHQgJiYgYm90dG9tKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAg
IHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFs
dWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAg
ICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVm
b3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsg
Ym9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAg
fQotCi0gICAgaWYgKCFoZWlnaHQgJiYgdG9wICYmIGJvdHRvbSkgewotICAgICAgICAvLyAjNQot
ICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVm
b3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9
OwotICAgICAgICBoZWlnaHQgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20p
OwotICAgIH0KLQotICAgIGlmICghYm90dG9tICYmIHRvcCAmJiBoZWlnaHQpIHsKLSAgICAgICAg
Ly8gIzYKLSAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVl
T3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3Ag
KyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpo
ZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodG9wKTsKLSAgICBBU1NFUlQoYm90dG9tKTsK
LSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0
aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUg
YW5jZXN0b3IuCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBp
biB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0
IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5n
QmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9w
OwotICAgICp0b3AgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLSAgICAq
Ym90dG9tICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9u
XVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8
ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpo
ZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJw
eCwgIiAgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwg
JmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdo
dCwgdXNlZFZlcnRpY2FsTWFyZ2luIH0gfTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2Vv
bWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91
dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSk7Ci0gICAgCi0gICAgLy8gMTAuMy43IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2Jv
cmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJp
Z2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCi0g
ICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2NrCi0KLSAgICAvLyBJZiBhbGwgdGhyZWUg
b2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAu
Ci0gICAgLy8gVGhlbiwgaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50
IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0
cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljCi0gICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1
bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0
aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KLSAgICAvLwotICAg
IC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQn
IGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIg
dGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVl
cywKLSAgICAvLyB1bmxlc3MgdGhpcyB3b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNo
IGNhc2Ugd2hlbiBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdy
dGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAotICAg
IC8vIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAn
bWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0
aW9uIGZvciB0aGF0IHZhbHVlLgotICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3Ry
YWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlv
bicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcK
LSAgICAvLyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0
IHZhbHVlLgotICAgIC8vCi0gICAgLy8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3Ig
J21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0gICAgLy8KLSAgICAvLyAx
LiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8n
LCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcK
LSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBu
b3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVu
dCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKLSAgICAvLyAgICBjb250YWluaW5n
IGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3
aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8gICAgVGhlbiBz
b2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAn
ZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUg
J2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5r
LXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKLSAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1
dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAn
bGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCi0gICAgLy8gNi4gJ3JpZ2h0JyBp
cyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBm
b3IgJ3JpZ2h0JwotCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0
aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbFdpZHRoOwotICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKLSAgICAKLSAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8g
d2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOwotICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAg
IGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7
Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1
ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsK
LSAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICBp
ZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdodCkgewotICAgICAgICAvLyBJZiBhbGwgdGhyZWUg
b2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAu
Ci0gICAgICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxl
bWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlz
ICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYwotICAgICAgICAvLyBwb3NpdGlvbiBhbmQg
YXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8g
dGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgotICAg
ICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9
OwotCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpv
bnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQotICAgICAg
ICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlm
IChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7Ci0gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHRo
cmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBh
cmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKLSAgICAgICAgLy8gdW5sZXNz
IHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gZGlyZWN0
aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2lu
LWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKLSAgICAgICAgLy8gc29sdmUgZm9y
ICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdtYXJnaW4tbGVmdCcg
b3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQg
dmFsdWUuCi0gICAgICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGln
bm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVy
dHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAgICAg
Ly8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1
ZS4KLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRB
bmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsK
LSAgICAgICAgICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKQotICAgICAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBtYXJnaW5TdGFydEFuZEVuZCAvIDIsIG1hcmdpblN0
YXJ0QW5kRW5kIC8gMiB9OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1OwotICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsg
cGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IDBf
bHU7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAq
d2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCArICpyaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQpIHsKLSAgICAgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
ZW5kOwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCAr
IHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsg
KnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCkgewotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0OwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdo
dCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OwotICAgICAgICAgICAgLy8gT3ZlcmNv
bnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxlZnQpLgotICAgICAgICAgICAgaWYgKGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArICpsZWZ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMg
Zm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAsIGFuZCBwaWNrIHRoZSBv
bmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgotICAgICAgICB1c2Vk
SG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVl
T3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIH0K
LQotICAgIGlmICghbGVmdCAmJiAhd2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzEKLSAg
ICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dp
ZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAoaW4gY2FzZSAxKSB0byAwCi0gICAgICAgIGxlZnQg
PSBMYXlvdXRVbml0IHsgMCB9OwotICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNl
ZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtU
b0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpOwotICAgICAgICBsZWZ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgICsgYm9yZGVyUmlnaHQg
KyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIWxl
ZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGF1dG8gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAg
IGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBsZWZ0ID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmln
aHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247Ci0gICAgICAgICAgICBsZWZ0ID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0
ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVmdCkgewotICAgICAgICAvLyAjMwotICAgICAgICAv
LyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFm
dGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCi0gICAgICAgIHJpZ2h0ID0gTGF5
b3V0VW5pdCB7IDAgfTsKLSAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdC
bG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jp
em9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRX
aWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYg
d2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzQKLSAgICAgICAgbGVmdCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoICYm
IGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgd2lkdGggPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0ICYm
IGxlZnQgJiYgd2lkdGgpIHsKLSAgICAgICAgLy8gIzYKLSAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgIH0KLQotICAgIEFTU0VSVChsZWZ0
KTsKLSAgICBBU1NFUlQocmlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCk7Ci0KLSAgICAvLyBGb3Ig
b3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRo
ZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRk
aW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVt
LgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250
YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQ
YWRkaW5nVmVydGljYWxFZGdlOwotICAgICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5n
VmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5
b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cg
bm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAqbGVmdCA8PCAicHgpIHJpZ2h0KCIgIDw8ICpyaWdo
dCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAiICA8PCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQg
PDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsg
KmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsTWFyZ2luIH0gfTsKLX0KLQot
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAgICBB
U1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh2
ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOwotCi0gICAgLy8gMTAuNi41IEFic29s
dXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIFRoZSB1
c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KLSAgICAvLyBJZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlz
IHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUg
cnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0
aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMg
cG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2JvdHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAn
YXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyB3aXRoICcwJy4KLSAgICAv
LyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRv
bScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KLSAg
ICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBz
b2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgLy8gNS4gSWYgYXQgdGhpcyBw
b2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0KLSAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byYgc3R5bGUg
PSByZXBsYWNlZEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpOwotICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodDsKLSAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKLQotICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUo
c3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBo
ZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKLSAgICBPcHRpb25hbDxMYXlv
dXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwot
ICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwotICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52
YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7
Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKLQot
ICAgIGlmICghdG9wICYmICFib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0g
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAgIH0KLQotICAgIGlmICghYm90dG9tKSB7Ci0gICAg
ICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApOwotICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFy
Z2luQmVmb3JlOwotICAgIH0KLQotICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSAmJiAhdXNlZE1h
cmdpbkFmdGVyKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5k
QWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7
Ci0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDI7Ci0g
ICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7Ci0gICAgfQotCi0gICAg
Ly8gIzQKLSAgICBpZiAoIXRvcCkKLSAgICAgICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0
IC0gKCp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJvdHRv
bSk7Ci0KLSAgICBpZiAoIWJvdHRvbSkKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlcik7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5CZWZvcmUpCi0gICAgICAgIHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJn
aW5BZnRlciArICpib3R0b20pOwotCi0gICAgaWYgKCF1c2VkTWFyZ2luQWZ0ZXIpCi0gICAgICAg
IHVzZWRNYXJnaW5BZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0b20pOwotCi0gICAgLy8gIzUKLSAgICBhdXRvIGJv
eEhlaWdodCA9ICp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlciArICpib3R0b207Ci0gICAgaWYgKGJveEhlaWdodCA+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNl
ZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlcik7IAotCi0gICAgLy8gRm9y
IG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0
aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNlc3Rvci4KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRo
ZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFk
ZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3Rl
bS4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNh
bENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci0gICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRk
aW5nVmVydGljYWxFZGdlOwotICAgICpib3R0b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1Zl
cnRpY2FsRWRnZTsKLQotICAgIEFTU0VSVCh0b3ApOwotICAgIEFTU0VSVChib3R0b20pOwotICAg
IEFTU0VSVCh1c2VkTWFyZ2luQmVmb3JlKTsKLSAgICBBU1NFUlQodXNlZE1hcmdpbkFmdGVyKTsK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
W1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gdG9w
KCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIg
PDwgaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgKnVzZWRNYXJnaW5CZWZvcmUgPDwgInB4LCAi
ICA8PCAqdXNlZE1hcmdpbkFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94
IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBoZWlnaHQsIHsgKnVzZWRN
YXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07Ci19Ci0KLUhvcml6b250YWxHZW9t
ZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpv
bnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQocmVwbGFj
ZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgLy8gMTAuMy44IEFic29sdXRl
bHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLyBJbiB0aGlzIGNhc2UsIHNl
Y3Rpb24gMTAuMy43IGFwcGxpZXMgdXAgdGhyb3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJh
aW50IGVxdWF0aW9uLCBidXQgdGhlIHJlc3Qgb2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQg
YnkgdGhlIGZvbGxvd2luZyBydWxlczoKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9m
ICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiBJ
ZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzIHNwZWNpZmllZCBhcyAnYXV0bycg
aXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8g
MS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVu
IGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcg
dGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLAotICAgIC8vICAg
c2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24nIGlz
ICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgotICAgIC8vIDIuIElm
ICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFy
Z2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHdpdGggJzAnLgotICAgIC8vIDMuIElmIGF0IHRo
aXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3RpbGwg
J2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhh
dCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLAotICAgIC8vICAgdW5sZXNz
IHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21h
cmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCi0gICAgLy8gICBzb2x2ZSBm
b3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgotICAgIC8vIDQuIElmIGF0IHRoaXMg
cG9pbnQgdGhlcmUgaXMgYW4gJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhh
dCB2YWx1ZS4KLSAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXIt
Y29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yIGVpdGhlciAnbGVmdCcgKGluIGNhc2Ug
dGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwn
KSBvcgotICAgIC8vICAgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5k
IHNvbHZlIGZvciB0aGF0IHZhbHVlLgotCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3gu
c3R5bGUoKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21l
dHJ5Rm9yQm94KHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBhdXRvIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24gPSByZXBsYWNlZEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5
bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQg
PSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0
aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwot
ICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5k
ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKLSAgICBhdXRvIHdpZHRoID0gaW5saW5l
UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
LmNvbnRlbnRXaWR0aDsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGlu
Z0xlZnQoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnku
cGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9t
ZXRyeS5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJv
cmRlclJpZ2h0KCk7Ci0KLSAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMx
Ci0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKTsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAg
ICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByaWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlZnQgfHwgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5T
dGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOwotICAgICAg
ICB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
OwotICAgIH0KLQotICAgIGlmICghdXNlZE1hcmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7
Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRo
ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwotICAgICAgICBpZiAobWFy
Z2luU3RhcnRBbmRFbmQgPj0gMCkgewotICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFy
Z2luU3RhcnRBbmRFbmQgLyAyOwotICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJn
aW5TdGFydDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKLSAg
ICAgICAgICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxl
ZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGgg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSAwX2x1OwotICAgICAgICAgICAg
ICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vICM0Ci0gICAgaWYgKCFsZWZ0KQotICAgICAgICBsZWZ0ID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAoKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVu
ZCArICpyaWdodCk7Ci0KLSAgICBpZiAoIXJpZ2h0KQotICAgICAgICByaWdodCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1h
cmdpbkVuZCk7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5TdGFydCkKLSAgICAgICAgdXNlZE1hcmdp
blN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFk
ZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJn
aW5FbmQgKyAqcmlnaHQpOwotCi0gICAgaWYgKCF1c2VkTWFyZ2luRW5kKQotICAgICAgICB1c2Vk
TWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBi
b3JkZXJSaWdodCArICpyaWdodCk7Ci0KLSAgICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVz
ZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7Ci0gICAgaWYg
KGJveFdpZHRoID4gY29udGFpbmluZ0Jsb2NrV2lkdGgpIHsKLSAgICAgICAgLy8gIzUgT3Zlci1j
b25zdHJhaW5lZD8KLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAg
ICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5T
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
ICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobGVmdCk7Ci0g
ICAgQVNTRVJUKHJpZ2h0KTsKLSAgICBBU1NFUlQodXNlZE1hcmdpblN0YXJ0KTsKLSAgICBBU1NF
UlQodXNlZE1hcmdpbkVuZCk7Ci0KLSAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFu
Y2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBp
dCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVm
dDsKLSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAg
ICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlv
bl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICps
ZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJpZ2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8
PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFyZ2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1h
cmdpbkVuZCA8PCAicHgpIGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAg
IHJldHVybiB7ICpsZWZ0LCAqcmlnaHQsIHsgd2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVz
ZWRNYXJnaW5FbmQgfSB9IH07Ci19Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAvLyBU
T0RPOiBVc2UgY29tcGxpY2F0ZWQtY2FzZSBmb3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAo
c2VlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJn
aW4pLgotICAgIEFTU0VSVCgobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJv
eC5pc0luRmxvdygpICYmICFsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0
Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkp
OwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCi0gICAgLy8KLSAgICAvLyBCbG9j
ay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJm
bG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZs
b3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQp
LgotICAgIC8vICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgLy8g
RmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KLSAgICAvLwotICAgIC8vIDEuIElmICdt
YXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFs
dWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVw
ZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2NlbmRhbnRzIHBlciAxMC42LjcuCi0KLSAgICBhdXRv
IGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwot
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAvLyAjMQot
ICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xs
YXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCi0gICAgLy8gIzIKLSAg
ICBpZiAoIWhlaWdodCkgewotICAgICAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJveCkp
OwotICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAg
ICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKLSAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzRG9j
dW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkg
ewotICAgICAgICAgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+
KGxheW91dEJveCk7Ci0gICAgICAgICAgICBhdXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJnaW5C
b3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94LmZp
cnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOwotICAgICAgICAgICAgYXV0byBib3R0b20gPSBCb3hH
ZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hpbGQoKSkpLmJvdHRvbSgpOwotICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJrPykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3VtZW50
IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCBhbmQKLSAgICAgICAgICAgIC8v
IGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVwIGF0IHRoZSBJQ0IgbGV2ZWwuCi0gICAgICAgICAg
ICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGluZ0Nv
bnRleHRSb290KCk7Ci0gICAgICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5n
Q29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRG
b3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRhaW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgpIH07
Ci0gICAgICAgICAgICBpZiAoYXV0byBmbG9hdEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5ib3R0
b20oKSkgewotICAgICAgICAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KCpm
bG9hdEJvdHRvbSwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0gZmxv
YXRpbmdDb250ZXh0LnRvcCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7Ci0g
ICAgICAgICAgICAgICAgdG9wID0gc3RkOjptaW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0b3Ap
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hlc0Zv
cm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGhlaWdodCk7Ci0KLSAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFy
Z2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFjZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8PCAi
cHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IHVz
ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRC
b3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWlnaHQs
IHVzZWRWZXJ0aWNhbE1hcmdpbiB9OwotfQotCi1Db250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0KLSAg
ICAvLyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAg
Ly8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFz
ICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0gICAgLy8gMi4gSWYgJ3dpZHRoJyBp
cyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZp
dCIgd2lkdGguCi0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOwotCi0gICAgLy8gIzEKLSAgICBhdXRvIHVzZWRIb3Jpem9udGFsbE1hcmdpbiA9IFVzZWRI
b3Jpem9udGFsTWFyZ2luIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3Io
MCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIC8vICMy
Ci0gICAgYXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAg
ICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0Nv
bnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1y
ZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jp
em9udGFsbE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVu
ZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1
cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4g
fTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJwotICAgIC8vIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGlu
ZyByZXBsYWNlZCBlbGVtZW50cwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4
dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2Vk
IC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJlcGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJl
cGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewot
ICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8v
IDEwLjMuNiBGbG9hdGluZywgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElm
ICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywg
dGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0gICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAg
YXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRd
W01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVw
bGFjZWQiKTsKLSAgICBhdXRvIHVzZWRNYXJnaW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250
ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9
LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOwotfQot
Ci1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYg
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3gu
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNl
ZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAg
IHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFj
ZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJh
aW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25z
dHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICBy
ZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKTsKLSAgICByZXR1cm4gb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFs
R2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
OwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAg
IGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNh
dGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3Ry
YWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94
KCkpCi0gICAgICAgIHJldHVybiBmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFy
Z2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFy
Z2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2Fs
Q29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIC8vIDEwLjYu
MiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRz
IGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3Jt
YWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEu
IElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVz
ZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhh
dmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4g
aW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQg
dmFsdWUgb2YgJ2hlaWdodCcuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMg
YSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmlu
c2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXM6Ci0gICAgLy8gICAg
KHVzZWQgd2lkdGgpIC8gKGludHJpbnNpYyByYXRpbykKLSAgICAvLyA0LiBPdGhlcndpc2UsIGlm
ICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50
IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KLSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWln
aHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRp
dGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0
IGJlIHNldCB0bwotICAgIC8vICAgIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xl
IHRoYXQgaGFzIGEgMjoxIHJhdGlvLCBoYXMgYSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBw
eCwgYW5kIGhhcyBhIHdpZHRoIG5vdCBncmVhdGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KLQot
ICAgIC8vICMxCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5n
Q29udGV4dCgpOwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpj
b21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICBhdXRvJiBz
dHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7Ci0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0
LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChyZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50
cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxvZ2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOwot
ICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQg
JiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIHdpZHRoSXNBdXRvID0gc3R5
bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7Ci0KLSAgICBpZiAoaGVpZ2h0SXNBdXRvICYmIHdp
ZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hlaWdodCgpKSB7Ci0gICAgICAg
IC8vICMyCi0gICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94LmludHJpbnNpY0hlaWdodCgpOwot
ICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1Jh
dGlvKCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0
aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCkuY29udGVudEJveFdpZHRoKCk7
Ci0gICAgICAgIGhlaWdodCA9IHVzZWRXaWR0aCAvIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlv
KCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmlu
c2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gIzQKLSAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRC
b3guaW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8pIHsKLSAg
ICAgICAgLy8gIzUKLSAgICAgICAgaGVpZ2h0ID0geyAxNTAgfTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGVpZ2h0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91
dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiBoZWln
aHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5
b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKmhlaWdodCwg
dXNlZFZlcnRpY2FsTWFyZ2luIH07Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+
IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICAvLyAxMC4zLjIgSW5saW5lLCByZXBs
YWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gQSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycg
Zm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYmVjb21lcyBhIHVzZWQgdmFsdWUg
b2YgJzAnLgotICAgIC8vCi0gICAgLy8gMS4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBo
YXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFu
IGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2
YWx1ZSBvZiAnd2lkdGgnLgotICAgIC8vCi0gICAgLy8gMi4gSWYgJ2hlaWdodCcgYW5kICd3aWR0
aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhh
cyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBkb2VzIGhhdmUgYW4gaW50cmluc2ljIGhlaWdodCBh
bmQgaW50cmluc2ljIHJhdGlvOwotICAgIC8vICAgIG9yIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0
ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBvdGhlciBjb21wdXRlZCB2YWx1
ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgcmF0aW87Ci0gICAgLy8g
ICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAodXNlZCBoZWlnaHQpICogKGlu
dHJpbnNpYyByYXRpbykKLSAgICAvLwotICAgIC8vIDMuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMg
YW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVpZ2h0IG9yIHdpZHRoLAotICAg
IC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyB1bmRlZmluZWQgaW4gQ1NT
IDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlmIHRoZSBjb250YWluaW5nIGJs
b2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0aGUgcmVwbGFjZWQKLSAgICAv
LyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBj
YWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24gdXNlZCBmb3IgYmxvY2stbGV2
ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdy4KLSAgICAvLwotICAgIC8v
IDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmlu
c2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCi0gICAgLy8KLSAgICAvLyA1
LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBi
dXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZh
bHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBweC4KLSAgICAvLyAgICBJZiAzMDBweCBpcyB0b28g
d2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBs
YXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNl
IGluc3RlYWQuCi0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJh
aW50cyk7Ci0KLSAgICBhdXRvIHVzZWRNYXJnaW5TdGFydCA9IFsmXSB7Ci0gICAgICAgIGlmIChv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4pCi0gICAgICAgICAgICByZXR1cm4gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luLT5zdGFydDsKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAg
ICBhdXRvIHVzZWRNYXJnaW5FbmQgPSBbJl0gewotICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMubWFyZ2luKQotICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzLm1hcmdpbi0+ZW5kOwotICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAgICBhdXRvIHdpZHRoID0gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cy53aWR0aCA6IGNvbXB1dGVkV2lkdGgocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cy5sb2dpY2FsV2lkdGgpOwotICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gaXNIZWlnaHRBdXRvKHJl
cGxhY2VkQm94KTsKLSAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94
LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVydGljYWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdo
dCA6IFdURjo6bnVsbG9wdCk7Ci0KLSAgICBpZiAoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiBy
ZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAg
IHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCgh
d2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgp
ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hlaWdodCgpICYmIHJlcGxhY2VkQm94Lmhhc0lu
dHJpbnNpY1JhdGlvKCkpCi0gICAgICAgIHx8ICghd2lkdGggJiYgaGVpZ2h0ICYmIHJlcGxhY2Vk
Qm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHdpZHRo
ID0gaGVpZ2h0LnZhbHVlT3IocmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpICogcmVw
bGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBoZWln
aHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljUmF0aW8oKSAmJiAhcmVwbGFjZWRC
b3guaGFzSW50cmluc2ljV2lkdGgoKSAmJiAhcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0
KCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgLy8gRklYTUU6IHVuZGVmaW5lZCBidXQgc3Vy
ZWx5IGRvYWJsZS4KLSAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICB9
IGVsc2UgaWYgKCF3aWR0aCAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0g
ICAgICAgIC8vICM0Ci0gICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgo
KTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCkgewotICAgICAgICAvLyAjNQotICAgICAgICB3aWR0
aCA9IHsgMzAwIH07Ci0gICAgfQotCi0gICAgQVNTRVJUKHdpZHRoKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdp
bl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2lu
KCIgPDwgdXNlZE1hcmdpblN0YXJ0KCkgPDwgInB4LCAiIDw8IHVzZWRNYXJnaW5FbmQoKSA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7
ICp3aWR0aCwgeyB1c2VkTWFyZ2luU3RhcnQoKSwgdXNlZE1hcmdpbkVuZCgpIH0gfTsKLX0KLQot
TGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQ
b3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91
dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICAvLyA5LjQuMyBSZWxhdGl2ZSBwb3Np
dGlvbmluZwotICAgIC8vCi0gICAgLy8gVGhlICd0b3AnIGFuZCAnYm90dG9tJyBwcm9wZXJ0aWVz
IG1vdmUgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnQocykgdXAgb3IgZG93biB3aXRob3V0
IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8gVG9wJyBtb3ZlcyB0aGUgYm94ZXMgZG93biwg
YW5kICdib3R0b20nIG1vdmVzIHRoZW0gdXAuIFNpbmNlIGJveGVzIGFyZSBub3Qgc3BsaXQgb3Ig
c3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICd0b3AnIG9yICdib3R0b20nLCB0aGUgdXNlZCB2YWx1
ZXMgYXJlIGFsd2F5czogdG9wID0gLWJvdHRvbS4KLSAgICAvLwotICAgIC8vIDEuIElmIGJvdGgg
YXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZXMgYXJlIGJvdGggJzAnLgotICAgIC8vIDIuIElm
IG9uZSBvZiB0aGVtIGlzICdhdXRvJywgaXQgYmVjb21lcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG90
aGVyLgotICAgIC8vIDMuIElmIG5laXRoZXIgaXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVk
IChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAnYm90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1
ZSBvZiAndG9wJykuCi0KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNh
bFdpZHRoOwotCi0gICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3Ao
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgIGlm
ICghdG9wICYmICFib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0gYm90dG9t
ID0geyAwIH07Ci0gICAgfSBlbHNlIGlmICghdG9wKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAg
IHRvcCA9IC0qYm90dG9tOwotICAgIH0gZWxzZSBpZiAoIWJvdHRvbSkgewotICAgICAgICAvLyAj
MwotICAgICAgICBib3R0b20gPSAtKnRvcDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyAjNAot
ICAgICAgICBib3R0b20gPSBXVEY6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHJlbGF0
aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgJ2xlZnQnIGFuZCAncmlnaHQnIG1vdmUgdGhlIGJv
eChlcykgaG9yaXpvbnRhbGx5LCB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8g
J0xlZnQnIG1vdmVzIHRoZSBib3hlcyB0byB0aGUgcmlnaHQsIGFuZCAncmlnaHQnIG1vdmVzIHRo
ZW0gdG8gdGhlIGxlZnQuCi0gICAgLy8gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJl
dGNoZWQgYXMgYSByZXN1bHQgb2YgJ2xlZnQnIG9yICdyaWdodCcsIHRoZSB1c2VkIHZhbHVlcyBh
cmUgYWx3YXlzOiBsZWZ0ID0gLXJpZ2h0LgotICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCAnbGVm
dCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyAodGhlaXIgaW5pdGlhbCB2YWx1ZXMpLCB0aGUgdXNl
ZCB2YWx1ZXMgYXJlICcwJyAoaS5lLiwgdGhlIGJveGVzIHN0YXkgaW4gdGhlaXIgb3JpZ2luYWwg
cG9zaXRpb24pLgotICAgIC8vIDIuIElmICdsZWZ0JyBpcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVl
IGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAncmlnaHQnIChpLmUuLCB0aGUgYm94ZXMgbW92ZSB0byB0
aGUgbGVmdCBieSB0aGUgdmFsdWUgb2YgJ3JpZ2h0JykuCi0gICAgLy8gMy4gSWYgJ3JpZ2h0JyBp
cyBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMgdXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUg
b2YgJ2xlZnQnLgotICAgIC8vIDQuIElmIG5laXRoZXIgJ2xlZnQnIG5vciAncmlnaHQnIGlzICdh
dXRvJywgdGhlIHBvc2l0aW9uIGlzIG92ZXItY29uc3RyYWluZWQsIGFuZCBvbmUgb2YgdGhlbSBo
YXMgdG8gYmUgaWdub3JlZC4KLSAgICAvLyAgICBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsIHRoZSB2YWx1ZSBvZiAnbGVmdCcgd2lu
cyBhbmQgJ3JpZ2h0JyBiZWNvbWVzIC0nbGVmdCcuCi0gICAgLy8gICAgSWYgJ2RpcmVjdGlvbicg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcsICdyaWdodCcgd2lucyBhbmQgJ2xlZnQn
IGlzIGlnbm9yZWQuCi0KLSAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2lj
YWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0
ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0g
ICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgewotICAgICAgICAvLyAjMQotICAgICAgICBsZWZ0ID0g
cmlnaHQgPSB7IDAgfTsKLSAgICB9IGVsc2UgaWYgKCFsZWZ0KSB7Ci0gICAgICAgIC8vICMyCi0g
ICAgICAgIGxlZnQgPSAtKnJpZ2h0OwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0KSB7Ci0gICAgICAg
IC8vICMzCi0gICAgICAgIHJpZ2h0ID0gLSpsZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
ICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250
YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAg
aWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICByaWdodCA9IC0qbGVmdDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGVmdCA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoIWJvdHRvbSB8fCAqdG9wID09IC0qYm90dG9tKTsKLSAgICBBU1NFUlQoIWxl
ZnQgfHwgKmxlZnQgPT0gLSpyaWdodCk7Ci0KLSAgICBhdXRvIHRvcFBvc2l0aW9uT2Zmc2V0ID0g
KnRvcDsKLSAgICBhdXRvIGxlZnRQb3NpdGlvbk9mZnNldCA9IGxlZnQudmFsdWVPcigtKnJpZ2h0
KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUG9zaXRpb25dIC0+IHBvc2l0aW9uZWQgaW5mbG93IC0+IHRvcCBvZmZzZXQoIiA8PCB0
b3BQb3NpdGlvbk9mZnNldCA8PCAicHgpIGxlZnQgb2Zmc2V0KCIgPDwgbGVmdFBvc2l0aW9uT2Zm
c2V0IDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVy
biB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9wUG9zaXRpb25PZmZzZXQgfTsKLX0KLQotaW5saW5l
IHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3JpdGluZ01vZGUoY29uc3QgQm94JiBsYXlvdXRCb3gp
Ci17Ci0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy13cml0aW5nLW1vZGVzLTQvI2xv
Z2ljYWwtZGlyZWN0aW9uLWxheW91dAotICAgIC8vIEZsb3ctcmVsYXRpdmUgZGlyZWN0aW9ucyBh
cmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBvZiB0aGUgYm94LgotICAgIC8vIEZvciBpbmxpbmUtbGV2ZWwgYm94ZXMs
IHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIHBhcmVudCBib3ggaXMgdXNlZCBpbnN0ZWFkLgotICAg
IHJldHVybiBsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpID8gbGF5b3V0Qm94LnBhcmVudCgp
LnN0eWxlKCkud3JpdGluZ01vZGUoKSA6IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHls
ZSgpLndyaXRpbmdNb2RlKCk7Ci19Ci0KLUVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRCb3JkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0gICAgYXV0
byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0JvcmRlcl0gLT4gbGF5b3V0Qm94OiAiIDw8
ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiB7Ci0gICAgICAgIHsgTGF5b3V0VW5pdChzdHlsZS5i
b3JkZXJMZWZ0V2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpKSB9
LAotICAgICAgICB7IExheW91dFVuaXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSkgfQotICAgIH07Ci19Ci0KLU9wdGlvbmFsPEVk
Z2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29u
c3QKLXsKLSAgICBpZiAoIWxheW91dEJveC5pc1BhZGRpbmdBcHBsaWNhYmxlKCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUGFkZGluZ10gLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVy
biBFZGdlcyB7Ci0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0sCi0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5
bGUucGFkZGluZ1RvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnBhZGRpbmdCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0KLSAgICB9OwotfQot
Ci1Db21wdXRlZEhvcml6b250YWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0aW5nTW9kZShsYXlvdXRCb3gpKSkKLSAgICAgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKLSAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgp
LCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9t
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OwotfQotCi1Db21wdXRlZFZlcnRpY2FsTWFyZ2lu
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRp
bmdNb2RlKGxheW91dEJveCkpKQotICAgICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxl
Lm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUu
bWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OwotICAgIHJldHVybiB7IGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07
Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gm
IGxheW91dEJveCwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aCkgY29u
c3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gbWlu
V2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpKTsKLSAgICBhdXRvIG1h
eFdpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0gICAgaWYgKCFt
aW5XaWR0aCAmJiAhbWF4V2lkdGgpCi0gICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKLQot
ICAgIGlmIChtYXhXaWR0aCkgewotICAgICAgICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3Rk
OjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNXaWR0aC5taW5pbXVtKTsKLSAgICAgICAgaW50cmlu
c2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWluKCptYXhXaWR0aCwgaW50cmluc2ljV2lkdGgubWF4
aW11bSk7Ci0gICAgfQotCi0gICAgaWYgKG1pbldpZHRoKSB7Ci0gICAgICAgIGludHJpbnNpY1dp
ZHRoLm1pbmltdW0gPSBzdGQ6Om1heCgqbWluV2lkdGgsIGludHJpbnNpY1dpZHRoLm1pbmltdW0p
OwotICAgICAgICBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtID0gc3RkOjptYXgoKm1pbldpZHRoLCBp
bnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW50cmluc2ljV2lk
dGgubWluaW11bSA8PSBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAgICByZXR1cm4gaW50cmlu
c2ljV2lkdGg7Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0Zvck91dE9mRmxv
d0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpCi17Ci0gICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRh
aW5lckJveCk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94
TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAotICAgICAgICB7IGJveEdl
b21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0s
Ci0gICAgICAgIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07Ci19Ci0KLUZvcm1hdHRp
bmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94
JiBjb250YWluZXJCb3gsIE9wdGlvbmFsPEVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQotewot
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNvbik7Ci0gICAgcmV0dXJuIHsgeyBib3hHZW9tZXRy
eS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJv
eEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9
IH07Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNjYTBlNzQyMDhjMmQxMDNkMTFmODRiNWUwNmEzNWZhMTdkZTFmYmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRp
bmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJG
bG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCisjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1h
dHRpbmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsK
Kworc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxheW91dEJveCkK
K3sKKyAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJvcGVydHkKKyAg
ICAvLworICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRv
IHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgorICAg
IC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmll
ZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwKKyAgICAv
LyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2Vk
IGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVkLgorCisgICAg
YXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYg
KGhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaGVpZ2h0
LmlzUGVyY2VudCgpKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuICFsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9ybWF0dGluZ0dlb21ldHJ5OjpG
b3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KQorICAgIDogbV9mb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dCkKK3sKK30K
KworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhlaWdo
dFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5cGUsIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKK3sKKyAgICBhdXRv
JiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gaGVpZ2h0ID0gaGVpZ2h0VHlw
ZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkgOiBoZWlnaHRU
eXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQoKSA6IHN0eWxl
LmxvZ2ljYWxNYXhIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgaGVp
Z2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQuaXNNaW5Db250
ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiBMYXlvdXRVbml0IHsgaGVp
Z2h0LnZhbHVlKCkgfTsKKworICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CisgICAg
ICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQorICAgICAgICAgICAgY29udGFp
bmluZ0Jsb2NrSGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5oZWlnaHRWYWx1
ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRCb3gpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodCA9IFsmXSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sg
bGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFu
PjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwK
KyAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnltb3VzIHdyYXBw
ZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhlaWdodC4KKyAg
ICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94Lmlu
aXRpYWxDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGNvbnRh
aW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5pbmdCbG9j
ayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5p
bmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT5zdHls
ZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZml4ZWRW
YWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAqY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAoreworICAgIGlmIChhdXRvIGhlaWdo
dCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwsIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICAgICAgaWYgKGxheW91dEJveC5zdHlsZSgpLmJv
eFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKKyAgICAgICAgICAgIHJldHVybiBo
ZWlnaHQ7CisgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICByZXR1cm4gKmhlaWdodCAtIChib3hH
ZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK09wdGlvbmFsPExheW91
dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a1dpZHRoKQoreworICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJl
cGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlv
bmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJsb2NraWZ5IHRoZW0pLgorICAg
IEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKKworICAgIGF1dG8gd2lkdGggPSBbJl0geworICAgICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewor
ICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgorICAgICAgICAgICAgcmV0dXJuIHN0eWxl
LmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWluOgorICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWF4OgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3R5
bGUubG9naWNhbFdpZHRoKCk7CisgICAgfSgpOworICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUg
PSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCkpCisgICAg
ICAgIHJldHVybiBjb21wdXRlZFZhbHVlOworCisgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgp
IHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0Q29udGVudCgpKSB7CisgICAg
ICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpOworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVk
IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KKyAgICAgICAgYXV0byBpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgICAgIGlmICghY29udGFpbmVyQm94
Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBGb3Jt
YXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IDBfbHUsIGNvbnRhaW5p
bmdCbG9ja1dpZHRoIH07CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyQm94LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CisgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVuc3VyZUZvcm1hdHRpbmdTdGF0ZShjb250YWluZXJCb3gpOwor
ICAgICAgICAgICAgaWYgKGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRp
bmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuICppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworICAgICAgICAgICAgcmV0dXJuIExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3Rh
dGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICB9KCk7
CisgICAgICAgIGlmICh3aWR0aC5pc01pbkNvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW07CisgICAgICAgIGlmICh3aWR0aC5pc01h
eENvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Lm1heGltdW07CisgICAgICAgIEFTU0VSVCh3aWR0aC5pc0ZpdENvbnRlbnQoKSk7CisgICAgICAg
IC8vIElmIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gYSBnaXZlbiBheGlzIGlzIGRlZmluaXRlLCBl
cXVhbCB0byBtaW4obWF4LWNvbnRlbnQgc2l6ZSwKKyAgICAgICAgLy8gbWF4KG1pbi1jb250ZW50
IHNpemUsIHN0cmV0Y2gtZml0IHNpemUpKS4gT3RoZXJ3aXNlLCBlcXVhbCB0byB0aGUgbWF4LWNv
bnRlbnQgc2l6ZSBpbiB0aGF0IGF4aXMuCisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCB5ZXQg
aGF2ZSBpbmRlZmluaXRlIGF2YWlsYWJsZSBzaXplLgorICAgICAgICByZXR1cm4gc3RkOjptaW4o
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBzdGQ6Om1heChpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzLm1pbmltdW0sIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSk7CisgICAgfQorICAg
IHJldHVybiB7IH07Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRy
eTo6Y29tcHV0ZWRXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkKK3sKKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoID0gY29tcHV0ZWRX
aWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKSkgeworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAg
ICAvLyBOb24tcXVhbnRpdGF0aXZlIHZhbHVlcyBzdWNoIGFzIGF1dG8gYW5kIG1pbi1jb250ZW50
IGFyZSBub3QgaW5mbHVlbmNlZCBieSB0aGUgYm94LXNpemluZyBwcm9wZXJ0eS4KKyAgICAgICAg
aWYgKHN0eWxlLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCB8fCBzdHlsZS53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRX
aWR0aDsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIHJldHVybiAqY29tcHV0ZWRXaWR0aCAt
IChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS5ob3Jpem9udGFs
UGFkZGluZygpLnZhbHVlT3IoMCkpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitMYXlv
dXRVbml0IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdChjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSk7CisgICAgQVNTRVJUKGlzSGVpZ2h0QXV0byhmb3JtYXR0aW5nQ29udGV4dFJv
b3QpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQoKSB8fCBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNUYWJsZUNlbGwoKSk7CisgICAgYXV0
byB1c2VkQ29udGVudEhlaWdodCA9IExheW91dFVuaXQgeyB9OyAKKyAgICBhdXRvIGhhc0NvbnRl
bnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7Cisg
ICAgLy8gVGhlIHVzZWQgaGVpZ2h0IG9mIHRoZSBjb250YWlubWVudCBib3ggaXMgZGV0ZXJtaW5l
ZCBhcyBpZiBwZXJmb3JtaW5nIGEgbm9ybWFsIGxheW91dCBvZiB0aGUgYm94LCBleGNlcHQgdGhh
dCBpdCBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBjb250ZW50LgorICAgIGF1dG8gc2hvdWxkSWdu
b3JlQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1NpemVDb250YWlubWVudEJveCgp
OworICAgIGlmIChoYXNDb250ZW50ICYmICFzaG91bGRJZ25vcmVDb250ZW50KQorICAgICAgICB1
c2VkQ29udGVudEhlaWdodCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3RfY2FzdDxMYXlvdXRTdGF0ZSY+KGxheW91dFN0
YXRlKCkpKS0+dXNlZENvbnRlbnRIZWlnaHQoKTsKKyAgICByZXR1cm4gdXNlZENvbnRlbnRIZWln
aHQ7Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0
ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIGNvbnN0Cit7CisgICAgLy8gIEluIGdlbmVyYWwsIHRoZSBjb21wdXRl
ZCB2YWx1ZSByZXNvbHZlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGFzIGZhciBhcyBwb3NzaWJsZSB3
aXRob3V0IGxheWluZyBvdXQgdGhlIGNvbnRlbnQuCisgICAgaWYgKGdlb21ldHJ5UHJvcGVydHku
aXNGaXhlZCgpIHx8IGdlb21ldHJ5UHJvcGVydHkuaXNQZXJjZW50KCkgfHwgZ2VvbWV0cnlQcm9w
ZXJ0eS5pc0NhbGN1bGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGdlb21l
dHJ5UHJvcGVydHksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICByZXR1cm4geyB9OworfQor
CitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmZpeGVkVmFsdWUoY29u
c3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5KSBjb25zdAoreworICAgIGlmICghZ2VvbWV0cnlQ
cm9wZXJ0eS5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIExheW91
dFVuaXQgeyBnZW9tZXRyeVByb3BlcnR5LnZhbHVlKCkgfTsKK30KKworLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL0NTUzIyL3Zpc3VkZXQuaHRtbCNtaW4tbWF4LWhlaWdodHMKKy8vIFNwZWNpZmll
cyBhIHBlcmNlbnRhZ2UgZm9yIGRldGVybWluaW5nIHRoZSB1c2VkIHZhbHVlLiBUaGUgcGVyY2Vu
dGFnZSBpcyBjYWxjdWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBnZW5l
cmF0ZWQgYm94J3MgY29udGFpbmluZyBibG9jay4KKy8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBl
bmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwgYW5kIHRoaXMgZWxlbWVudCBpcyBub3QgYWJzb2x1dGVs
eSBwb3NpdGlvbmVkLAorLy8gdGhlIHBlcmNlbnRhZ2UgdmFsdWUgaXMgdHJlYXRlZCBhcyAnMCcg
KGZvciAnbWluLWhlaWdodCcpIG9yICdub25lJyAoZm9yICdtYXgtaGVpZ2h0JykuCitPcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWln
aHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBI
ZWlnaHRUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7Cit9CisKK09wdGlvbmFsPExh
eW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94
JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdo
dFR5cGU6Ok1pbiwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0
VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZE1pbldpZHRoKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQoreworICAgIHJldHVybiBj
b21wdXRlZFdpZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok1pbiwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOworfQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpCit7CisgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRC
b3gsIFdpZHRoVHlwZTo6TWF4LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Cit9CisKK0xheW91dFVu
aXQgRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25zdHJhaW50
cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgdGhp
cyBzZWN0aW9uIGFuZCB0aGUgbmV4dCwgdGhlIHRlcm0gInN0YXRpYyBwb3NpdGlvbiIgKG9mIGFu
IGVsZW1lbnQpIHJlZmVycywgcm91Z2hseSwgdG8gdGhlIHBvc2l0aW9uIGFuIGVsZW1lbnQgd291
bGQgaGF2ZQorICAgIC8vIGhhZCBpbiB0aGUgbm9ybWFsIGZsb3cuIE1vcmUgcHJlY2lzZWx5LCB0
aGUgc3RhdGljIHBvc2l0aW9uIGZvciAndG9wJyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9w
IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHRvcCBtYXJnaW4KKyAgICAvLyBl
ZGdlIG9mIGEgaHlwb3RoZXRpY2FsIGJveCB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0aGUgZmlyc3Qg
Ym94IG9mIHRoZSBlbGVtZW50IGlmIGl0cyBzcGVjaWZpZWQgJ3Bvc2l0aW9uJyB2YWx1ZSBoYWQg
YmVlbiAnc3RhdGljJyBhbmQgaXRzIHNwZWNpZmllZAorICAgIC8vICdmbG9hdCcgaGFkIGJlZW4g
J25vbmUnIGFuZCBpdHMgc3BlY2lmaWVkICdjbGVhcicgaGFkIGJlZW4gJ25vbmUnLiAoTm90ZSB0
aGF0IGR1ZSB0byB0aGUgcnVsZXMgaW4gc2VjdGlvbiA5LjcgdGhpcyBtaWdodCByZXF1aXJlIGFs
c28gYXNzdW1pbmcgYSBkaWZmZXJlbnQKKyAgICAvLyBjb21wdXRlZCB2YWx1ZSBmb3IgJ2Rpc3Bs
YXknLikgVGhlIHZhbHVlIGlzIG5lZ2F0aXZlIGlmIHRoZSBoeXBvdGhldGljYWwgYm94IGlzIGFi
b3ZlIHRoZSBjb250YWluaW5nIGJsb2NrLgorCisgICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdz
IGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRlciBib3guCisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIExh
eW91dFVuaXQgdG9wOworICAgIGlmIChsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkg
JiYgbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpLT5pc0Jsb2NrTGV2ZWxCb3goKSkg
eworICAgICAgICAvLyBBZGQgc2libGluZyBvZmZzZXQKKyAgICAgICAgYXV0byYgcHJldmlvdXNJ
bkZsb3dTaWJsaW5nID0gKmxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKKyAgICAg
ICAgYXV0byYgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZywgRm9ybWF0dGluZ0NvbnRleHQ6OkVz
Y2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7CisgICAgICAgIGF1
dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihsYXlv
dXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZvckJveChwcmV2aW91c0luRmxvd1NpYmxpbmcpKTsK
KyAgICAgICAgYXV0byB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveCA9IGZvcm1hdHRp
bmdTdGF0ZS51c2VkVmVydGljYWxNYXJnaW4ocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKworICAg
ICAgICB0b3AgKz0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QocHJldmlvdXNJbkZsb3dCb3hH
ZW9tZXRyeSkuYm90dG9tKCkgKyB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveC5ub25D
b2xsYXBzZWRWYWx1ZXMuYWZ0ZXI7CisgICAgfSBlbHNlCisgICAgICAgIHRvcCA9IGZvcm1hdHRp
bmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRm9ybWF0dGluZ0Nv
bnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29u
dGVudEJveFRvcCgpOworCisgICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhl
IGNvbnRhaW5pbmcgYmxvY2suCisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpOworICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3
ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCisgICAgZm9yIChhdXRvKiBh
bmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxv
Y2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgeworICAgICAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNl
c3RvciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJ
bkZsb3dHZW9tZXRyeSk7CisgICAgICAgIC8vIEJveEdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRl
ciBib3ggdG9wIHBvc2l0aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBz
eXN0ZW0uCisgICAgICAgIHRvcCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGJveEdlb21l
dHJ5KTsKKyAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0
Qm94LmlzRml4ZWRQb3NpdGlvbmVkKCkpOworICAgIH0KKyAgICAvLyBNb3ZlIHRoZSBzdGF0aWMg
cG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lm
aWMgdG8gYWJvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCisgICAgcmV0dXJuIHRvcCAtIHZlcnRp
Y2FsQ29uc3RyYWludHMubG9naWNhbFRvcDsKK30KKworTGF5b3V0VW5pdCBGb3JtYXR0aW5nR2Vv
bWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpOworICAgIC8vIFNlZSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0YXRpYyBwb3NpdGlvbi4K
KworICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRo
ZSBwYXJlbnQncyBib3JkZXIgYm94LgorICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhp
cy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvIGxlZnQgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCksIEZvcm1hdHRpbmdDb250ZXh0OjpF
c2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpLmNvbnRlbnRCb3hM
ZWZ0KCk7CisKKyAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRh
aW5pbmcgYmxvY2suCisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpOworICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0
ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCisgICAgZm9yIChhdXRvKiBhbmNlc3Rv
ciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgeworICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3Rvciwg
Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dH
ZW9tZXRyeSk7CisgICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94
IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3Rl
bS4KKyAgICAgICAgbGVmdCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9tZXRy
eSk7CisgICAgICAgIEFTU0VSVCghYW5jZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJv
eC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKKyAgICB9CisgICAgLy8gTW92ZSB0aGUgc3RhdGljIHBv
c2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmlj
IHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgorICAgIHJldHVybiBsZWZ0IC0gaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdH
ZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9y
bWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0
IC0+IHVuc3VwcG9ydGVkIC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlv
dXRCb3g6ICIgPDwgJmZvcm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOworICAgIEFTU0VSVChm
b3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKwor
ICAgIC8vIENhbGN1bGF0aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzIHNpbWlsYXIg
dG8gY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21h
dGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCisgICAgLy8gUm91Z2hseTogY2FsY3VsYXRlIHRo
ZSBwcmVmZXJyZWQgd2lkdGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3aXRob3V0IGJyZWFr
aW5nIGxpbmVzIG90aGVyIHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVha3Mgb2NjdXIsCisg
ICAgLy8gYW5kIGFsc28gY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11bSB3aWR0aCwgZS5n
LiwgYnkgdHJ5aW5nIGFsbCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIuMiBkb2VzIG5vdCBk
ZWZpbmUgdGhlIGV4YWN0IGFsZ29yaXRobS4KKyAgICAvLyBUaGlyZGx5LCBmaW5kIHRoZSBhdmFp
bGFibGUgd2lkdGg6IGluIHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgbWludXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4tbGVmdCcsICdib3Jk
ZXItbGVmdC13aWR0aCcsCisgICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0Jywg
J2JvcmRlci1yaWdodC13aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhlIHdpZHRocyBvZiBh
bnkgcmVsZXZhbnQgc2Nyb2xsIGJhcnMuCisKKyAgICAvLyBUaGVuIHRoZSBzaHJpbmstdG8tZml0
IHdpZHRoIGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lk
dGgpLCBwcmVmZXJyZWQgd2lkdGgpLgorICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKKyAg
ICBhdXRvIGhhc0NvbnRlbnQgPSBpczxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLmhhc0lu
Rmxvd09yRmxvYXRpbmdDaGlsZCgpOworICAgIC8vIFRoZSB1c2VkIHdpZHRoIG9mIHRoZSBjb250
YWlubWVudCBib3ggaXMgZGV0ZXJtaW5lZCBhcyBpZiBwZXJmb3JtaW5nIGEgbm9ybWFsIGxheW91
dCBvZiB0aGUgYm94LCBleGNlcHQgdGhhdCBpdCBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBjb250
ZW50LgorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc1NpemVDb250YWlubWVudEJveCgpOyAgCisgICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3Vs
ZElnbm9yZUNvbnRlbnQpIHsKKyAgICAgICAgYXV0byYgcm9vdCA9IGRvd25jYXN0PENvbnRhaW5l
ckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KTsKKyAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0
YXRlRm9yUm9vdCA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKHJvb3QpOwor
ICAgICAgICBhdXRvIHByZWNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1h
dHRpbmdTdGF0ZUZvclJvb3QuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBp
ZiAoIXByZWNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cykKKyAgICAgICAgICAgIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5n
Q29udGV4dChyb290LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSAqcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5p
bXVtLCBhdmFpbGFibGVXaWR0aCksIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSk7
Cit9CisKK1ZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dOb25S
ZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBsYXlvdXRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBB
U1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNS
ZXBsYWNlZEJveCgpKTsKKyAgICBBU1NFUlQodmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsSGVp
Z2h0KTsKKworICAgIC8vIDEwLjYuNCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNl
ZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gRm9yIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVt
ZW50cywgdGhlIHVzZWQgdmFsdWVzIG9mIHRoZSB2ZXJ0aWNhbCBkaW1lbnNpb25zIG11c3Qgc2F0
aXNmeSB0aGlzIGNvbnN0cmFpbnQ6CisgICAgLy8gJ3RvcCcgKyAnbWFyZ2luLXRvcCcgKyAnYm9y
ZGVyLXRvcC13aWR0aCcgKyAncGFkZGluZy10b3AnICsgJ2hlaWdodCcgKyAncGFkZGluZy1ib3R0
b20nICsgJ2JvcmRlci1ib3R0b20td2lkdGgnICsgJ21hcmdpbi1ib3R0b20nICsgJ2JvdHRvbScK
KyAgICAvLyA9IGhlaWdodCBvZiBjb250YWluaW5nIGJsb2NrCisKKyAgICAvLyBJZiBhbGwgdGhy
ZWUgb2YgJ3RvcCcsICdoZWlnaHQnLCBhbmQgJ2JvdHRvbScgYXJlIGF1dG8sIHNldCAndG9wJyB0
byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdy4K
KworICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGFyZSAnYXV0byc6IElmIGJvdGggJ21hcmdp
bi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9u
IHVuZGVyIHRoZSBleHRyYQorICAgIC8vIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMg
Z2V0IGVxdWFsIHZhbHVlcy4gSWYgb25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRv
bScgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8g
SWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3Ig
J2JvdHRvbScgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorCisgICAgLy8gT3RoZXJ3aXNlLCBw
aWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorCisg
ICAgLy8gMS4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5v
dCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAu
Ni43LAorICAgIC8vICAgICBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAn
bWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgIC8vIDIuICd0b3An
IGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVu
IHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IK
KyAgICAvLyAgICAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29s
dmUgZm9yICdib3R0b20nCisgICAgLy8gMy4gJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0
bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0
aGUgY29udGVudCBwZXIgMTAuNi43LCBzZXQgJ2F1dG8nCisgICAgLy8gICAgIHZhbHVlcyBmb3Ig
J21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90
dG9tJworICAgIC8vIDQuICd0b3AnIGlzICdhdXRvJywgJ2hlaWdodCcgYW5kICdib3R0b20nIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8gNS4gJ2hl
aWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4g
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHNl
dCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKKyAgICAvLyA2LiAnYm90dG9tJyBpcyAnYXV0
bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZh
bHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29sdmUg
Zm9yICdib3R0b20nCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSAqdmVydGljYWxDb25z
dHJhaW50cy5sb2dpY2FsSGVpZ2h0OworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOworCisgICAgYXV0byB0b3AgPSBjb21w
dXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAg
IGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBj
b21wdXRlZEhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7CisgICAgYXV0
byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBVc2Vk
VmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB1c2VkVmVydGljYWxNYXJnaW47IAor
ICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52
YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7
CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKKwor
ICAgIGlmICghdG9wICYmICFoZWlnaHQgJiYgIWJvdHRvbSkKKyAgICAgICAgdG9wID0gc3RhdGlj
VmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB2ZXJ0aWNh
bENvbnN0cmFpbnRzKTsKKworICAgIGlmICh0b3AgJiYgaGVpZ2h0ICYmIGJvdHRvbSkgeworICAg
ICAgICBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlICYmICFjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyKSB7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJlZm9yZUFuZEFmdGVy
ID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKyAg
ICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgLyAy
LCBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDIgfTsKKyAgICAgICAgfSBlbHNlIGlmICghY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUpIHsKKyAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlciA9ICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOworICAgICAgICAgICAgdXNl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIpIHsKKyAgICAgICAgICAgIHVz
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7
CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSBjb250YWluaW5nQmxvY2tI
ZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBw
YWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90
dG9tKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7
ICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSwgKmNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIgfTsKKyAgICAgICAgLy8gT3Zlci1jb25zdHJhaW5lZD8KKyAgICAgICAgYXV0byBib3hI
ZWlnaHQgPSAqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBh
ZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b207CisgICAgICAgIGlmIChib3hIZWlnaHQgIT0g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KQorICAgICAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Js
b2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9w
ICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsg
dXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAgICB9CisKKyAgICBpZiAoIXRvcCAmJiAhaGVp
Z2h0ICYmIGJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICBoZWlnaHQgPSBjb250ZW50
SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dEJveCk7CisgICAgICAgIHVzZWRW
ZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigw
KSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIHRv
cCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7IAorICAgIH0KKwor
ICAgIGlmICghdG9wICYmICFib3R0b20gJiYgaGVpZ2h0KSB7CisgICAgICAgIC8vICMyCisgICAg
ICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxh
eW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7CisgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdp
biA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIGJvdHRvbSA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJv
cmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJv
dHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7CisgICAgfQorCisgICAgaWYgKCFoZWln
aHQgJiYgIWJvdHRvbSAmJiB0b3ApIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgaGVpZ2h0ID0g
Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOworICAgICAg
ICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZh
bHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAg
ICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRp
bmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOworICAg
IH0KKworICAgIGlmICghdG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKKyAgICAgICAgLy8gIzQK
KyAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkg
fTsKKyAgICAgICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKHVzZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdC
b3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9t
KTsKKyAgICB9CisKKyAgICBpZiAoIWhlaWdodCAmJiB0b3AgJiYgYm90dG9tKSB7CisgICAgICAg
IC8vICM1CisgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1
ZU9yKDApIH07CisgICAgICAgIGhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9w
ICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBw
YWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsg
KmJvdHRvbSk7CisgICAgfQorCisgICAgaWYgKCFib3R0b20gJiYgdG9wICYmIGhlaWdodCkgewor
ICAgICAgICAvLyAjNgorICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0
ZXIudmFsdWVPcigwKSB9OworICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQg
LSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5n
VG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIpOworICAgIH0KKworICAgIEFTU0VSVCh0b3ApOworICAgIEFTU0VSVChi
b3R0b20pOworICAgIEFTU0VSVChoZWlnaHQpOworCisgICAgLy8gRm9yIG91dC1vZi1mbG93IGVs
ZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdl
IG9mIHRoZSBhbmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZh
bHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdz
IGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxv
Z2ljYWxUb3A7CisgICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
OworICAgICpib3R0b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKwor
ICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJb
UG9zaXRpb25dW0hlaWdodF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyBub24tcmVwbGFjZWQgLT4g
dG9wKCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0
KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPDwgInB4LCAiICA8PCB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPDwgInB4KSBsYXlvdXRC
b3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwg
eyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJnaW4gfSB9OworfQorCitIb3Jpem9udGFsR2VvbWV0
cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9t
ZXRyeShjb25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0
Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
KTsKKyAgICAKKyAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFj
ZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vICdsZWZ0JyArICdtYXJnaW4tbGVmdCcgKyAnYm9y
ZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmln
aHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyArICdyaWdodCcKKyAg
ICAvLyA9IHdpZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKKworICAgIC8vIElmIGFsbCB0aHJlZSBv
ZiAnbGVmdCcsICd3aWR0aCcsIGFuZCAncmlnaHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkg
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4K
KyAgICAvLyBUaGVuLCBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQg
ZXN0YWJsaXNoaW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRy
JyBzZXQgJ2xlZnQnIHRvIHRoZSBzdGF0aWMKKyAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVs
ZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgorICAgIC8vCisgICAg
Ly8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgaXMgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tbGVmdCcg
YW5kICdtYXJnaW4tcmlnaHQnIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0
aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVz
LAorICAgIC8vIHVubGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2gg
Y2FzZSB3aGVuIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0
bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCisgICAg
Ly8gc29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdt
YXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJh
aW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9u
JyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0Jwor
ICAgIC8vIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQg
dmFsdWUuCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAn
bWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLCBhbmQgcGljayB0aGUgb25lIG9m
IHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKyAgICAvLworICAgIC8vIDEu
ICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycs
IHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0Jwor
ICAgIC8vIDIuICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5v
dCAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50
IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIAorICAgIC8vICAgIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndp
c2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KKyAgICAvLyAgICBUaGVuIHNv
bHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rpb24gaXMgJ3J0bCcpIG9yICdyaWdodCcgKGlmICdk
aXJlY3Rpb24nIGlzICdsdHInKS4KKyAgICAvLyAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAn
YXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmst
dG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JworICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0
bycsICd3aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICds
ZWZ0JworICAgIC8vIDUuICd3aWR0aCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICdyaWdodCcgYXJl
IG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICd3aWR0aCcKKyAgICAvLyA2LiAncmlnaHQnIGlz
ICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZv
ciAncmlnaHQnCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJh
aW50cy5sb2dpY2FsV2lkdGg7CisgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OworICAgIAorICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVl
KHN0eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byB3
aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGlu
Z0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpOworICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFy
Z2luOworICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZh
bHVlT3IoMCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmln
aHQoKS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRl
ckxlZnQoKTsKKyAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQo
KTsKKyAgICBpZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdodCkgeworICAgICAgICAvLyBJZiBh
bGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJz
dCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmln
aHQnIHRvIDAuCisgICAgICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBv
ZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5n
IGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYworICAgICAgICAvLyBwb3Np
dGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdy
aWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJl
bG93LgorICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFs
dWVPcigwKSB9OworCisgICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KQorICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAg
fSBlbHNlIGlmIChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7CisgICAgICAgIC8vIElmIG5vbmUg
b2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2lu
LXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNv
bnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAgICAg
Ly8gdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdo
ZW4gZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNl
dCAnbWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKKyAgICAgICAgLy8g
c29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdtYXJn
aW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24g
Zm9yIHRoYXQgdmFsdWUuCisgICAgICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3Ry
YWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlv
bicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcK
KyAgICAgICAgLy8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFuZCBzb2x2ZSBmb3Ig
dGhhdCB2YWx1ZS4KKyAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
JiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGF1dG8gbWFy
Z2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsg
KnJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKQorICAgICAg
ICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBtYXJnaW5TdGFydEFuZEVuZCAvIDIs
IG1hcmdpblN0YXJ0QW5kRW5kIC8gMiB9OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1OworICAgICAgICAgICAgICAgICAgICB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsg
KndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCA9IDBfbHU7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGlu
Z0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQpIHsK
KyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kOworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAq
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAgICAgICAgICAgdXNlZEhvcml6b250
YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OworICAgICAgICAgICAg
Ly8gT3ZlcmNvbnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxlZnQpLgorICAgICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArICpsZWZ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0ICdhdXRv
JyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAsIGFuZCBw
aWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAg
ICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9
OworICAgIH0KKworICAgIGlmICghbGVmdCAmJiAhd2lkdGggJiYgcmlnaHQpIHsKKyAgICAgICAg
Ly8gIzEKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmlu
ZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAoaW4gY2FzZSAxKSB0byAwCisgICAg
ICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OworICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRo
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgd2lkdGgg
PSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpOworICAgICAgICBs
ZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxz
ZSBpZiAoIWxlZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7CisgICAgICAgIC8vICMyCisgICAgICAg
IGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9u
Rm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7
CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7CisgICAgICAgICAgICBsZWZ0
ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAgICAgICBsZWZ0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBi
b3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJS
aWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVmdCkgeworICAgICAgICAvLyAjMwor
ICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAn
d2lkdGgnIGFmdGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCisgICAgICAgIHJp
Z2h0ID0gTGF5b3V0VW5pdCB7IDAgfTsKKyAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIHdpZHRoID0gc2hy
aW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgcmlnaHQg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgIH0gZWxzZSBpZiAo
IWxlZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKKyAgICAgICAgLy8gIzQKKyAgICAgICAgbGVmdCA9
IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxzZSBpZiAo
IXdpZHRoICYmIGxlZnQgJiYgcmlnaHQpIHsKKyAgICAgICAgLy8gIzUKKyAgICAgICAgd2lkdGgg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxzZSBpZiAo
IXJpZ2h0ICYmIGxlZnQgJiYgd2lkdGgpIHsKKyAgICAgICAgLy8gIzYKKyAgICAgICAgcmlnaHQg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgIH0KKworICAgIEFT
U0VSVChsZWZ0KTsKKyAgICBBU1NFUlQocmlnaHQpOworICAgIEFTU0VSVCh3aWR0aCk7CisKKyAg
ICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9y
bWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgorICAgIC8vIEF0IHRoaXMg
cG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5h
dGUgc3lzdGVtLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICAqbGVmdCArPSBjb250YWlu
aW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworICAgICpyaWdodCArPSBjb250YWluaW5nQmxv
Y2tQYWRkaW5nVmVydGljYWxFZGdlOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0
LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAqbGVmdCA8PCAicHgpIHJpZ2h0KCIg
IDw8ICpyaWdodCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwg
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAiICA8PCB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5lbmQgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsTWFyZ2luIH0g
fTsKK30KKworVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBB
U1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCh2
ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOworCisgICAgLy8gMTAuNi41IEFic29s
dXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIFRoZSB1
c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KKyAgICAvLyBJZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlz
IHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUg
cnVsZXMgYmVsb3cuCisgICAgLy8gMS4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0
aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMg
cG9zaXRpb24uCisgICAgLy8gMi4gSWYgJ2JvdHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAn
YXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyB3aXRoICcwJy4KKyAgICAv
LyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRv
bScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KKyAg
ICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBz
b2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8gNS4gSWYgYXQgdGhpcyBw
b2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisKKyAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUg
PSByZXBsYWNlZEJveC5zdHlsZSgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpOworICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodDsKKyAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUo
c3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byBo
ZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0OworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihyZXBsYWNl
ZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1
c2VkTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7CisgICAgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkFmdGVyID0gY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlcjsKKyAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKTsKKyAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5n
Qm90dG9tKCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpOworICAgIGF1dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90
dG9tKCk7CisKKyAgICBpZiAoIXRvcCAmJiAhYm90dG9tKSB7CisgICAgICAgIC8vICMxCisgICAg
ICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKHJl
cGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKTsKKyAgICB9CisKKyAgICBpZiAoIWJvdHRv
bSkgeworICAgICAgICAvLyAjMgorICAgICAgICB1c2VkTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKTsKKyAgICAgICAgdXNlZE1hcmdpbkFmdGVy
ID0gdXNlZE1hcmdpbkJlZm9yZTsKKyAgICB9CisKKyAgICBpZiAoIXVzZWRNYXJnaW5CZWZvcmUg
JiYgIXVzZWRNYXJnaW5BZnRlcikgeworICAgICAgICAvLyAjMworICAgICAgICBhdXRvIG1hcmdp
bkJlZm9yZUFuZEFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJU
b3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
ICpib3R0b20pOworICAgICAgICB1c2VkTWFyZ2luQmVmb3JlID0gbWFyZ2luQmVmb3JlQW5kQWZ0
ZXIgLyAyOworICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFyZ2luQmVmb3JlOworICAg
IH0KKworICAgIC8vICM0CisgICAgaWYgKCF0b3ApCisgICAgICAgIHRvcCA9IGNvbnRhaW5pbmdC
bG9ja0hlaWdodCAtICgqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3Ag
KyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRl
ciArICpib3R0b20pOworCisgICAgaWYgKCFib3R0b20pCisgICAgICAgIGJvdHRvbSA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1
c2VkTWFyZ2luQWZ0ZXIpOworCisgICAgaWYgKCF1c2VkTWFyZ2luQmVmb3JlKQorICAgICAgICB1
c2VkTWFyZ2luQmVmb3JlID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJU
b3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
ICp1c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tKTsKKworICAgIGlmICghdXNlZE1hcmdpbkFmdGVy
KQorICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRv
cCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKworICAgIC8vICM1Cisg
ICAgYXV0byBib3hIZWlnaHQgPSAqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1
c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tOworICAgIGlmIChib3hIZWlnaHQgPiBjb250YWluaW5n
QmxvY2tIZWlnaHQpCisgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgq
dG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0
ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1c2VkTWFyZ2luQWZ0ZXIpOyAKKwor
ICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBm
b3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCisgICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRp
bmF0ZSBzeXN0ZW0uCisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
ID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworICAgICp0b3AgKz0gY29udGFpbmlu
Z0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKyAgICAqYm90dG9tICs9IGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CisKKyAgICBBU1NFUlQodG9wKTsKKyAgICBBU1NFUlQoYm90
dG9tKTsKKyAgICBBU1NFUlQodXNlZE1hcmdpbkJlZm9yZSk7CisgICAgQVNTRVJUKHVzZWRNYXJn
aW5BZnRlcik7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltQb3NpdGlvbl1bSGVpZ2h0XVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IHJlcGxh
Y2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgp
IGhlaWdodCgiIDw8IGhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFyZ2luQmVmb3Jl
IDw8ICJweCwgIiAgPDwgKnVzZWRNYXJnaW5BZnRlciA8PCAicHgpIGxheW91dEJveCgiIDw8ICZy
ZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgaGVpZ2h0
LCB7ICp1c2VkTWFyZ2luQmVmb3JlLCAqdXNlZE1hcmdpbkFmdGVyIH0gfSB9OworfQorCitIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6
b250YWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKHJlcGxh
Y2VkQm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIDEwLjMuOCBBYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8gSW4gdGhpcyBjYXNlLCBz
ZWN0aW9uIDEwLjMuNyBhcHBsaWVzIHVwIHRocm91Z2ggYW5kIGluY2x1ZGluZyB0aGUgY29uc3Ry
YWludCBlcXVhdGlvbiwgYnV0IHRoZSByZXN0IG9mIHNlY3Rpb24gMTAuMy43IGlzIHJlcGxhY2Vk
IGJ5IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLy8KKyAgICAvLyBUaGUgdXNlZCB2YWx1ZSBv
ZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4g
SWYgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8n
IGl0cyB1c2VkIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHJ1bGVzIGJlbG93LgorICAgIC8v
IDEuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgdGhl
biBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNoaW5n
IHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJywKKyAgICAvLyAg
IHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbjsgZWxzZSBpZiAnZGlyZWN0aW9uJyBp
cyAncnRsJywgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KKyAgICAvLyAyLiBJ
ZiAnbGVmdCcgb3IgJ3JpZ2h0JyBhcmUgJ2F1dG8nLCByZXBsYWNlIGFueSAnYXV0bycgb24gJ21h
cmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyB3aXRoICcwJy4KKyAgICAvLyAzLiBJZiBhdCB0
aGlzIHBvaW50IGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgYXJlIHN0aWxs
ICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRo
YXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAvLyAgIHVubGVz
cyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIHRoZSBk
aXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdt
YXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAorICAgIC8vICAgc29sdmUg
Zm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4KKyAgICAvLyA0LiBJZiBhdCB0aGlz
IHBvaW50IHRoZXJlIGlzIGFuICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRo
YXQgdmFsdWUuCisgICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFyZSBvdmVy
LWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciBlaXRoZXIgJ2xlZnQnIChpbiBjYXNl
IHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRs
Jykgb3IKKyAgICAvLyAgICdyaWdodCcgKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFu
ZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94
LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChyZXBsYWNlZEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgYXV0byBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID0gcmVwbGFjZWRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0
eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIHJpZ2h0
ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpblN0YXJ0ID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOworICAgIGF1dG8gd2lk
dGggPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcykuY29udGVudFdpZHRoOworICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBi
b3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyTGVm
dCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKKyAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94
R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKworICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKKyAg
ICAgICAgLy8gIzEKKyAgICAgICAgYXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlv
bikKKyAgICAgICAgICAgIGxlZnQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJpZ2h0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAg
IH0KKworICAgIGlmICghbGVmdCB8fCAhcmlnaHQpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAg
dXNlZE1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3Io
MCk7CisgICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
LnZhbHVlT3IoMCk7CisgICAgfQorCisgICAgaWYgKCF1c2VkTWFyZ2luU3RhcnQgJiYgIXVzZWRN
YXJnaW5FbmQpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byBtYXJnaW5TdGFydEFuZEVu
ZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAg
ICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKSB7CisgICAgICAgICAgICB1c2VkTWFyZ2lu
U3RhcnQgPSBtYXJnaW5TdGFydEFuZEVuZCAvIDI7CisgICAgICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gdXNlZE1hcmdpblN0YXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB1c2VkTWFyZ2luU3RhcnQg
PSAwX2x1OworICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArICp1c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IDBfbHU7Cisg
ICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
KmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCAr
IGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gIzQKKyAgICBpZiAoIWxlZnQpCisgICAgICAgIGxl
ZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1
c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKKworICAgIGlmICghcmlnaHQpCisgICAgICAgIHJpZ2h0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICp1c2VkTWFyZ2luRW5kKTsKKworICAgIGlmICghdXNlZE1hcmdpblN0YXJ0KQorICAgICAg
ICB1c2VkTWFyZ2luU3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisKKyAgICBpZiAoIXVzZWRNYXJnaW5FbmQpCisg
ICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1
c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRp
bmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKworICAgIGF1dG8gYm94V2lkdGggPSAo
KmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0
KTsKKyAgICBpZiAoYm94V2lkdGggPiBjb250YWluaW5nQmxvY2tXaWR0aCkgeworICAgICAgICAv
LyAjNSBPdmVyLWNvbnN0cmFpbmVkPworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlv
bikKKyAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAq
dXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRk
aW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCp1c2VkTWFyZ2luU3Rh
cnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOworICAgIH0KKworICAgIEFTU0VS
VChsZWZ0KTsKKyAgICBBU1NFUlQocmlnaHQpOworICAgIEFTU0VSVCh1c2VkTWFyZ2luU3RhcnQp
OworICAgIEFTU0VSVCh1c2VkTWFyZ2luRW5kKTsKKworICAgIC8vIEZvciBvdXQtb2YtZmxvdyBl
bGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRn
ZSBvZiB0aGUgYW5jZXN0b3IuCisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2
YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQn
cyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgYXV0byBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxMZWZ0OworICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CisgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7
CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW1Bvc2l0aW9uXVtXaWR0aF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiBs
ZWZ0KCIgPDwgKmxlZnQgPDwgInB4KSByaWdodCgiICA8PCAqcmlnaHQgPDwgInB4KSB3aWR0aCgi
IDw8IHdpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgKnVzZWRNYXJnaW5TdGFydCA8PCAicHgsICIg
IDw8ICp1c2VkTWFyZ2luRW5kIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8
ICIpIik7CisgICAgcmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyB3aWR0aCwgeyAqdXNlZE1hcmdp
blN0YXJ0LCAqdXNlZE1hcmdpbkVuZCB9IH0gfTsKK30KKworQ29udGVudEhlaWdodEFuZE1hcmdp
biBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiBsYXlvdXRC
b3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBj
b25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworICAgIC8v
IFRPRE86IFVzZSBjb21wbGljYXRlZC1jYXNlIGZvciBkb2N1bWVudCByZW5kZXJlciBmb3Igbm93
IChzZWUgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbikuCisg
ICAgQVNTRVJUKChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkgJiYgbGF5b3V0Qm94LmlzSW5G
bG93KCkgJiYgIWxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKSB8fCBsYXlvdXRCb3guaXNJ
bmxpbmVCbG9ja0JveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpIHx8IGxh
eW91dEJveC5pc0RvY3VtZW50Qm94KCkgfHwgbGF5b3V0Qm94LmlzVGFibGVCb3goKSk7CisKKyAg
ICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKKyAgICAvLworICAgIC8vIEJsb2NrLWxldmVs
LCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRv
ZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJv
cGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCisgICAg
Ly8gJ0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KKyAgICAvLyBGbG9hdGlu
Zywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgorICAgIC8vCisgICAgLy8gMS4gSWYgJ21hcmdpbi10
b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAw
LgorICAgIC8vIDIuIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBkZXBlbmRzIG9u
IHRoZSBlbGVtZW50J3MgZGVzY2VuZGFudHMgcGVyIDEwLjYuNy4KKworICAgIGF1dG8gaGVpZ2h0
ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7CisgICAgYXV0
byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAvLyAj
MQorICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCisgICAgLy8gIzIK
KyAgICBpZiAoIWhlaWdodCkgeworICAgICAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJv
eCkpOworICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNh
c3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQor
ICAgICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94Lmlz
RG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KSkgeworICAgICAgICAgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJC
b3g+KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJn
aW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94
LmZpcnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOworICAgICAgICAgICAgYXV0byBib3R0b20gPSBC
b3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hpbGQoKSkpLmJvdHRvbSgpOworICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJrPykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3Vt
ZW50IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCBhbmQKKyAgICAgICAgICAg
IC8vIGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVwIGF0IHRoZSBJQ0IgbGV2ZWwuCisgICAgICAg
ICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGlu
Z0NvbnRleHRSb290KCk7CisgICAgICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0
aW5nQ29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNo
ZWRGb3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRhaW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgp
IH07CisgICAgICAgICAgICBpZiAoYXV0byBmbG9hdEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5i
b3R0b20oKSkgeworICAgICAgICAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KCpmbG9hdEJvdHRvbSwgYm90dG9tKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0g
ZmxvYXRpbmdDb250ZXh0LnRvcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7
CisgICAgICAgICAgICAgICAgdG9wID0gc3RkOjptaW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0
b3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hl
c0Zvcm1hdHRpbmdDb250ZXh0KCkpOworICAgICAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdo
dEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGhlaWdodCk7CisKKyAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1b
TWFyZ2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFjZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8
PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlv
dXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWln
aHQsIHVzZWRWZXJ0aWNhbE1hcmdpbiB9OworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gRm9y
bWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisKKyAgICAvLyAx
MC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gMS4g
SWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRv
JywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCisgICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21w
dXRlZCBhcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lk
dGguCisKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKKworICAgIC8vICMxCisgICAgYXV0byB1c2VkSG9yaXpvbnRhbGxNYXJnaW4gPSBV
c2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1
ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKyAgICAv
LyAjMgorICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0ZWRXaWR0aChsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOworICAgIGlmICghd2lkdGgp
CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBmbG9hdGluZyBu
b24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2Vk
SG9yaXpvbnRhbGxNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdp
bi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxsTWFy
Z2luIH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpm
bG9hdGluZ1JlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYg
cmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcykgY29uc3QKK3sKKyAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNGbG9hdGluZ1Bvc2l0
aW9uZWQoKSk7CisKKyAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycK
KyAgICAvLyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVw
bGFjZWQgZWxlbWVudHMKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBmbG9hdGluZyByZXBsYWNlZCAtPiBy
ZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNlZCIpOworICAgIHJldHVybiBpbmxpbmVSZXBsYWNl
ZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitDb250ZW50V2lkdGhBbmRN
YXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQocmVw
bGFjZWRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7CisKKyAgICAvLyAxMC4zLjYgRmxvYXRp
bmcsIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyAxLiBJZiAnbWFyZ2luLWxlZnQn
IG9yICdtYXJnaW4tcmlnaHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFs
dWUgaXMgJzAnLgorICAgIC8vIDIuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJt
aW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIGF1dG8gY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFy
Z2luXSAtPiBmbG9hdGluZyByZXBsYWNlZCAtPiByZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNl
ZCIpOworICAgIGF1dG8gdXNlZE1hcmdpbiA9IFVzZWRIb3Jpem9udGFsTWFyZ2luIHsgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQudmFsdWVPcigwKSB9OworICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsg
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGgsIHVzZWRNYXJnaW4gfSk7Cit9CisKK1Zl
cnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAg
ICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2Fs
Q29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgcmV0dXJuIG91dE9m
Rmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0dl
b21ldHJ5OjpvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAg
QVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBs
YWNlZEhvcml6b250YWxHZW9tZXRyeShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCks
IGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworICAg
IHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShkb3duY2FzdDxSZXBs
YWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0
cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRIZWlnaHRB
bmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxv
YXRpbmdQb3NpdGlvbmVkKCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
KQorICAgICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKKyAgICByZXR1cm4gZmxvYXRp
bmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxh
eW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
KTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6ZmxvYXRp
bmdDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNT
RVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKKworICAgIGlmICghbGF5b3V0
Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGZsb2F0aW5nTm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKyAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Cit9CisKK0Nv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVSZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8
VmVydGljYWxDb25zdHJhaW50cz4gdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAg
Ly8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQg
ZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snIHJlcGxhY2VkIGVsZW1lbnRz
IGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisg
ICAgLy8gMS4gSWYgJ21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywg
dGhlaXIgdXNlZCB2YWx1ZSBpcyAwLgorICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNv
IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KKyAgICAvLyAzLiBPdGhlcndpc2UsIGlmICdoZWln
aHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBh
biBpbnRyaW5zaWMgcmF0aW8gdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpczoKKyAg
ICAvLyAgICAodXNlZCB3aWR0aCkgLyAoaW50cmluc2ljIHJhdGlvKQorICAgIC8vIDQuIE90aGVy
d2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhl
IGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVp
Z2h0IGlzIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgorICAgIC8vIDUuIE90aGVyd2lzZSwg
aWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0
aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWln
aHQnIG11c3QgYmUgc2V0IHRvCisgICAgLy8gICAgdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBy
ZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8sIGhhcyBhIGhlaWdodCBub3QgZ3JlYXRlciB0
aGFuIDE1MHB4LCBhbmQgaGFzIGEgd2lkdGggbm90IGdyZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdp
ZHRoLgorCisgICAgLy8gIzEKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZv
cm1hdHRpbmdDb250ZXh0KCk7CisgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9y
bWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOworICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZl
cnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
LmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3Io
MCkgfTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7CisKKyAgICBhdXRv
IGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChyZXBsYWNlZEJveCwg
dmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxvZ2ljYWxIZWlnaHQg
OiBXVEY6Om51bGxvcHQpOworICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcy5oZWlnaHQgJiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKKyAgICBhdXRv
IHdpZHRoSXNBdXRvID0gc3R5bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7CisKKyAgICBpZiAo
aGVpZ2h0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hl
aWdodCgpKSB7CisgICAgICAgIC8vICMyCisgICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94Lmlu
dHJpbnNpY0hlaWdodCgpOworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2Vk
Qm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byB1
c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCku
Y29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHVzZWRXaWR0aCAvIHJlcGxhY2Vk
Qm94LmludHJpbnNpY1JhdGlvKCk7CisgICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVw
bGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKKyAgICAgICAgLy8gIzQKKyAgICAgICAg
aGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVpZ2h0KCk7CisgICAgfSBlbHNlIGlmICho
ZWlnaHRJc0F1dG8pIHsKKyAgICAgICAgLy8gIzUKKyAgICAgICAgaGVpZ2h0ID0geyAxNTAgfTsK
KyAgICB9CisKKyAgICBBU1NFUlQoaGVpZ2h0KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGluZmxv
dyByZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7CisgICAg
cmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07Cit9CisKK0NvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRo
QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29u
c3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICAvLyAxMC4zLjIgSW5s
aW5lLCByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gQSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYmVjb21lcyBhIHVz
ZWQgdmFsdWUgb2YgJzAnLgorICAgIC8vCisgICAgLy8gMS4gSWYgJ2hlaWdodCcgYW5kICd3aWR0
aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFs
c28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgorICAgIC8vCisgICAgLy8gMi4gSWYgJ2hlaWdodCcg
YW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBl
bGVtZW50IGhhcyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBkb2VzIGhhdmUgYW4gaW50cmluc2lj
IGhlaWdodCBhbmQgaW50cmluc2ljIHJhdGlvOworICAgIC8vICAgIG9yIGlmICd3aWR0aCcgaGFz
IGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBvdGhlciBjb21w
dXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgcmF0aW87
CisgICAgLy8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAodXNlZCBoZWln
aHQpICogKGludHJpbnNpYyByYXRpbykKKyAgICAvLworICAgIC8vIDMuIElmICdoZWlnaHQnIGFu
ZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxl
bWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVpZ2h0IG9yIHdp
ZHRoLAorICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyB1bmRlZmlu
ZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlmIHRoZSBjb250
YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0aGUgcmVwbGFj
ZWQKKyAgICAvLyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24gdXNlZCBmb3Ig
YmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdy4KKyAgICAv
LworICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRo
YXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCisgICAgLy8K
KyAgICAvLyA1LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2Yg
J2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRo
ZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBweC4KKyAgICAvLyAgICBJZiAzMDBw
eCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRo
IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0
aGUgZGV2aWNlIGluc3RlYWQuCisKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9
IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworCisgICAgYXV0byB1c2VkTWFyZ2luU3RhcnQgPSBb
Jl0geworICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luKQorICAg
ICAgICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbi0+c3RhcnQ7
CisgICAgICAgIHJldHVybiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigw
X2x1KTsKKyAgICB9OworCisgICAgYXV0byB1c2VkTWFyZ2luRW5kID0gWyZdIHsKKyAgICAgICAg
aWYgKG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVy
biBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4tPmVuZDsKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KTsKKyAgICB9OworCisg
ICAgYXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKyAgICBhdXRvIGhlaWdodElzQXV0
byA9IGlzSGVpZ2h0QXV0byhyZXBsYWNlZEJveCk7CisgICAgYXV0byBoZWlnaHQgPSBjb21wdXRl
ZEhlaWdodChyZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3Ry
YWludHMtPmxvZ2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOworCisgICAgaWYgKCF3aWR0aCAm
JiBoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSkgeworICAg
ICAgICAvLyAjMQorICAgICAgICB3aWR0aCA9IHJlcGxhY2VkQm94LmludHJpbnNpY1dpZHRoKCk7
CisgICAgfSBlbHNlIGlmICgoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiAhcmVwbGFjZWRCb3gu
aGFzSW50cmluc2ljV2lkdGgoKSAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSAm
JiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpKQorICAgICAgICB8fCAoIXdpZHRoICYm
IGhlaWdodCAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpKSkgeworICAgICAgICAv
LyAjMgorICAgICAgICB3aWR0aCA9IGhlaWdodC52YWx1ZU9yKHJlcGxhY2VkQm94Lmhhc0ludHJp
bnNpY0hlaWdodCgpKSAqIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlvKCk7CisgICAgfSBlbHNl
IGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1Jh
dGlvKCkgJiYgIXJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkgJiYgIXJlcGxhY2VkQm94
Lmhhc0ludHJpbnNpY0hlaWdodCgpKSB7CisgICAgICAgIC8vICMzCisgICAgICAgIC8vIEZJWE1F
OiB1bmRlZmluZWQgYnV0IHN1cmVseSBkb2FibGUuCisgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgfSBlbHNlIGlmICghd2lkdGggJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljV2lkdGgoKSkgeworICAgICAgICAvLyAjNAorICAgICAgICB3aWR0aCA9IHJlcGxhY2Vk
Qm94LmludHJpbnNpY1dpZHRoKCk7CisgICAgfSBlbHNlIGlmICghd2lkdGgpIHsKKyAgICAgICAg
Ly8gIzUKKyAgICAgICAgd2lkdGggPSB7IDMwMCB9OworICAgIH0KKworICAgIEFTU0VSVCh3aWR0
aCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVh
bSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3
aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRNYXJnaW5TdGFydCgpIDw8ICJweCwgIiA8PCB1
c2VkTWFyZ2luRW5kKCkgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwg
IikiKTsKKyAgICByZXR1cm4geyAqd2lkdGgsIHsgdXNlZE1hcmdpblN0YXJ0KCksIHVzZWRNYXJn
aW5FbmQoKSB9IH07Cit9CisKK0xheW91dFNpemUgRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dQ
b3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFT
U0VSVChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgLy8gOS40LjMgUmVs
YXRpdmUgcG9zaXRpb25pbmcKKyAgICAvLworICAgIC8vIFRoZSAndG9wJyBhbmQgJ2JvdHRvbScg
cHJvcGVydGllcyBtb3ZlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50KHMpIHVwIG9yIGRv
d24gd2l0aG91dCBjaGFuZ2luZyB0aGVpciBzaXplLgorICAgIC8vIFRvcCcgbW92ZXMgdGhlIGJv
eGVzIGRvd24sIGFuZCAnYm90dG9tJyBtb3ZlcyB0aGVtIHVwLiBTaW5jZSBib3hlcyBhcmUgbm90
IHNwbGl0IG9yIHN0cmV0Y2hlZCBhcyBhIHJlc3VsdCBvZiAndG9wJyBvciAnYm90dG9tJywgdGhl
IHVzZWQgdmFsdWVzIGFyZSBhbHdheXM6IHRvcCA9IC1ib3R0b20uCisgICAgLy8KKyAgICAvLyAx
LiBJZiBib3RoIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBib3RoICcwJy4KKyAg
ICAvLyAyLiBJZiBvbmUgb2YgdGhlbSBpcyAnYXV0bycsIGl0IGJlY29tZXMgdGhlIG5lZ2F0aXZl
IG9mIHRoZSBvdGhlci4KKyAgICAvLyAzLiBJZiBuZWl0aGVyIGlzICdhdXRvJywgJ2JvdHRvbScg
aXMgaWdub3JlZCAoaS5lLiwgdGhlIHVzZWQgdmFsdWUgb2YgJ2JvdHRvbScgd2lsbCBiZSBtaW51
cyB0aGUgdmFsdWUgb2YgJ3RvcCcpLgorCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFp
bnRzLmxvZ2ljYWxXaWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5s
b2dpY2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNv
bXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7
CisKKyAgICBpZiAoIXRvcCAmJiAhYm90dG9tKSB7CisgICAgICAgIC8vICMxCisgICAgICAgIHRv
cCA9IGJvdHRvbSA9IHsgMCB9OworICAgIH0gZWxzZSBpZiAoIXRvcCkgeworICAgICAgICAvLyAj
MgorICAgICAgICB0b3AgPSAtKmJvdHRvbTsKKyAgICB9IGVsc2UgaWYgKCFib3R0b20pIHsKKyAg
ICAgICAgLy8gIzMKKyAgICAgICAgYm90dG9tID0gLSp0b3A7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gIzQKKyAgICAgICAgYm90dG9tID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIC8v
IEZvciByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBt
b3ZlIHRoZSBib3goZXMpIGhvcml6b250YWxseSwgd2l0aG91dCBjaGFuZ2luZyB0aGVpciBzaXpl
LgorICAgIC8vICdMZWZ0JyBtb3ZlcyB0aGUgYm94ZXMgdG8gdGhlIHJpZ2h0LCBhbmQgJ3JpZ2h0
JyBtb3ZlcyB0aGVtIHRvIHRoZSBsZWZ0LgorICAgIC8vIFNpbmNlIGJveGVzIGFyZSBub3Qgc3Bs
aXQgb3Igc3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICdsZWZ0JyBvciAncmlnaHQnLCB0aGUgdXNl
ZCB2YWx1ZXMgYXJlIGFsd2F5czogbGVmdCA9IC1yaWdodC4KKyAgICAvLworICAgIC8vIDEuIElm
IGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgKHRoZWlyIGluaXRpYWwgdmFsdWVz
KSwgdGhlIHVzZWQgdmFsdWVzIGFyZSAnMCcgKGkuZS4sIHRoZSBib3hlcyBzdGF5IGluIHRoZWly
IG9yaWdpbmFsIHBvc2l0aW9uKS4KKyAgICAvLyAyLiBJZiAnbGVmdCcgaXMgJ2F1dG8nLCBpdHMg
dXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUgb2YgJ3JpZ2h0JyAoaS5lLiwgdGhlIGJveGVz
IG1vdmUgdG8gdGhlIGxlZnQgYnkgdGhlIHZhbHVlIG9mICdyaWdodCcpLgorICAgIC8vIDMuIElm
ICdyaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgaXMgbWludXMg
dGhlIHZhbHVlIG9mICdsZWZ0Jy4KKyAgICAvLyA0LiBJZiBuZWl0aGVyICdsZWZ0JyBub3IgJ3Jp
Z2h0JyBpcyAnYXV0bycsIHRoZSBwb3NpdGlvbiBpcyBvdmVyLWNvbnN0cmFpbmVkLCBhbmQgb25l
IG9mIHRoZW0gaGFzIHRvIGJlIGlnbm9yZWQuCisgICAgLy8gICAgSWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLCB0aGUgdmFsdWUgb2Yg
J2xlZnQnIHdpbnMgYW5kICdyaWdodCcgYmVjb21lcyAtJ2xlZnQnLgorICAgIC8vICAgIElmICdk
aXJlY3Rpb24nIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnLCAncmlnaHQnIHdpbnMg
YW5kICdsZWZ0JyBpcyBpZ25vcmVkLgorCisgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShz
dHlsZS5sb2dpY2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byByaWdo
dCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKKworICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKKyAgICAgICAgLy8gIzEKKyAgICAg
ICAgbGVmdCA9IHJpZ2h0ID0geyAwIH07CisgICAgfSBlbHNlIGlmICghbGVmdCkgeworICAgICAg
ICAvLyAjMgorICAgICAgICBsZWZ0ID0gLSpyaWdodDsKKyAgICB9IGVsc2UgaWYgKCFyaWdodCkg
eworICAgICAgICAvLyAjMworICAgICAgICByaWdodCA9IC0qbGVmdDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyAjNAorICAgICAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7
CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQorICAgICAgICAgICAgcmlnaHQg
PSAtKmxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxlZnQgPSBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgQVNTRVJUKCFib3R0b20gfHwgKnRvcCA9PSAtKmJvdHRvbSk7CisgICAg
QVNTRVJUKCFsZWZ0IHx8ICpsZWZ0ID09IC0qcmlnaHQpOworCisgICAgYXV0byB0b3BQb3NpdGlv
bk9mZnNldCA9ICp0b3A7CisgICAgYXV0byBsZWZ0UG9zaXRpb25PZmZzZXQgPSBsZWZ0LnZhbHVl
T3IoLSpyaWdodCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXSAtPiBwb3NpdGlvbmVkIGluZmxvdyAtPiB0b3Agb2Zm
c2V0KCIgPDwgdG9wUG9zaXRpb25PZmZzZXQgPDwgInB4KSBsZWZ0IG9mZnNldCgiIDw8IGxlZnRQ
b3NpdGlvbk9mZnNldCA8PCAicHgpIGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsK
KyAgICByZXR1cm4geyBsZWZ0UG9zaXRpb25PZmZzZXQsIHRvcFBvc2l0aW9uT2Zmc2V0IH07Cit9
CisKK2lubGluZSBzdGF0aWMgV3JpdGluZ01vZGUgdXNlZFdyaXRpbmdNb2RlKGNvbnN0IEJveCYg
bGF5b3V0Qm94KQoreworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtd3JpdGluZy1t
b2Rlcy00LyNsb2dpY2FsLWRpcmVjdGlvbi1sYXlvdXQKKyAgICAvLyBGbG93LXJlbGF0aXZlIGRp
cmVjdGlvbnMgYXJlIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB3cml0aW5nIG1vZGUg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhlIGJveC4KKyAgICAvLyBGb3IgaW5saW5lLWxl
dmVsIGJveGVzLCB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBwYXJlbnQgYm94IGlzIHVzZWQgaW5z
dGVhZC4KKyAgICByZXR1cm4gbGF5b3V0Qm94LmlzSW5saW5lTGV2ZWxCb3goKSA/IGxheW91dEJv
eC5wYXJlbnQoKS5zdHlsZSgpLndyaXRpbmdNb2RlKCkgOiBsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkuc3R5bGUoKS53cml0aW5nTW9kZSgpOworfQorCitFZGdlcyBGb3JtYXR0aW5nR2VvbWV0
cnk6OmNvbXB1dGVkQm9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1h
dHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltCb3JkZXJdIC0+IGxheW91dEJveDogIiA8
PCAmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4geworICAgICAgICB7IExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyTGVmdFdpZHRoKCkpLCBMYXlvdXRVbml0KHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSkg
fSwKKyAgICAgICAgeyBMYXlvdXRVbml0KHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpLCBMYXlvdXRV
bml0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpIH0KKyAgICB9OworfQorCitPcHRpb25hbDxF
ZGdlcz4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcoY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFsYXlvdXRCb3guaXNQYWRkaW5nQXBwbGljYWJsZSgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bh
ZGRpbmddIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4gRWRnZXMg
eworICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdMZWZ0KCksIGNvbnRhaW5p
bmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ1JpZ2h0KCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKSB9LAorICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRp
bmdUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRk
aW5nQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9CisgICAgfTsKK30KKworQ29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh1c2VkV3JpdGluZ01vZGUobGF5b3V0Qm94KSkpCisgICAgICAgIHJldHVybiB7IGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07CisgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Ub3AoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKK30KKworQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0
cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBjb250YWluaW5nQmxv
Y2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0aW5nTW9kZShsYXlvdXRCb3gpKSkKKyAgICAg
ICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Ub3AoKSwgY29udGFpbmluZ0Js
b2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCkgfTsKKyAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkxl
ZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblJp
Z2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OworfQorCitGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0cmFpbkJ5
TWluTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoKSBjb25zdAoreworICAgIGF1dG8m
IHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBtaW5XaWR0aCA9IGZpeGVkVmFs
dWUoc3R5bGUubG9naWNhbE1pbldpZHRoKCkpOworICAgIGF1dG8gbWF4V2lkdGggPSBmaXhlZFZh
bHVlKHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpKTsKKyAgICBpZiAoIW1pbldpZHRoICYmICFtYXhX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOworCisgICAgaWYgKG1heFdpZHRo
KSB7CisgICAgICAgIGludHJpbnNpY1dpZHRoLm1pbmltdW0gPSBzdGQ6Om1pbigqbWF4V2lkdGgs
IGludHJpbnNpY1dpZHRoLm1pbmltdW0pOworICAgICAgICBpbnRyaW5zaWNXaWR0aC5tYXhpbXVt
ID0gc3RkOjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKKyAgICB9CisK
KyAgICBpZiAobWluV2lkdGgpIHsKKyAgICAgICAgaW50cmluc2ljV2lkdGgubWluaW11bSA9IHN0
ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWluaW11bSk7CisgICAgICAgIGludHJp
bnNpY1dpZHRoLm1heGltdW0gPSBzdGQ6Om1heCgqbWluV2lkdGgsIGludHJpbnNpY1dpZHRoLm1h
eGltdW0pOworICAgIH0KKworICAgIEFTU0VSVChpbnRyaW5zaWNXaWR0aC5taW5pbXVtIDw9IGlu
dHJpbnNpY1dpZHRoLm1heGltdW0pOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKK30KKwor
Rm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCBGb3JtYXR0
aW5nR2VvbWV0cnk6OmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb25zdCBDb250YWlu
ZXJCb3gmIGNvbnRhaW5lckJveCkKK3sKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY29udGFpbmVyQm94KTsKKyAgICByZXR1cm4gewor
ICAgICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCksIGJveEdlb21ldHJ5LnBhZGRp
bmdCb3hXaWR0aCgpIH0sCisgICAgICAgIHsgYm94R2VvbWV0cnkucGFkZGluZ0JveFRvcCgpLCBi
b3hHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCkgfSwKKyAgICAgICAgYm94R2VvbWV0cnkuY29u
dGVudEJveFdpZHRoKCkgfTsKK30KKworRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCwgT3B0aW9uYWw8Rm9ybWF0dGlu
Z0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQoreworICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChjb250YWluZXJCb3gs
IGVzY2FwZVJlYXNvbik7CisgICAgcmV0dXJuIHsgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94TGVm
dCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9IH07Cit9CisKK30KK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNjZDljMDE1ODlj
OWFhM2ZhZDMwMzVlODcxZThkOTM1ODFjYjYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAg
LTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFJl
cGxhY2VkQm94Oworc3RydWN0IENvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbjsKK3N0cnVjdCBDb21w
dXRlZFZlcnRpY2FsTWFyZ2luOworY2xhc3MgQ29udGFpbmVyQm94Oworc3RydWN0IENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47CitzdHJ1Y3QgQ29udGVudFdpZHRoQW5kTWFyZ2luOworc3RydWN0IEVk
Z2VzOworc3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsKK2NsYXNzIExheW91dFN0YXRlOworc3Ry
dWN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzOworc3RydWN0IE92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlczsKK3N0cnVjdCBWZXJ0aWNhbEdlb21ldHJ5OworCisvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgorY2xhc3MgRm9ybWF0dGluZ0dl
b21ldHJ5IHsKK3B1YmxpYzoKKyAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1ZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNv
bnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnko
Y29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxD
b25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8VmVy
dGljYWxDb25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0
OworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFu
ZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYpOworCisgICAgTGF5b3V0U2l6ZSBpbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAg
ICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworCisgICAgRWRnZXMgY29tcHV0ZWRCb3JkZXIoY29u
c3QgQm94JikgY29uc3Q7CisgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25z
dCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdDsKKworICAgIENv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgQ29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbiBjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYpIGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29t
cHV0ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVk
VmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5KSBjb25zdDsKKworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExh
eW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Cisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94JiwgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBj
b25zdDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluV2lkdGgoY29uc3Qg
Qm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gY29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKTsKKworICAgIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29uc3QgQm94JiwgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpIGNvbnN0OworCisgICAgTGF5b3V0VW5p
dCBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJv
eCYpIGNvbnN0OworCisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9yT3V0T2ZG
bG93Q29udGVudCBjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVy
Qm94Jik7CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVu
dCBjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiwgT3B0aW9u
YWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gPSBXVEY6Om51bGxvcHQpOworCisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHQoY29uc3QgQm94JiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5k
IGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0OworICAgIEZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBG
b3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOyB9Cisg
ICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4
dC5sYXlvdXRTdGF0ZSgpOyB9CisgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRp
bmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29u
c3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYp
IGNvbnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250
YWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYpOworCisgICAgVmVydGljYWxHZW9tZXRyeSBvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dOb25S
ZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwor
CisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudEhlaWdo
dEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0
IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9h
dGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7
CisKKyAgICBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3Np
dGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9u
ZWQoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAg
ICBlbnVtIGNsYXNzIEhlaWdodFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmLCBIZWlnaHRUeXBl
LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQpIGNvbnN0OworCisg
ICAgZW51bSBjbGFzcyBXaWR0aFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYsIFdpZHRoVHlwZSwg
TGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisKKyAgICBjb25zdCBGb3JtYXR0aW5n
Q29udGV4dCYgbV9mb3JtYXR0aW5nQ29udGV4dDsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Js
b2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4IDVmZmM4
MGUxZmJlMmMyOWZmYTZiNjc5NDBiNzQ4MTJjMzEzYWM4ZTQuLmEyMjcyOGVkYmU5YTJmNWI1ZTg0
ZTc4NWMwZDIxODg2N2RiYmZmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBMYXlvdXQgewogCiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6QmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0
aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1h
dHRpbmdDb250ZXh0KQorICAgIDogRm9ybWF0dGluZ0dlb21ldHJ5KGJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQpCiB7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW4K
ICAgICAgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJl
ZCB3aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBh
biBhbm9ueW1vdXMgYmxvY2sgYm94LgogCiAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICBhdXRv
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIGF1dG8gbm9u
Q29sbGFwc2VkTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMg
eyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCiAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFk
ZGluZ1RvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7CiAgICAgICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29udGVudFdp
ZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE0KICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAKICAgICAgICAgYXV0byB3aWR0aCA9
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpOwotICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OworICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKICAgICAgICAgVXNlZEhvcml6b250YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJn
aW47CiAgICAgICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsK
ICAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggNzQwYTY1
YjA5NmFkZGRhZTg2YTg4OTIwNTMzNzQyZmUwNDFhNjlmOC4uMDZhNDAzMjBkNWRlNDdjMDAxNGM1
ODMzNTc1ZWE3YzY2ZWU4ZDE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaApAQCAtMjcsMTMgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiRm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5k
IHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29u
dGV4dC4KLWNsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeSB7CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSA6IHB1Ymxp
YyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5KGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKIApAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwogICAgIENvbnRlbnRXaWR0aEFu
ZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNl
ZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzJik7CiAKLSAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7
IH0KKyAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRp
bmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAppbmRleCAxNzFiNWNmYzI2MTU1MmRh
Zjk0Y2QyMjY5YmM1OThlNDcyMTg5ZTk1Li44MzE5NTBlNWYyNmZmNjZkMGYwMDY1NTZlODBkYTg1
ZDcxMmZiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5OjpGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KGNv
bnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZmxleEZvcm1hdHRpbmdDb250ZXh0KQotICAgIDog
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGZsZXhGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6
IEZvcm1hdHRpbmdHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRleHQpCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4IGE3ZmU1ZDg2ZGE4NTg4
ZjIyNWMyMGYwMTk4YjEyYzJhY2IyZDRlYTMuLjYyOGM5MzM1MjgyYzgxMzIxNmE2MjMxZjE3M2Rj
ZGZmMjc5ZjI1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnku
aApAQCAtMjcsMjIgKzI3LDIwIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIAotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGb3Jt
YXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlICJG
b3JtYXR0aW5nR2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExh
eW91dCB7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5n
IGZvciBmbGV4IGl0ZW1zLgotY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIEZsZXhGb3JtYXR0
aW5nR2VvbWV0cnkoY29uc3QgRmxleEZvcm1hdHRpbmdDb250ZXh0Jik7CiAKICAgICBGb3JtYXR0
aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNvbnN0IENvbnRhaW5lckJveCYpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IEZsZXhG
b3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KKyAgICBjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RmxleEZvcm1hdHRp
bmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
LmNwcAppbmRleCAxODdkZmY0YmQ4MjdjMGIzZmUxZjFkMmJjZDQ4YTliODgxNGIxZGM4Li43Mzcz
ZDFlMmJjZjMyOGU3YjVhZDYzZTA3MGUwMWUwMWVlZTk4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTY2NCw3ICs2NjQsNyBA
QCB2b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFkanVz
dChjb25zdCBMaW5lQm94OjpJbmxpbmVMZQogfQogCiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6
OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnkoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBGb3JtYXR0aW5nR2VvbWV0cnkoaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQpCiB7CiB9CiAKQEAgLTcwOCw3ICs3MDgsNyBAQCBDb250ZW50
V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVCbG9ja0NvbnRl
bnRXaWR0aEFuZE1hcmdpbgogICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0
dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKIAog
ICAgIC8vICMyCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1h
dHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKIAogICAgIHJldHVybiBDb250ZW50V2lkdGhB
bmRNYXJnaW4geyAqd2lkdGgsIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVl
T3IoMF9sdSksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KSB9IH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCmlu
ZGV4IDg5YmY4N2YzNGJhZmE0MDU3ODc4YTJhNmExOWU1N2NjZjY4ZDgyYTAuLmM2YzdlMmZhZmFk
YWY2YTYwYTNkMDdmNzNiNjAwNmI0YTIyOTY2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIElubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CiBwdWJsaWM6
CiAgICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50Jik7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yTmV4dExpbmUo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmKSBjb25zdDsKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ7CiAgICAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0Jik7CiAKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsg
fQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0
aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiAKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggZmMyOTlkMTdiZTk5
NWU1NWFmNmFiMWNhZTNhOTkzYzc1NzQ5MjllYy4uNGNkZDA4YjM1OWY3Y2JmYzQ1ZDM5ZGU4NDgy
YmVkYzQ3ZGYxMTg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIExheW91dCB7CiAKIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5OjpUYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiB0YWJsZUZvcm1hdHRpbmdDb250
ZXh0LCBjb25zdCBUYWJsZUdyaWQmIGdyaWQpCi0gICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnkodGFibGVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeSh0
YWJsZUZvcm1hdHRpbmdDb250ZXh0KQogICAgICwgbV9ncmlkKGdyaWQpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggOTRiMTk2ZTkyYzIw
OTVmZmVhMWQxZjZjZTJjMTI3NWU5Zjc0ZDNmMS4uMGYzZDRmYWVkMjZjNWY5N2Y0NjI3NWJkMzU5
NTYxNDUxOTY2Y2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAi
Rm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCi1jbGFzcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgOiBw
dWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGNlbGxI
ZWlnaChjb25zdCBDb250YWluZXJCb3gmKSBjb25zdDsKICAgICBFZGdlcyBjb21wdXRlZENlbGxC
b3JkZXIoY29uc3QgVGFibGVHcmlkOjpDZWxsJikgY29uc3Q7CkBAIC00NCw3ICs0NCw3IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgVGFi
bGVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0
IFRhYmxlR3JpZCYpOwogCi0gICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250
ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9
CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiAgICAgY29uc3QgVGFibGVHcmlkJiBt
X2dyaWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaApp
bmRleCBkMzI1MTViZGRmMjllZjhjMDE1N2Y1YjUyZDY2YzM1OGIwMTg4M2ZjLi5hZjYyYjI1OGI5
YjQ1ODc5ZTViZjNjZWE1ZGY5OGM0ZWIzM2E4YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFi
bGVGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGlu
Z1F1aXJrczo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KLSAgICBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnkoKTsgfQorICAgIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkg
Y29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpOyB9CiB9OwogCiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428761</attachid>
            <date>2021-05-15 18:55:33 -0700</date>
            <delta_ts>2021-05-15 18:57:02 -0700</delta_ts>
            <desc>[fast-cq] Patch</desc>
            <filename>bug-225752-20210515185532.patch</filename>
            <type>text/plain</type>
            <size>182743</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmEwM2Q3ZmUwMjk3NWJi
MDQ2MDVjMTAxMjg5YTFiM2RlMGNhOGQ4NC4uMGM0Mzk2MmUxNTk4OTYwOTJmMDI1OWVjOGFiODQ2
MmYyYjk2NTEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIGJhc2UgZm9y
bWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3duIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU3NTIKKworICAgICAgICBSZXZpZXdlZCBieSBB
bnR0aSBLb2l2aXN0by4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
Zm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGF5b3V0U3RhdGUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmxheW91dFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpn
ZW9tZXRyeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxh
eW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0dlb21ldHJ5OjpCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4p
OgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3JtYXR0aW5nR2VvbWV0cnk6OkZsZXhGb3JtYXR0aW5n
R2VvbWV0cnkpOgorICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZsZXhGb3Jt
YXR0aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlv
dXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6Oklu
bGluZUZvcm1hdHRpbmdHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW5saW5lQmxvY2tDb250ZW50V2lkdGhBbmRNYXJnaW4pOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRp
bmdHZW9tZXRyeS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OlRhYmxlRm9ybWF0
dGluZ0dlb21ldHJ5KToKKyAgICAgICAgKiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxl
L1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3Mu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nUXVpcmtzOjpnZW9t
ZXRyeSBjb25zdCk6CisKIDIwMjEtMDUtMTUgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdIE1vdmUgdGFibGUgZm9ybWF0dGluZyBnZW9tZXRyeSB0byBpdHMg
b3duIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDk5MzEwMDFhZjYzMDFhYjc5YjgyMDBhMTNiMjZh
ODJjM2RkOTUyNzUuLjdmNDEzODUwYTgzYjc0NWVjZDc5ZjZkZGY1YzBhMjcwMGZhYWU3MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBpbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcAogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFn
ZW50LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5jcHAK
LWxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
K2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmNwcAogbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nUXVpcmtzLmNwcAogbGF5b3V0L0Zvcm1hdHRp
bmdTdGF0ZS5jcHAKIGxheW91dC9MYXlvdXRDb250ZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGU5ZGY2OTVlNDc3NDQy
MDI1MTI5MDcxZmM5YjE5NTJkNjY0MDllYWIuLjUzZWRmZmI3MzY3YmQwNmJiMWViY2U2YTYyNDhh
OGEyNDQ1YjAxMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTEzMzMsNiArMTMzMyw3IEBACiAJCTQ2RUZBRjEyMUU1RkI5RjEw
MEU3RjM0QiAvKiBMb3dQb3dlck1vZGVOb3RpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDZFRkFGMTAxRTVGQjlFMTAwRTdGMzRCIC8qIExvd1Bv
d2VyTW9kZU5vdGlmaWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDZGMDJBMUEyMzczN0Y4MzAwMTA2QTY0IC8qIEV2ZW50TG9vcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUIwQUJDQTEyMzY3OUFC
MzAwQjQ1MDg1IC8qIEV2ZW50TG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQ2RkNCNjE4MUE3MDgyMEUwMEM1QTIxRSAvKiBEaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEMzdCMzc1MTVDMUE3RTEwMDZEQzg5OCAvKiBEaWFnbm9zdGljTG9nZ2luZ0tleXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0NzVDODlB
NDI2NTBBQzNDMDBGM0I0NTYgLyogRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NzVDODlBMzI2NTBBQzNCMDBGM0I0NTYg
LyogRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDc4NjM1NjUyNjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0
dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0Nzg2MzU2NDI2NTA3QTM3MDBDNUUyRTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0N0M0
RDU3RDI2NTA4QkNCMDBDN0FCMUYgLyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0N0M0RDU3QzI2NTA4QkNB
MDBDN0FCMUYgLyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhD
IC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDdGOTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0
dGluZ1F1aXJrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC04MzkwLDYgKzgzOTEsNyBAQAogCQk0NkVGQUYwRjFFNUZCOUUxMDBFN0YzNEIgLyog
TG93UG93ZXJNb2RlTm90aWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTG93UG93ZXJNb2RlTm90aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NkVGQUYxMDFFNUZCOUUxMDBFN0YzNEIgLyogTG93UG93ZXJNb2RlTm90aWZpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG93UG93ZXJNb2RlTm90aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDZGOTFCQzkxRkNERDBGRTAwMTU5OUMzIC8q
IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTV29ya2VyTmF2aWdhdG9yQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDc1Qzg5QTMyNjUwQUMzQjAwRjNCNDU2IC8qIEZvcm1hdHRpbmdHZW9tZXRy
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb3JtYXR0aW5nR2VvbWV0cnku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDc4NjM1NjQyNjUwN0EzNzAwQzVFMkUw
IC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQ3QzRENTdDMjY1MDhCQ0EwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dl
b21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0N0RBMjY1MDJGMkYw
MDg3OTY4QyAvKiBCbG9ja0Zvcm1hdHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMDAzMCw3ICsxMDAzMiw3IEBACiAJCTZGQjdEMkQ4MjUwRkQ3RUYwMDAyMDdB
QSAvKiBGbGV4Rm9ybWF0dGluZ1N0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsZXhGb3Jt
YXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkI3RDJEOTI1
MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEZsZXhGb3JtYXR0aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2RkI3RDJEQTI1MEZEN0ZDMDAwMjA3QUEgLyogRmxleEZvcm1hdHRp
bmdTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGV4Rm9ybWF0dGlu
Z1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZGQkI4NjA1MjBCNDY0QjYw
MERBRDkzOCAvKiBGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvcm1hdHRpbmdHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTZGQzNGOTQ1MjUxNjc1NjYwMEE0OUJFQSAvKiBJbmxpbmVMaW5l
UnVuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUxpbmVSdW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZDNTNBRUIyNEFGN0E4RTAwNjA1OUZFIC8q
IFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUYWJsZUZvcm1h
dHRpbmdRdWlya3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkM1Q0E5MjIy
RTM1OTkzMDBCMTNFMTEgLyogVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVGFibGVGb3JtYXR0aW5nU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI2NDUsNyArMjI2NDcsOCBAQAogCQkJCTZGQzVDQTkxMjJFMzU5MzMwMEIxM0UxMSAv
KiB0YWJsZSAqLywKIAkJCQkxMTVDRkE2OTIwOEFGN0QwMDAxRTY5OTEgLyogRm9ybWF0dGluZ0Nv
bnRleHQuY3BwICovLAogCQkJCTExNUNGQTY4MjA4QUY3RDAwMDFFNjk5MSAvKiBGb3JtYXR0aW5n
Q29udGV4dC5oICovLAotCQkJCTZGQkI4NjA1MjBCNDY0QjYwMERBRDkzOCAvKiBGb3JtYXR0aW5n
Q29udGV4dEdlb21ldHJ5LmNwcCAqLywKKwkJCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyog
Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKKwkJCQk0NzVDODlBMzI2NTBBQzNCMDBGM0I0NTYg
LyogRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCiAJCQkJNkY4RjQ2MDEyMUIwM0JCNDAwNDFBQzNB
IC8qIEZvcm1hdHRpbmdRdWlya3MuY3BwICovLAogCQkJCTZGNTZCNDQ2MjY0NzlFNjEwMEFBRTI1
NyAvKiBGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkpOwpAQCAtMzI1NTQsNiArMzI1NTcsNyBA
QAogCQkJCUQwNUNFRDJBMEE0MEJCMkMwMEM1QUYzOCAvKiBGb3JtYXRCbG9ja0NvbW1hbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252
ZXJ0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTExNUNGQTZBMjA4QUY3RDAwMDFFNjk5MSAvKiBG
b3JtYXR0aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDc1Qzg5QTQyNjUwQUMzQzAw
RjNCNDU2IC8qIEZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY1NkI0
NDcyNjQ3OUU2MjAwQUFFMjU3IC8qIEZvcm1hdHRpbmdRdWlya3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTExNUNGQTc2MjA4QUZFMzAwMDFFNjk5MSAvKiBGb3JtYXR0aW5nU3RhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY1MDY2NEY4MTU3RjUyREMwMEFDMjI2RiAvKiBGb3JtQ29udHJvbGxlci5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDU4NGFkMWU2
Y2I1NmI4ZWJkYzEyN2FjMTZjZDEyNDRiY2Y0ZGRjNjMuLjAxODE4MmYyOGFlYmY2YmZkNDg4NTdl
MWQzYWQxMjM1N2MyNmFlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2lu
Y2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIkZvcm1hdHRpbmdRdWlya3Mu
aCIKICNpbmNsdWRlICJGb3JtYXR0aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbnZhbGlkYXRpb25T
dGF0ZS5oIgpAQCAtMjcxLDYgKzI3MiwxMSBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb2xs
ZWN0T3V0T2ZGbG93RGVzY2VuZGFudHNJZk5lZWRlZCgpCiAgICAgfQogfQogCitGb3JtYXR0aW5n
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzKTsKK30KKwogRm9ybWF0dGluZ1F1aXJrcyBGb3Jt
YXR0aW5nQ29udGV4dDo6cXVpcmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gRm9ybWF0dGluZ1F1
aXJrcygqdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL0Zvcm1hdHRpbmdDb250ZXh0LmgKaW5kZXggYTI1M2ExMWVlNTVlMmZi
ZTk3MGE4YTViMTdhMjcyYTRkM2JlOTY0MS4uYzQwY2Q3NTQ4YzFmMzg0OWYxZGFkMmViYWVjMzg0
MzhkMjUzMmU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDEsMjEgKzQxLDEyIEBA
IHN0cnVjdCBMZW5ndGg7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgQm94R2VvbWV0cnk7
Ci1jbGFzcyBSZXBsYWNlZEJveDsKLXN0cnVjdCBDb21wdXRlZEhvcml6b250YWxNYXJnaW47Ci1z
dHJ1Y3QgQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbjsKIGNsYXNzIENvbnRhaW5lckJveDsKLXN0cnVj
dCBDb250ZW50SGVpZ2h0QW5kTWFyZ2luOwotc3RydWN0IENvbnRlbnRXaWR0aEFuZE1hcmdpbjsK
LXN0cnVjdCBFZGdlczsKK2NsYXNzIEZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIEZvcm1hdHRp
bmdTdGF0ZTsKIGNsYXNzIEZvcm1hdHRpbmdRdWlya3M7Ci1zdHJ1Y3QgSG9yaXpvbnRhbEdlb21l
dHJ5OwogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7CiBjbGFzcyBMYXlvdXRTdGF0ZTsKLXN0cnVj
dCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlczsKLXN0cnVjdCBPdmVycmlkZGVuVmVydGljYWxW
YWx1ZXM7Ci1zdHJ1Y3QgVmVydGljYWxHZW9tZXRyeTsKIAogY2xhc3MgRm9ybWF0dGluZ0NvbnRl
eHQgewogICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoRm9ybWF0dGluZ0NvbnRleHQpOwpAQCAt
MTExLDgzICsxMDIsOSBAQCBwdWJsaWM6CiAgICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkg
Y29uc3Q7CiAgICAgY29uc3QgRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2Zvcm1hdHRpbmdTdGF0ZTsgfQogCisgICAgRm9ybWF0dGluZ0dlb21ldHJ5
IGdlb21ldHJ5KCkgY29uc3Q7CiAgICAgRm9ybWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsK
IAotICAgIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBnZW5lcmljIHBvc2l0aW9uaW5nIGFuZCBz
aXppbmcuCi0gICAgY2xhc3MgR2VvbWV0cnkgewotICAgIHB1YmxpYzoKLSAgICAgICAgVmVydGlj
YWxHZW9tZXRyeSBvdXRPZkZsb3dWZXJ0aWNhbEdlb21ldHJ5KGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBP
dmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21l
dHJ5IG91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IGZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9u
dGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmKSBjb25zdDsK
LSAgICAgICAgQ29udGVudFdpZHRoQW5kTWFyZ2luIGZsb2F0aW5nQ29udGVudFdpZHRoQW5kTWFy
Z2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgQ29udGVudEhlaWdodEFuZE1hcmdp
biBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gm
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBPcHRpb25hbDxWZXJ0aWNhbENvbnN0cmFp
bnRzPiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENv
bnRlbnRXaWR0aEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihj
b25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIE9wdGlvbmFs
PFZlcnRpY2FsQ29uc3RyYWludHM+LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYp
OwotCi0gICAgICAgIExheW91dFNpemUgaW5GbG93UG9zaXRpb25lZFBvc2l0aW9uT2Zmc2V0KGNv
bnN0IEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYpIGNvbnN0OwotCi0gICAgICAg
IENvbnRlbnRIZWlnaHRBbmRNYXJnaW4gY29tcGxpY2F0ZWRDYXNlcyhjb25zdCBCb3gmLCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMm
KSBjb25zdDsKLSAgICAgICAgTGF5b3V0VW5pdCBzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYs
IExheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwotCi0gICAgICAgIEVkZ2VzIGNvbXB1dGVkQm9y
ZGVyKGNvbnN0IEJveCYpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxFZGdlcz4gY29tcHV0ZWRQ
YWRkaW5nKGNvbnN0IEJveCYsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0
OwotCi0gICAgICAgIENvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBjb21wdXRlZEhvcml6b250YWxN
YXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0g
ICAgICAgIENvbXB1dGVkVmVydGljYWxNYXJnaW4gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmKSBjb25zdDsKLQotICAgICAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYgZ2VvbWV0cnlQ
cm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3Q7Ci0gICAgICAg
IE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVkVmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVBy
b3BlcnR5KSBjb25zdDsKLQotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZE1p
bkhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tI
ZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRVbml0
PiBjb21wdXRlZE1heEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotCi0gICAgICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluV2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBj
b250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkTWF4V2lkdGgoY29uc3QgQm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7
Ci0KLSAgICAgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMg
Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gmLCBJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKSBjb25zdDsKLQotICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRIZWlnaHRGb3JGb3JtYXR0
aW5nQ29udGV4dFJvb3QoY29uc3QgQ29udGFpbmVyQm94JikgY29uc3Q7Ci0KLSAgICAgICAgQ29u
c3RyYWludHNGb3JPdXRPZkZsb3dDb250ZW50IGNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVu
dChjb25zdCBDb250YWluZXJCb3gmKTsKLSAgICAgICAgQ29uc3RyYWludHNGb3JJbkZsb3dDb250
ZW50IGNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudChjb25zdCBDb250YWluZXJCb3gmLCBPcHRp
b25hbDxFc2NhcGVSZWFzb24+ID0gV1RGOjpudWxsb3B0KTsKLQotICAgICAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBjb21wdXRlZEhlaWdodChjb25zdCBCb3gmLCBPcHRpb25hbDxMYXlvdXRVbml0
PiBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgICAgICBP
cHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYsIExheW91dFVuaXQg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBmcmllbmQg
Y2xhc3MgRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgICAgIEdlb21ldHJ5KGNvbnN0IEZvcm1hdHRp
bmdDb250ZXh0Jik7Ci0KLSAgICAgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOyB9Ci0gICAg
ICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIHsgcmV0dXJuIG1fZm9ybWF0dGluZ0NvbnRl
eHQubGF5b3V0U3RhdGUoKTsgfQotICAgICAgICBjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9y
bWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRpbmdDb250ZXh0OyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1JlcGxhY2Vk
VmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMmKSBjb25zdDsKLSAgICAgICAgSG9yaXpvbnRhbEdlb21ldHJ5IG91dE9mRmxv
d1JlcGxhY2VkSG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7Ci0KLSAgICAgICAgVmVydGljYWxHZW9tZXRyeSBv
dXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94Jiwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYs
IGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OwotICAgICAgICBIb3Jpem9u
dGFsR2VvbWV0cnkgb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoY29uc3Qg
Q29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKLQotICAgICAgICBDb250ZW50SGVpZ2h0QW5kTWFyZ2lu
IGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzJikgY29uc3Q7Ci0gICAgICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9hdGluZ1Jl
cGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9y
aXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsK
LQotICAgICAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwotCi0gICAgICAgIExheW91dFVu
aXQgc3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94
JiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYpIGNvbnN0OwotICAgICAgICBMYXlvdXRVbml0
IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7Ci0KLSAgICAgICAgZW51bSBj
bGFzcyBIZWlnaHRUeXBlIHsgTWluLCBNYXgsIE5vcm1hbCB9OwotICAgICAgICBPcHRpb25hbDxM
YXlvdXRVbml0PiBjb21wdXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYsIEhlaWdodFR5cGUsIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3Q7Ci0KLSAgICAg
ICAgZW51bSBjbGFzcyBXaWR0aFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07Ci0gICAgICAgIE9w
dGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkV2lkdGhWYWx1ZShjb25zdCBCb3gmLCBXaWR0aFR5
cGUsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0gICAgICAgIGNvbnN0IEZv
cm1hdHRpbmdDb250ZXh0JiBtX2Zvcm1hdHRpbmdDb250ZXh0OwotICAgIH07Ci0gICAgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdlb21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnko
KnRoaXMpOyB9Ci0KIHByb3RlY3RlZDoKICAgICB1c2luZyBMYXlvdXRRdWV1ZSA9IFZlY3Rvcjxj
b25zdCBCb3gqPjsKIApAQCAtMjA4LDExICsxMjUsNiBAQCBwcml2YXRlOgogICAgIEZvcm1hdHRp
bmdTdGF0ZSYgbV9mb3JtYXR0aW5nU3RhdGU7CiB9OwogCi1pbmxpbmUgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGlu
Z0NvbnRleHQpCi0gICAgOiBtX2Zvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdDb250ZXh0KQot
ewotfQotCiBpbmxpbmUgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50czo6ZXhwYW5kKExheW91dFVuaXQgaG9yaXpvbnRhbFZhbHVlKQogewogICAgIG1pbmlt
dW0gKz0gaG9yaXpvbnRhbFZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0NvbnRleHRHZW9t
ZXRyeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjE5NjU3YjhiZTcxOTlh
YTNmZmMyMDZmNTcyMWE3MmNkNjJjODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9G
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb3JtYXR0
aW5nQ29udGV4dC5oIgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0K
LSNpbmNsdWRlICJCbG9ja0Zvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkZsZXhGb3JtYXR0
aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGbG9hdGluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJGbG9h
dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVk
ZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxv
Y2suaCIKLSNpbmNsdWRlICJMYXlvdXRSZXBsYWNlZEJveC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0
byhjb25zdCBCb3gmIGxheW91dEJveCkKLXsKLSAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0
aGUgJ2hlaWdodCcgcHJvcGVydHkKLSAgICAvLwotICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNh
bGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gn
cyBjb250YWluaW5nIGJsb2NrLgotICAgIC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5p
bmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9u
IGNvbnRlbnQgaGVpZ2h0KSwKLSAgICAvLyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2VkIGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRv
JyB3YXMgc3BlY2lmaWVkLgotCi0gICAgYXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodC5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoaGVpZ2h0LmlzUGVyY2VudCgpKSB7Ci0gICAgICAgIGlmIChsYXlv
dXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgcmV0dXJuICFsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5s
b2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21w
dXRlZEhlaWdodFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5
cGUsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKLXsK
LSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gaGVpZ2h0ID0g
aGVpZ2h0VHlwZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkg
OiBoZWlnaHRUeXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQo
KSA6IHN0eWxlLmxvZ2ljYWxNYXhIZWlnaHQoKTsKLSAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVk
KCkgfHwgaGVpZ2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQu
aXNNaW5Db250ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRV
bml0IHsgaGVpZ2h0LnZhbHVlKCkgfTsKLQotICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0
KSB7Ci0gICAgICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQotICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5o
ZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRC
b3gpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFp
bmluZ0Jsb2NrTG9naWNhbEhlaWdodCA9IFsmXSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0
aGUgYmxvY2sgbGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBi
b3ggKDxzcGFuPjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRp
bnVhdGlvbiwKLSAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnlt
b3VzIHdyYXBwZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhl
aWdodC4KLSAgICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5
b3V0Qm94LmluaXRpYWxDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8qIGNvbnRhaW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRh
aW5pbmdCbG9jayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0g
JmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Js
b2NrLT5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0
ID0gZml4ZWRWYWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAq
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJv
eCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAotewot
ICAgIGlmIChhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWln
aHRUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKLSAgICAgICAgaWYgKGxh
eW91dEJveC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKLSAg
ICAgICAgICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICByZXR1
cm4gKmhlaWdodCAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnku
dmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVybiB7IH07Ci19
Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBl
LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotewotICAgIC8vIEFwcGxpZXMgdG86
IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJlcGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNo
ZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlvbmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdl
IGRvbid0IGJsb2NraWZ5IHRoZW0pLgotICAgIEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94
KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKLQotICAgIGF1dG8gd2lk
dGggPSBbJl0gewotICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
ICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFs
OgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBjYXNl
IFdpZHRoVHlwZTo6TWluOgotICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0
aCgpOwotICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWF4OgotICAgICAgICAgICAgcmV0dXJuIHN0
eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gc3R5bGUubG9naWNhbFdpZHRoKCk7Ci0gICAgfSgpOwot
ICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUgPSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBj
b250YWluaW5nQmxvY2tXaWR0aCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlZFZhbHVlOwotCi0g
ICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpIHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdp
ZHRoLmlzRml0Q29udGVudCgpKSB7Ci0gICAgICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlv
dXRCb3gpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgYXV0byYgY29udGFpbmVy
Qm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpOwotICAgICAgICAvLyBGSVhN
RTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVkIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJh
dGVseS4KLSAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKLSAg
ICAgICAgICAgIGlmICghY29udGFpbmVyQm94Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgMF9sdSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGggfTsKLSAgICAgICAgICAgIEFTU0VSVChjb250YWluZXJCb3gu
ZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICAgICAgICAgIGF1dG8mIGZvcm1h
dHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKGNvbnRhaW5l
ckJveCk7Ci0gICAgICAgICAgICBpZiAoYXV0byBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0g
Zm9ybWF0dGluZ1N0YXRlLmludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gKmludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgICAgICAgICByZXR1
cm4gTGF5b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY29udGFpbmVyQm94LCBs
YXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAg
ICAgIH0oKTsKLSAgICAgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgpKQotICAgICAgICAgICAg
cmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bTsKLSAgICAgICAgaWYgKHdp
ZHRoLmlzTWF4Q29udGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMubWF4aW11bTsKLSAgICAgICAgQVNTRVJUKHdpZHRoLmlzRml0Q29udGVudCgpKTsK
LSAgICAgICAgLy8gSWYgdGhlIGF2YWlsYWJsZSBzcGFjZSBpbiBhIGdpdmVuIGF4aXMgaXMgZGVm
aW5pdGUsIGVxdWFsIHRvIG1pbihtYXgtY29udGVudCBzaXplLAotICAgICAgICAvLyBtYXgobWlu
LWNvbnRlbnQgc2l6ZSwgc3RyZXRjaC1maXQgc2l6ZSkpLiBPdGhlcndpc2UsIGVxdWFsIHRvIHRo
ZSBtYXgtY29udGVudCBzaXplIGluIHRoYXQgYXhpcy4KLSAgICAgICAgLy8gRklYTUU6IFdlIGRv
bid0IHlldCBoYXZlIGluZGVmaW5pdGUgYXZhaWxhYmxlIHNpemUuCi0gICAgICAgIHJldHVybiBz
dGQ6Om1pbihpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1heGltdW0sIHN0ZDo6bWF4KGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBM
YXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQotewotICAgIGlmIChhdXRvIGNvbXB1dGVk
V2lkdGggPSBjb21wdXRlZFdpZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok5vcm1hbCwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpKSB7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94
LnN0eWxlKCk7Ci0gICAgICAgIC8vIE5vbi1xdWFudGl0YXRpdmUgdmFsdWVzIHN1Y2ggYXMgYXV0
byBhbmQgbWluLWNvbnRlbnQgYXJlIG5vdCBpbmZsdWVuY2VkIGJ5IHRoZSBib3gtc2l6aW5nIHBy
b3BlcnR5LgotICAgICAgICBpZiAoc3R5bGUuYm94U2l6aW5nKCkgPT0gQm94U2l6aW5nOjpDb250
ZW50Qm94IHx8IHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKLSAgICAgICAgICAg
IHJldHVybiBjb21wdXRlZFdpZHRoOwotICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgcmV0dXJu
ICpjb21wdXRlZFdpZHRoIC0gKGJveEdlb21ldHJ5Lmhvcml6b250YWxCb3JkZXIoKSArIGJveEdl
b21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWVPcigwKSk7Ci0gICAgfQotICAgIHJldHVy
biB7IH07Ci19Ci0KLUxheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250
ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJveCYgZm9y
bWF0dGluZ0NvbnRleHRSb290KSBjb25zdAotewotICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4
dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoaXNIZWln
aHRBdXRvKGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgfHwgZm9ybWF0dGluZ0NvbnRleHRSb290LmVz
dGFibGlzaGVzVGFibGVGb3JtYXR0aW5nQ29udGV4dCgpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc1RhYmxlQ2VsbCgpKTsKLSAgICBhdXRvIHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5p
dCB7IH07IAotICAgIGF1dG8gaGFzQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5oYXNJ
bkZsb3dPckZsb2F0aW5nQ2hpbGQoKTsKLSAgICAvLyBUaGUgdXNlZCBoZWlnaHQgb2YgdGhlIGNv
bnRhaW5tZW50IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5
b3V0IG9mIHRoZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNv
bnRlbnQuCi0gICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRS
b290LmlzU2l6ZUNvbnRhaW5tZW50Qm94KCk7Ci0gICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3Vs
ZElnbm9yZUNvbnRlbnQpCi0gICAgICAgIHVzZWRDb250ZW50SGVpZ2h0ID0gTGF5b3V0Q29udGV4
dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoZm9ybWF0dGluZ0NvbnRleHRSb290LCBjb25zdF9j
YXN0PExheW91dFN0YXRlJj4obGF5b3V0U3RhdGUoKSkpLT51c2VkQ29udGVudEhlaWdodCgpOwot
ICAgIHJldHVybiB1c2VkQ29udGVudEhlaWdodDsKLX0KLQotT3B0aW9uYWw8TGF5b3V0VW5pdD4g
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZFZhbHVlKGNvbnN0IExlbmd0aCYg
Z2VvbWV0cnlQcm9wZXJ0eSwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29uc3QK
LXsKLSAgICAvLyAgSW4gZ2VuZXJhbCwgdGhlIGNvbXB1dGVkIHZhbHVlIHJlc29sdmVzIHRoZSBz
cGVjaWZpZWQgdmFsdWUgYXMgZmFyIGFzIHBvc3NpYmxlIHdpdGhvdXQgbGF5aW5nIG91dCB0aGUg
Y29udGVudC4KLSAgICBpZiAoZ2VvbWV0cnlQcm9wZXJ0eS5pc0ZpeGVkKCkgfHwgZ2VvbWV0cnlQ
cm9wZXJ0eS5pc1BlcmNlbnQoKSB8fCBnZW9tZXRyeVByb3BlcnR5LmlzQ2FsY3VsYXRlZCgpKQot
ICAgICAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoZ2VvbWV0cnlQcm9wZXJ0eSwgY29udGFpbmlu
Z0Jsb2NrV2lkdGgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zml4ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdl
b21ldHJ5UHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFnZW9tZXRyeVByb3BlcnR5LmlzRml4
ZWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gTGF5b3V0VW5pdCB7IGdlb21l
dHJ5UHJvcGVydHkudmFsdWUoKSB9OwotfQotCi0vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NT
MjIvdmlzdWRldC5odG1sI21pbi1tYXgtaGVpZ2h0cwotLy8gU3BlY2lmaWVzIGEgcGVyY2VudGFn
ZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHVzZWQgdmFsdWUuIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1
bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBj
b250YWluaW5nIGJsb2NrLgotLy8gSWYgdGhlIGhlaWdodCBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGkuZS4sIGl0IGRlcGVuZHMgb24gY29udGVu
dCBoZWlnaHQpLCBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQs
Ci0vLyB0aGUgcGVyY2VudGFnZSB2YWx1ZSBpcyB0cmVhdGVkIGFzICcwJyAoZm9yICdtaW4taGVp
Z2h0Jykgb3IgJ25vbmUnIChmb3IgJ21heC1oZWlnaHQnKS4KLU9wdGlvbmFsPExheW91dFVuaXQ+
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94
JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdo
dFR5cGU6Ok1heCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLX0KLQotT3B0aW9uYWw8TGF5b3V0
VW5pdD4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZE1pbkhlaWdodChjb25z
dCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0KSBjb25zdAotewotICAgIHJldHVybiBjb21wdXRlZEhlaWdodFZhbHVlKGxheW91dEJveCwg
SGVpZ2h0VHlwZTo6TWluLCBjb250YWluaW5nQmxvY2tIZWlnaHQpOwotfQotCi1PcHRpb25hbDxM
YXlvdXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTWluV2lkdGgo
Y29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpCi17
Ci0gICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRCb3gsIFdpZHRoVHlwZTo6TWlu
LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmIGxheW91
dEJveCwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkKLXsKLSAgICByZXR1cm4gY29t
cHV0ZWRXaWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKTsKLX0KLQotTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0
YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBjb25zdCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzKSBj
b25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwot
Ci0gICAgLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBuZXh0LCB0
aGUgdGVybSAic3RhdGljIHBvc2l0aW9uIiAob2YgYW4gZWxlbWVudCkgcmVmZXJzLCByb3VnaGx5
LCB0byB0aGUgcG9zaXRpb24gYW4gZWxlbWVudCB3b3VsZCBoYXZlCi0gICAgLy8gaGFkIGluIHRo
ZSBub3JtYWwgZmxvdy4gTW9yZSBwcmVjaXNlbHksIHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yICd0
b3AnIGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AgZWRnZSBvZiB0aGUgY29udGFpbmluZyBi
bG9jayB0byB0aGUgdG9wIG1hcmdpbgotICAgIC8vIGVkZ2Ugb2YgYSBoeXBvdGhldGljYWwgYm94
IHRoYXQgd291bGQgaGF2ZSBiZWVuIHRoZSBmaXJzdCBib3ggb2YgdGhlIGVsZW1lbnQgaWYgaXRz
IHNwZWNpZmllZCAncG9zaXRpb24nIHZhbHVlIGhhZCBiZWVuICdzdGF0aWMnIGFuZCBpdHMgc3Bl
Y2lmaWVkCi0gICAgLy8gJ2Zsb2F0JyBoYWQgYmVlbiAnbm9uZScgYW5kIGl0cyBzcGVjaWZpZWQg
J2NsZWFyJyBoYWQgYmVlbiAnbm9uZScuIChOb3RlIHRoYXQgZHVlIHRvIHRoZSBydWxlcyBpbiBz
ZWN0aW9uIDkuNyB0aGlzIG1pZ2h0IHJlcXVpcmUgYWxzbyBhc3N1bWluZyBhIGRpZmZlcmVudAot
ICAgIC8vIGNvbXB1dGVkIHZhbHVlIGZvciAnZGlzcGxheScuKSBUaGUgdmFsdWUgaXMgbmVnYXRp
dmUgaWYgdGhlIGh5cG90aGV0aWNhbCBib3ggaXMgYWJvdmUgdGhlIGNvbnRhaW5pbmcgYmxvY2su
Ci0KLSAgICAvLyBTdGFydCB3aXRoIHRoaXMgYm94J3MgYm9yZGVyIGJveCBvZmZzZXQgZnJvbSB0
aGUgcGFyZW50J3MgYm9yZGVyIGJveC4KLSAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRo
aXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgTGF5b3V0VW5pdCB0b3A7Ci0gICAgaWYgKGxh
eW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKSAmJiBsYXlvdXRCb3gucHJldmlvdXNJbkZs
b3dTaWJsaW5nKCktPmlzQmxvY2tMZXZlbEJveCgpKSB7Ci0gICAgICAgIC8vIEFkZCBzaWJsaW5n
IG9mZnNldAotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSAqbGF5b3V0Qm94
LnByZXZpb3VzSW5GbG93U2libGluZygpOwotICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Jv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocHJldmlvdXNJbkZs
b3dTaWJsaW5nLCBFc2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkp
OwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxCbG9ja0Zvcm1hdHRp
bmdTdGF0ZT4obGF5b3V0U3RhdGUoKS5mb3JtYXR0aW5nU3RhdGVGb3JCb3gocHJldmlvdXNJbkZs
b3dTaWJsaW5nKSk7Ci0gICAgICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJldmlvdXNC
b3ggPSBmb3JtYXR0aW5nU3RhdGUudXNlZFZlcnRpY2FsTWFyZ2luKHByZXZpb3VzSW5GbG93U2li
bGluZyk7Ci0KLSAgICAgICAgdG9wICs9IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KHByZXZp
b3VzSW5GbG93Qm94R2VvbWV0cnkpLmJvdHRvbSgpICsgdXNlZFZlcnRpY2FsTWFyZ2luRm9yUHJl
dmlvdXNCb3gubm9uQ29sbGFwc2VkVmFsdWVzLmFmdGVyOwotICAgIH0gZWxzZQotICAgICAgICB0
b3AgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCks
IEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29udGVudEJv
eFRvcCgpOwotCi0gICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRh
aW5pbmcgYmxvY2suCi0gICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpOwotICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0
ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCi0gICAgZm9yIChhdXRvKiBhbmNlc3Rv
ciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgewotICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3Rvciwg
RXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxvd0dlb21ldHJ5KTsKLSAgICAgICAg
Ly8gQm94R2VvbWV0cnk6OnRvcCBpcyB0aGUgYm9yZGVyIGJveCB0b3AgcG9zaXRpb24gaW4gaXRz
IGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgdG9wICs9IEJv
eEdlb21ldHJ5Ojpib3JkZXJCb3hUb3AoYm94R2VvbWV0cnkpOwotICAgICAgICBBU1NFUlQoIWFu
Y2VzdG9yLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7
Ci0gICAgfQotICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUg
cGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25l
ZCBib3hlcy4KLSAgICByZXR1cm4gdG9wIC0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9w
OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9y
aXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7Ci0g
ICAgLy8gU2VlIHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkIGZv
ciB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgc3RhdGljIHBvc2l0aW9uLgotCi0gICAgLy8gU3RhcnQg
d2l0aCB0aGlzIGJveCdzIGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRl
ciBib3guCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29u
dGV4dCgpOwotICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveC5wYXJlbnQoKSwgRXNjYXBlUmVhc29uOjpPdXRPZkZsb3dCb3hOZWVkc0luRmxv
d0dlb21ldHJ5KS5jb250ZW50Qm94TGVmdCgpOwotCi0gICAgLy8gUmVzb2x2ZSBsZWZ0IGFsbCB0
aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5nIGJsb2NrLgotICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKLSAgICAvLyBTdGFydCB3aXRoIHRo
ZSBwYXJlbnQgc2luY2Ugd2UgcHJldGVuZCB0aGF0IHRoaXMgYm94IGlzIG5vcm1hbCBmbG93Lgot
ICAgIGZvciAoYXV0byogYW5jZXN0b3IgPSAmbGF5b3V0Qm94LnBhcmVudCgpOyBhbmNlc3RvciAh
PSAmY29udGFpbmluZ0Jsb2NrOyBhbmNlc3RvciA9ICZhbmNlc3Rvci0+Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKLSAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveCgqYW5jZXN0b3IsIEVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZs
b3dHZW9tZXRyeSk7Ci0gICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIg
Ym94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5
c3RlbS4KLSAgICAgICAgbGVmdCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9t
ZXRyeSk7Ci0gICAgICAgIEFTU0VSVCghYW5jZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91
dEJveC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKLSAgICB9Ci0gICAgLy8gTW92ZSB0aGUgc3RhdGlj
IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNp
ZmljIHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgotICAgIHJldHVybiBsZWZ0IC0gaG9y
aXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OwotfQotCi1MYXlvdXRVbml0IEZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRp
bmdDb250ZXh0Um9vdCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKLXsKLSAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBz
aHJpbmsgdG8gZml0IC0+IHVuc3VwcG9ydGVkIC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0g
PDwgInB4KSBsYXlvdXRCb3g6ICIgPDwgJmZvcm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOwot
ICAgIEFTU0VSVChmb3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29u
dGV4dCgpKTsKLQotICAgIC8vIENhbGN1bGF0aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRo
IGlzIHNpbWlsYXIgdG8gY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2lu
ZyB0aGUgYXV0b21hdGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCi0gICAgLy8gUm91Z2hseTog
Y2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgd2lkdGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3
aXRob3V0IGJyZWFraW5nIGxpbmVzIG90aGVyIHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVh
a3Mgb2NjdXIsCi0gICAgLy8gYW5kIGFsc28gY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11
bSB3aWR0aCwgZS5nLiwgYnkgdHJ5aW5nIGFsbCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIu
MiBkb2VzIG5vdCBkZWZpbmUgdGhlIGV4YWN0IGFsZ29yaXRobS4KLSAgICAvLyBUaGlyZGx5LCBm
aW5kIHRoZSBhdmFpbGFibGUgd2lkdGg6IGluIHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGgg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbWludXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4t
bGVmdCcsICdib3JkZXItbGVmdC13aWR0aCcsCi0gICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRk
aW5nLXJpZ2h0JywgJ2JvcmRlci1yaWdodC13aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhl
IHdpZHRocyBvZiBhbnkgcmVsZXZhbnQgc2Nyb2xsIGJhcnMuCi0KLSAgICAvLyBUaGVuIHRoZSBz
aHJpbmstdG8tZml0IHdpZHRoIGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBh
dmFpbGFibGUgd2lkdGgpLCBwcmVmZXJyZWQgd2lkdGgpLgotICAgIGF1dG8gaW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgeyB9OwotICAgIGF1dG8g
aGFzQ29udGVudCA9IGlzPENvbnRhaW5lckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KSAmJiBk
b3duY2FzdDxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkuaGFzSW5GbG93T3JG
bG9hdGluZ0NoaWxkKCk7Ci0gICAgLy8gVGhlIHVzZWQgd2lkdGggb2YgdGhlIGNvbnRhaW5tZW50
IGJveCBpcyBkZXRlcm1pbmVkIGFzIGlmIHBlcmZvcm1pbmcgYSBub3JtYWwgbGF5b3V0IG9mIHRo
ZSBib3gsIGV4Y2VwdCB0aGF0IGl0IGlzIHRyZWF0ZWQgYXMgaGF2aW5nIG5vIGNvbnRlbnQuCi0g
ICAgYXV0byBzaG91bGRJZ25vcmVDb250ZW50ID0gZm9ybWF0dGluZ0NvbnRleHRSb290LmlzU2l6
ZUNvbnRhaW5tZW50Qm94KCk7ICAKLSAgICBpZiAoaGFzQ29udGVudCAmJiAhc2hvdWxkSWdub3Jl
Q29udGVudCkgewotICAgICAgICBhdXRvJiByb290ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94Pihm
b3JtYXR0aW5nQ29udGV4dFJvb3QpOwotICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGVGb3JS
b290ID0gbGF5b3V0U3RhdGUoKS5lbnN1cmVGb3JtYXR0aW5nU3RhdGUocm9vdCk7Ci0gICAgICAg
IGF1dG8gcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gZm9ybWF0dGluZ1N0
YXRlRm9yUm9vdC5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmICghcHJl
Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKQotICAgICAgICAgICAgaW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KHJvb3QsIGxheW91dFN0YXRlKCkpLT5jb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9
ICpwcmVjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7Ci0gICAgfQotICAgIHJldHVy
biBzdGQ6Om1pbihzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGF2
YWlsYWJsZVdpZHRoKSwgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtKTsKLX0KLQot
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05v
blJlcGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwg
Y29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0
IFZlcnRpY2FsQ29uc3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAg
IEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWxheW91dEJveC5p
c1JlcGxhY2VkQm94KCkpOwotICAgIEFTU0VSVCh2ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxI
ZWlnaHQpOwotCi0gICAgLy8gMTAuNi40IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyBGb3IgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGVs
ZW1lbnRzLCB0aGUgdXNlZCB2YWx1ZXMgb2YgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbnMgbXVzdCBz
YXRpc2Z5IHRoaXMgY29uc3RyYWludDoKLSAgICAvLyAndG9wJyArICdtYXJnaW4tdG9wJyArICdi
b3JkZXItdG9wLXdpZHRoJyArICdwYWRkaW5nLXRvcCcgKyAnaGVpZ2h0JyArICdwYWRkaW5nLWJv
dHRvbScgKyAnYm9yZGVyLWJvdHRvbS13aWR0aCcgKyAnbWFyZ2luLWJvdHRvbScgKyAnYm90dG9t
JwotICAgIC8vID0gaGVpZ2h0IG9mIGNvbnRhaW5pbmcgYmxvY2sKLQotICAgIC8vIElmIGFsbCB0
aHJlZSBvZiAndG9wJywgJ2hlaWdodCcsIGFuZCAnYm90dG9tJyBhcmUgYXV0bywgc2V0ICd0b3An
IHRvIHRoZSBzdGF0aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIHRocmVlIGJlbG93
LgotCi0gICAgLy8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgYXJlICdhdXRvJzogSWYgYm90aCAnbWFy
Z2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gdW5kZXIgdGhlIGV4dHJhCi0gICAgLy8gY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lu
cyBnZXQgZXF1YWwgdmFsdWVzLiBJZiBvbmUgb2YgJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90
dG9tJyBpcyAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhhdCB2YWx1ZS4KLSAgICAv
LyBJZiB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0KLSAgICAvLyBPdGhlcndpc2Us
IHBpY2sgdGhlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0K
LSAgICAvLyAxLiAndG9wJyBhbmQgJ2hlaWdodCcgYXJlICdhdXRvJyBhbmQgJ2JvdHRvbScgaXMg
bm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9uIHRoZSBjb250ZW50IHBlciAx
MC42LjcsCi0gICAgLy8gICAgIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCi0gICAgLy8gMi4gJ3Rv
cCcgYW5kICdib3R0b20nIGFyZSAnYXV0bycgYW5kICdoZWlnaHQnIGlzIG5vdCAnYXV0bycsIHRo
ZW4gc2V0ICd0b3AnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24sIHNldCAnYXV0bycgdmFsdWVzIGZv
cgotICAgIC8vICAgICdtYXJnaW4tdG9wJyBhbmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBz
b2x2ZSBmb3IgJ2JvdHRvbScKLSAgICAvLyAzLiAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScgYXJlICdh
dXRvJyBhbmQgJ3RvcCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgaGVpZ2h0IGlzIGJhc2VkIG9u
IHRoZSBjb250ZW50IHBlciAxMC42LjcsIHNldCAnYXV0bycKLSAgICAvLyAgICAgdmFsdWVzIGZv
ciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICdi
b3R0b20nCi0gICAgLy8gNC4gJ3RvcCcgaXMgJ2F1dG8nLCAnaGVpZ2h0JyBhbmQgJ2JvdHRvbScg
YXJlIG5vdCAnYXV0bycsIHRoZW4gc2V0ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tdG9wJyBh
bmQgJ21hcmdpbi1ib3R0b20nIHRvIDAsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcKLSAgICAvLyA1LiAn
aGVpZ2h0JyBpcyAnYXV0bycsICd0b3AnIGFuZCAnYm90dG9tJyBhcmUgbm90ICdhdXRvJywgdGhl
biAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyBhcmUg
c2V0IHRvIDAgYW5kIHNvbHZlIGZvciAnaGVpZ2h0JwotICAgIC8vIDYuICdib3R0b20nIGlzICdh
dXRvJywgJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycg
dmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwIGFuZCBzb2x2
ZSBmb3IgJ2JvdHRvbScKLQotICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9y
bWF0dGluZ0NvbnRleHQoKTsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwot
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9ICp2ZXJ0aWNhbENv
bnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQ7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0KLSAgICBhdXRvIHRvcCA9IGNv
bXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0g
ICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxCb3R0b20oKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKLSAgICBh
dXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgVXNlZFZlcnRpY2Fs
TWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgdXNlZFZlcnRpY2FsTWFyZ2luOyAKLSAgICBhdXRv
IHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKLSAgICBh
dXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigw
KTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpOwotICAgIGF1
dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCk7Ci0KLSAgICBpZiAo
IXRvcCAmJiAhaGVpZ2h0ICYmICFib3R0b20pCi0gICAgICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2Fs
UG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxheW91dEJveCwgdmVydGljYWxDb25zdHJh
aW50cyk7Ci0KLSAgICBpZiAodG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKLSAgICAgICAgaWYg
KCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSAmJiAhY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlcikgewotICAgICAgICAgICAgYXV0byBtYXJnaW5CZWZvcmVBbmRBZnRlciA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWln
aHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0gICAgICAgICAg
ICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IG1hcmdpbkJlZm9yZUFuZEFmdGVyIC8gMiwgbWFyZ2lu
QmVmb3JlQW5kQWZ0ZXIgLyAyIH07Ci0gICAgICAgIH0gZWxzZSBpZiAoIWNvbXB1dGVkVmVydGlj
YWxNYXJnaW4uYmVmb3JlKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIg
PSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcjsKLSAgICAgICAgICAgIHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRv
cCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOwotICAgICAgICB9IGVsc2UgaWYg
KCFjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKSB7Ci0gICAgICAgICAgICB1c2VkVmVydGlj
YWxNYXJnaW4uYmVmb3JlID0gKmNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlOwotICAgICAg
ICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0g
KCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1Rv
cCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyAqY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUsICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIH07
Ci0gICAgICAgIC8vIE92ZXItY29uc3RyYWluZWQ/Ci0gICAgICAgIGF1dG8gYm94SGVpZ2h0ID0g
KnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxN
YXJnaW4uYWZ0ZXIgKyAqYm90dG9tOwotICAgICAgICBpZiAoYm94SGVpZ2h0ICE9IGNvbnRhaW5p
bmdCbG9ja0hlaWdodCkKLSAgICAgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0
aWNhbE1hcmdpbi5hZnRlcik7Ci0gICAgfQotCi0gICAgaWYgKCF0b3AgJiYgIWhlaWdodCAmJiBi
b3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOwotICAgICAgICB1c2VkVmVydGljYWxN
YXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1
dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICB0b3AgPSBjb250
YWluaW5nQmxvY2tIZWlnaHQgLSAodXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRv
cCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20pOyAKLSAgICB9Ci0KLSAgICBpZiAo
IXRvcCAmJiAhYm90dG9tICYmIGhlaWdodCkgewotICAgICAgICAvLyAjMgotICAgICAgICB0b3Ag
PSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNv
bXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxN
YXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OwotICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxv
Y2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1
c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOwotICAgIH0KLQotICAgIGlmICghaGVpZ2h0ICYmICFi
b3R0b20gJiYgdG9wKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGhlaWdodCA9IGNvbnRlbnRI
ZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QobGF5b3V0Qm94KTsKLSAgICAgICAgdXNlZFZl
cnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICAgICAgYm90
dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4u
YmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9t
ICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXRvcCAmJiBoZWlnaHQgJiYgYm90dG9tKSB7Ci0gICAgICAgIC8vICM0Ci0gICAgICAg
IHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFs
dWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07Ci0gICAg
ICAgIHRvcCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVm
b3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsg
Ym9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7Ci0gICAg
fQotCi0gICAgaWYgKCFoZWlnaHQgJiYgdG9wICYmIGJvdHRvbSkgewotICAgICAgICAvLyAjNQot
ICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVm
b3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9
OwotICAgICAgICBoZWlnaHQgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b20p
OwotICAgIH0KLQotICAgIGlmICghYm90dG9tICYmIHRvcCAmJiBoZWlnaHQpIHsKLSAgICAgICAg
Ly8gIzYKLSAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVl
T3IoMCkgfTsKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3Ag
KyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpo
ZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQodG9wKTsKLSAgICBBU1NFUlQoYm90dG9tKTsK
LSAgICBBU1NFUlQoaGVpZ2h0KTsKLQotICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0
aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUg
YW5jZXN0b3IuCi0gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBp
biB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0
IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5n
QmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9w
OwotICAgICp0b3AgKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKLSAgICAq
Ym90dG9tICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7Ci0KLSAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9u
XVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IHRvcCgiIDw8
ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgpIGhlaWdodCgiIDw8ICpo
ZWlnaHQgPDwgInB4KSBtYXJnaW4oIiA8PCB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlIDw8ICJw
eCwgIiAgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwg
JmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgKmhlaWdo
dCwgdXNlZFZlcnRpY2FsTWFyZ2luIH0gfTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2Vv
bWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25z
dHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCi17Ci0gICAgQVNTRVJUKGxheW91
dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3go
KSk7Ci0gICAgCi0gICAgLy8gMTAuMy43IEFic29sdXRlbHkgcG9zaXRpb25lZCwgbm9uLXJlcGxh
Y2VkIGVsZW1lbnRzCi0gICAgLy8KLSAgICAvLyAnbGVmdCcgKyAnbWFyZ2luLWxlZnQnICsgJ2Jv
cmRlci1sZWZ0LXdpZHRoJyArICdwYWRkaW5nLWxlZnQnICsgJ3dpZHRoJyArICdwYWRkaW5nLXJp
Z2h0JyArICdib3JkZXItcmlnaHQtd2lkdGgnICsgJ21hcmdpbi1yaWdodCcgKyAncmlnaHQnCi0g
ICAgLy8gPSB3aWR0aCBvZiBjb250YWluaW5nIGJsb2NrCi0KLSAgICAvLyBJZiBhbGwgdGhyZWUg
b2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAu
Ci0gICAgLy8gVGhlbiwgaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50
IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0
cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljCi0gICAgLy8gcG9zaXRpb24gYW5kIGFwcGx5IHJ1
bGUgbnVtYmVyIHRocmVlIGJlbG93OyBvdGhlcndpc2UsIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0
aWMgcG9zaXRpb24gYW5kIGFwcGx5IHJ1bGUgbnVtYmVyIG9uZSBiZWxvdy4KLSAgICAvLwotICAg
IC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQn
IGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIg
dGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVl
cywKLSAgICAvLyB1bmxlc3MgdGhpcyB3b3VsZCBtYWtlIHRoZW0gbmVnYXRpdmUsIGluIHdoaWNo
IGNhc2Ugd2hlbiBkaXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdy
dGwnKSwgc2V0ICdtYXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAotICAg
IC8vIHNvbHZlIGZvciAnbWFyZ2luLXJpZ2h0JyAoJ21hcmdpbi1sZWZ0JykuIElmIG9uZSBvZiAn
bWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzICdhdXRvJywgc29sdmUgdGhlIGVxdWF0
aW9uIGZvciB0aGF0IHZhbHVlLgotICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3Ry
YWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlv
bicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcK
LSAgICAvLyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5kIHNvbHZlIGZvciB0aGF0
IHZhbHVlLgotICAgIC8vCi0gICAgLy8gT3RoZXJ3aXNlLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3Ig
J21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMCwgYW5kIHBpY2sgdGhlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nIHNpeCBydWxlcyB0aGF0IGFwcGxpZXMuCi0gICAgLy8KLSAgICAvLyAx
LiAnbGVmdCcgYW5kICd3aWR0aCcgYXJlICdhdXRvJyBhbmQgJ3JpZ2h0JyBpcyBub3QgJ2F1dG8n
LCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmstdG8tZml0LiBUaGVuIHNvbHZlIGZvciAnbGVmdCcK
LSAgICAvLyAyLiAnbGVmdCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyBhbmQgJ3dpZHRoJyBpcyBu
b3QgJ2F1dG8nLCB0aGVuIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVu
dCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiAKLSAgICAvLyAgICBjb250YWluaW5n
IGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiwgb3RoZXJ3
aXNlIHNldCAncmlnaHQnIHRvIHRoZSBzdGF0aWMgcG9zaXRpb24uCi0gICAgLy8gICAgVGhlbiBz
b2x2ZSBmb3IgJ2xlZnQnIChpZiAnZGlyZWN0aW9uIGlzICdydGwnKSBvciAncmlnaHQnIChpZiAn
ZGlyZWN0aW9uJyBpcyAnbHRyJykuCi0gICAgLy8gMy4gJ3dpZHRoJyBhbmQgJ3JpZ2h0JyBhcmUg
J2F1dG8nIGFuZCAnbGVmdCcgaXMgbm90ICdhdXRvJywgdGhlbiB0aGUgd2lkdGggaXMgc2hyaW5r
LXRvLWZpdCAuIFRoZW4gc29sdmUgZm9yICdyaWdodCcKLSAgICAvLyA0LiAnbGVmdCcgaXMgJ2F1
dG8nLCAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAn
bGVmdCcKLSAgICAvLyA1LiAnd2lkdGgnIGlzICdhdXRvJywgJ2xlZnQnIGFuZCAncmlnaHQnIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZvciAnd2lkdGgnCi0gICAgLy8gNi4gJ3JpZ2h0JyBp
cyAnYXV0bycsICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgbm90ICdhdXRvJywgdGhlbiBzb2x2ZSBm
b3IgJ3JpZ2h0JwotCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0
aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAg
YXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3Ry
YWludHMubG9naWNhbFdpZHRoOwotICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KTsKLSAgICAKLSAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxMZWZ0
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8g
d2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/IG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0ZWRXaWR0aChsYXlvdXRCb3gsIGNvbnRhaW5pbmdC
bG9ja1dpZHRoKTsKLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOwotICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAg
IGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7
Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1
ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsK
LSAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKLSAgICBp
ZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdodCkgewotICAgICAgICAvLyBJZiBhbGwgdGhyZWUg
b2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJzdCBzZXQgYW55
ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAu
Ci0gICAgICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxl
bWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlz
ICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYwotICAgICAgICAvLyBwb3NpdGlvbiBhbmQg
YXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8g
dGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgotICAg
ICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9
OwotCi0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpv
bnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cyk7Ci0gICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQotICAgICAg
ICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247Ci0gICAgfSBlbHNlIGlm
IChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7Ci0gICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIHRo
cmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBh
cmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQg
dGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKLSAgICAgICAgLy8gdW5sZXNz
IHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gZGlyZWN0
aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNldCAnbWFyZ2lu
LWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKLSAgICAgICAgLy8gc29sdmUgZm9y
ICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdtYXJnaW4tbGVmdCcg
b3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQg
dmFsdWUuCi0gICAgICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3RyYWluZWQsIGln
bm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlvbicgcHJvcGVy
dHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcKLSAgICAgICAg
Ly8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFuZCBzb2x2ZSBmb3IgdGhhdCB2YWx1
ZS4KLSAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgJiYgIWNvbXB1
dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luU3RhcnRB
bmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRk
aW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsK
LSAgICAgICAgICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKQotICAgICAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBtYXJnaW5TdGFydEFuZEVuZCAvIDIsIG1hcmdpblN0
YXJ0QW5kRW5kIC8gMiB9OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1OwotICAgICAgICAgICAgICAgICAgICB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jp
em9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsg
cGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9IDBf
bHU7Ci0gICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAq
d2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCArICpyaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQpIHsKLSAgICAgICAg
ICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250YWxNYXJnaW4u
ZW5kOwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBjb250YWluaW5n
QmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCAr
IHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsg
KnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVu
ZCkgewotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAqY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luLnN0YXJ0OwotICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4u
ZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdp
bi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdo
dCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0
LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OwotICAgICAgICAgICAgLy8gT3ZlcmNv
bnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxlZnQpLgotICAgICAgICAgICAgaWYgKGlzTGVmdFRv
UmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArICpsZWZ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFy
dCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE90aGVyd2lzZSwgc2V0ICdhdXRvJyB2YWx1ZXMg
Zm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAsIGFuZCBwaWNrIHRoZSBv
bmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgotICAgICAgICB1c2Vk
SG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVl
T3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIH0K
LQotICAgIGlmICghbGVmdCAmJiAhd2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzEKLSAg
ICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmluZyBmb3IgJ3dp
ZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAoaW4gY2FzZSAxKSB0byAwCi0gICAgICAgIGxlZnQg
PSBMYXlvdXRVbml0IHsgMCB9OwotICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArIGJv
cmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNl
ZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKLSAgICAgICAgd2lkdGggPSBzaHJpbmtU
b0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpOwotICAgICAgICBsZWZ0ID0gY29u
dGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgICsgYm9yZGVyUmlnaHQg
KyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIWxl
ZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIGF1dG8gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7Ci0gICAgICAg
IGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBsZWZ0ID0gc3RhdGlj
SG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAgICAgICAgcmlnaHQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmln
aHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247Ci0gICAgICAgICAgICBsZWZ0ID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJMZWZ0
ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVz
ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
aWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVmdCkgewotICAgICAgICAvLyAjMwotICAgICAgICAv
LyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAnd2lkdGgnIGFm
dGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCi0gICAgICAgIHJpZ2h0ID0gTGF5
b3V0VW5pdCB7IDAgfTsKLSAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdC
bG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBib3JkZXJM
ZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jp
em9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7Ci0gICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRX
aWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgIH0gZWxzZSBpZiAoIWxlZnQgJiYg
d2lkdGggJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzQKLSAgICAgICAgbGVmdCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCAr
IHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIXdpZHRoICYm
IGxlZnQgJiYgcmlnaHQpIHsKLSAgICAgICAgLy8gIzUKLSAgICAgICAgd2lkdGggPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyB1c2Vk
SG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0ICYm
IGxlZnQgJiYgd2lkdGgpIHsKLSAgICAgICAgLy8gIzYKLSAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOwotICAgIH0KLQotICAgIEFTU0VSVChsZWZ0
KTsKLSAgICBBU1NFUlQocmlnaHQpOwotICAgIEFTU0VSVCh3aWR0aCk7Ci0KLSAgICAvLyBGb3Ig
b3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRo
ZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhl
IHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRk
aW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVt
LgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250
YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKLSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQ
YWRkaW5nVmVydGljYWxFZGdlOwotICAgICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5n
VmVydGljYWxFZGdlOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5
b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cg
bm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAqbGVmdCA8PCAicHgpIHJpZ2h0KCIgIDw8ICpyaWdo
dCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZEhvcml6
b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAiICA8PCB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQg
PDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsg
KmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsTWFyZ2luIH0gfTsKLX0KLQot
VmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKLXsKLSAgICBB
U1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotICAgIEFTU0VSVCh2
ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOwotCi0gICAgLy8gMTAuNi41IEFic29s
dXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIFRoZSB1
c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KLSAgICAvLyBJZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlz
IHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUg
cnVsZXMgYmVsb3cuCi0gICAgLy8gMS4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0
aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMg
cG9zaXRpb24uCi0gICAgLy8gMi4gSWYgJ2JvdHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAn
YXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyB3aXRoICcwJy4KLSAgICAv
LyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRv
bScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KLSAg
ICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBz
b2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCi0gICAgLy8gNS4gSWYgYXQgdGhpcyBw
b2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCi0KLSAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0gICAgYXV0byYgc3R5bGUg
PSByZXBsYWNlZEJveC5zdHlsZSgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpOwotICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodDsKLSAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKLQotICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUo
c3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7Ci0gICAgYXV0byBo
ZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0OwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOwotICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKLSAgICBPcHRpb25hbDxMYXlv
dXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwot
ICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwotICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52
YWx1ZU9yKDApOwotICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7
Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKLQot
ICAgIGlmICghdG9wICYmICFib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0g
c3RhdGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQocmVwbGFjZWRCb3gs
IHZlcnRpY2FsQ29uc3RyYWludHMpOwotICAgIH0KLQotICAgIGlmICghYm90dG9tKSB7Ci0gICAg
ICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFy
Z2luLmJlZm9yZS52YWx1ZU9yKDApOwotICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFy
Z2luQmVmb3JlOwotICAgIH0KLQotICAgIGlmICghdXNlZE1hcmdpbkJlZm9yZSAmJiAhdXNlZE1h
cmdpbkFmdGVyKSB7Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1dG8gbWFyZ2luQmVmb3JlQW5k
QWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKmJvdHRvbSk7
Ci0gICAgICAgIHVzZWRNYXJnaW5CZWZvcmUgPSBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDI7Ci0g
ICAgICAgIHVzZWRNYXJnaW5BZnRlciA9IHVzZWRNYXJnaW5CZWZvcmU7Ci0gICAgfQotCi0gICAg
Ly8gIzQKLSAgICBpZiAoIXRvcCkKLSAgICAgICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0
IC0gKCp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqdXNlZE1hcmdpbkFmdGVyICsgKmJvdHRv
bSk7Ci0KLSAgICBpZiAoIWJvdHRvbSkKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2Nr
SGVpZ2h0IC0gKCp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlcik7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5CZWZvcmUpCi0gICAgICAgIHVzZWRNYXJnaW5C
ZWZvcmUgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIGJvcmRlclRvcCArIHBhZGRp
bmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJn
aW5BZnRlciArICpib3R0b20pOwotCi0gICAgaWYgKCF1c2VkTWFyZ2luQWZ0ZXIpCi0gICAgICAg
IHVzZWRNYXJnaW5BZnRlciA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRN
YXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0Jv
dHRvbSArIGJvcmRlckJvdHRvbSArICpib3R0b20pOwotCi0gICAgLy8gIzUKLSAgICBhdXRvIGJv
eEhlaWdodCA9ICp0b3AgKyAqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5B
ZnRlciArICpib3R0b207Ci0gICAgaWYgKGJveEhlaWdodCA+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dCkKLSAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyAqdXNl
ZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBoZWlnaHQgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRlcik7IAotCi0gICAgLy8gRm9y
IG91dC1vZi1mbG93IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0
aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBhbmNlc3Rvci4KLSAgICAvLyBBdCB0aGlzIHBvaW50IHRo
ZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFk
ZGluZyBib3guIExldCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3Rl
bS4KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNh
bENvbnN0cmFpbnRzLmxvZ2ljYWxUb3A7Ci0gICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRk
aW5nVmVydGljYWxFZGdlOwotICAgICpib3R0b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1Zl
cnRpY2FsRWRnZTsKLQotICAgIEFTU0VSVCh0b3ApOwotICAgIEFTU0VSVChib3R0b20pOwotICAg
IEFTU0VSVCh1c2VkTWFyZ2luQmVmb3JlKTsKLSAgICBBU1NFUlQodXNlZE1hcmdpbkFmdGVyKTsK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
W1Bvc2l0aW9uXVtIZWlnaHRdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gdG9w
KCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0KCIg
PDwgaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgKnVzZWRNYXJnaW5CZWZvcmUgPDwgInB4LCAi
ICA8PCAqdXNlZE1hcmdpbkFmdGVyIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94
IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwgeyBoZWlnaHQsIHsgKnVzZWRN
YXJnaW5CZWZvcmUsICp1c2VkTWFyZ2luQWZ0ZXIgfSB9IH07Ci19Ci0KLUhvcml6b250YWxHZW9t
ZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkSG9yaXpv
bnRhbEdlb21ldHJ5KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29u
c3RyYWludHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICBBU1NFUlQocmVwbGFj
ZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgLy8gMTAuMy44IEFic29sdXRl
bHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLyBJbiB0aGlzIGNhc2UsIHNl
Y3Rpb24gMTAuMy43IGFwcGxpZXMgdXAgdGhyb3VnaCBhbmQgaW5jbHVkaW5nIHRoZSBjb25zdHJh
aW50IGVxdWF0aW9uLCBidXQgdGhlIHJlc3Qgb2Ygc2VjdGlvbiAxMC4zLjcgaXMgcmVwbGFjZWQg
YnkgdGhlIGZvbGxvd2luZyBydWxlczoKLSAgICAvLwotICAgIC8vIFRoZSB1c2VkIHZhbHVlIG9m
ICd3aWR0aCcgaXMgZGV0ZXJtaW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLiBJ
ZiAnbWFyZ2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIGlzIHNwZWNpZmllZCBhcyAnYXV0bycg
aXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcnVsZXMgYmVsb3cuCi0gICAgLy8g
MS4gSWYgYm90aCAnbGVmdCcgYW5kICdyaWdodCcgaGF2ZSB0aGUgdmFsdWUgJ2F1dG8nLCB0aGVu
IGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcg
dGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLAotICAgIC8vICAg
c2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uOyBlbHNlIGlmICdkaXJlY3Rpb24nIGlz
ICdydGwnLCBzZXQgJ3JpZ2h0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLgotICAgIC8vIDIuIElm
ICdsZWZ0JyBvciAncmlnaHQnIGFyZSAnYXV0bycsIHJlcGxhY2UgYW55ICdhdXRvJyBvbiAnbWFy
Z2luLWxlZnQnIG9yICdtYXJnaW4tcmlnaHQnIHdpdGggJzAnLgotICAgIC8vIDMuIElmIGF0IHRo
aXMgcG9pbnQgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyBhcmUgc3RpbGwg
J2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNvbnN0cmFpbnQgdGhh
dCB0aGUgdHdvIG1hcmdpbnMgbXVzdCBnZXQgZXF1YWwgdmFsdWVzLAotICAgIC8vICAgdW5sZXNz
IHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdoZW4gdGhlIGRp
cmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0bCcpLCBzZXQgJ21h
cmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCi0gICAgLy8gICBzb2x2ZSBm
b3IgJ21hcmdpbi1yaWdodCcgKCdtYXJnaW4tbGVmdCcpLgotICAgIC8vIDQuIElmIGF0IHRoaXMg
cG9pbnQgdGhlcmUgaXMgYW4gJ2F1dG8nIGxlZnQsIHNvbHZlIHRoZSBlcXVhdGlvbiBmb3IgdGhh
dCB2YWx1ZS4KLSAgICAvLyA1LiBJZiBhdCB0aGlzIHBvaW50IHRoZSB2YWx1ZXMgYXJlIG92ZXIt
Y29uc3RyYWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yIGVpdGhlciAnbGVmdCcgKGluIGNhc2Ug
dGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwn
KSBvcgotICAgIC8vICAgJ3JpZ2h0JyAoaW4gY2FzZSAnZGlyZWN0aW9uJyBpcyAnbHRyJykgYW5k
IHNvbHZlIGZvciB0aGF0IHZhbHVlLgotCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0
aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8mIHN0eWxlID0gcmVwbGFjZWRCb3gu
c3R5bGUoKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21l
dHJ5Rm9yQm94KHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0g
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aDsKLSAgICBhdXRvIGlzTGVmdFRvUmln
aHREaXJlY3Rpb24gPSByZXBsYWNlZEJveC5jb250YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKLQotICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5
bGUubG9naWNhbExlZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gcmlnaHQg
PSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0
aCk7Ci0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwot
ICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5TdGFydCA9IGNvbXB1dGVkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydDsKLSAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luRW5k
ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZDsKLSAgICBhdXRvIHdpZHRoID0gaW5saW5l
UmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
LmNvbnRlbnRXaWR0aDsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGlu
Z0xlZnQoKS52YWx1ZU9yKDApOwotICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnku
cGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9t
ZXRyeS5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJv
cmRlclJpZ2h0KCk7Ci0KLSAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMx
Ci0gICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENv
bnN0cmFpbnRzKTsKLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAg
ICAgICBsZWZ0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByaWdodCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKLSAgICB9Ci0KLSAgICBp
ZiAoIWxlZnQgfHwgIXJpZ2h0KSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHVzZWRNYXJnaW5T
dGFydCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApOwotICAgICAg
ICB1c2VkTWFyZ2luRW5kID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDAp
OwotICAgIH0KLQotICAgIGlmICghdXNlZE1hcmdpblN0YXJ0ICYmICF1c2VkTWFyZ2luRW5kKSB7
Ci0gICAgICAgIC8vICMzCi0gICAgICAgIGF1dG8gbWFyZ2luU3RhcnRBbmRFbmQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRo
ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOwotICAgICAgICBpZiAobWFy
Z2luU3RhcnRBbmRFbmQgPj0gMCkgewotICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gbWFy
Z2luU3RhcnRBbmRFbmQgLyAyOwotICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IHVzZWRNYXJn
aW5TdGFydDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gMF9sdTsKLSAg
ICAgICAgICAgICAgICB1c2VkTWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxl
ZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGgg
KyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSAwX2x1OwotICAgICAgICAgICAg
ICAgIHVzZWRNYXJnaW5TdGFydCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vICM0Ci0gICAgaWYgKCFsZWZ0KQotICAgICAgICBsZWZ0ID0gY29udGFp
bmluZ0Jsb2NrV2lkdGggLSAoKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5n
TGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVu
ZCArICpyaWdodCk7Ci0KLSAgICBpZiAoIXJpZ2h0KQotICAgICAgICByaWdodCA9IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBw
YWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1h
cmdpbkVuZCk7Ci0KLSAgICBpZiAoIXVzZWRNYXJnaW5TdGFydCkKLSAgICAgICAgdXNlZE1hcmdp
blN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFk
ZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJn
aW5FbmQgKyAqcmlnaHQpOwotCi0gICAgaWYgKCF1c2VkTWFyZ2luRW5kKQotICAgICAgICB1c2Vk
TWFyZ2luRW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBi
b3JkZXJSaWdodCArICpyaWdodCk7Ci0KLSAgICBhdXRvIGJveFdpZHRoID0gKCpsZWZ0ICsgKnVz
ZWRNYXJnaW5TdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGlu
Z1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7Ci0gICAgaWYg
KGJveFdpZHRoID4gY29udGFpbmluZ0Jsb2NrV2lkdGgpIHsKLSAgICAgICAgLy8gIzUgT3Zlci1j
b25zdHJhaW5lZD8KLSAgICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAg
ICAgICByaWdodCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgKnVzZWRNYXJnaW5T
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyAqdXNlZE1hcmdpbkVuZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVy
TGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
ICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobGVmdCk7Ci0g
ICAgQVNTRVJUKHJpZ2h0KTsKLSAgICBBU1NFUlQodXNlZE1hcmdpblN0YXJ0KTsKLSAgICBBU1NF
UlQodXNlZE1hcmdpbkVuZCk7Ci0KLSAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFu
Y2VzdG9yLgotICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4g
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBp
dCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVm
dDsKLSAgICAqbGVmdCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotICAg
ICpyaWdodCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlv
bl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0LW9mLWZsb3cgcmVwbGFjZWQgLT4gbGVmdCgiIDw8ICps
ZWZ0IDw8ICJweCkgcmlnaHQoIiAgPDwgKnJpZ2h0IDw8ICJweCkgd2lkdGgoIiA8PCB3aWR0aCA8
PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFyZ2luU3RhcnQgPDwgInB4LCAiICA8PCAqdXNlZE1h
cmdpbkVuZCA8PCAicHgpIGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAg
IHJldHVybiB7ICpsZWZ0LCAqcmlnaHQsIHsgd2lkdGgsIHsgKnVzZWRNYXJnaW5TdGFydCwgKnVz
ZWRNYXJnaW5FbmQgfSB9IH07Ci19Ci0KLUNvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wbGljYXRlZENhc2VzKGNvbnN0IEJveCYgbGF5b3V0Qm94
LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29u
c3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKTsKLSAgICAvLyBU
T0RPOiBVc2UgY29tcGxpY2F0ZWQtY2FzZSBmb3IgZG9jdW1lbnQgcmVuZGVyZXIgZm9yIG5vdyAo
c2VlIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJn
aW4pLgotICAgIEFTU0VSVCgobGF5b3V0Qm94LmlzQmxvY2tMZXZlbEJveCgpICYmIGxheW91dEJv
eC5pc0luRmxvdygpICYmICFsYXlvdXRCb3guaXNPdmVyZmxvd1Zpc2libGUoKSkgfHwgbGF5b3V0
Qm94LmlzSW5saW5lQmxvY2tCb3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpIHx8IGxheW91dEJveC5pc1RhYmxlQm94KCkp
OwotCi0gICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCi0gICAgLy8KLSAgICAvLyBCbG9j
ay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJm
bG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZs
b3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQp
LgotICAgIC8vICdJbmxpbmUtYmxvY2snLCBub24tcmVwbGFjZWQgZWxlbWVudHMuCi0gICAgLy8g
RmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KLSAgICAvLwotICAgIC8vIDEuIElmICdt
YXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFs
dWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBpcyAnYXV0bycsIHRoZSBoZWlnaHQgZGVw
ZW5kcyBvbiB0aGUgZWxlbWVudCdzIGRlc2NlbmRhbnRzIHBlciAxMC42LjcuCi0KLSAgICBhdXRv
IGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChsYXlvdXRCb3gpOwot
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKLSAgICAvLyAjMQot
ICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xs
YXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBj
b21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCi0gICAgLy8gIzIKLSAg
ICBpZiAoIWhlaWdodCkgewotICAgICAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJveCkp
OwotICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQotICAg
ICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKLSAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzRG9j
dW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkg
ewotICAgICAgICAgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJCb3g+
KGxheW91dEJveCk7Ci0gICAgICAgICAgICBhdXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJnaW5C
b3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94LmZp
cnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOwotICAgICAgICAgICAgYXV0byBib3R0b20gPSBCb3hH
ZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hpbGQoKSkpLmJvdHRvbSgpOwotICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJrPykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3VtZW50
IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCBhbmQKLSAgICAgICAgICAgIC8v
IGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVwIGF0IHRoZSBJQ0IgbGV2ZWwuCi0gICAgICAgICAg
ICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGluZ0Nv
bnRleHRSb290KCk7Ci0gICAgICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0aW5n
Q29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRG
b3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRhaW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgpIH07
Ci0gICAgICAgICAgICBpZiAoYXV0byBmbG9hdEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5ib3R0
b20oKSkgewotICAgICAgICAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KCpm
bG9hdEJvdHRvbSwgYm90dG9tKTsKLSAgICAgICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0gZmxv
YXRpbmdDb250ZXh0LnRvcCgpOwotICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7Ci0g
ICAgICAgICAgICAgICAgdG9wID0gc3RkOjptaW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0b3Ap
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hlc0Zv
cm1hdHRpbmdDb250ZXh0KCkpOwotICAgICAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdodEZv
ckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUKGhlaWdodCk7Ci0KLSAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFy
Z2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFjZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8PCAi
cHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8IHVz
ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRC
b3ggPDwgIikiKTsKLSAgICByZXR1cm4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWlnaHQs
IHVzZWRWZXJ0aWNhbE1hcmdpbiB9OwotfQotCi1Db250ZW50V2lkdGhBbmRNYXJnaW4gRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7Ci0KLSAg
ICAvLyAxMC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAg
Ly8gMS4gSWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFz
ICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0gICAgLy8gMi4gSWYgJ3dpZHRoJyBp
cyBjb21wdXRlZCBhcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZp
dCIgd2lkdGguCi0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWlu
dHMpOwotCi0gICAgLy8gIzEKLSAgICBhdXRvIHVzZWRIb3Jpem9udGFsbE1hcmdpbiA9IFVzZWRI
b3Jpem9udGFsTWFyZ2luIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3Io
MCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9OwotICAgIC8vICMy
Ci0gICAgYXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwg
aG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0gICAgaWYgKCF3aWR0aCkKLSAg
ICAgICAgd2lkdGggPSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLmxvZ2ljYWxXaWR0aCk7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0Nv
bnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGZsb2F0aW5nIG5vbi1y
ZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRIb3Jp
em9udGFsbE1hcmdpbi5zdGFydCA8PCAicHgsICIgPDwgdXNlZEhvcml6b250YWxsTWFyZ2luLmVu
ZCA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsKLSAgICByZXR1
cm4gQ29udGVudFdpZHRoQW5kTWFyZ2luIHsgKndpZHRoLCB1c2VkSG9yaXpvbnRhbGxNYXJnaW4g
fTsKLX0KLQotQ29udGVudEhlaWdodEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2Vk
Qm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5n
UG9zaXRpb25lZCgpKTsKLQotICAgIC8vIDEwLjYuMiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMs
IGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJs
b2NrJwotICAgIC8vIHJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGlu
ZyByZXBsYWNlZCBlbGVtZW50cwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4
dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGZsb2F0aW5nIHJlcGxhY2Vk
IC0+IHJlZGlyZWN0ZWQgdG8gaW5saW5lIHJlcGxhY2VkIik7Ci0gICAgcmV0dXJuIGlubGluZVJl
cGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCB7IH0sIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewot
ICAgIEFTU0VSVChyZXBsYWNlZEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAgIC8v
IDEwLjMuNiBGbG9hdGluZywgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEuIElm
ICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRvJywg
dGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCi0gICAgLy8gMi4gVGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJyBpcyBkZXRlcm1pbmVkIGFzIGZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMuCi0gICAg
YXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMpOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltIZWlnaHRd
W01hcmdpbl0gLT4gZmxvYXRpbmcgcmVwbGFjZWQgLT4gcmVkaXJlY3RlZCB0byBpbmxpbmUgcmVw
bGFjZWQiKTsKLSAgICBhdXRvIHVzZWRNYXJnaW4gPSBVc2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDApLCBjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKLSAgICByZXR1cm4gaW5saW5lUmVwbGFjZWRDb250
ZW50V2lkdGhBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cywgeyB9
LCB7IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoLCB1c2VkTWFyZ2luIH0pOwotfQot
Ci1WZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWlu
dHMmIHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYg
b3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIEFTU0VSVChsYXlvdXRCb3gu
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNl
ZEJveCgpKQotICAgICAgICByZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFp
bnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOwotICAg
IHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFj
ZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJh
aW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKLX0KLQotSG9yaXpvbnRhbEdlb21ldHJ5
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxDb25z
dHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpOwotCi0gICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpKQotICAgICAgICBy
ZXR1cm4gb3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkoZG93bmNhc3Q8Q29u
dGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5I
b3Jpem9udGFsVmFsdWVzKTsKLSAgICByZXR1cm4gb3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFs
R2VvbWV0cnkoZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25z
dHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMp
OwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFyZ2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6ZmxvYXRpbmdDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBj
b25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3Qg
T3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKLQotICAg
IGlmICghbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSkKLSAgICAgICAgcmV0dXJuIGNvbXBsaWNh
dGVkQ2FzZXMobGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5k
TWFyZ2luKGRvd25jYXN0PFJlcGxhY2VkQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3Ry
YWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1h
cmdpbiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZsb2F0aW5nQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMm
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKQotewotICAgIEFTU0VSVChsYXlvdXRCb3guaXNG
bG9hdGluZ1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94
KCkpCi0gICAgICAgIHJldHVybiBmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFy
Z2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyk7Ci0gICAgcmV0dXJuIGZsb2F0aW5nUmVwbGFjZWRDb250ZW50V2lkdGhBbmRNYXJn
aW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxheW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50
cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOwotfQotCi1Db250ZW50SGVpZ2h0QW5kTWFy
Z2luIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lUmVwbGFjZWRDb250ZW50SGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpv
bnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2Fs
Q29uc3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcyYgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKSBjb25zdAotewotICAgIC8vIDEwLjYu
MiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIGJsb2NrLWxldmVsIHJlcGxhY2VkIGVsZW1lbnRz
IGluIG5vcm1hbCBmbG93LCAnaW5saW5lLWJsb2NrJyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3Jt
YWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVwbGFjZWQgZWxlbWVudHMKLSAgICAvLwotICAgIC8vIDEu
IElmICdtYXJnaW4tdG9wJywgb3IgJ21hcmdpbi1ib3R0b20nIGFyZSAnYXV0bycsIHRoZWlyIHVz
ZWQgdmFsdWUgaXMgMC4KLSAgICAvLyAyLiBJZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhh
dmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4g
aW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQg
dmFsdWUgb2YgJ2hlaWdodCcuCi0gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMg
YSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmlu
c2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXM6Ci0gICAgLy8gICAg
KHVzZWQgd2lkdGgpIC8gKGludHJpbnNpYyByYXRpbykKLSAgICAvLyA0LiBPdGhlcndpc2UsIGlm
ICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50
IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KLSAgICAvLyA1LiBPdGhlcndpc2UsIGlmICdoZWln
aHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUgb2YgdGhlIGNvbmRp
dGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBtdXN0
IGJlIHNldCB0bwotICAgIC8vICAgIHRoZSBoZWlnaHQgb2YgdGhlIGxhcmdlc3QgcmVjdGFuZ2xl
IHRoYXQgaGFzIGEgMjoxIHJhdGlvLCBoYXMgYSBoZWlnaHQgbm90IGdyZWF0ZXIgdGhhbiAxNTBw
eCwgYW5kIGhhcyBhIHdpZHRoIG5vdCBncmVhdGVyIHRoYW4gdGhlIGRldmljZSB3aWR0aC4KLQot
ICAgIC8vICMxCi0gICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5n
Q29udGV4dCgpOwotICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpj
b21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OwotICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsKLSAgICBhdXRvJiBz
dHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7Ci0KLSAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRk
ZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0
LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChyZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50
cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxvZ2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOwot
ICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQg
JiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKLSAgICBhdXRvIHdpZHRoSXNBdXRvID0gc3R5
bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7Ci0KLSAgICBpZiAoaGVpZ2h0SXNBdXRvICYmIHdp
ZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hlaWdodCgpKSB7Ci0gICAgICAg
IC8vICMyCi0gICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94LmludHJpbnNpY0hlaWdodCgpOwot
ICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1Jh
dGlvKCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0
aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCkuY29udGVudEJveFdpZHRoKCk7
Ci0gICAgICAgIGhlaWdodCA9IHVzZWRXaWR0aCAvIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlv
KCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmlu
c2ljSGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gIzQKLSAgICAgICAgaGVpZ2h0ID0gcmVwbGFjZWRC
b3guaW50cmluc2ljSGVpZ2h0KCk7Ci0gICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8pIHsKLSAg
ICAgICAgLy8gIzUKLSAgICAgICAgaGVpZ2h0ID0geyAxNTAgfTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGVpZ2h0KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91
dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiBoZWln
aHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyIDw8ICJweCkgLT4gbGF5
b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7Ci0gICAgcmV0dXJuIHsgKmhlaWdodCwg
dXNlZFZlcnRpY2FsTWFyZ2luIH07Ci19Ci0KLUNvbnRlbnRXaWR0aEFuZE1hcmdpbiBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+
IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJiBv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKLXsKLSAgICAvLyAxMC4zLjIgSW5saW5lLCByZXBs
YWNlZCBlbGVtZW50cwotICAgIC8vCi0gICAgLy8gQSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycg
Zm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYmVjb21lcyBhIHVzZWQgdmFsdWUg
b2YgJzAnLgotICAgIC8vCi0gICAgLy8gMS4gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBo
YXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFu
IGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2
YWx1ZSBvZiAnd2lkdGgnLgotICAgIC8vCi0gICAgLy8gMi4gSWYgJ2hlaWdodCcgYW5kICd3aWR0
aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGhh
cyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBkb2VzIGhhdmUgYW4gaW50cmluc2ljIGhlaWdodCBh
bmQgaW50cmluc2ljIHJhdGlvOwotICAgIC8vICAgIG9yIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0
ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBvdGhlciBjb21wdXRlZCB2YWx1
ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgcmF0aW87Ci0gICAgLy8g
ICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAodXNlZCBoZWlnaHQpICogKGlu
dHJpbnNpYyByYXRpbykKLSAgICAvLwotICAgIC8vIDMuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBoYXMg
YW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVpZ2h0IG9yIHdpZHRoLAotICAg
IC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyB1bmRlZmluZWQgaW4gQ1NT
IDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlmIHRoZSBjb250YWluaW5nIGJs
b2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0aGUgcmVwbGFjZWQKLSAgICAv
LyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyBj
YWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24gdXNlZCBmb3IgYmxvY2stbGV2
ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdy4KLSAgICAvLwotICAgIC8v
IDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycs
IGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmlu
c2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCi0gICAgLy8KLSAgICAvLyA1
LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBi
dXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZh
bHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBweC4KLSAgICAvLyAgICBJZiAzMDBweCBpcyB0b28g
d2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRoIG9mIHRoZSBs
YXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0aGUgZGV2aWNl
IGluc3RlYWQuCi0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5
Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJh
aW50cyk7Ci0KLSAgICBhdXRvIHVzZWRNYXJnaW5TdGFydCA9IFsmXSB7Ci0gICAgICAgIGlmIChv
dmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4pCi0gICAgICAgICAgICByZXR1cm4gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luLT5zdGFydDsKLSAgICAgICAgcmV0dXJuIGNv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAg
ICBhdXRvIHVzZWRNYXJnaW5FbmQgPSBbJl0gewotICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMubWFyZ2luKQotICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzLm1hcmdpbi0+ZW5kOwotICAgICAgICByZXR1cm4gY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZC52YWx1ZU9yKDBfbHUpOwotICAgIH07Ci0KLSAgICBhdXRvIHdpZHRoID0gb3Zl
cnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggPyBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVl
cy53aWR0aCA6IGNvbXB1dGVkV2lkdGgocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cy5sb2dpY2FsV2lkdGgpOwotICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gaXNIZWlnaHRBdXRvKHJl
cGxhY2VkQm94KTsKLSAgICBhdXRvIGhlaWdodCA9IGNvbXB1dGVkSGVpZ2h0KHJlcGxhY2VkQm94
LCB2ZXJ0aWNhbENvbnN0cmFpbnRzID8gdmVydGljYWxDb25zdHJhaW50cy0+bG9naWNhbEhlaWdo
dCA6IFdURjo6bnVsbG9wdCk7Ci0KLSAgICBpZiAoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiBy
ZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgIC8vICMxCi0gICAgICAg
IHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgoKTsKLSAgICB9IGVsc2UgaWYgKCgh
d2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmICFyZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgp
ICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hlaWdodCgpICYmIHJlcGxhY2VkQm94Lmhhc0lu
dHJpbnNpY1JhdGlvKCkpCi0gICAgICAgIHx8ICghd2lkdGggJiYgaGVpZ2h0ICYmIHJlcGxhY2Vk
Qm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAgIHdpZHRo
ID0gaGVpZ2h0LnZhbHVlT3IocmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpICogcmVw
bGFjZWRCb3guaW50cmluc2ljUmF0aW8oKTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCAmJiBoZWln
aHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljUmF0aW8oKSAmJiAhcmVwbGFjZWRC
b3guaGFzSW50cmluc2ljV2lkdGgoKSAmJiAhcmVwbGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0
KCkpIHsKLSAgICAgICAgLy8gIzMKLSAgICAgICAgLy8gRklYTUU6IHVuZGVmaW5lZCBidXQgc3Vy
ZWx5IGRvYWJsZS4KLSAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICB9
IGVsc2UgaWYgKCF3aWR0aCAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNXaWR0aCgpKSB7Ci0g
ICAgICAgIC8vICM0Ci0gICAgICAgIHdpZHRoID0gcmVwbGFjZWRCb3guaW50cmluc2ljV2lkdGgo
KTsKLSAgICB9IGVsc2UgaWYgKCF3aWR0aCkgewotICAgICAgICAvLyAjNQotICAgICAgICB3aWR0
aCA9IHsgMzAwIH07Ci0gICAgfQotCi0gICAgQVNTRVJUKHdpZHRoKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbV2lkdGhdW01hcmdp
bl0gLT4gaW5mbG93IHJlcGxhY2VkIC0+IHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2lu
KCIgPDwgdXNlZE1hcmdpblN0YXJ0KCkgPDwgInB4LCAiIDw8IHVzZWRNYXJnaW5FbmQoKSA8PCAi
cHgpIC0+IGxheW91dEJveCgiIDw8ICZyZXBsYWNlZEJveCA8PCAiKSIpOwotICAgIHJldHVybiB7
ICp3aWR0aCwgeyB1c2VkTWFyZ2luU3RhcnQoKSwgdXNlZE1hcmdpbkVuZCgpIH0gfTsKLX0KLQot
TGF5b3V0U2l6ZSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd1Bvc2l0aW9uZWRQ
b3NpdGlvbk9mZnNldChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGxheW91
dEJveC5pc0luRmxvd1Bvc2l0aW9uZWQoKSk7Ci0KLSAgICAvLyA5LjQuMyBSZWxhdGl2ZSBwb3Np
dGlvbmluZwotICAgIC8vCi0gICAgLy8gVGhlICd0b3AnIGFuZCAnYm90dG9tJyBwcm9wZXJ0aWVz
IG1vdmUgcmVsYXRpdmVseSBwb3NpdGlvbmVkIGVsZW1lbnQocykgdXAgb3IgZG93biB3aXRob3V0
IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8gVG9wJyBtb3ZlcyB0aGUgYm94ZXMgZG93biwg
YW5kICdib3R0b20nIG1vdmVzIHRoZW0gdXAuIFNpbmNlIGJveGVzIGFyZSBub3Qgc3BsaXQgb3Ig
c3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICd0b3AnIG9yICdib3R0b20nLCB0aGUgdXNlZCB2YWx1
ZXMgYXJlIGFsd2F5czogdG9wID0gLWJvdHRvbS4KLSAgICAvLwotICAgIC8vIDEuIElmIGJvdGgg
YXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZXMgYXJlIGJvdGggJzAnLgotICAgIC8vIDIuIElm
IG9uZSBvZiB0aGVtIGlzICdhdXRvJywgaXQgYmVjb21lcyB0aGUgbmVnYXRpdmUgb2YgdGhlIG90
aGVyLgotICAgIC8vIDMuIElmIG5laXRoZXIgaXMgJ2F1dG8nLCAnYm90dG9tJyBpcyBpZ25vcmVk
IChpLmUuLCB0aGUgdXNlZCB2YWx1ZSBvZiAnYm90dG9tJyB3aWxsIGJlIG1pbnVzIHRoZSB2YWx1
ZSBvZiAndG9wJykuCi0KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
IGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNh
bFdpZHRoOwotCi0gICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3Ao
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1
ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLQotICAgIGlm
ICghdG9wICYmICFib3R0b20pIHsKLSAgICAgICAgLy8gIzEKLSAgICAgICAgdG9wID0gYm90dG9t
ID0geyAwIH07Ci0gICAgfSBlbHNlIGlmICghdG9wKSB7Ci0gICAgICAgIC8vICMyCi0gICAgICAg
IHRvcCA9IC0qYm90dG9tOwotICAgIH0gZWxzZSBpZiAoIWJvdHRvbSkgewotICAgICAgICAvLyAj
MwotICAgICAgICBib3R0b20gPSAtKnRvcDsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyAjNAot
ICAgICAgICBib3R0b20gPSBXVEY6Om51bGxvcHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHJlbGF0
aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50cywgJ2xlZnQnIGFuZCAncmlnaHQnIG1vdmUgdGhlIGJv
eChlcykgaG9yaXpvbnRhbGx5LCB3aXRob3V0IGNoYW5naW5nIHRoZWlyIHNpemUuCi0gICAgLy8g
J0xlZnQnIG1vdmVzIHRoZSBib3hlcyB0byB0aGUgcmlnaHQsIGFuZCAncmlnaHQnIG1vdmVzIHRo
ZW0gdG8gdGhlIGxlZnQuCi0gICAgLy8gU2luY2UgYm94ZXMgYXJlIG5vdCBzcGxpdCBvciBzdHJl
dGNoZWQgYXMgYSByZXN1bHQgb2YgJ2xlZnQnIG9yICdyaWdodCcsIHRoZSB1c2VkIHZhbHVlcyBh
cmUgYWx3YXlzOiBsZWZ0ID0gLXJpZ2h0LgotICAgIC8vCi0gICAgLy8gMS4gSWYgYm90aCAnbGVm
dCcgYW5kICdyaWdodCcgYXJlICdhdXRvJyAodGhlaXIgaW5pdGlhbCB2YWx1ZXMpLCB0aGUgdXNl
ZCB2YWx1ZXMgYXJlICcwJyAoaS5lLiwgdGhlIGJveGVzIHN0YXkgaW4gdGhlaXIgb3JpZ2luYWwg
cG9zaXRpb24pLgotICAgIC8vIDIuIElmICdsZWZ0JyBpcyAnYXV0bycsIGl0cyB1c2VkIHZhbHVl
IGlzIG1pbnVzIHRoZSB2YWx1ZSBvZiAncmlnaHQnIChpLmUuLCB0aGUgYm94ZXMgbW92ZSB0byB0
aGUgbGVmdCBieSB0aGUgdmFsdWUgb2YgJ3JpZ2h0JykuCi0gICAgLy8gMy4gSWYgJ3JpZ2h0JyBp
cyBzcGVjaWZpZWQgYXMgJ2F1dG8nLCBpdHMgdXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUg
b2YgJ2xlZnQnLgotICAgIC8vIDQuIElmIG5laXRoZXIgJ2xlZnQnIG5vciAncmlnaHQnIGlzICdh
dXRvJywgdGhlIHBvc2l0aW9uIGlzIG92ZXItY29uc3RyYWluZWQsIGFuZCBvbmUgb2YgdGhlbSBo
YXMgdG8gYmUgaWdub3JlZC4KLSAgICAvLyAgICBJZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicsIHRoZSB2YWx1ZSBvZiAnbGVmdCcgd2lu
cyBhbmQgJ3JpZ2h0JyBiZWNvbWVzIC0nbGVmdCcuCi0gICAgLy8gICAgSWYgJ2RpcmVjdGlvbicg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcsICdyaWdodCcgd2lucyBhbmQgJ2xlZnQn
IGlzIGlnbm9yZWQuCi0KLSAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0eWxlLmxvZ2lj
YWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKLSAgICBhdXRvIHJpZ2h0ID0gY29tcHV0
ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwotCi0g
ICAgaWYgKCFsZWZ0ICYmICFyaWdodCkgewotICAgICAgICAvLyAjMQotICAgICAgICBsZWZ0ID0g
cmlnaHQgPSB7IDAgfTsKLSAgICB9IGVsc2UgaWYgKCFsZWZ0KSB7Ci0gICAgICAgIC8vICMyCi0g
ICAgICAgIGxlZnQgPSAtKnJpZ2h0OwotICAgIH0gZWxzZSBpZiAoIXJpZ2h0KSB7Ci0gICAgICAg
IC8vICMzCi0gICAgICAgIHJpZ2h0ID0gLSpsZWZ0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
ICM0Ci0gICAgICAgIGF1dG8gaXNMZWZ0VG9SaWdodERpcmVjdGlvbiA9IGxheW91dEJveC5jb250
YWluaW5nQmxvY2soKS5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICAgICAg
aWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCi0gICAgICAgICAgICByaWdodCA9IC0qbGVmdDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbGVmdCA9IFdURjo6bnVsbG9wdDsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoIWJvdHRvbSB8fCAqdG9wID09IC0qYm90dG9tKTsKLSAgICBBU1NFUlQoIWxl
ZnQgfHwgKmxlZnQgPT0gLSpyaWdodCk7Ci0KLSAgICBhdXRvIHRvcFBvc2l0aW9uT2Zmc2V0ID0g
KnRvcDsKLSAgICBhdXRvIGxlZnRQb3NpdGlvbk9mZnNldCA9IGxlZnQudmFsdWVPcigtKnJpZ2h0
KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUG9zaXRpb25dIC0+IHBvc2l0aW9uZWQgaW5mbG93IC0+IHRvcCBvZmZzZXQoIiA8PCB0
b3BQb3NpdGlvbk9mZnNldCA8PCAicHgpIGxlZnQgb2Zmc2V0KCIgPDwgbGVmdFBvc2l0aW9uT2Zm
c2V0IDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJmxheW91dEJveCA8PCAiKSIpOwotICAgIHJldHVy
biB7IGxlZnRQb3NpdGlvbk9mZnNldCwgdG9wUG9zaXRpb25PZmZzZXQgfTsKLX0KLQotaW5saW5l
IHN0YXRpYyBXcml0aW5nTW9kZSB1c2VkV3JpdGluZ01vZGUoY29uc3QgQm94JiBsYXlvdXRCb3gp
Ci17Ci0gICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy13cml0aW5nLW1vZGVzLTQvI2xv
Z2ljYWwtZGlyZWN0aW9uLWxheW91dAotICAgIC8vIEZsb3ctcmVsYXRpdmUgZGlyZWN0aW9ucyBh
cmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29u
dGFpbmluZyBibG9jayBvZiB0aGUgYm94LgotICAgIC8vIEZvciBpbmxpbmUtbGV2ZWwgYm94ZXMs
IHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIHBhcmVudCBib3ggaXMgdXNlZCBpbnN0ZWFkLgotICAg
IHJldHVybiBsYXlvdXRCb3guaXNJbmxpbmVMZXZlbEJveCgpID8gbGF5b3V0Qm94LnBhcmVudCgp
LnN0eWxlKCkud3JpdGluZ01vZGUoKSA6IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKS5zdHls
ZSgpLndyaXRpbmdNb2RlKCk7Ci19Ci0KLUVkZ2VzIEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6Y29tcHV0ZWRCb3JkZXIoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Ci17Ci0gICAgYXV0
byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0
dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0JvcmRlcl0gLT4gbGF5b3V0Qm94OiAiIDw8
ICZsYXlvdXRCb3gpOwotICAgIHJldHVybiB7Ci0gICAgICAgIHsgTGF5b3V0VW5pdChzdHlsZS5i
b3JkZXJMZWZ0V2lkdGgoKSksIExheW91dFVuaXQoc3R5bGUuYm9yZGVyUmlnaHRXaWR0aCgpKSB9
LAotICAgICAgICB7IExheW91dFVuaXQoc3R5bGUuYm9yZGVyVG9wV2lkdGgoKSksIExheW91dFVu
aXQoc3R5bGUuYm9yZGVyQm90dG9tV2lkdGgoKSkgfQotICAgIH07Ci19Ci0KLU9wdGlvbmFsPEVk
Z2VzPiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkUGFkZGluZyhjb25zdCBC
b3gmIGxheW91dEJveCwgY29uc3QgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCkgY29u
c3QKLXsKLSAgICBpZiAoIWxheW91dEJveC5pc1BhZGRpbmdBcHBsaWNhYmxlKCkpCi0gICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHls
ZSgpOwotICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFt
IDw8ICJbUGFkZGluZ10gLT4gbGF5b3V0Qm94OiAiIDw8ICZsYXlvdXRCb3gpOwotICAgIHJldHVy
biBFZGdlcyB7Ci0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ0xlZnQoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRkaW5nUmlnaHQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0sCi0gICAgICAgIHsgdmFsdWVGb3JMZW5ndGgoc3R5
bGUucGFkZGluZ1RvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIHZhbHVlRm9yTGVuZ3RoKHN0
eWxlLnBhZGRpbmdCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH0KLSAgICB9OwotfQot
Ci1Db21wdXRlZEhvcml6b250YWxNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAotewotICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7Ci0gICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0aW5nTW9kZShsYXlvdXRCb3gpKSkKLSAgICAgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5MZWZ0KCksIGNvbnRhaW5pbmdCbG9j
a1dpZHRoKSwgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5SaWdodCgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKLSAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblRvcCgp
LCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luQm90dG9t
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OwotfQotCi1Db21wdXRlZFZlcnRpY2FsTWFyZ2lu
IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihjb25z
dCBCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiBob3Jpem9udGFs
Q29uc3RyYWludHMpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxXaWR0aDsKLSAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUodXNlZFdyaXRp
bmdNb2RlKGxheW91dEJveCkpKQotICAgICAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxl
Lm1hcmdpblRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVkVmFsdWUoc3R5bGUu
bWFyZ2luQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OwotICAgIHJldHVybiB7IGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNv
bXB1dGVkVmFsdWUoc3R5bGUubWFyZ2luUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07
Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29uc3RyYWluQnlNaW5NYXhXaWR0aChjb25zdCBCb3gm
IGxheW91dEJveCwgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aCkgY29u
c3QKLXsKLSAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAgIGF1dG8gbWlu
V2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpKTsKLSAgICBhdXRvIG1h
eFdpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0gICAgaWYgKCFt
aW5XaWR0aCAmJiAhbWF4V2lkdGgpCi0gICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKLQot
ICAgIGlmIChtYXhXaWR0aCkgewotICAgICAgICBpbnRyaW5zaWNXaWR0aC5taW5pbXVtID0gc3Rk
OjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNXaWR0aC5taW5pbXVtKTsKLSAgICAgICAgaW50cmlu
c2ljV2lkdGgubWF4aW11bSA9IHN0ZDo6bWluKCptYXhXaWR0aCwgaW50cmluc2ljV2lkdGgubWF4
aW11bSk7Ci0gICAgfQotCi0gICAgaWYgKG1pbldpZHRoKSB7Ci0gICAgICAgIGludHJpbnNpY1dp
ZHRoLm1pbmltdW0gPSBzdGQ6Om1heCgqbWluV2lkdGgsIGludHJpbnNpY1dpZHRoLm1pbmltdW0p
OwotICAgICAgICBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtID0gc3RkOjptYXgoKm1pbldpZHRoLCBp
bnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaW50cmluc2ljV2lk
dGgubWluaW11bSA8PSBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKLSAgICByZXR1cm4gaW50cmlu
c2ljV2lkdGg7Ci19Ci0KLUZvcm1hdHRpbmdDb250ZXh0OjpDb25zdHJhaW50c0Zvck91dE9mRmxv
d0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb25zdHJhaW50c0Zvck91dE9m
Rmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiBjb250YWluZXJCb3gpCi17Ci0gICAgYXV0
byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRh
aW5lckJveCk7Ci0gICAgcmV0dXJuIHsKLSAgICAgICAgeyBib3hHZW9tZXRyeS5wYWRkaW5nQm94
TGVmdCgpLCBib3hHZW9tZXRyeS5wYWRkaW5nQm94V2lkdGgoKSB9LAotICAgICAgICB7IGJveEdl
b21ldHJ5LnBhZGRpbmdCb3hUb3AoKSwgYm94R2VvbWV0cnkucGFkZGluZ0JveEhlaWdodCgpIH0s
Ci0gICAgICAgIGJveEdlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpIH07Ci19Ci0KLUZvcm1hdHRp
bmdDb250ZXh0OjpDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94
JiBjb250YWluZXJCb3gsIE9wdGlvbmFsPEVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQotewot
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChjb250YWluZXJCb3gsIGVzY2FwZVJlYXNvbik7Ci0gICAgcmV0dXJuIHsgeyBib3hHZW9tZXRy
eS5jb250ZW50Qm94TGVmdCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJv
eEdlb21ldHJ5LmNvbnRlbnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9
IH07Ci19Ci0KLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjNjYTBlNzQyMDhjMmQxMDNkMTFmODRiNWUwNmEzNWZhMTdkZTFmYmUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL0Zvcm1h
dHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxMTcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvcm1hdHRpbmdHZW9tZXRyeS5oIgorCisjaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJCbG9ja0Zvcm1hdHRp
bmdTdGF0ZS5oIgorI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKKyNpbmNsdWRlICJG
bG9hdGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJGbG9hdGluZ1N0YXRlLmgiCisjaW5jbHVkZSAi
SW5saW5lRm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2lu
Y2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRlICJMYXlvdXRS
ZXBsYWNlZEJveC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1h
dHRpbmdTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsK
Kworc3RhdGljIGlubGluZSBib29sIGlzSGVpZ2h0QXV0byhjb25zdCBCb3gmIGxheW91dEJveCkK
K3sKKyAgICAvLyAxMC41IENvbnRlbnQgaGVpZ2h0OiB0aGUgJ2hlaWdodCcgcHJvcGVydHkKKyAg
ICAvLworICAgIC8vIFRoZSBwZXJjZW50YWdlIGlzIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRv
IHRoZSBoZWlnaHQgb2YgdGhlIGdlbmVyYXRlZCBib3gncyBjb250YWluaW5nIGJsb2NrLgorICAg
IC8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmll
ZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBlbmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwKKyAgICAv
LyBhbmQgdGhpcyBlbGVtZW50IGlzIG5vdCBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHRoZSB1c2Vk
IGhlaWdodCBpcyBjYWxjdWxhdGVkIGFzIGlmICdhdXRvJyB3YXMgc3BlY2lmaWVkLgorCisgICAg
YXV0byBoZWlnaHQgPSBsYXlvdXRCb3guc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7CisgICAgaWYg
KGhlaWdodC5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaGVpZ2h0
LmlzUGVyY2VudCgpKSB7CisgICAgICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuICFsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNGaXhlZCgp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworRm9ybWF0dGluZ0dlb21ldHJ5OjpG
b3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250
ZXh0KQorICAgIDogbV9mb3JtYXR0aW5nQ29udGV4dChmb3JtYXR0aW5nQ29udGV4dCkKK3sKK30K
KworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhlaWdo
dFZhbHVlKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBIZWlnaHRUeXBlIGhlaWdodFR5cGUsIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkgY29uc3QKK3sKKyAgICBhdXRv
JiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgIGF1dG8gaGVpZ2h0ID0gaGVpZ2h0VHlw
ZSA9PSBIZWlnaHRUeXBlOjpOb3JtYWwgPyBzdHlsZS5sb2dpY2FsSGVpZ2h0KCkgOiBoZWlnaHRU
eXBlID09IEhlaWdodFR5cGU6Ok1pbiA/IHN0eWxlLmxvZ2ljYWxNaW5IZWlnaHQoKSA6IHN0eWxl
LmxvZ2ljYWxNYXhIZWlnaHQoKTsKKyAgICBpZiAoaGVpZ2h0LmlzVW5kZWZpbmVkKCkgfHwgaGVp
Z2h0LmlzQXV0bygpIHx8IGhlaWdodC5pc01heENvbnRlbnQoKSB8fCBoZWlnaHQuaXNNaW5Db250
ZW50KCkgfHwgaGVpZ2h0LmlzRml0Q29udGVudCgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgaWYgKGhlaWdodC5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiBMYXlvdXRVbml0IHsgaGVp
Z2h0LnZhbHVlKCkgfTsKKworICAgIGlmICghY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSB7CisgICAg
ICAgIGlmIChsYXlvdXRTdGF0ZSgpLmluUXVpcmtzTW9kZSgpKQorICAgICAgICAgICAgY29udGFp
bmluZ0Jsb2NrSGVpZ2h0ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5oZWlnaHRWYWx1
ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChsYXlvdXRCb3gpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gbm9uQW5vbnltb3VzQ29udGFpbmluZ0Jsb2Nr
TG9naWNhbEhlaWdodCA9IFsmXSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgYmxvY2sg
bGV2ZWwgYm94IGlzIGEgZGlyZWN0IGNoaWxkIG9mIGFuIGlubGluZSBsZXZlbCBib3ggKDxzcGFu
PjxkaXY+PC9kaXY+PC9zcGFuPikgYW5kIHdlIHdyYXAgaXQgaW50byBhIGNvbnRpbnVhdGlvbiwK
KyAgICAgICAgICAgICAgICAvLyB0aGUgY29udGFpbmluZyBibG9jayAoYW5vbnltb3VzIHdyYXBw
ZXIpIGlzIG5vdCB0aGUgYm94IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGZpeGVkIGhlaWdodC4KKyAg
ICAgICAgICAgICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94Lmlu
aXRpYWxDb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGNvbnRh
aW5pbmdCbG9jayA9ICZsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5pbmdCbG9j
ayAhPSAmaW5pdGlhbENvbnRhaW5pbmdCbG9jazsgY29udGFpbmluZ0Jsb2NrID0gJmNvbnRhaW5p
bmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnRhaW5pbmdCbG9jay0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLT5zdHls
ZSgpLmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGluaXRpYWxDb250YWluaW5nQmxvY2suc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gZml4ZWRW
YWx1ZShub25Bbm9ueW1vdXNDb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0KCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKCFjb250YWluaW5nQmxvY2tIZWlnaHQpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICByZXR1cm4gdmFsdWVGb3JMZW5ndGgoaGVpZ2h0LCAqY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0VW5pdD4gRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZEhlaWdodChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0KSBjb25zdAoreworICAgIGlmIChhdXRvIGhlaWdo
dCA9IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwsIGNv
bnRhaW5pbmdCbG9ja0hlaWdodCkpIHsKKyAgICAgICAgaWYgKGxheW91dEJveC5zdHlsZSgpLmJv
eFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCkKKyAgICAgICAgICAgIHJldHVybiBo
ZWlnaHQ7CisgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICByZXR1cm4gKmhlaWdodCAtIChib3hH
ZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwKSk7CisgICAgfQorICAgIHJldHVybiB7IH07Cit9CisKK09wdGlvbmFsPExheW91
dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYg
bGF5b3V0Qm94LCBXaWR0aFR5cGUgd2lkdGhUeXBlLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9j
a1dpZHRoKQoreworICAgIC8vIEFwcGxpZXMgdG86IGFsbCBlbGVtZW50cyBleGNlcHQgbm9uLXJl
cGxhY2VkIGlubGluZXMgKG91dC1vZi1mbG93IGNoZWNrIGlzIHJlcXVpcmVkIGZvciBwb3NpdGlv
bmVkIDxicj4gYXMgZm9yIHNvbWUgcmVhc29uIHdlIGRvbid0IGJsb2NraWZ5IHRoZW0pLgorICAg
IEFTU0VSVCghbGF5b3V0Qm94LmlzSW5saW5lQm94KCkgfHwgbGF5b3V0Qm94LmlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpKTsKKworICAgIGF1dG8gd2lkdGggPSBbJl0geworICAgICAgICBhdXRvJiBz
dHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAgICBzd2l0Y2ggKHdpZHRoVHlwZSkgewor
ICAgICAgICBjYXNlIFdpZHRoVHlwZTo6Tm9ybWFsOgorICAgICAgICAgICAgcmV0dXJuIHN0eWxl
LmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlwZTo6TWluOgorICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNaW5XaWR0aCgpOworICAgICAgICBjYXNlIFdpZHRoVHlw
ZTo6TWF4OgorICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpOworICAg
ICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gc3R5
bGUubG9naWNhbFdpZHRoKCk7CisgICAgfSgpOworICAgIGlmIChhdXRvIGNvbXB1dGVkVmFsdWUg
PSB0aGlzLT5jb21wdXRlZFZhbHVlKHdpZHRoLCBjb250YWluaW5nQmxvY2tXaWR0aCkpCisgICAg
ICAgIHJldHVybiBjb21wdXRlZFZhbHVlOworCisgICAgaWYgKHdpZHRoLmlzTWluQ29udGVudCgp
IHx8IHdpZHRoLmlzTWF4Q29udGVudCgpIHx8IHdpZHRoLmlzRml0Q29udGVudCgpKSB7CisgICAg
ICAgIGlmICghaXM8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKQorICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgYXV0byYgY29udGFpbmVyQm94ID0gZG93bmNhc3Q8Q29udGFpbmVyQm94
PihsYXlvdXRCb3gpOworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgc3BsaXR0aW5nIHVwIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBzbyB0aGF0IHdlIGNvdWxkIGNvbXB1dGVk
IHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMgc2VwYXJhdGVseS4KKyAgICAgICAgYXV0byBpbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgICAgIGlmICghY29udGFpbmVyQm94
Lmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBGb3Jt
YXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IDBfbHUsIGNvbnRhaW5p
bmdCbG9ja1dpZHRoIH07CisgICAgICAgICAgICBBU1NFUlQoY29udGFpbmVyQm94LmVzdGFibGlz
aGVzRm9ybWF0dGluZ0NvbnRleHQoKSk7CisgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3Rh
dGUgPSBsYXlvdXRTdGF0ZSgpLmVuc3VyZUZvcm1hdHRpbmdTdGF0ZShjb250YWluZXJCb3gpOwor
ICAgICAgICAgICAgaWYgKGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1hdHRp
bmdTdGF0ZS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuICppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworICAgICAgICAgICAgcmV0dXJuIExheW91
dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGNvbnRhaW5lckJveCwgbGF5b3V0U3Rh
dGUoKSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICB9KCk7
CisgICAgICAgIGlmICh3aWR0aC5pc01pbkNvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBp
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW07CisgICAgICAgIGlmICh3aWR0aC5pc01h
eENvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Lm1heGltdW07CisgICAgICAgIEFTU0VSVCh3aWR0aC5pc0ZpdENvbnRlbnQoKSk7CisgICAgICAg
IC8vIElmIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gYSBnaXZlbiBheGlzIGlzIGRlZmluaXRlLCBl
cXVhbCB0byBtaW4obWF4LWNvbnRlbnQgc2l6ZSwKKyAgICAgICAgLy8gbWF4KG1pbi1jb250ZW50
IHNpemUsIHN0cmV0Y2gtZml0IHNpemUpKS4gT3RoZXJ3aXNlLCBlcXVhbCB0byB0aGUgbWF4LWNv
bnRlbnQgc2l6ZSBpbiB0aGF0IGF4aXMuCisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCB5ZXQg
aGF2ZSBpbmRlZmluaXRlIGF2YWlsYWJsZSBzaXplLgorICAgICAgICByZXR1cm4gc3RkOjptaW4o
aW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5tYXhpbXVtLCBzdGQ6Om1heChpbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzLm1pbmltdW0sIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSk7CisgICAgfQorICAg
IHJldHVybiB7IH07Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRy
eTo6Y29tcHV0ZWRXaWR0aChjb25zdCBCb3gmIGxheW91dEJveCwgTGF5b3V0VW5pdCBjb250YWlu
aW5nQmxvY2tXaWR0aCkKK3sKKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoID0gY29tcHV0ZWRX
aWR0aFZhbHVlKGxheW91dEJveCwgV2lkdGhUeXBlOjpOb3JtYWwsIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKSkgeworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworICAgICAg
ICAvLyBOb24tcXVhbnRpdGF0aXZlIHZhbHVlcyBzdWNoIGFzIGF1dG8gYW5kIG1pbi1jb250ZW50
IGFyZSBub3QgaW5mbHVlbmNlZCBieSB0aGUgYm94LXNpemluZyBwcm9wZXJ0eS4KKyAgICAgICAg
aWYgKHN0eWxlLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCB8fCBzdHlsZS53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRX
aWR0aDsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgIHJldHVybiAqY29tcHV0ZWRXaWR0aCAt
IChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS5ob3Jpem9udGFs
UGFkZGluZygpLnZhbHVlT3IoMCkpOworICAgIH0KKyAgICByZXR1cm4geyB9OworfQorCitMYXlv
dXRVbml0IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250
ZXh0Um9vdChjb25zdCBDb250YWluZXJCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9vdCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHRSb290LmVzdGFibGlzaGVzRm9ybWF0dGlu
Z0NvbnRleHQoKSk7CisgICAgQVNTRVJUKGlzSGVpZ2h0QXV0byhmb3JtYXR0aW5nQ29udGV4dFJv
b3QpIHx8IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQoKSB8fCBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaXNUYWJsZUNlbGwoKSk7CisgICAgYXV0
byB1c2VkQ29udGVudEhlaWdodCA9IExheW91dFVuaXQgeyB9OyAKKyAgICBhdXRvIGhhc0NvbnRl
bnQgPSBmb3JtYXR0aW5nQ29udGV4dFJvb3QuaGFzSW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7Cisg
ICAgLy8gVGhlIHVzZWQgaGVpZ2h0IG9mIHRoZSBjb250YWlubWVudCBib3ggaXMgZGV0ZXJtaW5l
ZCBhcyBpZiBwZXJmb3JtaW5nIGEgbm9ybWFsIGxheW91dCBvZiB0aGUgYm94LCBleGNlcHQgdGhh
dCBpdCBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBjb250ZW50LgorICAgIGF1dG8gc2hvdWxkSWdu
b3JlQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9vdC5pc1NpemVDb250YWlubWVudEJveCgp
OworICAgIGlmIChoYXNDb250ZW50ICYmICFzaG91bGRJZ25vcmVDb250ZW50KQorICAgICAgICB1
c2VkQ29udGVudEhlaWdodCA9IExheW91dENvbnRleHQ6OmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgY29uc3RfY2FzdDxMYXlvdXRTdGF0ZSY+KGxheW91dFN0
YXRlKCkpKS0+dXNlZENvbnRlbnRIZWlnaHQoKTsKKyAgICByZXR1cm4gdXNlZENvbnRlbnRIZWln
aHQ7Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0
ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpIGNvbnN0Cit7CisgICAgLy8gIEluIGdlbmVyYWwsIHRoZSBjb21wdXRl
ZCB2YWx1ZSByZXNvbHZlcyB0aGUgc3BlY2lmaWVkIHZhbHVlIGFzIGZhciBhcyBwb3NzaWJsZSB3
aXRob3V0IGxheWluZyBvdXQgdGhlIGNvbnRlbnQuCisgICAgaWYgKGdlb21ldHJ5UHJvcGVydHku
aXNGaXhlZCgpIHx8IGdlb21ldHJ5UHJvcGVydHkuaXNQZXJjZW50KCkgfHwgZ2VvbWV0cnlQcm9w
ZXJ0eS5pc0NhbGN1bGF0ZWQoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlRm9yTGVuZ3RoKGdlb21l
dHJ5UHJvcGVydHksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICByZXR1cm4geyB9OworfQor
CitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmZpeGVkVmFsdWUoY29u
c3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5KSBjb25zdAoreworICAgIGlmICghZ2VvbWV0cnlQ
cm9wZXJ0eS5pc0ZpeGVkKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIExheW91
dFVuaXQgeyBnZW9tZXRyeVByb3BlcnR5LnZhbHVlKCkgfTsKK30KKworLy8gaHR0cHM6Ly93d3cu
dzMub3JnL1RSL0NTUzIyL3Zpc3VkZXQuaHRtbCNtaW4tbWF4LWhlaWdodHMKKy8vIFNwZWNpZmll
cyBhIHBlcmNlbnRhZ2UgZm9yIGRldGVybWluaW5nIHRoZSB1c2VkIHZhbHVlLiBUaGUgcGVyY2Vu
dGFnZSBpcyBjYWxjdWxhdGVkIHdpdGggcmVzcGVjdCB0byB0aGUgaGVpZ2h0IG9mIHRoZSBnZW5l
cmF0ZWQgYm94J3MgY29udGFpbmluZyBibG9jay4KKy8vIElmIHRoZSBoZWlnaHQgb2YgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgaXMgbm90IHNwZWNpZmllZCBleHBsaWNpdGx5IChpLmUuLCBpdCBkZXBl
bmRzIG9uIGNvbnRlbnQgaGVpZ2h0KSwgYW5kIHRoaXMgZWxlbWVudCBpcyBub3QgYWJzb2x1dGVs
eSBwb3NpdGlvbmVkLAorLy8gdGhlIHBlcmNlbnRhZ2UgdmFsdWUgaXMgdHJlYXRlZCBhcyAnMCcg
KGZvciAnbWluLWhlaWdodCcpIG9yICdub25lJyAoZm9yICdtYXgtaGVpZ2h0JykuCitPcHRpb25h
bDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkTWF4SGVpZ2h0KGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWln
aHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBI
ZWlnaHRUeXBlOjpNYXgsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7Cit9CisKK09wdGlvbmFsPExh
eW91dFVuaXQ+IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRNaW5IZWlnaHQoY29uc3QgQm94
JiBsYXlvdXRCb3gsIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29tcHV0ZWRIZWlnaHRWYWx1ZShsYXlvdXRCb3gsIEhlaWdo
dFR5cGU6Ok1pbiwgY29udGFpbmluZ0Jsb2NrSGVpZ2h0KTsKK30KKworT3B0aW9uYWw8TGF5b3V0
VW5pdD4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZE1pbldpZHRoKGNvbnN0IEJveCYgbGF5
b3V0Qm94LCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKQoreworICAgIHJldHVybiBj
b21wdXRlZFdpZHRoVmFsdWUobGF5b3V0Qm94LCBXaWR0aFR5cGU6Ok1pbiwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOworfQorCitPcHRpb25hbDxMYXlvdXRVbml0PiBGb3JtYXR0aW5nR2VvbWV0cnk6
OmNvbXB1dGVkTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrV2lkdGgpCit7CisgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1ZShsYXlvdXRC
b3gsIFdpZHRoVHlwZTo6TWF4LCBjb250YWluaW5nQmxvY2tXaWR0aCk7Cit9CisKK0xheW91dFVu
aXQgRm9ybWF0dGluZ0dlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZGbG93
UG9zaXRpb25lZChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgVmVydGljYWxDb25zdHJhaW50
cyYgdmVydGljYWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94Lmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIEZvciB0aGUgcHVycG9zZXMgb2YgdGhp
cyBzZWN0aW9uIGFuZCB0aGUgbmV4dCwgdGhlIHRlcm0gInN0YXRpYyBwb3NpdGlvbiIgKG9mIGFu
IGVsZW1lbnQpIHJlZmVycywgcm91Z2hseSwgdG8gdGhlIHBvc2l0aW9uIGFuIGVsZW1lbnQgd291
bGQgaGF2ZQorICAgIC8vIGhhZCBpbiB0aGUgbm9ybWFsIGZsb3cuIE1vcmUgcHJlY2lzZWx5LCB0
aGUgc3RhdGljIHBvc2l0aW9uIGZvciAndG9wJyBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9w
IGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgdG8gdGhlIHRvcCBtYXJnaW4KKyAgICAvLyBl
ZGdlIG9mIGEgaHlwb3RoZXRpY2FsIGJveCB0aGF0IHdvdWxkIGhhdmUgYmVlbiB0aGUgZmlyc3Qg
Ym94IG9mIHRoZSBlbGVtZW50IGlmIGl0cyBzcGVjaWZpZWQgJ3Bvc2l0aW9uJyB2YWx1ZSBoYWQg
YmVlbiAnc3RhdGljJyBhbmQgaXRzIHNwZWNpZmllZAorICAgIC8vICdmbG9hdCcgaGFkIGJlZW4g
J25vbmUnIGFuZCBpdHMgc3BlY2lmaWVkICdjbGVhcicgaGFkIGJlZW4gJ25vbmUnLiAoTm90ZSB0
aGF0IGR1ZSB0byB0aGUgcnVsZXMgaW4gc2VjdGlvbiA5LjcgdGhpcyBtaWdodCByZXF1aXJlIGFs
c28gYXNzdW1pbmcgYSBkaWZmZXJlbnQKKyAgICAvLyBjb21wdXRlZCB2YWx1ZSBmb3IgJ2Rpc3Bs
YXknLikgVGhlIHZhbHVlIGlzIG5lZ2F0aXZlIGlmIHRoZSBoeXBvdGhldGljYWwgYm94IGlzIGFi
b3ZlIHRoZSBjb250YWluaW5nIGJsb2NrLgorCisgICAgLy8gU3RhcnQgd2l0aCB0aGlzIGJveCdz
IGJvcmRlciBib3ggb2Zmc2V0IGZyb20gdGhlIHBhcmVudCdzIGJvcmRlciBib3guCisgICAgYXV0
byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOworICAgIExh
eW91dFVuaXQgdG9wOworICAgIGlmIChsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkg
JiYgbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGluZygpLT5pc0Jsb2NrTGV2ZWxCb3goKSkg
eworICAgICAgICAvLyBBZGQgc2libGluZyBvZmZzZXQKKyAgICAgICAgYXV0byYgcHJldmlvdXNJ
bkZsb3dTaWJsaW5nID0gKmxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKKyAgICAg
ICAgYXV0byYgcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdl
b21ldHJ5Rm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZywgRm9ybWF0dGluZ0NvbnRleHQ6OkVz
Y2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSk7CisgICAgICAgIGF1
dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ1N0YXRlPihsYXlv
dXRTdGF0ZSgpLmZvcm1hdHRpbmdTdGF0ZUZvckJveChwcmV2aW91c0luRmxvd1NpYmxpbmcpKTsK
KyAgICAgICAgYXV0byB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveCA9IGZvcm1hdHRp
bmdTdGF0ZS51c2VkVmVydGljYWxNYXJnaW4ocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKworICAg
ICAgICB0b3AgKz0gQm94R2VvbWV0cnk6OmJvcmRlckJveFJlY3QocHJldmlvdXNJbkZsb3dCb3hH
ZW9tZXRyeSkuYm90dG9tKCkgKyB1c2VkVmVydGljYWxNYXJnaW5Gb3JQcmV2aW91c0JveC5ub25D
b2xsYXBzZWRWYWx1ZXMuYWZ0ZXI7CisgICAgfSBlbHNlCisgICAgICAgIHRvcCA9IGZvcm1hdHRp
bmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveC5wYXJlbnQoKSwgRm9ybWF0dGluZ0Nv
bnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dHZW9tZXRyeSkuY29u
dGVudEJveFRvcCgpOworCisgICAgLy8gUmVzb2x2ZSB0b3AgYWxsIHRoZSB3YXkgdXAgdG8gdGhl
IGNvbnRhaW5pbmcgYmxvY2suCisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94
LmNvbnRhaW5pbmdCbG9jaygpOworICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3
ZSBwcmV0ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCisgICAgZm9yIChhdXRvKiBh
bmNlc3RvciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxv
Y2s7IGFuY2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgeworICAgICAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNl
c3RvciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJ
bkZsb3dHZW9tZXRyeSk7CisgICAgICAgIC8vIEJveEdlb21ldHJ5Ojp0b3AgaXMgdGhlIGJvcmRl
ciBib3ggdG9wIHBvc2l0aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBz
eXN0ZW0uCisgICAgICAgIHRvcCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94VG9wKGJveEdlb21l
dHJ5KTsKKyAgICAgICAgQVNTRVJUKCFhbmNlc3Rvci0+aXNQb3NpdGlvbmVkKCkgfHwgbGF5b3V0
Qm94LmlzRml4ZWRQb3NpdGlvbmVkKCkpOworICAgIH0KKyAgICAvLyBNb3ZlIHRoZSBzdGF0aWMg
cG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHBhZGRpbmcgYm94LiBUaGlzIGlzIHZlcnkgc3BlY2lm
aWMgdG8gYWJvbHV0ZWx5IHBvc2l0aW9uZWQgYm94ZXMuCisgICAgcmV0dXJuIHRvcCAtIHZlcnRp
Y2FsQ29uc3RyYWludHMubG9naWNhbFRvcDsKK30KKworTGF5b3V0VW5pdCBGb3JtYXR0aW5nR2Vv
bWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQoY29u
c3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpOworICAgIC8vIFNlZSBzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uRm9yT3V0T2ZG
bG93UG9zaXRpb25lZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgdGhlIHN0YXRpYyBwb3NpdGlvbi4K
KworICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRo
ZSBwYXJlbnQncyBib3JkZXIgYm94LgorICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhp
cy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvIGxlZnQgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gucGFyZW50KCksIEZvcm1hdHRpbmdDb250ZXh0OjpF
c2NhcGVSZWFzb246Ok91dE9mRmxvd0JveE5lZWRzSW5GbG93R2VvbWV0cnkpLmNvbnRlbnRCb3hM
ZWZ0KCk7CisKKyAgICAvLyBSZXNvbHZlIGxlZnQgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGNvbnRh
aW5pbmcgYmxvY2suCisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpOworICAgIC8vIFN0YXJ0IHdpdGggdGhlIHBhcmVudCBzaW5jZSB3ZSBwcmV0
ZW5kIHRoYXQgdGhpcyBib3ggaXMgbm9ybWFsIGZsb3cuCisgICAgZm9yIChhdXRvKiBhbmNlc3Rv
ciA9ICZsYXlvdXRCb3gucGFyZW50KCk7IGFuY2VzdG9yICE9ICZjb250YWluaW5nQmxvY2s7IGFu
Y2VzdG9yID0gJmFuY2VzdG9yLT5jb250YWluaW5nQmxvY2soKSkgeworICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCphbmNlc3Rvciwg
Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6T3V0T2ZGbG93Qm94TmVlZHNJbkZsb3dH
ZW9tZXRyeSk7CisgICAgICAgIC8vIEJveEdlb21ldHJ5OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94
IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29yZGluYXRlIHN5c3Rl
bS4KKyAgICAgICAgbGVmdCArPSBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94TGVmdChib3hHZW9tZXRy
eSk7CisgICAgICAgIEFTU0VSVCghYW5jZXN0b3ItPmlzUG9zaXRpb25lZCgpIHx8IGxheW91dEJv
eC5pc0ZpeGVkUG9zaXRpb25lZCgpKTsKKyAgICB9CisgICAgLy8gTW92ZSB0aGUgc3RhdGljIHBv
c2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBwYWRkaW5nIGJveC4gVGhpcyBpcyB2ZXJ5IHNwZWNpZmlj
IHRvIGFib2x1dGVseSBwb3NpdGlvbmVkIGJveGVzLgorICAgIHJldHVybiBsZWZ0IC0gaG9yaXpv
bnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxMZWZ0OworfQorCitMYXlvdXRVbml0IEZvcm1hdHRpbmdH
ZW9tZXRyeTo6c2hyaW5rVG9GaXRXaWR0aChjb25zdCBCb3gmIGZvcm1hdHRpbmdDb250ZXh0Um9v
dCwgTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKK3sKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9y
bWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1dpZHRoXSAtPiBzaHJpbmsgdG8gZml0
IC0+IHVuc3VwcG9ydGVkIC0+IHdpZHRoKCIgPDwgTGF5b3V0VW5pdCB7IH0gPDwgInB4KSBsYXlv
dXRCb3g6ICIgPDwgJmZvcm1hdHRpbmdDb250ZXh0Um9vdCA8PCAiKSIpOworICAgIEFTU0VSVChm
b3JtYXR0aW5nQ29udGV4dFJvb3QuZXN0YWJsaXNoZXNGb3JtYXR0aW5nQ29udGV4dCgpKTsKKwor
ICAgIC8vIENhbGN1bGF0aW9uIG9mIHRoZSBzaHJpbmstdG8tZml0IHdpZHRoIGlzIHNpbWlsYXIg
dG8gY2FsY3VsYXRpbmcgdGhlIHdpZHRoIG9mIGEgdGFibGUgY2VsbCB1c2luZyB0aGUgYXV0b21h
dGljIHRhYmxlIGxheW91dCBhbGdvcml0aG0uCisgICAgLy8gUm91Z2hseTogY2FsY3VsYXRlIHRo
ZSBwcmVmZXJyZWQgd2lkdGggYnkgZm9ybWF0dGluZyB0aGUgY29udGVudCB3aXRob3V0IGJyZWFr
aW5nIGxpbmVzIG90aGVyIHRoYW4gd2hlcmUgZXhwbGljaXQgbGluZSBicmVha3Mgb2NjdXIsCisg
ICAgLy8gYW5kIGFsc28gY2FsY3VsYXRlIHRoZSBwcmVmZXJyZWQgbWluaW11bSB3aWR0aCwgZS5n
LiwgYnkgdHJ5aW5nIGFsbCBwb3NzaWJsZSBsaW5lIGJyZWFrcy4gQ1NTIDIuMiBkb2VzIG5vdCBk
ZWZpbmUgdGhlIGV4YWN0IGFsZ29yaXRobS4KKyAgICAvLyBUaGlyZGx5LCBmaW5kIHRoZSBhdmFp
bGFibGUgd2lkdGg6IGluIHRoaXMgY2FzZSwgdGhpcyBpcyB0aGUgd2lkdGggb2YgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgbWludXMgdGhlIHVzZWQgdmFsdWVzIG9mICdtYXJnaW4tbGVmdCcsICdib3Jk
ZXItbGVmdC13aWR0aCcsCisgICAgLy8gJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0Jywg
J2JvcmRlci1yaWdodC13aWR0aCcsICdtYXJnaW4tcmlnaHQnLCBhbmQgdGhlIHdpZHRocyBvZiBh
bnkgcmVsZXZhbnQgc2Nyb2xsIGJhcnMuCisKKyAgICAvLyBUaGVuIHRoZSBzaHJpbmstdG8tZml0
IHdpZHRoIGlzOiBtaW4obWF4KHByZWZlcnJlZCBtaW5pbXVtIHdpZHRoLCBhdmFpbGFibGUgd2lk
dGgpLCBwcmVmZXJyZWQgd2lkdGgpLgorICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsgfTsKKyAg
ICBhdXRvIGhhc0NvbnRlbnQgPSBpczxDb250YWluZXJCb3g+KGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkgJiYgZG93bmNhc3Q8Q29udGFpbmVyQm94Pihmb3JtYXR0aW5nQ29udGV4dFJvb3QpLmhhc0lu
Rmxvd09yRmxvYXRpbmdDaGlsZCgpOworICAgIC8vIFRoZSB1c2VkIHdpZHRoIG9mIHRoZSBjb250
YWlubWVudCBib3ggaXMgZGV0ZXJtaW5lZCBhcyBpZiBwZXJmb3JtaW5nIGEgbm9ybWFsIGxheW91
dCBvZiB0aGUgYm94LCBleGNlcHQgdGhhdCBpdCBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBjb250
ZW50LgorICAgIGF1dG8gc2hvdWxkSWdub3JlQ29udGVudCA9IGZvcm1hdHRpbmdDb250ZXh0Um9v
dC5pc1NpemVDb250YWlubWVudEJveCgpOyAgCisgICAgaWYgKGhhc0NvbnRlbnQgJiYgIXNob3Vs
ZElnbm9yZUNvbnRlbnQpIHsKKyAgICAgICAgYXV0byYgcm9vdCA9IGRvd25jYXN0PENvbnRhaW5l
ckJveD4oZm9ybWF0dGluZ0NvbnRleHRSb290KTsKKyAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0
YXRlRm9yUm9vdCA9IGxheW91dFN0YXRlKCkuZW5zdXJlRm9ybWF0dGluZ1N0YXRlKHJvb3QpOwor
ICAgICAgICBhdXRvIHByZWNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IGZvcm1h
dHRpbmdTdGF0ZUZvclJvb3QuaW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBp
ZiAoIXByZWNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cykKKyAgICAgICAgICAgIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5n
Q29udGV4dChyb290LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMgPSAqcHJlY29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworICAgIH0KKyAg
ICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5p
bXVtLCBhdmFpbGFibGVXaWR0aCksIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWF4aW11bSk7
Cit9CisKK1ZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dOb25S
ZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiBsYXlvdXRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBB
U1NFUlQobGF5b3V0Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNS
ZXBsYWNlZEJveCgpKTsKKyAgICBBU1NFUlQodmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsSGVp
Z2h0KTsKKworICAgIC8vIDEwLjYuNCBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNl
ZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gRm9yIGFic29sdXRlbHkgcG9zaXRpb25lZCBlbGVt
ZW50cywgdGhlIHVzZWQgdmFsdWVzIG9mIHRoZSB2ZXJ0aWNhbCBkaW1lbnNpb25zIG11c3Qgc2F0
aXNmeSB0aGlzIGNvbnN0cmFpbnQ6CisgICAgLy8gJ3RvcCcgKyAnbWFyZ2luLXRvcCcgKyAnYm9y
ZGVyLXRvcC13aWR0aCcgKyAncGFkZGluZy10b3AnICsgJ2hlaWdodCcgKyAncGFkZGluZy1ib3R0
b20nICsgJ2JvcmRlci1ib3R0b20td2lkdGgnICsgJ21hcmdpbi1ib3R0b20nICsgJ2JvdHRvbScK
KyAgICAvLyA9IGhlaWdodCBvZiBjb250YWluaW5nIGJsb2NrCisKKyAgICAvLyBJZiBhbGwgdGhy
ZWUgb2YgJ3RvcCcsICdoZWlnaHQnLCBhbmQgJ2JvdHRvbScgYXJlIGF1dG8sIHNldCAndG9wJyB0
byB0aGUgc3RhdGljIHBvc2l0aW9uIGFuZCBhcHBseSBydWxlIG51bWJlciB0aHJlZSBiZWxvdy4K
KworICAgIC8vIElmIG5vbmUgb2YgdGhlIHRocmVlIGFyZSAnYXV0byc6IElmIGJvdGggJ21hcmdp
bi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9u
IHVuZGVyIHRoZSBleHRyYQorICAgIC8vIGNvbnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMg
Z2V0IGVxdWFsIHZhbHVlcy4gSWYgb25lIG9mICdtYXJnaW4tdG9wJyBvciAnbWFyZ2luLWJvdHRv
bScgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8g
SWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJhaW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3Ig
J2JvdHRvbScgYW5kIHNvbHZlIGZvciB0aGF0IHZhbHVlLgorCisgICAgLy8gT3RoZXJ3aXNlLCBw
aWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorCisg
ICAgLy8gMS4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5v
dCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0aGUgY29udGVudCBwZXIgMTAu
Ni43LAorICAgIC8vICAgICBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAn
bWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAndG9wJworICAgIC8vIDIuICd0b3An
IGFuZCAnYm90dG9tJyBhcmUgJ2F1dG8nIGFuZCAnaGVpZ2h0JyBpcyBub3QgJ2F1dG8nLCB0aGVu
IHNldCAndG9wJyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBzZXQgJ2F1dG8nIHZhbHVlcyBmb3IK
KyAgICAvLyAgICAnbWFyZ2luLXRvcCcgYW5kICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29s
dmUgZm9yICdib3R0b20nCisgICAgLy8gMy4gJ2hlaWdodCcgYW5kICdib3R0b20nIGFyZSAnYXV0
bycgYW5kICd0b3AnIGlzIG5vdCAnYXV0bycsIHRoZW4gdGhlIGhlaWdodCBpcyBiYXNlZCBvbiB0
aGUgY29udGVudCBwZXIgMTAuNi43LCBzZXQgJ2F1dG8nCisgICAgLy8gICAgIHZhbHVlcyBmb3Ig
J21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCwgYW5kIHNvbHZlIGZvciAnYm90
dG9tJworICAgIC8vIDQuICd0b3AnIGlzICdhdXRvJywgJ2hlaWdodCcgYW5kICdib3R0b20nIGFy
ZSBub3QgJ2F1dG8nLCB0aGVuIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcgYW5k
ICdtYXJnaW4tYm90dG9tJyB0byAwLCBhbmQgc29sdmUgZm9yICd0b3AnCisgICAgLy8gNS4gJ2hl
aWdodCcgaXMgJ2F1dG8nLCAndG9wJyBhbmQgJ2JvdHRvbScgYXJlIG5vdCAnYXV0bycsIHRoZW4g
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgYXJlIHNl
dCB0byAwIGFuZCBzb2x2ZSBmb3IgJ2hlaWdodCcKKyAgICAvLyA2LiAnYm90dG9tJyBpcyAnYXV0
bycsICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgbm90ICdhdXRvJywgdGhlbiBzZXQgJ2F1dG8nIHZh
bHVlcyBmb3IgJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRvbScgdG8gMCBhbmQgc29sdmUg
Zm9yICdib3R0b20nCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1h
dHRpbmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSAqdmVydGljYWxDb25z
dHJhaW50cy5sb2dpY2FsSGVpZ2h0OworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoOworCisgICAgYXV0byB0b3AgPSBjb21w
dXRlZFZhbHVlKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAg
IGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBj
b21wdXRlZEhlaWdodChsYXlvdXRCb3gsIGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7CisgICAgYXV0
byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBVc2Vk
VmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB1c2VkVmVydGljYWxNYXJnaW47IAor
ICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52
YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7
CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKKwor
ICAgIGlmICghdG9wICYmICFoZWlnaHQgJiYgIWJvdHRvbSkKKyAgICAgICAgdG9wID0gc3RhdGlj
VmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQobGF5b3V0Qm94LCB2ZXJ0aWNh
bENvbnN0cmFpbnRzKTsKKworICAgIGlmICh0b3AgJiYgaGVpZ2h0ICYmIGJvdHRvbSkgeworICAg
ICAgICBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlICYmICFjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyKSB7CisgICAgICAgICAgICBhdXRvIG1hcmdpbkJlZm9yZUFuZEFmdGVy
ID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9w
ICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKyAg
ICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgbWFyZ2luQmVmb3JlQW5kQWZ0ZXIgLyAy
LCBtYXJnaW5CZWZvcmVBbmRBZnRlciAvIDIgfTsKKyAgICAgICAgfSBlbHNlIGlmICghY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUpIHsKKyAgICAgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlciA9ICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOworICAgICAgICAgICAgdXNl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoIWNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIpIHsKKyAgICAgICAgICAgIHVz
ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPSAqY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7
CisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPSBjb250YWluaW5nQmxvY2tI
ZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBw
YWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90
dG9tKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7
ICpjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSwgKmNvbXB1dGVkVmVydGljYWxNYXJnaW4u
YWZ0ZXIgfTsKKyAgICAgICAgLy8gT3Zlci1jb25zdHJhaW5lZD8KKyAgICAgICAgYXV0byBib3hI
ZWlnaHQgPSAqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBh
ZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArIHVzZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlciArICpib3R0b207CisgICAgICAgIGlmIChib3hIZWlnaHQgIT0g
Y29udGFpbmluZ0Jsb2NrSGVpZ2h0KQorICAgICAgICAgICAgYm90dG9tID0gY29udGFpbmluZ0Js
b2NrSGVpZ2h0IC0gKCp0b3AgKyB1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsgYm9yZGVyVG9w
ICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsg
dXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyKTsKKyAgICB9CisKKyAgICBpZiAoIXRvcCAmJiAhaGVp
Z2h0ICYmIGJvdHRvbSkgeworICAgICAgICAvLyAjMQorICAgICAgICBoZWlnaHQgPSBjb250ZW50
SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dEJveCk7CisgICAgICAgIHVzZWRW
ZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigw
KSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIHRv
cCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICh1c2VkVmVydGljYWxNYXJnaW4uYmVmb3JlICsg
Ym9yZGVyVG9wICsgcGFkZGluZ1RvcCArICpoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVy
Qm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsgKmJvdHRvbSk7IAorICAgIH0KKwor
ICAgIGlmICghdG9wICYmICFib3R0b20gJiYgaGVpZ2h0KSB7CisgICAgICAgIC8vICMyCisgICAg
ICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKGxh
eW91dEJveCwgdmVydGljYWxDb25zdHJhaW50cyk7CisgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdp
biA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CisgICAgICAgIGJvdHRvbSA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJv
cmRlclRvcCArIHBhZGRpbmdUb3AgKyAqaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJv
dHRvbSArIHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlcik7CisgICAgfQorCisgICAgaWYgKCFoZWln
aHQgJiYgIWJvdHRvbSAmJiB0b3ApIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgaGVpZ2h0ID0g
Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChsYXlvdXRCb3gpOworICAgICAg
ICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZh
bHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OworICAg
ICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRvcCArIHVzZWRWZXJ0aWNh
bE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRp
bmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIpOworICAg
IH0KKworICAgIGlmICghdG9wICYmIGhlaWdodCAmJiBib3R0b20pIHsKKyAgICAgICAgLy8gIzQK
KyAgICAgICAgdXNlZFZlcnRpY2FsTWFyZ2luID0geyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJl
Zm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkg
fTsKKyAgICAgICAgdG9wID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKHVzZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgKmhlaWdodCArIHBhZGRpbmdC
b3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgKyAqYm90dG9t
KTsKKyAgICB9CisKKyAgICBpZiAoIWhlaWdodCAmJiB0b3AgJiYgYm90dG9tKSB7CisgICAgICAg
IC8vICM1CisgICAgICAgIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IHsgY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1
ZU9yKDApIH07CisgICAgICAgIGhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgqdG9w
ICsgdXNlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBw
YWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgdXNlZFZlcnRpY2FsTWFyZ2luLmFmdGVyICsg
KmJvdHRvbSk7CisgICAgfQorCisgICAgaWYgKCFib3R0b20gJiYgdG9wICYmIGhlaWdodCkgewor
ICAgICAgICAvLyAjNgorICAgICAgICB1c2VkVmVydGljYWxNYXJnaW4gPSB7IGNvbXB1dGVkVmVy
dGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0
ZXIudmFsdWVPcigwKSB9OworICAgICAgICBib3R0b20gPSBjb250YWluaW5nQmxvY2tIZWlnaHQg
LSAoKnRvcCArIHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5n
VG9wICsgKmhlaWdodCArIHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyB1c2VkVmVydGlj
YWxNYXJnaW4uYWZ0ZXIpOworICAgIH0KKworICAgIEFTU0VSVCh0b3ApOworICAgIEFTU0VSVChi
b3R0b20pOworICAgIEFTU0VSVChoZWlnaHQpOworCisgICAgLy8gRm9yIG91dC1vZi1mbG93IGVs
ZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdl
IG9mIHRoZSBhbmNlc3Rvci4KKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZh
bHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdz
IGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSB2ZXJ0aWNhbENvbnN0cmFpbnRzLmxv
Z2ljYWxUb3A7CisgICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
OworICAgICpib3R0b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKwor
ICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJb
UG9zaXRpb25dW0hlaWdodF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyBub24tcmVwbGFjZWQgLT4g
dG9wKCIgPDwgKnRvcCA8PCAicHgpIGJvdHRvbSgiICA8PCAqYm90dG9tIDw8ICJweCkgaGVpZ2h0
KCIgPDwgKmhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZv
cmUgPDwgInB4LCAiICA8PCB1c2VkVmVydGljYWxNYXJnaW4uYWZ0ZXIgPDwgInB4KSBsYXlvdXRC
b3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAgcmV0dXJuIHsgKnRvcCwgKmJvdHRvbSwg
eyAqaGVpZ2h0LCB1c2VkVmVydGljYWxNYXJnaW4gfSB9OworfQorCitIb3Jpem9udGFsR2VvbWV0
cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZW9t
ZXRyeShjb25zdCBDb250YWluZXJCb3gmIGxheW91dEJveCwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQobGF5b3V0
Qm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmICFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
KTsKKyAgICAKKyAgICAvLyAxMC4zLjcgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFj
ZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vICdsZWZ0JyArICdtYXJnaW4tbGVmdCcgKyAnYm9y
ZGVyLWxlZnQtd2lkdGgnICsgJ3BhZGRpbmctbGVmdCcgKyAnd2lkdGgnICsgJ3BhZGRpbmctcmln
aHQnICsgJ2JvcmRlci1yaWdodC13aWR0aCcgKyAnbWFyZ2luLXJpZ2h0JyArICdyaWdodCcKKyAg
ICAvLyA9IHdpZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKKworICAgIC8vIElmIGFsbCB0aHJlZSBv
ZiAnbGVmdCcsICd3aWR0aCcsIGFuZCAncmlnaHQnIGFyZSAnYXV0byc6IEZpcnN0IHNldCBhbnkg
J2F1dG8nIHZhbHVlcyBmb3IgJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgdG8gMC4K
KyAgICAvLyBUaGVuLCBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQg
ZXN0YWJsaXNoaW5nIHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRy
JyBzZXQgJ2xlZnQnIHRvIHRoZSBzdGF0aWMKKyAgICAvLyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVs
ZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRp
YyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJlbG93LgorICAgIC8vCisgICAg
Ly8gSWYgbm9uZSBvZiB0aGUgdGhyZWUgaXMgJ2F1dG8nOiBJZiBib3RoICdtYXJnaW4tbGVmdCcg
YW5kICdtYXJnaW4tcmlnaHQnIGFyZSAnYXV0bycsIHNvbHZlIHRoZSBlcXVhdGlvbiB1bmRlciB0
aGUgZXh0cmEgY29uc3RyYWludCB0aGF0IHRoZSB0d28gbWFyZ2lucyBnZXQgZXF1YWwgdmFsdWVz
LAorICAgIC8vIHVubGVzcyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2gg
Y2FzZSB3aGVuIGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAnbHRyJyAoJ3J0
bCcpLCBzZXQgJ21hcmdpbi1sZWZ0JyAoJ21hcmdpbi1yaWdodCcpIHRvIHplcm8gYW5kCisgICAg
Ly8gc29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdt
YXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRp
b24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8gSWYgdGhlIHZhbHVlcyBhcmUgb3Zlci1jb25zdHJh
aW5lZCwgaWdub3JlIHRoZSB2YWx1ZSBmb3IgJ2xlZnQnIChpbiBjYXNlIHRoZSAnZGlyZWN0aW9u
JyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRsJykgb3IgJ3JpZ2h0Jwor
ICAgIC8vIChpbiBjYXNlICdkaXJlY3Rpb24nIGlzICdsdHInKSBhbmQgc29sdmUgZm9yIHRoYXQg
dmFsdWUuCisgICAgLy8KKyAgICAvLyBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAn
bWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2luLXJpZ2h0JyB0byAwLCBhbmQgcGljayB0aGUgb25lIG9m
IHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KKyAgICAvLworICAgIC8vIDEu
ICdsZWZ0JyBhbmQgJ3dpZHRoJyBhcmUgJ2F1dG8nIGFuZCAncmlnaHQnIGlzIG5vdCAnYXV0bycs
IHRoZW4gdGhlIHdpZHRoIGlzIHNocmluay10by1maXQuIFRoZW4gc29sdmUgZm9yICdsZWZ0Jwor
ICAgIC8vIDIuICdsZWZ0JyBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nIGFuZCAnd2lkdGgnIGlzIG5v
dCAnYXV0bycsIHRoZW4gaWYgdGhlICdkaXJlY3Rpb24nIHByb3BlcnR5IG9mIHRoZSBlbGVtZW50
IGVzdGFibGlzaGluZyB0aGUgc3RhdGljLXBvc2l0aW9uIAorICAgIC8vICAgIGNvbnRhaW5pbmcg
YmxvY2sgaXMgJ2x0cicgc2V0ICdsZWZ0JyB0byB0aGUgc3RhdGljIHBvc2l0aW9uLCBvdGhlcndp
c2Ugc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KKyAgICAvLyAgICBUaGVuIHNv
bHZlIGZvciAnbGVmdCcgKGlmICdkaXJlY3Rpb24gaXMgJ3J0bCcpIG9yICdyaWdodCcgKGlmICdk
aXJlY3Rpb24nIGlzICdsdHInKS4KKyAgICAvLyAzLiAnd2lkdGgnIGFuZCAncmlnaHQnIGFyZSAn
YXV0bycgYW5kICdsZWZ0JyBpcyBub3QgJ2F1dG8nLCB0aGVuIHRoZSB3aWR0aCBpcyBzaHJpbmst
dG8tZml0IC4gVGhlbiBzb2x2ZSBmb3IgJ3JpZ2h0JworICAgIC8vIDQuICdsZWZ0JyBpcyAnYXV0
bycsICd3aWR0aCcgYW5kICdyaWdodCcgYXJlIG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICds
ZWZ0JworICAgIC8vIDUuICd3aWR0aCcgaXMgJ2F1dG8nLCAnbGVmdCcgYW5kICdyaWdodCcgYXJl
IG5vdCAnYXV0bycsIHRoZW4gc29sdmUgZm9yICd3aWR0aCcKKyAgICAvLyA2LiAncmlnaHQnIGlz
ICdhdXRvJywgJ2xlZnQnIGFuZCAnd2lkdGgnIGFyZSBub3QgJ2F1dG8nLCB0aGVuIHNvbHZlIGZv
ciAncmlnaHQnCisKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91
dEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJh
aW50cy5sb2dpY2FsV2lkdGg7CisgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
OworICAgIAorICAgIGF1dG8gbGVmdCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbExlZnQo
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgIGF1dG8gcmlnaHQgPSBjb21wdXRlZFZhbHVl
KHN0eWxlLmxvZ2ljYWxSaWdodCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byB3
aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6
b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGlu
Z0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFs
Q29uc3RyYWludHMpOworICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFy
Z2luOworICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZh
bHVlT3IoMCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmln
aHQoKS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRl
ckxlZnQoKTsKKyAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQo
KTsKKyAgICBpZiAoIWxlZnQgJiYgIXdpZHRoICYmICFyaWdodCkgeworICAgICAgICAvLyBJZiBh
bGwgdGhyZWUgb2YgJ2xlZnQnLCAnd2lkdGgnLCBhbmQgJ3JpZ2h0JyBhcmUgJ2F1dG8nOiBGaXJz
dCBzZXQgYW55ICdhdXRvJyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmln
aHQnIHRvIDAuCisgICAgICAgIC8vIFRoZW4sIGlmIHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBv
ZiB0aGUgZWxlbWVudCBlc3RhYmxpc2hpbmcgdGhlIHN0YXRpYy1wb3NpdGlvbiBjb250YWluaW5n
IGJsb2NrIGlzICdsdHInIHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYworICAgICAgICAvLyBwb3Np
dGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgdGhyZWUgYmVsb3c7IG90aGVyd2lzZSwgc2V0ICdy
aWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBhbmQgYXBwbHkgcnVsZSBudW1iZXIgb25lIGJl
bG93LgorICAgICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFs
dWVPcigwKSB9OworCisgICAgICAgIGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhv
cml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KQorICAgICAgICAgICAgbGVmdCA9IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbjsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAg
fSBlbHNlIGlmIChsZWZ0ICYmIHdpZHRoICYmIHJpZ2h0KSB7CisgICAgICAgIC8vIElmIG5vbmUg
b2YgdGhlIHRocmVlIGlzICdhdXRvJzogSWYgYm90aCAnbWFyZ2luLWxlZnQnIGFuZCAnbWFyZ2lu
LXJpZ2h0JyBhcmUgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24gdW5kZXIgdGhlIGV4dHJhIGNv
bnN0cmFpbnQgdGhhdCB0aGUgdHdvIG1hcmdpbnMgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAgICAg
Ly8gdW5sZXNzIHRoaXMgd291bGQgbWFrZSB0aGVtIG5lZ2F0aXZlLCBpbiB3aGljaCBjYXNlIHdo
ZW4gZGlyZWN0aW9uIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInICgncnRsJyksIHNl
dCAnbWFyZ2luLWxlZnQnICgnbWFyZ2luLXJpZ2h0JykgdG8gemVybyBhbmQKKyAgICAgICAgLy8g
c29sdmUgZm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4gSWYgb25lIG9mICdtYXJn
aW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgaXMgJ2F1dG8nLCBzb2x2ZSB0aGUgZXF1YXRpb24g
Zm9yIHRoYXQgdmFsdWUuCisgICAgICAgIC8vIElmIHRoZSB2YWx1ZXMgYXJlIG92ZXItY29uc3Ry
YWluZWQsIGlnbm9yZSB0aGUgdmFsdWUgZm9yICdsZWZ0JyAoaW4gY2FzZSB0aGUgJ2RpcmVjdGlv
bicgcHJvcGVydHkgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ3J0bCcpIG9yICdyaWdodCcK
KyAgICAgICAgLy8gKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFuZCBzb2x2ZSBmb3Ig
dGhhdCB2YWx1ZS4KKyAgICAgICAgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
JiYgIWNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQpIHsKKyAgICAgICAgICAgIGF1dG8gbWFy
Z2luU3RhcnRBbmRFbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxl
ZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsg
KnJpZ2h0KTsKKyAgICAgICAgICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKQorICAgICAg
ICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyBtYXJnaW5TdGFydEFuZEVuZCAvIDIs
IG1hcmdpblN0YXJ0QW5kRW5kIC8gMiB9OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAgICAg
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAwX2x1OworICAgICAgICAgICAgICAgICAgICB1
c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsg
KndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQgKyAqcmlnaHQpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2lu
LmVuZCA9IDBfbHU7CisgICAgICAgICAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGlu
Z0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArIHVzZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKCFjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQpIHsK
KyAgICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCA9ICpjb21wdXRlZEhvcml6b250
YWxNYXJnaW4uZW5kOworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSBj
b250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCAr
ICp3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJn
aW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgfSBlbHNlIGlmICghY29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luLmVuZCkgeworICAgICAgICAgICAgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPSAq
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAgICAgICAgICAgdXNlZEhvcml6b250
YWxNYXJnaW4uZW5kID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpv
bnRhbE1hcmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBh
ZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHVzZWRIb3Jpem9udGFsTWFyZ2luID0geyAqY29tcHV0ZWRIb3Jpem9udGFsTWFy
Z2luLnN0YXJ0LCAqY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZCB9OworICAgICAgICAgICAg
Ly8gT3ZlcmNvbnN0cmFpbmVkPyBJZ25vcmUgcmlnaHQgKGxlZnQpLgorICAgICAgICAgICAgaWYg
KGlzTGVmdFRvUmlnaHREaXJlY3Rpb24pCisgICAgICAgICAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1hcmdpbi5zdGFydCArICpsZWZ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGxlZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICh1c2VkSG9yaXpvbnRhbE1h
cmdpbi5zdGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArICp3aWR0aCArIHBhZGRpbmdS
aWdodCArIGJvcmRlclJpZ2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0ICdhdXRv
JyB2YWx1ZXMgZm9yICdtYXJnaW4tbGVmdCcgYW5kICdtYXJnaW4tcmlnaHQnIHRvIDAsIGFuZCBw
aWNrIHRoZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzaXggcnVsZXMgdGhhdCBhcHBsaWVzLgorICAg
ICAgICB1c2VkSG9yaXpvbnRhbE1hcmdpbiA9IHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwKSB9
OworICAgIH0KKworICAgIGlmICghbGVmdCAmJiAhd2lkdGggJiYgcmlnaHQpIHsKKyAgICAgICAg
Ly8gIzEKKyAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBhdmFpbGFibGUgd2lkdGggYnkgc29sdmlu
ZyBmb3IgJ3dpZHRoJyBhZnRlciBzZXR0aW5nICdsZWZ0JyAoaW4gY2FzZSAxKSB0byAwCisgICAg
ICAgIGxlZnQgPSBMYXlvdXRVbml0IHsgMCB9OworICAgICAgICBhdXRvIGF2YWlsYWJsZVdpZHRo
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5z
dGFydCArIGJvcmRlckxlZnQgKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJp
Z2h0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uZW5kICsgKnJpZ2h0KTsKKyAgICAgICAgd2lkdGgg
PSBzaHJpbmtUb0ZpdFdpZHRoKGxheW91dEJveCwgYXZhaWxhYmxlV2lkdGgpOworICAgICAgICBs
ZWZ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgICsgYm9y
ZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxz
ZSBpZiAoIWxlZnQgJiYgIXJpZ2h0ICYmIHdpZHRoKSB7CisgICAgICAgIC8vICMyCisgICAgICAg
IGF1dG8gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9u
Rm9yT3V0T2ZGbG93UG9zaXRpb25lZChsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7
CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKSB7CisgICAgICAgICAgICBsZWZ0
ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAgICAgICAgICAgcmlnaHQgPSBjb250YWlu
aW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgcmlnaHQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAgICAgICBsZWZ0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAodXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBi
b3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyAqd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJS
aWdodCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKCF3aWR0aCAmJiAhcmlnaHQgJiYgbGVmdCkgeworICAgICAgICAvLyAjMwor
ICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSB3aWR0aCBieSBzb2x2aW5nIGZvciAn
d2lkdGgnIGFmdGVyIHNldHRpbmcgJ3JpZ2h0JyAoaW4gY2FzZSAzKSB0byAwCisgICAgICAgIHJp
Z2h0ID0gTGF5b3V0VW5pdCB7IDAgfTsKKyAgICAgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGNv
bnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgdXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQg
KyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCAr
IHVzZWRIb3Jpem9udGFsTWFyZ2luLmVuZCArICpyaWdodCk7CisgICAgICAgIHdpZHRoID0gc2hy
aW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgcmlnaHQg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgIH0gZWxzZSBpZiAo
IWxlZnQgJiYgd2lkdGggJiYgcmlnaHQpIHsKKyAgICAgICAgLy8gIzQKKyAgICAgICAgbGVmdCA9
IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxzZSBpZiAo
IXdpZHRoICYmIGxlZnQgJiYgcmlnaHQpIHsKKyAgICAgICAgLy8gIzUKKyAgICAgICAgd2lkdGgg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmln
aHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQgKyAqcmlnaHQpOworICAgIH0gZWxzZSBpZiAo
IXJpZ2h0ICYmIGxlZnQgJiYgd2lkdGgpIHsKKyAgICAgICAgLy8gIzYKKyAgICAgICAgcmlnaHQg
PSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIHVzZWRIb3Jpem9udGFsTWFyZ2luLnN0
YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgKndpZHRoICsgcGFkZGluZ1JpZ2h0ICsg
Ym9yZGVyUmlnaHQgKyB1c2VkSG9yaXpvbnRhbE1hcmdpbi5lbmQpOworICAgIH0KKworICAgIEFT
U0VSVChsZWZ0KTsKKyAgICBBU1NFUlQocmlnaHQpOworICAgIEFTU0VSVCh3aWR0aCk7CisKKyAg
ICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9y
bWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgorICAgIC8vIEF0IHRoaXMg
cG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5h
dGUgc3lzdGVtLgorICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsTGVmdDsKKyAgICAqbGVmdCArPSBjb250YWlu
aW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOworICAgICpyaWdodCArPSBjb250YWluaW5nQmxv
Y2tQYWRkaW5nVmVydGljYWxFZGdlOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltQb3NpdGlvbl1bV2lkdGhdW01hcmdpbl0gLT4gb3V0
LW9mLWZsb3cgbm9uLXJlcGxhY2VkIC0+IGxlZnQoIiA8PCAqbGVmdCA8PCAicHgpIHJpZ2h0KCIg
IDw8ICpyaWdodCA8PCAicHgpIHdpZHRoKCIgPDwgKndpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwg
dXNlZEhvcml6b250YWxNYXJnaW4uc3RhcnQgPDwgInB4LCAiICA8PCB1c2VkSG9yaXpvbnRhbE1h
cmdpbi5lbmQgPDwgInB4KSBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyAqd2lkdGgsIHVzZWRIb3Jpem9udGFsTWFyZ2luIH0g
fTsKK30KKworVmVydGljYWxHZW9tZXRyeSBGb3JtYXR0aW5nR2VvbWV0cnk6Om91dE9mRmxvd1Jl
cGxhY2VkVmVydGljYWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNv
bnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBW
ZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
VmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBB
U1NFUlQocmVwbGFjZWRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOworICAgIEFTU0VSVCh2
ZXJ0aWNhbENvbnN0cmFpbnRzLmxvZ2ljYWxIZWlnaHQpOworCisgICAgLy8gMTAuNi41IEFic29s
dXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMKKyAgICAvLworICAgIC8vIFRoZSB1
c2VkIHZhbHVlIG9mICdoZWlnaHQnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNl
ZCBlbGVtZW50cy4KKyAgICAvLyBJZiAnbWFyZ2luLXRvcCcgb3IgJ21hcmdpbi1ib3R0b20nIGlz
IHNwZWNpZmllZCBhcyAnYXV0bycgaXRzIHVzZWQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUg
cnVsZXMgYmVsb3cuCisgICAgLy8gMS4gSWYgYm90aCAndG9wJyBhbmQgJ2JvdHRvbScgaGF2ZSB0
aGUgdmFsdWUgJ2F1dG8nLCByZXBsYWNlICd0b3AnIHdpdGggdGhlIGVsZW1lbnQncyBzdGF0aWMg
cG9zaXRpb24uCisgICAgLy8gMi4gSWYgJ2JvdHRvbScgaXMgJ2F1dG8nLCByZXBsYWNlIGFueSAn
YXV0bycgb24gJ21hcmdpbi10b3AnIG9yICdtYXJnaW4tYm90dG9tJyB3aXRoICcwJy4KKyAgICAv
LyAzLiBJZiBhdCB0aGlzIHBvaW50IGJvdGggJ21hcmdpbi10b3AnIGFuZCAnbWFyZ2luLWJvdHRv
bScgYXJlIHN0aWxsICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBj
b25zdHJhaW50IHRoYXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcy4KKyAg
ICAvLyA0LiBJZiBhdCB0aGlzIHBvaW50IHRoZXJlIGlzIG9ubHkgb25lICdhdXRvJyBsZWZ0LCBz
b2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRoYXQgdmFsdWUuCisgICAgLy8gNS4gSWYgYXQgdGhpcyBw
b2ludCB0aGUgdmFsdWVzIGFyZSBvdmVyLWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZv
ciAnYm90dG9tJyBhbmQgc29sdmUgZm9yIHRoYXQgdmFsdWUuCisKKyAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgYXV0byYgc3R5bGUg
PSByZXBsYWNlZEJveC5zdHlsZSgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gocmVwbGFjZWRCb3gpOworICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrSGVpZ2h0ID0gKnZlcnRpY2FsQ29uc3RyYWludHMubG9naWNhbEhlaWdodDsKKyAgICBh
dXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFpbnRzLmxvZ2ljYWxX
aWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsVG9wKCks
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNvbXB1dGVkVmFsdWUo
c3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byBo
ZWlnaHQgPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gs
IGhvcml6b250YWxDb25zdHJhaW50cywgdmVydGljYWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZl
cnRpY2FsVmFsdWVzKS5jb250ZW50SGVpZ2h0OworICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihyZXBsYWNl
ZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1
c2VkTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmU7CisgICAgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkFmdGVyID0gY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5hZnRlcjsKKyAgICBhdXRvIHBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCku
dmFsdWVPcigwKTsKKyAgICBhdXRvIHBhZGRpbmdCb3R0b20gPSBib3hHZW9tZXRyeS5wYWRkaW5n
Qm90dG9tKCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlclRvcCA9IGJveEdlb21ldHJ5LmJv
cmRlclRvcCgpOworICAgIGF1dG8gYm9yZGVyQm90dG9tID0gYm94R2VvbWV0cnkuYm9yZGVyQm90
dG9tKCk7CisKKyAgICBpZiAoIXRvcCAmJiAhYm90dG9tKSB7CisgICAgICAgIC8vICMxCisgICAg
ICAgIHRvcCA9IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKHJl
cGxhY2VkQm94LCB2ZXJ0aWNhbENvbnN0cmFpbnRzKTsKKyAgICB9CisKKyAgICBpZiAoIWJvdHRv
bSkgeworICAgICAgICAvLyAjMgorICAgICAgICB1c2VkTWFyZ2luQmVmb3JlID0gY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKTsKKyAgICAgICAgdXNlZE1hcmdpbkFmdGVy
ID0gdXNlZE1hcmdpbkJlZm9yZTsKKyAgICB9CisKKyAgICBpZiAoIXVzZWRNYXJnaW5CZWZvcmUg
JiYgIXVzZWRNYXJnaW5BZnRlcikgeworICAgICAgICAvLyAjMworICAgICAgICBhdXRvIG1hcmdp
bkJlZm9yZUFuZEFmdGVyID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJU
b3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
ICpib3R0b20pOworICAgICAgICB1c2VkTWFyZ2luQmVmb3JlID0gbWFyZ2luQmVmb3JlQW5kQWZ0
ZXIgLyAyOworICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSB1c2VkTWFyZ2luQmVmb3JlOworICAg
IH0KKworICAgIC8vICM0CisgICAgaWYgKCF0b3ApCisgICAgICAgIHRvcCA9IGNvbnRhaW5pbmdC
bG9ja0hlaWdodCAtICgqdXNlZE1hcmdpbkJlZm9yZSArIGJvcmRlclRvcCArIHBhZGRpbmdUb3Ag
KyBoZWlnaHQgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tICsgKnVzZWRNYXJnaW5BZnRl
ciArICpib3R0b20pOworCisgICAgaWYgKCFib3R0b20pCisgICAgICAgIGJvdHRvbSA9IGNvbnRh
aW5pbmdCbG9ja0hlaWdodCAtICgqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1
c2VkTWFyZ2luQWZ0ZXIpOworCisgICAgaWYgKCF1c2VkTWFyZ2luQmVmb3JlKQorICAgICAgICB1
c2VkTWFyZ2luQmVmb3JlID0gY29udGFpbmluZ0Jsb2NrSGVpZ2h0IC0gKCp0b3AgKyBib3JkZXJU
b3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSAr
ICp1c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tKTsKKworICAgIGlmICghdXNlZE1hcmdpbkFmdGVy
KQorICAgICAgICB1c2VkTWFyZ2luQWZ0ZXIgPSBjb250YWluaW5nQmxvY2tIZWlnaHQgLSAoKnRv
cCArICp1c2VkTWFyZ2luQmVmb3JlICsgYm9yZGVyVG9wICsgcGFkZGluZ1RvcCArIGhlaWdodCAr
IHBhZGRpbmdCb3R0b20gKyBib3JkZXJCb3R0b20gKyAqYm90dG9tKTsKKworICAgIC8vICM1Cisg
ICAgYXV0byBib3hIZWlnaHQgPSAqdG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3Ag
KyBwYWRkaW5nVG9wICsgaGVpZ2h0ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1
c2VkTWFyZ2luQWZ0ZXIgKyAqYm90dG9tOworICAgIGlmIChib3hIZWlnaHQgPiBjb250YWluaW5n
QmxvY2tIZWlnaHQpCisgICAgICAgIGJvdHRvbSA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodCAtICgq
dG9wICsgKnVzZWRNYXJnaW5CZWZvcmUgKyBib3JkZXJUb3AgKyBwYWRkaW5nVG9wICsgaGVpZ2h0
ICsgcGFkZGluZ0JvdHRvbSArIGJvcmRlckJvdHRvbSArICp1c2VkTWFyZ2luQWZ0ZXIpOyAKKwor
ICAgIC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBm
b3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCisgICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0g
b2YgdGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRp
bmF0ZSBzeXN0ZW0uCisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdl
ID0gdmVydGljYWxDb25zdHJhaW50cy5sb2dpY2FsVG9wOworICAgICp0b3AgKz0gY29udGFpbmlu
Z0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKKyAgICAqYm90dG9tICs9IGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CisKKyAgICBBU1NFUlQodG9wKTsKKyAgICBBU1NFUlQoYm90
dG9tKTsKKyAgICBBU1NFUlQodXNlZE1hcmdpbkJlZm9yZSk7CisgICAgQVNTRVJUKHVzZWRNYXJn
aW5BZnRlcik7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBz
dHJlYW0gPDwgIltQb3NpdGlvbl1bSGVpZ2h0XVtNYXJnaW5dIC0+IG91dC1vZi1mbG93IHJlcGxh
Y2VkIC0+IHRvcCgiIDw8ICp0b3AgPDwgInB4KSBib3R0b20oIiAgPDwgKmJvdHRvbSA8PCAicHgp
IGhlaWdodCgiIDw8IGhlaWdodCA8PCAicHgpIG1hcmdpbigiIDw8ICp1c2VkTWFyZ2luQmVmb3Jl
IDw8ICJweCwgIiAgPDwgKnVzZWRNYXJnaW5BZnRlciA8PCAicHgpIGxheW91dEJveCgiIDw8ICZy
ZXBsYWNlZEJveCA8PCAiKSIpOworICAgIHJldHVybiB7ICp0b3AsICpib3R0b20sIHsgaGVpZ2h0
LCB7ICp1c2VkTWFyZ2luQmVmb3JlLCAqdXNlZE1hcmdpbkFmdGVyIH0gfSB9OworfQorCitIb3Jp
em9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZEhvcml6
b250YWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYgcmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBWZXJ0aWNhbENv
bnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNTRVJUKHJlcGxh
Y2VkQm94LmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKKworICAgIC8vIDEwLjMuOCBBYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8gSW4gdGhpcyBjYXNlLCBz
ZWN0aW9uIDEwLjMuNyBhcHBsaWVzIHVwIHRocm91Z2ggYW5kIGluY2x1ZGluZyB0aGUgY29uc3Ry
YWludCBlcXVhdGlvbiwgYnV0IHRoZSByZXN0IG9mIHNlY3Rpb24gMTAuMy43IGlzIHJlcGxhY2Vk
IGJ5IHRoZSBmb2xsb3dpbmcgcnVsZXM6CisgICAgLy8KKyAgICAvLyBUaGUgdXNlZCB2YWx1ZSBv
ZiAnd2lkdGgnIGlzIGRldGVybWluZWQgYXMgZm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cy4g
SWYgJ21hcmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyBpcyBzcGVjaWZpZWQgYXMgJ2F1dG8n
IGl0cyB1c2VkIHZhbHVlIGlzIGRldGVybWluZWQgYnkgdGhlIHJ1bGVzIGJlbG93LgorICAgIC8v
IDEuIElmIGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGhhdmUgdGhlIHZhbHVlICdhdXRvJywgdGhl
biBpZiB0aGUgJ2RpcmVjdGlvbicgcHJvcGVydHkgb2YgdGhlIGVsZW1lbnQgZXN0YWJsaXNoaW5n
IHRoZSBzdGF0aWMtcG9zaXRpb24gY29udGFpbmluZyBibG9jayBpcyAnbHRyJywKKyAgICAvLyAg
IHNldCAnbGVmdCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbjsgZWxzZSBpZiAnZGlyZWN0aW9uJyBp
cyAncnRsJywgc2V0ICdyaWdodCcgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbi4KKyAgICAvLyAyLiBJ
ZiAnbGVmdCcgb3IgJ3JpZ2h0JyBhcmUgJ2F1dG8nLCByZXBsYWNlIGFueSAnYXV0bycgb24gJ21h
cmdpbi1sZWZ0JyBvciAnbWFyZ2luLXJpZ2h0JyB3aXRoICcwJy4KKyAgICAvLyAzLiBJZiBhdCB0
aGlzIHBvaW50IGJvdGggJ21hcmdpbi1sZWZ0JyBhbmQgJ21hcmdpbi1yaWdodCcgYXJlIHN0aWxs
ICdhdXRvJywgc29sdmUgdGhlIGVxdWF0aW9uIHVuZGVyIHRoZSBleHRyYSBjb25zdHJhaW50IHRo
YXQgdGhlIHR3byBtYXJnaW5zIG11c3QgZ2V0IGVxdWFsIHZhbHVlcywKKyAgICAvLyAgIHVubGVz
cyB0aGlzIHdvdWxkIG1ha2UgdGhlbSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB3aGVuIHRoZSBk
aXJlY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgJ2x0cicgKCdydGwnKSwgc2V0ICdt
YXJnaW4tbGVmdCcgKCdtYXJnaW4tcmlnaHQnKSB0byB6ZXJvIGFuZAorICAgIC8vICAgc29sdmUg
Zm9yICdtYXJnaW4tcmlnaHQnICgnbWFyZ2luLWxlZnQnKS4KKyAgICAvLyA0LiBJZiBhdCB0aGlz
IHBvaW50IHRoZXJlIGlzIGFuICdhdXRvJyBsZWZ0LCBzb2x2ZSB0aGUgZXF1YXRpb24gZm9yIHRo
YXQgdmFsdWUuCisgICAgLy8gNS4gSWYgYXQgdGhpcyBwb2ludCB0aGUgdmFsdWVzIGFyZSBvdmVy
LWNvbnN0cmFpbmVkLCBpZ25vcmUgdGhlIHZhbHVlIGZvciBlaXRoZXIgJ2xlZnQnIChpbiBjYXNl
IHRoZSAnZGlyZWN0aW9uJyBwcm9wZXJ0eSBvZiB0aGUgY29udGFpbmluZyBibG9jayBpcyAncnRs
Jykgb3IKKyAgICAvLyAgICdyaWdodCcgKGluIGNhc2UgJ2RpcmVjdGlvbicgaXMgJ2x0cicpIGFu
ZCBzb2x2ZSBmb3IgdGhhdCB2YWx1ZS4KKworICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94
LnN0eWxlKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChyZXBsYWNlZEJveCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgYXV0byBpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uID0gcmVwbGFjZWRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CisKKyAgICBhdXRvIGxlZnQgPSBjb21wdXRlZFZhbHVlKHN0
eWxlLmxvZ2ljYWxMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIHJpZ2h0
ID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5sb2dpY2FsUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpOworICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZEhvcml6b250YWxNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25z
dHJhaW50cyk7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpblN0YXJ0ID0gY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kOworICAgIGF1dG8gd2lk
dGggPSBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpv
bnRhbFZhbHVlcykuY29udGVudFdpZHRoOworICAgIGF1dG8gcGFkZGluZ0xlZnQgPSBib3hHZW9t
ZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBwYWRkaW5nUmlnaHQgPSBi
b3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyTGVm
dCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKKyAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94
R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKworICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKKyAg
ICAgICAgLy8gIzEKKyAgICAgICAgYXV0byBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24gPSBzdGF0
aWNIb3Jpem9udGFsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGlvbmVkKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMpOworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlv
bikKKyAgICAgICAgICAgIGxlZnQgPSBzdGF0aWNIb3Jpem9udGFsUG9zaXRpb247CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJpZ2h0ID0gc3RhdGljSG9yaXpvbnRhbFBvc2l0aW9uOworICAg
IH0KKworICAgIGlmICghbGVmdCB8fCAhcmlnaHQpIHsKKyAgICAgICAgLy8gIzIKKyAgICAgICAg
dXNlZE1hcmdpblN0YXJ0ID0gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3Io
MCk7CisgICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5k
LnZhbHVlT3IoMCk7CisgICAgfQorCisgICAgaWYgKCF1c2VkTWFyZ2luU3RhcnQgJiYgIXVzZWRN
YXJnaW5FbmQpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byBtYXJnaW5TdGFydEFuZEVu
ZCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCpsZWZ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdM
ZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICpyaWdodCk7CisgICAg
ICAgIGlmIChtYXJnaW5TdGFydEFuZEVuZCA+PSAwKSB7CisgICAgICAgICAgICB1c2VkTWFyZ2lu
U3RhcnQgPSBtYXJnaW5TdGFydEFuZEVuZCAvIDI7CisgICAgICAgICAgICB1c2VkTWFyZ2luRW5k
ID0gdXNlZE1hcmdpblN0YXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlz
TGVmdFRvUmlnaHREaXJlY3Rpb24pIHsKKyAgICAgICAgICAgICAgICB1c2VkTWFyZ2luU3RhcnQg
PSAwX2x1OworICAgICAgICAgICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb250YWluaW5nQmxvY2tX
aWR0aCAtICgqbGVmdCArICp1c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xl
ZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXNlZE1hcmdpbkVuZCA9IDBfbHU7Cisg
ICAgICAgICAgICAgICAgdXNlZE1hcmdpblN0YXJ0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAo
KmxlZnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCAr
IGJvcmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gIzQKKyAgICBpZiAoIWxlZnQpCisgICAgICAgIGxl
ZnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVm
dCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1
c2VkTWFyZ2luRW5kICsgKnJpZ2h0KTsKKworICAgIGlmICghcmlnaHQpCisgICAgICAgIHJpZ2h0
ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdo
dCArICp1c2VkTWFyZ2luRW5kKTsKKworICAgIGlmICghdXNlZE1hcmdpblN0YXJ0KQorICAgICAg
ICB1c2VkTWFyZ2luU3RhcnQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArIGJvcmRl
ckxlZnQgKyBwYWRkaW5nTGVmdCArIHdpZHRoICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQg
KyAqdXNlZE1hcmdpbkVuZCArICpyaWdodCk7CisKKyAgICBpZiAoIXVzZWRNYXJnaW5FbmQpCisg
ICAgICAgIHVzZWRNYXJnaW5FbmQgPSBjb250YWluaW5nQmxvY2tXaWR0aCAtICgqbGVmdCArICp1
c2VkTWFyZ2luU3RhcnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRp
bmdSaWdodCArIGJvcmRlclJpZ2h0ICsgKnJpZ2h0KTsKKworICAgIGF1dG8gYm94V2lkdGggPSAo
KmxlZnQgKyAqdXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lk
dGggKyBwYWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kICsgKnJpZ2h0
KTsKKyAgICBpZiAoYm94V2lkdGggPiBjb250YWluaW5nQmxvY2tXaWR0aCkgeworICAgICAgICAv
LyAjNSBPdmVyLWNvbnN0cmFpbmVkPworICAgICAgICBpZiAoaXNMZWZ0VG9SaWdodERpcmVjdGlv
bikKKyAgICAgICAgICAgIHJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrV2lkdGggLSAoKmxlZnQgKyAq
dXNlZE1hcmdpblN0YXJ0ICsgYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgd2lkdGggKyBwYWRk
aW5nUmlnaHQgKyBib3JkZXJSaWdodCArICp1c2VkTWFyZ2luRW5kKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbGVmdCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoIC0gKCp1c2VkTWFyZ2luU3Rh
cnQgKyBib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyB3aWR0aCArIHBhZGRpbmdSaWdodCArIGJv
cmRlclJpZ2h0ICsgKnVzZWRNYXJnaW5FbmQgKyAqcmlnaHQpOworICAgIH0KKworICAgIEFTU0VS
VChsZWZ0KTsKKyAgICBBU1NFUlQocmlnaHQpOworICAgIEFTU0VSVCh1c2VkTWFyZ2luU3RhcnQp
OworICAgIEFTU0VSVCh1c2VkTWFyZ2luRW5kKTsKKworICAgIC8vIEZvciBvdXQtb2YtZmxvdyBl
bGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBhZGRpbmcgZWRn
ZSBvZiB0aGUgYW5jZXN0b3IuCisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9zaXRpb25lZCB2
YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcgYm94LiBMZXQn
cyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgYXV0byBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gaG9yaXpvbnRhbENvbnN0cmFpbnRz
LmxvZ2ljYWxMZWZ0OworICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CisgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7
CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8
PCAiW1Bvc2l0aW9uXVtXaWR0aF1bTWFyZ2luXSAtPiBvdXQtb2YtZmxvdyByZXBsYWNlZCAtPiBs
ZWZ0KCIgPDwgKmxlZnQgPDwgInB4KSByaWdodCgiICA8PCAqcmlnaHQgPDwgInB4KSB3aWR0aCgi
IDw8IHdpZHRoIDw8ICJweCkgbWFyZ2luKCIgPDwgKnVzZWRNYXJnaW5TdGFydCA8PCAicHgsICIg
IDw8ICp1c2VkTWFyZ2luRW5kIDw8ICJweCkgbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8
ICIpIik7CisgICAgcmV0dXJuIHsgKmxlZnQsICpyaWdodCwgeyB3aWR0aCwgeyAqdXNlZE1hcmdp
blN0YXJ0LCAqdXNlZE1hcmdpbkVuZCB9IH0gfTsKK30KKworQ29udGVudEhlaWdodEFuZE1hcmdp
biBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiBsYXlvdXRC
b3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBj
b25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcykg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpOworICAgIC8v
IFRPRE86IFVzZSBjb21wbGljYXRlZC1jYXNlIGZvciBkb2N1bWVudCByZW5kZXJlciBmb3Igbm93
IChzZWUgQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbikuCisg
ICAgQVNTRVJUKChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkgJiYgbGF5b3V0Qm94LmlzSW5G
bG93KCkgJiYgIWxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpKSB8fCBsYXlvdXRCb3guaXNJ
bmxpbmVCbG9ja0JveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpIHx8IGxh
eW91dEJveC5pc0RvY3VtZW50Qm94KCkgfHwgbGF5b3V0Qm94LmlzVGFibGVCb3goKSk7CisKKyAg
ICAvLyAxMC42LjYgQ29tcGxpY2F0ZWQgY2FzZXMKKyAgICAvLworICAgIC8vIEJsb2NrLWxldmVs
LCBub24tcmVwbGFjZWQgZWxlbWVudHMgaW4gbm9ybWFsIGZsb3cgd2hlbiAnb3ZlcmZsb3cnIGRv
ZXMgbm90IGNvbXB1dGUgdG8gJ3Zpc2libGUnIChleGNlcHQgaWYgdGhlICdvdmVyZmxvdycgcHJv
cGVydHkncyB2YWx1ZSBoYXMgYmVlbiBwcm9wYWdhdGVkIHRvIHRoZSB2aWV3cG9ydCkuCisgICAg
Ly8gJ0lubGluZS1ibG9jaycsIG5vbi1yZXBsYWNlZCBlbGVtZW50cy4KKyAgICAvLyBGbG9hdGlu
Zywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgorICAgIC8vCisgICAgLy8gMS4gSWYgJ21hcmdpbi10
b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAw
LgorICAgIC8vIDIuIElmICdoZWlnaHQnIGlzICdhdXRvJywgdGhlIGhlaWdodCBkZXBlbmRzIG9u
IHRoZSBlbGVtZW50J3MgZGVzY2VuZGFudHMgcGVyIDEwLjYuNy4KKworICAgIGF1dG8gaGVpZ2h0
ID0gb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZh
bHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7CisgICAgYXV0
byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZl
cnRpY2FsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKKyAgICAvLyAj
MQorICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25D
b2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDAp
LCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCisgICAgLy8gIzIK
KyAgICBpZiAoIWhlaWdodCkgeworICAgICAgICBBU1NFUlQoaXNIZWlnaHRBdXRvKGxheW91dEJv
eCkpOworICAgICAgICBpZiAoIWlzPENvbnRhaW5lckJveD4obGF5b3V0Qm94KSB8fCAhZG93bmNh
c3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLmhhc0luRmxvd09yRmxvYXRpbmdDaGlsZCgpKQor
ICAgICAgICAgICAgaGVpZ2h0ID0gMF9sdTsKKyAgICAgICAgZWxzZSBpZiAobGF5b3V0Qm94Lmlz
RG9jdW1lbnRCb3goKSAmJiAhbGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQo
KSkgeworICAgICAgICAgICAgYXV0byYgZG9jdW1lbnRCb3ggPSBkb3duY2FzdDxDb250YWluZXJC
b3g+KGxheW91dEJveCk7CisgICAgICAgICAgICBhdXRvIHRvcCA9IEJveEdlb21ldHJ5OjptYXJn
aW5Cb3hSZWN0KGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmRvY3VtZW50Qm94
LmZpcnN0SW5GbG93Q2hpbGQoKSkpLnRvcCgpOworICAgICAgICAgICAgYXV0byBib3R0b20gPSBC
b3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9y
Qm94KCpkb2N1bWVudEJveC5sYXN0SW5GbG93Q2hpbGQoKSkpLmJvdHRvbSgpOworICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgKHF1aXJrPykgYmVoYXZpb3Igc2luY2UgdGhlIGRvY3Vt
ZW50IGJveCBpcyBub3QgYSBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdCBhbmQKKyAgICAgICAgICAg
IC8vIGFsbCB0aGUgZmxvYXQgYm94ZXMgZW5kIHVwIGF0IHRoZSBJQ0IgbGV2ZWwuCisgICAgICAg
ICAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Jsb2NrID0gZG9jdW1lbnRCb3guZm9ybWF0dGlu
Z0NvbnRleHRSb290KCk7CisgICAgICAgICAgICBhdXRvIGZsb2F0aW5nQ29udGV4dCA9IEZsb2F0
aW5nQ29udGV4dCB7IGZvcm1hdHRpbmdDb250ZXh0KCksIGxheW91dFN0YXRlKCkuZXN0YWJsaXNo
ZWRGb3JtYXR0aW5nU3RhdGUoaW5pdGlhbENvbnRhaW5pbmdCbG9jaykuZmxvYXRpbmdTdGF0ZSgp
IH07CisgICAgICAgICAgICBpZiAoYXV0byBmbG9hdEJvdHRvbSA9IGZsb2F0aW5nQ29udGV4dC5i
b3R0b20oKSkgeworICAgICAgICAgICAgICAgIGJvdHRvbSA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KCpmbG9hdEJvdHRvbSwgYm90dG9tKTsKKyAgICAgICAgICAgICAgICBhdXRvIGZsb2F0VG9wID0g
ZmxvYXRpbmdDb250ZXh0LnRvcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChmbG9hdFRvcCk7
CisgICAgICAgICAgICAgICAgdG9wID0gc3RkOjptaW48TGF5b3V0VW5pdD4oKmZsb2F0VG9wLCB0
b3ApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGxheW91dEJveC5lc3RhYmxpc2hl
c0Zvcm1hdHRpbmdDb250ZXh0KCkpOworICAgICAgICAgICAgaGVpZ2h0ID0gY29udGVudEhlaWdo
dEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdChkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGhlaWdodCk7CisKKyAgICBMT0df
V0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1b
TWFyZ2luXSAtPiBmbG9hdGluZyBub24tcmVwbGFjZWQgLT4gaGVpZ2h0KCIgPDwgKmhlaWdodCA8
PCAicHgpIG1hcmdpbigiIDw8IHVzZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUgPDwgInB4LCAiIDw8
IHVzZWRWZXJ0aWNhbE1hcmdpbi5hZnRlciA8PCAicHgpIC0+IGxheW91dEJveCgiIDw8ICZsYXlv
dXRCb3ggPDwgIikiKTsKKyAgICByZXR1cm4gQ29udGVudEhlaWdodEFuZE1hcmdpbiB7ICpoZWln
aHQsIHVzZWRWZXJ0aWNhbE1hcmdpbiB9OworfQorCitDb250ZW50V2lkdGhBbmRNYXJnaW4gRm9y
bWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6
b250YWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmIG92ZXJy
aWRkZW5Ib3Jpem9udGFsVmFsdWVzKQoreworICAgIEFTU0VSVChsYXlvdXRCb3guaXNGbG9hdGlu
Z1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSk7CisKKyAgICAvLyAx
MC4zLjUgRmxvYXRpbmcsIG5vbi1yZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gMS4g
SWYgJ21hcmdpbi1sZWZ0Jywgb3IgJ21hcmdpbi1yaWdodCcgYXJlIGNvbXB1dGVkIGFzICdhdXRv
JywgdGhlaXIgdXNlZCB2YWx1ZSBpcyAnMCcuCisgICAgLy8gMi4gSWYgJ3dpZHRoJyBpcyBjb21w
dXRlZCBhcyAnYXV0bycsIHRoZSB1c2VkIHZhbHVlIGlzIHRoZSAic2hyaW5rLXRvLWZpdCIgd2lk
dGguCisKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKKworICAgIC8vICMxCisgICAgYXV0byB1c2VkSG9yaXpvbnRhbGxNYXJnaW4gPSBV
c2VkSG9yaXpvbnRhbE1hcmdpbiB7IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5zdGFydC52YWx1
ZU9yKDApLCBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uZW5kLnZhbHVlT3IoMCkgfTsKKyAgICAv
LyAjMgorICAgIGF1dG8gd2lkdGggPSBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy53aWR0aCA/
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoIDogY29tcHV0ZWRXaWR0aChsYXlvdXRC
b3gsIGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOworICAgIGlmICghd2lkdGgp
CisgICAgICAgIHdpZHRoID0gc2hyaW5rVG9GaXRXaWR0aChsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cy5sb2dpY2FsV2lkdGgpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRp
bmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltXaWR0aF1bTWFyZ2luXSAtPiBmbG9hdGluZyBu
b24tcmVwbGFjZWQgLT4gd2lkdGgoIiA8PCAqd2lkdGggPDwgInB4KSBtYXJnaW4oIiA8PCB1c2Vk
SG9yaXpvbnRhbGxNYXJnaW4uc3RhcnQgPDwgInB4LCAiIDw8IHVzZWRIb3Jpem9udGFsbE1hcmdp
bi5lbmQgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmbGF5b3V0Qm94IDw8ICIpIik7CisgICAg
cmV0dXJuIENvbnRlbnRXaWR0aEFuZE1hcmdpbiB7ICp3aWR0aCwgdXNlZEhvcml6b250YWxsTWFy
Z2luIH07Cit9CisKK0NvbnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpm
bG9hdGluZ1JlcGxhY2VkQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYg
cmVwbGFjZWRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0
cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlcykgY29uc3QKK3sKKyAgICBBU1NFUlQocmVwbGFjZWRCb3guaXNGbG9hdGluZ1Bvc2l0
aW9uZWQoKSk7CisKKyAgICAvLyAxMC42LjIgSW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLCBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdywgJ2lubGluZS1ibG9jaycK
KyAgICAvLyByZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdyBhbmQgZmxvYXRpbmcgcmVw
bGFjZWQgZWxlbWVudHMKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFyZ2luXSAtPiBmbG9hdGluZyByZXBsYWNlZCAtPiBy
ZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNlZCIpOworICAgIHJldHVybiBpbmxpbmVSZXBsYWNl
ZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50
cywgeyB9LCBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitDb250ZW50V2lkdGhBbmRN
YXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ1JlcGxhY2VkQ29udGVudFdpZHRoQW5k
TWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRhbENv
bnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9u
dGFsVmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICBBU1NFUlQocmVw
bGFjZWRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSk7CisKKyAgICAvLyAxMC4zLjYgRmxvYXRp
bmcsIHJlcGxhY2VkIGVsZW1lbnRzCisgICAgLy8KKyAgICAvLyAxLiBJZiAnbWFyZ2luLWxlZnQn
IG9yICdtYXJnaW4tcmlnaHQnIGFyZSBjb21wdXRlZCBhcyAnYXV0bycsIHRoZWlyIHVzZWQgdmFs
dWUgaXMgJzAnLgorICAgIC8vIDIuIFRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgaXMgZGV0ZXJt
aW5lZCBhcyBmb3IgaW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzLgorICAgIGF1dG8gY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luID0gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZEhvcml6b250YWxN
YXJnaW4ocmVwbGFjZWRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisKKyAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW0hlaWdodF1bTWFy
Z2luXSAtPiBmbG9hdGluZyByZXBsYWNlZCAtPiByZWRpcmVjdGVkIHRvIGlubGluZSByZXBsYWNl
ZCIpOworICAgIGF1dG8gdXNlZE1hcmdpbiA9IFVzZWRIb3Jpem9udGFsTWFyZ2luIHsgY29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVlT3IoMCksIGNvbXB1dGVkSG9yaXpvbnRhbE1h
cmdpbi5lbmQudmFsdWVPcigwKSB9OworICAgIHJldHVybiBpbmxpbmVSZXBsYWNlZENvbnRlbnRX
aWR0aEFuZE1hcmdpbihyZXBsYWNlZEJveCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB7IH0sIHsg
b3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGgsIHVzZWRNYXJnaW4gfSk7Cit9CisKK1Zl
cnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0dlb21ldHJ5OjpvdXRPZkZsb3dWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhv
cml6b250YWxDb25zdHJhaW50cywgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYgdmVydGljYWxD
b25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxheW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAg
ICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpLCBob3Jpem9udGFsQ29uc3RyYWludHMsIHZlcnRpY2Fs
Q29uc3RyYWludHMsIG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyk7CisgICAgcmV0dXJuIG91dE9m
Rmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeShkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0
Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBvdmVycmlk
ZGVuVmVydGljYWxWYWx1ZXMpOworfQorCitIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0dl
b21ldHJ5OjpvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnkoY29uc3QgQm94JiBsYXlvdXRCb3gs
IGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25z
dCBWZXJ0aWNhbENvbnN0cmFpbnRzJiB2ZXJ0aWNhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlk
ZGVuSG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAg
QVNTRVJUKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7CisKKyAgICBpZiAoIWxh
eW91dEJveC5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgIHJldHVybiBvdXRPZkZsb3dOb25SZXBs
YWNlZEhvcml6b250YWxHZW9tZXRyeShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCks
IGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpOworICAg
IHJldHVybiBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShkb3duY2FzdDxSZXBs
YWNlZEJveD4obGF5b3V0Qm94KSwgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCB2ZXJ0aWNhbENvbnN0
cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Cit9CisKK0NvbnRlbnRIZWlnaHRB
bmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjpmbG9hdGluZ0NvbnRlbnRIZWlnaHRBbmRNYXJn
aW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVuVmVydGljYWxWYWx1ZXMmIG92ZXJy
aWRkZW5WZXJ0aWNhbFZhbHVlcykgY29uc3QKK3sKKyAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxv
YXRpbmdQb3NpdGlvbmVkKCkpOworCisgICAgaWYgKCFsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgp
KQorICAgICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIGhvcml6b250YWxD
b25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVzKTsKKyAgICByZXR1cm4gZmxvYXRp
bmdSZXBsYWNlZENvbnRlbnRIZWlnaHRBbmRNYXJnaW4oZG93bmNhc3Q8UmVwbGFjZWRCb3g+KGxh
eW91dEJveCksIGhvcml6b250YWxDb25zdHJhaW50cywgb3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
KTsKK30KKworQ29udGVudFdpZHRoQW5kTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6ZmxvYXRp
bmdDb250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzLCBjb25zdCBPdmVycmlkZGVu
SG9yaXpvbnRhbFZhbHVlcyYgb3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMpCit7CisgICAgQVNT
RVJUKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKKworICAgIGlmICghbGF5b3V0
Qm94LmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAgcmV0dXJuIGZsb2F0aW5nTm9uUmVwbGFjZWRD
b250ZW50V2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMsIG92
ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzKTsKKyAgICByZXR1cm4gZmxvYXRpbmdSZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE1hcmdpbihkb3duY2FzdDxSZXBsYWNlZEJveD4obGF5b3V0Qm94KSwgaG9y
aXpvbnRhbENvbnN0cmFpbnRzLCBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyk7Cit9CisKK0Nv
bnRlbnRIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVSZXBsYWNlZENv
bnRlbnRIZWlnaHRBbmRNYXJnaW4oY29uc3QgUmVwbGFjZWRCb3gmIHJlcGxhY2VkQm94LCBjb25z
dCBIb3Jpem9udGFsQ29uc3RyYWludHMmIGhvcml6b250YWxDb25zdHJhaW50cywgT3B0aW9uYWw8
VmVydGljYWxDb25zdHJhaW50cz4gdmVydGljYWxDb25zdHJhaW50cywgY29uc3QgT3ZlcnJpZGRl
blZlcnRpY2FsVmFsdWVzJiBvdmVycmlkZGVuVmVydGljYWxWYWx1ZXMpIGNvbnN0Cit7CisgICAg
Ly8gMTAuNi4yIElubGluZSByZXBsYWNlZCBlbGVtZW50cywgYmxvY2stbGV2ZWwgcmVwbGFjZWQg
ZWxlbWVudHMgaW4gbm9ybWFsIGZsb3csICdpbmxpbmUtYmxvY2snIHJlcGxhY2VkIGVsZW1lbnRz
IGluIG5vcm1hbCBmbG93IGFuZCBmbG9hdGluZyByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisg
ICAgLy8gMS4gSWYgJ21hcmdpbi10b3AnLCBvciAnbWFyZ2luLWJvdHRvbScgYXJlICdhdXRvJywg
dGhlaXIgdXNlZCB2YWx1ZSBpcyAwLgorICAgIC8vIDIuIElmICdoZWlnaHQnIGFuZCAnd2lkdGgn
IGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxlbWVudCBhbHNv
IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRoYXQgaW50cmluc2ljIGhlaWdodCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KKyAgICAvLyAzLiBPdGhlcndpc2UsIGlmICdoZWln
aHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBh
biBpbnRyaW5zaWMgcmF0aW8gdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0JyBpczoKKyAg
ICAvLyAgICAodXNlZCB3aWR0aCkgLyAoaW50cmluc2ljIHJhdGlvKQorICAgIC8vIDQuIE90aGVy
d2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhl
IGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBpbnRyaW5zaWMgaGVp
Z2h0IGlzIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgorICAgIC8vIDUuIE90aGVyd2lzZSwg
aWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0
aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWln
aHQnIG11c3QgYmUgc2V0IHRvCisgICAgLy8gICAgdGhlIGhlaWdodCBvZiB0aGUgbGFyZ2VzdCBy
ZWN0YW5nbGUgdGhhdCBoYXMgYSAyOjEgcmF0aW8sIGhhcyBhIGhlaWdodCBub3QgZ3JlYXRlciB0
aGFuIDE1MHB4LCBhbmQgaGFzIGEgd2lkdGggbm90IGdyZWF0ZXIgdGhhbiB0aGUgZGV2aWNlIHdp
ZHRoLgorCisgICAgLy8gIzEKKyAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZv
cm1hdHRpbmdDb250ZXh0KCk7CisgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gRm9y
bWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKHJlcGxhY2VkQm94LCBob3Jp
em9udGFsQ29uc3RyYWludHMpOworICAgIGF1dG8gdXNlZFZlcnRpY2FsTWFyZ2luID0gVXNlZFZl
cnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
LmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3Io
MCkgfTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlcGxhY2VkQm94LnN0eWxlKCk7CisKKyAgICBhdXRv
IGhlaWdodCA9IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQgPyBvdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMuaGVpZ2h0LnZhbHVlKCkgOiBjb21wdXRlZEhlaWdodChyZXBsYWNlZEJveCwg
dmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3RyYWludHMtPmxvZ2ljYWxIZWlnaHQg
OiBXVEY6Om51bGxvcHQpOworICAgIGF1dG8gaGVpZ2h0SXNBdXRvID0gIW92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcy5oZWlnaHQgJiYgaXNIZWlnaHRBdXRvKHJlcGxhY2VkQm94KTsKKyAgICBhdXRv
IHdpZHRoSXNBdXRvID0gc3R5bGUubG9naWNhbFdpZHRoKCkuaXNBdXRvKCk7CisKKyAgICBpZiAo
aGVpZ2h0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY0hl
aWdodCgpKSB7CisgICAgICAgIC8vICMyCisgICAgICAgIGhlaWdodCA9IHJlcGxhY2VkQm94Lmlu
dHJpbnNpY0hlaWdodCgpOworICAgIH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2Vk
Qm94Lmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKKyAgICAgICAgLy8gIzMKKyAgICAgICAgYXV0byB1
c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChyZXBsYWNlZEJveCku
Y29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGhlaWdodCA9IHVzZWRXaWR0aCAvIHJlcGxhY2Vk
Qm94LmludHJpbnNpY1JhdGlvKCk7CisgICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVw
bGFjZWRCb3guaGFzSW50cmluc2ljSGVpZ2h0KCkpIHsKKyAgICAgICAgLy8gIzQKKyAgICAgICAg
aGVpZ2h0ID0gcmVwbGFjZWRCb3guaW50cmluc2ljSGVpZ2h0KCk7CisgICAgfSBlbHNlIGlmICho
ZWlnaHRJc0F1dG8pIHsKKyAgICAgICAgLy8gIzUKKyAgICAgICAgaGVpZ2h0ID0geyAxNTAgfTsK
KyAgICB9CisKKyAgICBBU1NFUlQoaGVpZ2h0KTsKKworICAgIExPR19XSVRIX1NUUkVBTShGb3Jt
YXR0aW5nQ29udGV4dExheW91dCwgc3RyZWFtIDw8ICJbSGVpZ2h0XVtNYXJnaW5dIC0+IGluZmxv
dyByZXBsYWNlZCAtPiBoZWlnaHQoIiA8PCAqaGVpZ2h0IDw8ICJweCkgbWFyZ2luKCIgPDwgdXNl
ZFZlcnRpY2FsTWFyZ2luLmJlZm9yZSA8PCAicHgsICIgPDwgdXNlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyIDw8ICJweCkgLT4gbGF5b3V0Qm94KCIgPDwgJnJlcGxhY2VkQm94IDw8ICIpIik7CisgICAg
cmV0dXJuIHsgKmhlaWdodCwgdXNlZFZlcnRpY2FsTWFyZ2luIH07Cit9CisKK0NvbnRlbnRXaWR0
aEFuZE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0cnk6OmlubGluZVJlcGxhY2VkQ29udGVudFdpZHRo
QW5kTWFyZ2luKGNvbnN0IFJlcGxhY2VkQm94JiByZXBsYWNlZEJveCwgY29uc3QgSG9yaXpvbnRh
bENvbnN0cmFpbnRzJiBob3Jpem9udGFsQ29uc3RyYWludHMsIE9wdGlvbmFsPFZlcnRpY2FsQ29u
c3RyYWludHM+IHZlcnRpY2FsQ29uc3RyYWludHMsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFs
VmFsdWVzJiBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcykKK3sKKyAgICAvLyAxMC4zLjIgSW5s
aW5lLCByZXBsYWNlZCBlbGVtZW50cworICAgIC8vCisgICAgLy8gQSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycgZm9yICdtYXJnaW4tbGVmdCcgb3IgJ21hcmdpbi1yaWdodCcgYmVjb21lcyBhIHVz
ZWQgdmFsdWUgb2YgJzAnLgorICAgIC8vCisgICAgLy8gMS4gSWYgJ2hlaWdodCcgYW5kICd3aWR0
aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVtZW50IGFs
c28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0aCBpcyB0
aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgorICAgIC8vCisgICAgLy8gMi4gSWYgJ2hlaWdodCcg
YW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBl
bGVtZW50IGhhcyBubyBpbnRyaW5zaWMgd2lkdGgsIGJ1dCBkb2VzIGhhdmUgYW4gaW50cmluc2lj
IGhlaWdodCBhbmQgaW50cmluc2ljIHJhdGlvOworICAgIC8vICAgIG9yIGlmICd3aWR0aCcgaGFz
IGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCAnaGVpZ2h0JyBoYXMgc29tZSBvdGhlciBjb21w
dXRlZCB2YWx1ZSwgYW5kIHRoZSBlbGVtZW50IGRvZXMgaGF2ZSBhbiBpbnRyaW5zaWMgcmF0aW87
CisgICAgLy8gICAgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnIGlzOiAodXNlZCBoZWln
aHQpICogKGludHJpbnNpYyByYXRpbykKKyAgICAvLworICAgIC8vIDMuIElmICdoZWlnaHQnIGFu
ZCAnd2lkdGgnIGJvdGggaGF2ZSBjb21wdXRlZCB2YWx1ZXMgb2YgJ2F1dG8nIGFuZCB0aGUgZWxl
bWVudCBoYXMgYW4gaW50cmluc2ljIHJhdGlvIGJ1dCBubyBpbnRyaW5zaWMgaGVpZ2h0IG9yIHdp
ZHRoLAorICAgIC8vICAgIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJyBpcyB1bmRlZmlu
ZWQgaW4gQ1NTIDIuMi4gSG93ZXZlciwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQsIGlmIHRoZSBjb250
YWluaW5nIGJsb2NrJ3Mgd2lkdGggZG9lcyBub3QgaXRzZWxmIGRlcGVuZCBvbiB0aGUgcmVwbGFj
ZWQKKyAgICAvLyAgICBlbGVtZW50J3Mgd2lkdGgsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ3dp
ZHRoJyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIGNvbnN0cmFpbnQgZXF1YXRpb24gdXNlZCBmb3Ig
YmxvY2stbGV2ZWwsIG5vbi1yZXBsYWNlZCBlbGVtZW50cyBpbiBub3JtYWwgZmxvdy4KKyAgICAv
LworICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBv
ZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRo
YXQgaW50cmluc2ljIHdpZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCisgICAgLy8K
KyAgICAvLyA1LiBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2Yg
J2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB0aGVuIHRo
ZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcgYmVjb21lcyAzMDBweC4KKyAgICAvLyAgICBJZiAzMDBw
eCBpcyB0b28gd2lkZSB0byBmaXQgdGhlIGRldmljZSwgVUFzIHNob3VsZCB1c2UgdGhlIHdpZHRo
IG9mIHRoZSBsYXJnZXN0IHJlY3RhbmdsZSB0aGF0IGhhcyBhIDI6MSByYXRpbyBhbmQgZml0cyB0
aGUgZGV2aWNlIGluc3RlYWQuCisKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9
IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKHJlcGxhY2VkQm94
LCBob3Jpem9udGFsQ29uc3RyYWludHMpOworCisgICAgYXV0byB1c2VkTWFyZ2luU3RhcnQgPSBb
Jl0geworICAgICAgICBpZiAob3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMubWFyZ2luKQorICAg
ICAgICAgICAgcmV0dXJuIG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbi0+c3RhcnQ7
CisgICAgICAgIHJldHVybiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigw
X2x1KTsKKyAgICB9OworCisgICAgYXV0byB1c2VkTWFyZ2luRW5kID0gWyZdIHsKKyAgICAgICAg
aWYgKG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLm1hcmdpbikKKyAgICAgICAgICAgIHJldHVy
biBvdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcy5tYXJnaW4tPmVuZDsKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KTsKKyAgICB9OworCisg
ICAgYXV0byB3aWR0aCA9IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKHJlcGxhY2VkQm94LCBo
b3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKKyAgICBhdXRvIGhlaWdodElzQXV0
byA9IGlzSGVpZ2h0QXV0byhyZXBsYWNlZEJveCk7CisgICAgYXV0byBoZWlnaHQgPSBjb21wdXRl
ZEhlaWdodChyZXBsYWNlZEJveCwgdmVydGljYWxDb25zdHJhaW50cyA/IHZlcnRpY2FsQ29uc3Ry
YWludHMtPmxvZ2ljYWxIZWlnaHQgOiBXVEY6Om51bGxvcHQpOworCisgICAgaWYgKCF3aWR0aCAm
JiBoZWlnaHRJc0F1dG8gJiYgcmVwbGFjZWRCb3guaGFzSW50cmluc2ljV2lkdGgoKSkgeworICAg
ICAgICAvLyAjMQorICAgICAgICB3aWR0aCA9IHJlcGxhY2VkQm94LmludHJpbnNpY1dpZHRoKCk7
CisgICAgfSBlbHNlIGlmICgoIXdpZHRoICYmIGhlaWdodElzQXV0byAmJiAhcmVwbGFjZWRCb3gu
aGFzSW50cmluc2ljV2lkdGgoKSAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNIZWlnaHQoKSAm
JiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpKQorICAgICAgICB8fCAoIXdpZHRoICYm
IGhlaWdodCAmJiByZXBsYWNlZEJveC5oYXNJbnRyaW5zaWNSYXRpbygpKSkgeworICAgICAgICAv
LyAjMgorICAgICAgICB3aWR0aCA9IGhlaWdodC52YWx1ZU9yKHJlcGxhY2VkQm94Lmhhc0ludHJp
bnNpY0hlaWdodCgpKSAqIHJlcGxhY2VkQm94LmludHJpbnNpY1JhdGlvKCk7CisgICAgfSBlbHNl
IGlmICghd2lkdGggJiYgaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1Jh
dGlvKCkgJiYgIXJlcGxhY2VkQm94Lmhhc0ludHJpbnNpY1dpZHRoKCkgJiYgIXJlcGxhY2VkQm94
Lmhhc0ludHJpbnNpY0hlaWdodCgpKSB7CisgICAgICAgIC8vICMzCisgICAgICAgIC8vIEZJWE1F
OiB1bmRlZmluZWQgYnV0IHN1cmVseSBkb2FibGUuCisgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVN
RU5URURfWUVUKCk7CisgICAgfSBlbHNlIGlmICghd2lkdGggJiYgcmVwbGFjZWRCb3guaGFzSW50
cmluc2ljV2lkdGgoKSkgeworICAgICAgICAvLyAjNAorICAgICAgICB3aWR0aCA9IHJlcGxhY2Vk
Qm94LmludHJpbnNpY1dpZHRoKCk7CisgICAgfSBlbHNlIGlmICghd2lkdGgpIHsKKyAgICAgICAg
Ly8gIzUKKyAgICAgICAgd2lkdGggPSB7IDMwMCB9OworICAgIH0KKworICAgIEFTU0VSVCh3aWR0
aCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVh
bSA8PCAiW1dpZHRoXVtNYXJnaW5dIC0+IGluZmxvdyByZXBsYWNlZCAtPiB3aWR0aCgiIDw8ICp3
aWR0aCA8PCAicHgpIG1hcmdpbigiIDw8IHVzZWRNYXJnaW5TdGFydCgpIDw8ICJweCwgIiA8PCB1
c2VkTWFyZ2luRW5kKCkgPDwgInB4KSAtPiBsYXlvdXRCb3goIiA8PCAmcmVwbGFjZWRCb3ggPDwg
IikiKTsKKyAgICByZXR1cm4geyAqd2lkdGgsIHsgdXNlZE1hcmdpblN0YXJ0KCksIHVzZWRNYXJn
aW5FbmQoKSB9IH07Cit9CisKK0xheW91dFNpemUgRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dQ
b3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAgIEFT
U0VSVChsYXlvdXRCb3guaXNJbkZsb3dQb3NpdGlvbmVkKCkpOworCisgICAgLy8gOS40LjMgUmVs
YXRpdmUgcG9zaXRpb25pbmcKKyAgICAvLworICAgIC8vIFRoZSAndG9wJyBhbmQgJ2JvdHRvbScg
cHJvcGVydGllcyBtb3ZlIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBlbGVtZW50KHMpIHVwIG9yIGRv
d24gd2l0aG91dCBjaGFuZ2luZyB0aGVpciBzaXplLgorICAgIC8vIFRvcCcgbW92ZXMgdGhlIGJv
eGVzIGRvd24sIGFuZCAnYm90dG9tJyBtb3ZlcyB0aGVtIHVwLiBTaW5jZSBib3hlcyBhcmUgbm90
IHNwbGl0IG9yIHN0cmV0Y2hlZCBhcyBhIHJlc3VsdCBvZiAndG9wJyBvciAnYm90dG9tJywgdGhl
IHVzZWQgdmFsdWVzIGFyZSBhbHdheXM6IHRvcCA9IC1ib3R0b20uCisgICAgLy8KKyAgICAvLyAx
LiBJZiBib3RoIGFyZSAnYXV0bycsIHRoZWlyIHVzZWQgdmFsdWVzIGFyZSBib3RoICcwJy4KKyAg
ICAvLyAyLiBJZiBvbmUgb2YgdGhlbSBpcyAnYXV0bycsIGl0IGJlY29tZXMgdGhlIG5lZ2F0aXZl
IG9mIHRoZSBvdGhlci4KKyAgICAvLyAzLiBJZiBuZWl0aGVyIGlzICdhdXRvJywgJ2JvdHRvbScg
aXMgaWdub3JlZCAoaS5lLiwgdGhlIHVzZWQgdmFsdWUgb2YgJ2JvdHRvbScgd2lsbCBiZSBtaW51
cyB0aGUgdmFsdWUgb2YgJ3RvcCcpLgorCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1dpZHRoID0gaG9yaXpvbnRhbENvbnN0cmFp
bnRzLmxvZ2ljYWxXaWR0aDsKKworICAgIGF1dG8gdG9wID0gY29tcHV0ZWRWYWx1ZShzdHlsZS5s
b2dpY2FsVG9wKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKKyAgICBhdXRvIGJvdHRvbSA9IGNv
bXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbEJvdHRvbSgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7
CisKKyAgICBpZiAoIXRvcCAmJiAhYm90dG9tKSB7CisgICAgICAgIC8vICMxCisgICAgICAgIHRv
cCA9IGJvdHRvbSA9IHsgMCB9OworICAgIH0gZWxzZSBpZiAoIXRvcCkgeworICAgICAgICAvLyAj
MgorICAgICAgICB0b3AgPSAtKmJvdHRvbTsKKyAgICB9IGVsc2UgaWYgKCFib3R0b20pIHsKKyAg
ICAgICAgLy8gIzMKKyAgICAgICAgYm90dG9tID0gLSp0b3A7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gIzQKKyAgICAgICAgYm90dG9tID0gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIC8v
IEZvciByZWxhdGl2ZWx5IHBvc2l0aW9uZWQgZWxlbWVudHMsICdsZWZ0JyBhbmQgJ3JpZ2h0JyBt
b3ZlIHRoZSBib3goZXMpIGhvcml6b250YWxseSwgd2l0aG91dCBjaGFuZ2luZyB0aGVpciBzaXpl
LgorICAgIC8vICdMZWZ0JyBtb3ZlcyB0aGUgYm94ZXMgdG8gdGhlIHJpZ2h0LCBhbmQgJ3JpZ2h0
JyBtb3ZlcyB0aGVtIHRvIHRoZSBsZWZ0LgorICAgIC8vIFNpbmNlIGJveGVzIGFyZSBub3Qgc3Bs
aXQgb3Igc3RyZXRjaGVkIGFzIGEgcmVzdWx0IG9mICdsZWZ0JyBvciAncmlnaHQnLCB0aGUgdXNl
ZCB2YWx1ZXMgYXJlIGFsd2F5czogbGVmdCA9IC1yaWdodC4KKyAgICAvLworICAgIC8vIDEuIElm
IGJvdGggJ2xlZnQnIGFuZCAncmlnaHQnIGFyZSAnYXV0bycgKHRoZWlyIGluaXRpYWwgdmFsdWVz
KSwgdGhlIHVzZWQgdmFsdWVzIGFyZSAnMCcgKGkuZS4sIHRoZSBib3hlcyBzdGF5IGluIHRoZWly
IG9yaWdpbmFsIHBvc2l0aW9uKS4KKyAgICAvLyAyLiBJZiAnbGVmdCcgaXMgJ2F1dG8nLCBpdHMg
dXNlZCB2YWx1ZSBpcyBtaW51cyB0aGUgdmFsdWUgb2YgJ3JpZ2h0JyAoaS5lLiwgdGhlIGJveGVz
IG1vdmUgdG8gdGhlIGxlZnQgYnkgdGhlIHZhbHVlIG9mICdyaWdodCcpLgorICAgIC8vIDMuIElm
ICdyaWdodCcgaXMgc3BlY2lmaWVkIGFzICdhdXRvJywgaXRzIHVzZWQgdmFsdWUgaXMgbWludXMg
dGhlIHZhbHVlIG9mICdsZWZ0Jy4KKyAgICAvLyA0LiBJZiBuZWl0aGVyICdsZWZ0JyBub3IgJ3Jp
Z2h0JyBpcyAnYXV0bycsIHRoZSBwb3NpdGlvbiBpcyBvdmVyLWNvbnN0cmFpbmVkLCBhbmQgb25l
IG9mIHRoZW0gaGFzIHRvIGJlIGlnbm9yZWQuCisgICAgLy8gICAgSWYgdGhlICdkaXJlY3Rpb24n
IHByb3BlcnR5IG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdsdHInLCB0aGUgdmFsdWUgb2Yg
J2xlZnQnIHdpbnMgYW5kICdyaWdodCcgYmVjb21lcyAtJ2xlZnQnLgorICAgIC8vICAgIElmICdk
aXJlY3Rpb24nIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIGlzICdydGwnLCAncmlnaHQnIHdpbnMg
YW5kICdsZWZ0JyBpcyBpZ25vcmVkLgorCisgICAgYXV0byBsZWZ0ID0gY29tcHV0ZWRWYWx1ZShz
dHlsZS5sb2dpY2FsTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgYXV0byByaWdo
dCA9IGNvbXB1dGVkVmFsdWUoc3R5bGUubG9naWNhbFJpZ2h0KCksIGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKTsKKworICAgIGlmICghbGVmdCAmJiAhcmlnaHQpIHsKKyAgICAgICAgLy8gIzEKKyAgICAg
ICAgbGVmdCA9IHJpZ2h0ID0geyAwIH07CisgICAgfSBlbHNlIGlmICghbGVmdCkgeworICAgICAg
ICAvLyAjMgorICAgICAgICBsZWZ0ID0gLSpyaWdodDsKKyAgICB9IGVsc2UgaWYgKCFyaWdodCkg
eworICAgICAgICAvLyAjMworICAgICAgICByaWdodCA9IC0qbGVmdDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyAjNAorICAgICAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkuc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7
CisgICAgICAgIGlmIChpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKQorICAgICAgICAgICAgcmlnaHQg
PSAtKmxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxlZnQgPSBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgQVNTRVJUKCFib3R0b20gfHwgKnRvcCA9PSAtKmJvdHRvbSk7CisgICAg
QVNTRVJUKCFsZWZ0IHx8ICpsZWZ0ID09IC0qcmlnaHQpOworCisgICAgYXV0byB0b3BQb3NpdGlv
bk9mZnNldCA9ICp0b3A7CisgICAgYXV0byBsZWZ0UG9zaXRpb25PZmZzZXQgPSBsZWZ0LnZhbHVl
T3IoLSpyaWdodCk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlv
dXQsIHN0cmVhbSA8PCAiW1Bvc2l0aW9uXSAtPiBwb3NpdGlvbmVkIGluZmxvdyAtPiB0b3Agb2Zm
c2V0KCIgPDwgdG9wUG9zaXRpb25PZmZzZXQgPDwgInB4KSBsZWZ0IG9mZnNldCgiIDw8IGxlZnRQ
b3NpdGlvbk9mZnNldCA8PCAicHgpIGxheW91dEJveCgiIDw8ICZsYXlvdXRCb3ggPDwgIikiKTsK
KyAgICByZXR1cm4geyBsZWZ0UG9zaXRpb25PZmZzZXQsIHRvcFBvc2l0aW9uT2Zmc2V0IH07Cit9
CisKK2lubGluZSBzdGF0aWMgV3JpdGluZ01vZGUgdXNlZFdyaXRpbmdNb2RlKGNvbnN0IEJveCYg
bGF5b3V0Qm94KQoreworICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtd3JpdGluZy1t
b2Rlcy00LyNsb2dpY2FsLWRpcmVjdGlvbi1sYXlvdXQKKyAgICAvLyBGbG93LXJlbGF0aXZlIGRp
cmVjdGlvbnMgYXJlIGNhbGN1bGF0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSB3cml0aW5nIG1vZGUg
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhlIGJveC4KKyAgICAvLyBGb3IgaW5saW5lLWxl
dmVsIGJveGVzLCB0aGUgd3JpdGluZyBtb2RlIG9mIHRoZSBwYXJlbnQgYm94IGlzIHVzZWQgaW5z
dGVhZC4KKyAgICByZXR1cm4gbGF5b3V0Qm94LmlzSW5saW5lTGV2ZWxCb3goKSA/IGxheW91dEJv
eC5wYXJlbnQoKS5zdHlsZSgpLndyaXRpbmdNb2RlKCkgOiBsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkuc3R5bGUoKS53cml0aW5nTW9kZSgpOworfQorCitFZGdlcyBGb3JtYXR0aW5nR2VvbWV0
cnk6OmNvbXB1dGVkQm9yZGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdAoreworICAgIGF1
dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1h
dHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltCb3JkZXJdIC0+IGxheW91dEJveDogIiA8
PCAmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4geworICAgICAgICB7IExheW91dFVuaXQoc3R5bGUu
Ym9yZGVyTGVmdFdpZHRoKCkpLCBMYXlvdXRVbml0KHN0eWxlLmJvcmRlclJpZ2h0V2lkdGgoKSkg
fSwKKyAgICAgICAgeyBMYXlvdXRVbml0KHN0eWxlLmJvcmRlclRvcFdpZHRoKCkpLCBMYXlvdXRV
bml0KHN0eWxlLmJvcmRlckJvdHRvbVdpZHRoKCkpIH0KKyAgICB9OworfQorCitPcHRpb25hbDxF
ZGdlcz4gRm9ybWF0dGluZ0dlb21ldHJ5Ojpjb21wdXRlZFBhZGRpbmcoY29uc3QgQm94JiBsYXlv
dXRCb3gsIGNvbnN0IExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFsYXlvdXRCb3guaXNQYWRkaW5nQXBwbGljYWJsZSgpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworCisgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1Bh
ZGRpbmddIC0+IGxheW91dEJveDogIiA8PCAmbGF5b3V0Qm94KTsKKyAgICByZXR1cm4gRWRnZXMg
eworICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRpbmdMZWZ0KCksIGNvbnRhaW5p
bmdCbG9ja1dpZHRoKSwgdmFsdWVGb3JMZW5ndGgoc3R5bGUucGFkZGluZ1JpZ2h0KCksIGNvbnRh
aW5pbmdCbG9ja1dpZHRoKSB9LAorICAgICAgICB7IHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnBhZGRp
bmdUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCB2YWx1ZUZvckxlbmd0aChzdHlsZS5wYWRk
aW5nQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9CisgICAgfTsKK30KKworQ29tcHV0
ZWRIb3Jpem9udGFsTWFyZ2luIEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFs
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
IGhvcml6b250YWxDb25zdHJhaW50cykgY29uc3QKK3sKKyAgICBhdXRvJiBzdHlsZSA9IGxheW91
dEJveC5zdHlsZSgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBob3Jpem9udGFs
Q29uc3RyYWludHMubG9naWNhbFdpZHRoOworICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9k
ZSh1c2VkV3JpdGluZ01vZGUobGF5b3V0Qm94KSkpCisgICAgICAgIHJldHVybiB7IGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luTGVmdCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCksIGNvbXB1dGVk
VmFsdWUoc3R5bGUubWFyZ2luUmlnaHQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpIH07CisgICAg
cmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Ub3AoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5nQmxv
Y2tXaWR0aCkgfTsKK30KKworQ29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiBGb3JtYXR0aW5nR2VvbWV0
cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYgaG9yaXpvbnRhbENvbnN0cmFpbnRzKSBjb25zdAoreworICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBjb250YWluaW5nQmxv
Y2tXaWR0aCA9IGhvcml6b250YWxDb25zdHJhaW50cy5sb2dpY2FsV2lkdGg7CisgICAgaWYgKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKHVzZWRXcml0aW5nTW9kZShsYXlvdXRCb3gpKSkKKyAgICAg
ICAgcmV0dXJuIHsgY29tcHV0ZWRWYWx1ZShzdHlsZS5tYXJnaW5Ub3AoKSwgY29udGFpbmluZ0Js
b2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkJvdHRvbSgpLCBjb250YWluaW5n
QmxvY2tXaWR0aCkgfTsKKyAgICByZXR1cm4geyBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpbkxl
ZnQoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpLCBjb21wdXRlZFZhbHVlKHN0eWxlLm1hcmdpblJp
Z2h0KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKSB9OworfQorCitGb3JtYXR0aW5nQ29udGV4dDo6
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0cmFpbkJ5
TWluTWF4V2lkdGgoY29uc3QgQm94JiBsYXlvdXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRy
aW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoKSBjb25zdAoreworICAgIGF1dG8m
IHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CisgICAgYXV0byBtaW5XaWR0aCA9IGZpeGVkVmFs
dWUoc3R5bGUubG9naWNhbE1pbldpZHRoKCkpOworICAgIGF1dG8gbWF4V2lkdGggPSBmaXhlZFZh
bHVlKHN0eWxlLmxvZ2ljYWxNYXhXaWR0aCgpKTsKKyAgICBpZiAoIW1pbldpZHRoICYmICFtYXhX
aWR0aCkKKyAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoOworCisgICAgaWYgKG1heFdpZHRo
KSB7CisgICAgICAgIGludHJpbnNpY1dpZHRoLm1pbmltdW0gPSBzdGQ6Om1pbigqbWF4V2lkdGgs
IGludHJpbnNpY1dpZHRoLm1pbmltdW0pOworICAgICAgICBpbnRyaW5zaWNXaWR0aC5tYXhpbXVt
ID0gc3RkOjptaW4oKm1heFdpZHRoLCBpbnRyaW5zaWNXaWR0aC5tYXhpbXVtKTsKKyAgICB9CisK
KyAgICBpZiAobWluV2lkdGgpIHsKKyAgICAgICAgaW50cmluc2ljV2lkdGgubWluaW11bSA9IHN0
ZDo6bWF4KCptaW5XaWR0aCwgaW50cmluc2ljV2lkdGgubWluaW11bSk7CisgICAgICAgIGludHJp
bnNpY1dpZHRoLm1heGltdW0gPSBzdGQ6Om1heCgqbWluV2lkdGgsIGludHJpbnNpY1dpZHRoLm1h
eGltdW0pOworICAgIH0KKworICAgIEFTU0VSVChpbnRyaW5zaWNXaWR0aC5taW5pbXVtIDw9IGlu
dHJpbnNpY1dpZHRoLm1heGltdW0pOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aDsKK30KKwor
Rm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudCBGb3JtYXR0
aW5nR2VvbWV0cnk6OmNvbnN0cmFpbnRzRm9yT3V0T2ZGbG93Q29udGVudChjb25zdCBDb250YWlu
ZXJCb3gmIGNvbnRhaW5lckJveCkKK3sKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY29udGFpbmVyQm94KTsKKyAgICByZXR1cm4gewor
ICAgICAgICB7IGJveEdlb21ldHJ5LnBhZGRpbmdCb3hMZWZ0KCksIGJveEdlb21ldHJ5LnBhZGRp
bmdCb3hXaWR0aCgpIH0sCisgICAgICAgIHsgYm94R2VvbWV0cnkucGFkZGluZ0JveFRvcCgpLCBi
b3hHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCkgfSwKKyAgICAgICAgYm94R2VvbWV0cnkuY29u
dGVudEJveFdpZHRoKCkgfTsKK30KKworRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9y
SW5GbG93Q29udGVudCBGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbnN0cmFpbnRzRm9ySW5GbG93Q29u
dGVudChjb25zdCBDb250YWluZXJCb3gmIGNvbnRhaW5lckJveCwgT3B0aW9uYWw8Rm9ybWF0dGlu
Z0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gZXNjYXBlUmVhc29uKQoreworICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChjb250YWluZXJCb3gs
IGVzY2FwZVJlYXNvbik7CisgICAgcmV0dXJuIHsgeyBib3hHZW9tZXRyeS5jb250ZW50Qm94TGVm
dCgpLCBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9LCB7IGJveEdlb21ldHJ5LmNvbnRl
bnRCb3hUb3AoKSwgY29tcHV0ZWRIZWlnaHQoY29udGFpbmVyQm94KSB9IH07Cit9CisKK30KK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy9Gb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNjZDljMDE1ODlj
OWFhM2ZhZDMwMzVlODcxZThkOTM1ODFjYjYxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAg
LTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShM
QVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRm9ybWF0dGluZ0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7CisKK2NsYXNzIFJl
cGxhY2VkQm94Oworc3RydWN0IENvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbjsKK3N0cnVjdCBDb21w
dXRlZFZlcnRpY2FsTWFyZ2luOworY2xhc3MgQ29udGFpbmVyQm94Oworc3RydWN0IENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW47CitzdHJ1Y3QgQ29udGVudFdpZHRoQW5kTWFyZ2luOworc3RydWN0IEVk
Z2VzOworc3RydWN0IEhvcml6b250YWxHZW9tZXRyeTsKK2NsYXNzIExheW91dFN0YXRlOworc3Ry
dWN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzOworc3RydWN0IE92ZXJyaWRkZW5WZXJ0aWNh
bFZhbHVlczsKK3N0cnVjdCBWZXJ0aWNhbEdlb21ldHJ5OworCisvLyBUaGlzIGNsYXNzIGltcGxl
bWVudHMgZ2VuZXJpYyBwb3NpdGlvbmluZyBhbmQgc2l6aW5nLgorY2xhc3MgRm9ybWF0dGluZ0dl
b21ldHJ5IHsKK3B1YmxpYzoKKyAgICBWZXJ0aWNhbEdlb21ldHJ5IG91dE9mRmxvd1ZlcnRpY2Fs
R2VvbWV0cnkoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3Qg
VmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNv
bnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dIb3Jpem9udGFsR2VvbWV0cnko
Y29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgVmVydGljYWxD
b25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7CisKKyAgICBD
b250ZW50SGVpZ2h0QW5kTWFyZ2luIGZsb2F0aW5nQ29udGVudEhlaWdodEFuZE1hcmdpbihjb25z
dCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuVmVy
dGljYWxWYWx1ZXMmKSBjb25zdDsKKyAgICBDb250ZW50V2lkdGhBbmRNYXJnaW4gZmxvYXRpbmdD
b250ZW50V2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFp
bnRzJiwgY29uc3QgT3ZlcnJpZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRI
ZWlnaHRBbmRNYXJnaW4gaW5saW5lUmVwbGFjZWRDb250ZW50SGVpZ2h0QW5kTWFyZ2luKGNvbnN0
IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgT3B0aW9uYWw8VmVy
dGljYWxDb25zdHJhaW50cz4sIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0
OworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbmxpbmVSZXBsYWNlZENvbnRlbnRXaWR0aEFu
ZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYs
IE9wdGlvbmFsPFZlcnRpY2FsQ29uc3RyYWludHM+LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYpOworCisgICAgTGF5b3V0U2l6ZSBpbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZz
ZXQoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAg
ICBDb250ZW50SGVpZ2h0QW5kTWFyZ2luIGNvbXBsaWNhdGVkQ2FzZXMoY29uc3QgQm94JiwgY29u
c3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJpZGRlblZlcnRpY2FsVmFsdWVz
JikgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBzaHJpbmtUb0ZpdFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOworCisgICAgRWRnZXMgY29tcHV0ZWRCb3JkZXIoY29u
c3QgQm94JikgY29uc3Q7CisgICAgT3B0aW9uYWw8RWRnZXM+IGNvbXB1dGVkUGFkZGluZyhjb25z
dCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1dpZHRoKSBjb25zdDsKKworICAgIENv
bXB1dGVkSG9yaXpvbnRhbE1hcmdpbiBjb21wdXRlZEhvcml6b250YWxNYXJnaW4oY29uc3QgQm94
JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisgICAgQ29tcHV0ZWRWZXJ0
aWNhbE1hcmdpbiBjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhvcml6
b250YWxDb25zdHJhaW50cyYpIGNvbnN0OworCisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29t
cHV0ZWRWYWx1ZShjb25zdCBMZW5ndGgmIGdlb21ldHJ5UHJvcGVydHksIExheW91dFVuaXQgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGZpeGVk
VmFsdWUoY29uc3QgTGVuZ3RoJiBnZW9tZXRyeVByb3BlcnR5KSBjb25zdDsKKworICAgIE9wdGlv
bmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluSGVpZ2h0KGNvbnN0IEJveCYsIE9wdGlvbmFsPExh
eW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodCA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Cisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRNYXhIZWlnaHQoY29uc3QgQm94JiwgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBj
b25zdDsKKworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1dGVkTWluV2lkdGgoY29uc3Qg
Qm94JiwgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisgICAgT3B0aW9uYWw8TGF5
b3V0VW5pdD4gY29tcHV0ZWRNYXhXaWR0aChjb25zdCBCb3gmLCBMYXlvdXRVbml0IGNvbnRhaW5p
bmdCbG9ja1dpZHRoKTsKKworICAgIEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY29uc3QgQm94JiwgRm9ybWF0dGluZ0Nv
bnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMpIGNvbnN0OworCisgICAgTGF5b3V0VW5p
dCBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IENvbnRhaW5lckJv
eCYpIGNvbnN0OworCisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9yT3V0T2ZG
bG93Q29udGVudCBjb25zdHJhaW50c0Zvck91dE9mRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVy
Qm94Jik7CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkNvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVu
dCBjb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQoY29uc3QgQ29udGFpbmVyQm94JiwgT3B0aW9u
YWw8Rm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbj4gPSBXVEY6Om51bGxvcHQpOworCisg
ICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHQoY29uc3QgQm94JiwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKKyAgICBPcHRpb25hbDxMYXlvdXRVbml0PiBjb21wdXRlZFdpZHRoKGNvbnN0IEJveCYsIExh
eW91dFVuaXQgY29udGFpbmluZ0Jsb2NrV2lkdGgpOworCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5k
IGNsYXNzIEZvcm1hdHRpbmdDb250ZXh0OworICAgIEZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBG
b3JtYXR0aW5nQ29udGV4dCYpOworCisgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dC5sYXlvdXRTdGF0ZSgpOyB9Cisg
ICAgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4
dC5sYXlvdXRTdGF0ZSgpOyB9CisgICAgY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRp
bmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXR0aW5nQ29udGV4dDsgfQorCitwcml2
YXRlOgorICAgIFZlcnRpY2FsR2VvbWV0cnkgb3V0T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21l
dHJ5KGNvbnN0IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29u
c3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYp
IGNvbnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dSZXBsYWNlZEhvcml6b250
YWxHZW9tZXRyeShjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRh
bFZhbHVlcyYpOworCisgICAgVmVydGljYWxHZW9tZXRyeSBvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkoY29uc3QgQ29udGFpbmVyQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0
cmFpbnRzJiwgY29uc3QgVmVydGljYWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0
aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIEhvcml6b250YWxHZW9tZXRyeSBvdXRPZkZsb3dOb25S
ZXBsYWNlZEhvcml6b250YWxHZW9tZXRyeShjb25zdCBDb250YWluZXJCb3gmLCBjb25zdCBIb3Jp
em9udGFsQ29uc3RyYWludHMmLCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwor
CisgICAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudEhlaWdo
dEFuZE1hcmdpbihjb25zdCBSZXBsYWNlZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50
cyYsIGNvbnN0IE92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcyYpIGNvbnN0OworICAgIENvbnRlbnRX
aWR0aEFuZE1hcmdpbiBmbG9hdGluZ1JlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0
IFJlcGxhY2VkQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJiwgY29uc3QgT3ZlcnJp
ZGRlbkhvcml6b250YWxWYWx1ZXMmKTsKKworICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBmbG9h
dGluZ05vblJlcGxhY2VkQ29udGVudFdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYsIGNvbnN0IEhv
cml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzJik7
CisKKyAgICBMYXlvdXRVbml0IHN0YXRpY1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3Np
dGlvbmVkKGNvbnN0IEJveCYsIGNvbnN0IFZlcnRpY2FsQ29uc3RyYWludHMmKSBjb25zdDsKKyAg
ICBMYXlvdXRVbml0IHN0YXRpY0hvcml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9u
ZWQoY29uc3QgQm94JiwgY29uc3QgSG9yaXpvbnRhbENvbnN0cmFpbnRzJikgY29uc3Q7CisKKyAg
ICBlbnVtIGNsYXNzIEhlaWdodFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRIZWlnaHRWYWx1ZShjb25zdCBCb3gmLCBIZWlnaHRUeXBl
LCBPcHRpb25hbDxMYXlvdXRVbml0PiBjb250YWluaW5nQmxvY2tIZWlnaHQpIGNvbnN0OworCisg
ICAgZW51bSBjbGFzcyBXaWR0aFR5cGUgeyBNaW4sIE1heCwgTm9ybWFsIH07CisgICAgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRXaWR0aFZhbHVlKGNvbnN0IEJveCYsIFdpZHRoVHlwZSwg
TGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tXaWR0aCk7CisKKyAgICBjb25zdCBGb3JtYXR0aW5n
Q29udGV4dCYgbV9mb3JtYXR0aW5nQ29udGV4dDsKK307CisKK30KK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2NrL0Js
b2NrRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0
aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCmluZGV4IDVmZmM4
MGUxZmJlMmMyOWZmYTZiNjc5NDBiNzQ4MTJjMzEzYWM4ZTQuLmEyMjcyOGVkYmU5YTJmNWI1ZTg0
ZTc4NWMwZDIxODg2N2RiYmZmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9m
b3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkuY3BwCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IG5hbWVzcGFjZSBMYXlvdXQgewogCiBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6QmxvY2tGb3Jt
YXR0aW5nR2VvbWV0cnkoY29uc3QgQmxvY2tGb3JtYXR0aW5nQ29udGV4dCYgYmxvY2tGb3JtYXR0
aW5nQ29udGV4dCkKLSAgICA6IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeShibG9ja0Zvcm1h
dHRpbmdDb250ZXh0KQorICAgIDogRm9ybWF0dGluZ0dlb21ldHJ5KGJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQpCiB7CiB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgQ29udGVudEhlaWdodEFuZE1hcmdpbiBC
bG9ja0Zvcm1hdHRpbmdHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRDb250ZW50SGVpZ2h0QW4K
ICAgICAgICAgLy8gYW5kIHJlbGF0aXZlbHkgcG9zaXRpb25lZCBib3hlcyBhcmUgY29uc2lkZXJl
ZCB3aXRob3V0IHRoZWlyIG9mZnNldCkuIE5vdGUgdGhhdCB0aGUgY2hpbGQgYm94IG1heSBiZSBh
biBhbm9ueW1vdXMgYmxvY2sgYm94LgogCiAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICBhdXRv
IGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CisgICAgICAgIGF1dG8gY29tcHV0
ZWRWZXJ0aWNhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRWZXJ0aWNhbE1h
cmdpbihsYXlvdXRCb3gsIGhvcml6b250YWxDb25zdHJhaW50cyk7CiAgICAgICAgIGF1dG8gbm9u
Q29sbGFwc2VkTWFyZ2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMg
eyBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgfTsgCiAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFk
ZGluZ1RvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7CiAgICAgICAgIGF1dG8gaGVpZ2h0ID0gb3ZlcnJpZGRlblZlcnRpY2Fs
VmFsdWVzLmhlaWdodCA/IG92ZXJyaWRkZW5WZXJ0aWNhbFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0KGxheW91dEJveCk7CkBAIC0xNDksNyArMTQ5LDcgQEAgQ29udGVudFdp
ZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZENv
bnRlbnRXaWR0aEFuZE0KICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAKICAgICAgICAgYXV0byB3aWR0aCA9
IG92ZXJyaWRkZW5Ib3Jpem9udGFsVmFsdWVzLndpZHRoID8gb3ZlcnJpZGRlbkhvcml6b250YWxW
YWx1ZXMud2lkdGggOiBjb21wdXRlZFdpZHRoKGxheW91dEJveCwgY29udGFpbmluZ0Jsb2NrV2lk
dGgpOwotICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEdlb21ldHJ5Ojpj
b21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCBob3Jpem9udGFsQ29uc3RyYWludHMp
OworICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1hdHRpbmdHZW9t
ZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxheW91dEJveCwgaG9yaXpvbnRhbENvbnN0
cmFpbnRzKTsKICAgICAgICAgVXNlZEhvcml6b250YWxNYXJnaW4gdXNlZEhvcml6b250YWxNYXJn
aW47CiAgICAgICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsK
ICAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2Jsb2Nr
L0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0
dGluZ0NvbnRleHRzL2Jsb2NrL0Jsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggNzQwYTY1
YjA5NmFkZGRhZTg2YTg4OTIwNTMzNzQyZmUwNDFhNjlmOC4uMDZhNDAzMjBkNWRlNDdjMDAxNGM1
ODMzNTc1ZWE3YzY2ZWU4ZDE4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zv
cm1hdHRpbmdDb250ZXh0cy9ibG9jay9CbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvYmxvY2svQmxvY2tGb3JtYXR0
aW5nR2VvbWV0cnkuaApAQCAtMjcsMTMgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5j
bHVkZSAiRm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCiAvLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgcG9zaXRpb25pbmcgYW5k
IHNpemluZyBmb3IgYm94ZXMgcGFydGljaXBhdGluZyBpbiBhIGJsb2NrIGZvcm1hdHRpbmcgY29u
dGV4dC4KLWNsYXNzIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeSB7CitjbGFzcyBCbG9ja0Zvcm1hdHRpbmdHZW9tZXRyeSA6IHB1Ymxp
YyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIEJsb2NrRm9ybWF0dGluZ0dlb21l
dHJ5KGNvbnN0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQmKTsKIApAQCAtNTMsNyArNTMsNyBAQCBw
cml2YXRlOgogICAgIENvbnRlbnRXaWR0aEFuZE1hcmdpbiBpbkZsb3dOb25SZXBsYWNlZENvbnRl
bnRXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmLCBjb25zdCBIb3Jpem9udGFsQ29uc3RyYWludHMm
LCBjb25zdCBPdmVycmlkZGVuSG9yaXpvbnRhbFZhbHVlcyYpOwogICAgIENvbnRlbnRXaWR0aEFu
ZE1hcmdpbiBpbkZsb3dSZXBsYWNlZENvbnRlbnRXaWR0aEFuZE1hcmdpbihjb25zdCBSZXBsYWNl
ZEJveCYsIGNvbnN0IEhvcml6b250YWxDb25zdHJhaW50cyYsIGNvbnN0IE92ZXJyaWRkZW5Ib3Jp
em9udGFsVmFsdWVzJik7CiAKLSAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7
IH0KKyAgICBjb25zdCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRp
bmdHZW9tZXRyeTo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4Rm9ybWF0
dGluZ0dlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmNwcAppbmRleCAxNzFiNWNmYzI2MTU1MmRh
Zjk0Y2QyMjY5YmM1OThlNDcyMTg5ZTk1Li44MzE5NTBlNWYyNmZmNjZkMGYwMDY1NTZlODBkYTg1
ZDcxMmZiNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnku
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5OjpGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5KGNv
bnN0IEZsZXhGb3JtYXR0aW5nQ29udGV4dCYgZmxleEZvcm1hdHRpbmdDb250ZXh0KQotICAgIDog
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5KGZsZXhGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6
IEZvcm1hdHRpbmdHZW9tZXRyeShmbGV4Rm9ybWF0dGluZ0NvbnRleHQpCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvZmxleC9GbGV4
Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL2ZsZXgvRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oCmluZGV4IGE3ZmU1ZDg2ZGE4NTg4
ZjIyNWMyMGYwMTk4YjEyYzJhY2IyZDRlYTMuLjYyOGM5MzM1MjgyYzgxMzIxNmE2MjMxZjE3M2Rj
ZGZmMjc5ZjI1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvZmxleC9GbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9mbGV4L0ZsZXhGb3JtYXR0aW5nR2VvbWV0cnku
aApAQCAtMjcsMjIgKzI3LDIwIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09O
VEVYVCkKIAotI2luY2x1ZGUgIkZsZXhGb3JtYXR0aW5nU3RhdGUuaCIKLSNpbmNsdWRlICJGb3Jt
YXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlICJG
b3JtYXR0aW5nR2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIExh
eW91dCB7CiAKIC8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBwb3NpdGlvbmluZyBhbmQgc2l6aW5n
IGZvciBmbGV4IGl0ZW1zLgotY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgRmxleEZvcm1hdHRpbmdHZW9tZXRy
eSA6IHB1YmxpYyBGb3JtYXR0aW5nR2VvbWV0cnkgewogcHVibGljOgogICAgIEZsZXhGb3JtYXR0
aW5nR2VvbWV0cnkoY29uc3QgRmxleEZvcm1hdHRpbmdDb250ZXh0Jik7CiAKICAgICBGb3JtYXR0
aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzKGNvbnN0IENvbnRhaW5lckJveCYpOwogCiBwcml2YXRlOgotICAgIGNvbnN0IEZsZXhG
b3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxGbGV4Rm9ybWF0dGluZ0NvbnRleHQ+KEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KKyAgICBjb25zdCBGbGV4Rm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8RmxleEZvcm1hdHRp
bmdDb250ZXh0PihGb3JtYXR0aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy9pbmxpbmUvSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5
LmNwcAppbmRleCAxODdkZmY0YmQ4MjdjMGIzZmUxZjFkMmJjZDQ4YTliODgxNGIxZGM4Li43Mzcz
ZDFlMmJjZjMyOGU3YjVhZDYzZTA3MGUwMWUwMWVlZTk4OGRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL2lubGluZS9JbmxpbmVGb3JtYXR0aW5n
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTY2NCw3ICs2NjQsNyBA
QCB2b2lkIExpbmVCb3hCdWlsZGVyOjpTaW1wbGlmaWVkVmVydGljYWxBbGlnbm1lbnQ6OmFkanVz
dChjb25zdCBMaW5lQm94OjpJbmxpbmVMZQogfQogCiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnk6
OklubGluZUZvcm1hdHRpbmdHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnkoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgOiBGb3JtYXR0aW5nR2VvbWV0cnkoaW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQpCiB7CiB9CiAKQEAgLTcwOCw3ICs3MDgsNyBAQCBDb250ZW50
V2lkdGhBbmRNYXJnaW4gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5OjppbmxpbmVCbG9ja0NvbnRl
bnRXaWR0aEFuZE1hcmdpbgogICAgICAgICB3aWR0aCA9IHNocmlua1RvRml0V2lkdGgoZm9ybWF0
dGluZ0NvbnRleHRSb290LCBob3Jpem9udGFsQ29uc3RyYWludHMubG9naWNhbFdpZHRoKTsKIAog
ICAgIC8vICMyCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6
Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0Um9vdCwgaG9yaXpvbnRh
bENvbnN0cmFpbnRzKTsKKyAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbiA9IEZvcm1h
dHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGZvcm1hdHRpbmdDb250ZXh0
Um9vdCwgaG9yaXpvbnRhbENvbnN0cmFpbnRzKTsKIAogICAgIHJldHVybiBDb250ZW50V2lkdGhB
bmRNYXJnaW4geyAqd2lkdGgsIHsgY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luLnN0YXJ0LnZhbHVl
T3IoMF9sdSksIGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQudmFsdWVPcigwX2x1KSB9IH07
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRz
L2lubGluZS9JbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCmlu
ZGV4IDg5YmY4N2YzNGJhZmE0MDU3ODc4YTJhNmExOWU1N2NjZjY4ZDgyYTAuLmM2YzdlMmZhZmFk
YWY2YTYwYTNkMDdmNzNiNjAwNmI0YTIyOTY2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5lL0lubGluZUZvcm1hdHRpbmdHZW9tZXRy
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvaW5saW5l
L0lubGluZUZvcm1hdHRpbmdHZW9tZXRyeS5oCkBAIC0yNywxMiArMjcsMTIgQEAKIAogI2lmIEVO
QUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCi0jaW5jbHVkZSAiRm9ybWF0dGluZ0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJGb3JtYXR0aW5nR2VvbWV0cnkuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogbmFtZXNwYWNlIExheW91dCB7CiAKLWNsYXNzIElubGluZUZvcm1hdHRpbmdHZW9t
ZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgSW5saW5l
Rm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdHZW9tZXRyeSB7CiBwdWJsaWM6
CiAgICAgTGluZUJveCBsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6Okxp
bmVDb250ZW50Jik7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yTmV4dExpbmUo
Y29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiwgSW5saW5lTGF5b3V0VW5pdCBwcmV2aW91
c0xpbmVMb2dpY2FsQm90dG9tLCBjb25zdCBGbG9hdGluZ0NvbnRleHQmKSBjb25zdDsKQEAgLTQ0
LDcgKzQ0LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ7CiAgICAgSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0Jik7CiAKLSAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsg
fQorICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0
aW5nR2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiAKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250
ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKaW5kZXggZmMyOTlkMTdiZTk5
NWU1NWFmNmFiMWNhZTNhOTkzYzc1NzQ5MjllYy4uNGNkZDA4YjM1OWY3Y2JmYzQ1ZDM5ZGU4NDgy
YmVkYzQ3ZGYxMTg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIExheW91dCB7CiAKIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5OjpUYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0JiB0YWJsZUZvcm1hdHRpbmdDb250
ZXh0LCBjb25zdCBUYWJsZUdyaWQmIGdyaWQpCi0gICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnkodGFibGVGb3JtYXR0aW5nQ29udGV4dCkKKyAgICA6IEZvcm1hdHRpbmdHZW9tZXRyeSh0
YWJsZUZvcm1hdHRpbmdDb250ZXh0KQogICAgICwgbV9ncmlkKGdyaWQpCiB7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxl
Rm9ybWF0dGluZ0dlb21ldHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKaW5kZXggOTRiMTk2ZTkyYzIw
OTVmZmVhMWQxZjZjZTJjMTI3NWU5Zjc0ZDNmMS4uMGYzZDRmYWVkMjZjNWY5N2Y0NjI3NWJkMzU5
NTYxNDUxOTY2Y2E4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkuaApAQCAtMjcsMTIgKzI3LDEyIEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKIAotI2luY2x1ZGUgIkZvcm1hdHRpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAi
Rm9ybWF0dGluZ0dlb21ldHJ5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBM
YXlvdXQgewogCi1jbGFzcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0
aW5nQ29udGV4dDo6R2VvbWV0cnkgeworY2xhc3MgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgOiBw
dWJsaWMgRm9ybWF0dGluZ0dlb21ldHJ5IHsKIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGNlbGxI
ZWlnaChjb25zdCBDb250YWluZXJCb3gmKSBjb25zdDsKICAgICBFZGdlcyBjb21wdXRlZENlbGxC
b3JkZXIoY29uc3QgVGFibGVHcmlkOjpDZWxsJikgY29uc3Q7CkBAIC00NCw3ICs0NCw3IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ7CiAgICAgVGFi
bGVGb3JtYXR0aW5nR2VvbWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0
IFRhYmxlR3JpZCYpOwogCi0gICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0
dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250
ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9
CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5n
R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CiAgICAgY29uc3QgVGFibGVHcmlkJiBt
X2dyaWQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3MuaApp
bmRleCBkMzI1MTViZGRmMjllZjhjMDE1N2Y1YjUyZDY2YzM1OGIwMTg4M2ZjLi5hZjYyYjI1OGI5
YjQ1ODc5ZTViZjNjZWE1ZGY5OGM0ZWIzM2E4YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFi
bGVGb3JtYXR0aW5nUXVpcmtzLmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGlu
Z1F1aXJrczo6Zm9ybWF0dGluZ0NvbnRleHQoKSk7IH0KLSAgICBUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeSBnZW9tZXRyeSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnkoKTsgfQorICAgIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkg
Y29uc3QgeyByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpOyB9CiB9OwogCiB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>