<?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>225753</bug_id>
          
          <creation_ts>2021-05-13 04:47:29 -0700</creation_ts>
          <short_desc>[LFC] Move table formatting geometry to its own class</short_desc>
          <delta_ts>2021-05-15 18:22: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>1759632</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 04:47:29 -0700</bug_when>
    <thetext>This is part of bug 225731 activity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759662</commentid>
    <comment_count>1</comment_count>
      <attachid>428501</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-13 05:47:07 -0700</bug_when>
    <thetext>Created attachment 428501
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760504</commentid>
    <comment_count>2</comment_count>
      <attachid>428753</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 17:02:38 -0700</bug_when>
    <thetext>Created attachment 428753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760519</commentid>
    <comment_count>3</comment_count>
      <attachid>428757</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-05-15 18:19:23 -0700</bug_when>
    <thetext>Created attachment 428757
[fast-cq] Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760520</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-15 18:21:29 -0700</bug_when>
    <thetext>Committed r277554 (237782@main): &lt;https://commits.webkit.org/237782@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 428757.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760521</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-15 18:22:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/78066874&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428501</attachid>
            <date>2021-05-13 05:47:07 -0700</date>
            <delta_ts>2021-05-15 17:02:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225753-20210513054706.patch</filename>
            <type>text/plain</type>
            <size>32604</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3MDMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjE5ZDEyNDY2NTYyNDFh
MTM2ZGYzNzJjYjQxZjMyZGViNWY0MzYwNy4uMzU3NTBkOTQ1YWM0OGVjZDIyZmViMzkwOGRhOWJi
MTc5MWQ3ZmEyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTEzICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIHRhYmxlIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDog
UmVtb3ZlZC4KKwogMjAyMS0wNS0wNSAgQWxpY2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBXZWJLaXRNZWRpYVNyYyByZXdvcmsg
djIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggZDVhNjQzZjFmYWU5ODJlYmNlOThkODljZDRlMmVhZjI4MWQw
MjlhNC4uMDg5ZjY4MTI4YWVjM2MzMDVlOTc2NGMzMjQ5YmQ5MDRiMTdjNWJmYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTE1NjMsNyArMTU2Myw3IEBAIGxheW91dC9sYXlvdXR0cmVlL0xheW91dExpbmVC
cmVha0JveC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dFJlcGxhY2VkQm94LmNwcAogbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0VHJlZUJ1aWxkZXIuY3BwCiBsYXlvdXQvZm9ybWF0dGluZ0Nv
bnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCi1sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKK2xheW91
dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCiBs
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAK
IGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nU3RhdGUuY3Bw
CiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlR3JpZC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4M2Y3
N2EzMDI3YTgyN2NjNWY5ZTZjNGE1YTM5ODJmOWY0ZjcxMjUzLi5lMzg4MDE4ZDI1MDM5NjBkYmMw
ZGQyMzZmYzRhYmJkNGE1NmE5NWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTY5LDYgKzIxNjksNyBAQAogCQk2RkU2MzZF
ODI2NDc5NjI5MDBGMDk1MUUgLyogSW5saW5lRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkZFNjM2RTcyNjQ3OTYyOTAwRjA5
NTFFIC8qIElubGluZUZvcm1hdHRpbmdRdWlya3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5s
aW5lSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGluZUl0ZW0uaCAqLzsgfTsKIAkJNkZGOTEx
RjcyNjQ4N0ZDODAwMjAyMURGIC8qIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZGRjkxMUY2MjY0ODdGQzgwMDIw
MjFERiAvKiBGbGV4Rm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNkZGOUEwODQyNjQ4ODM0MjAwMTI1MEQ4IC8qIFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2RkY5QTA4MzI2NDg4MzQxMDAxMjUwRDggLyogVGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2RkZBNEMwMTIzRjJGRUQ5MDA3RTRFQkMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RkZBNEMwMDIzRjJG
RUQ5MDA3RTRFQkMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkZGREM0NDIyMTJFRkYxNzAwQTlDQTkxIC8q
IEZsb2F0QXZvaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkZGREM0NDAyMTJFRkYxNjAwQTlDQTkxIC8qIEZsb2F0QXZvaWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwOUEwMUZFMUUzRDBC
REQwMDZCMEQ0QyAvKiBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDlBMDFGRDFFM0QwQkNDMDA2QjBENEMgLyog
TW9kdWxlRmV0Y2hGYWlsdXJlS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC02NDI0LDcgKzY0MjUsNyBAQAogCQkxMUM1RjEzNDIwMDUyN0Y5
MDAwMUFFNjAgLyogUmVuZGVyVHJlZUJ1aWxkZXJNYXRoTUwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyVHJlZUJ1aWxkZXJNYXRoTUwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTFDQjI3ODYyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWls
ZGVyRnVsbFNjcmVlbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckZ1
bGxTY3JlZW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMUNCMjc4NzIwM0JB
NTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxMUQxOUMyRTIzMTU5QkFFMDA4RjI0RDMgLyogVGFibGVGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRhYmxlRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTExRDE5QzJFMjMxNTlC
QUUwMDhGMjREMyAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTExRTUxNjM1MjYxRTFBMDUwMEU2OUYyNSAvKiBXZWJYUklucHV0U3BhY2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViWFJJbnB1dFNwYWNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExRTUxNjM3MjYxRTFBMDUwMEU2OUYyNSAvKiBXZWJYUklu
cHV0U3BhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViWFJJ
bnB1dFNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFFNTE2M0EyNjFF
MUExNDAwRTY5RjI1IC8qIFdlYlhSR2FtZXBhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJYUkdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEw
MDQ2LDYgKzEwMDQ3LDcgQEAKIAkJNkZFOUYwOTIyMjIxMTAzNTAwNEM1MDgyIC8qIENvbnRlbnRD
aGFuZ2VPYnNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
b250ZW50Q2hhbmdlT2JzZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RkVGRTgxRDIyRjlEMjJBMDAxMTQ5MjcgLyogTGF5b3V0UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TGF5b3V0UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZGOTExRjYyNjQ4
N0ZDODAwMjAyMURGIC8qIEZsZXhGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRmxleEZvcm1hdHRpbmdHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2RkY5QTA4MzI2NDg4MzQxMDAxMjUwRDggLyogVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZGOUYxQkUy
NDZEOTY2QzAwNDM1MDgzIC8qIFRhYmxlTGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRh
YmxlTGF5b3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZGQTRCRkUyM0Yy
RkVDRDAwN0U0RUJDIC8qIExheW91dExpbmVCcmVha0JveC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMYXlvdXRMaW5lQnJlYWtCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
RkZBNEMwMDIzRjJGRUQ5MDA3RTRFQkMgLyogTGF5b3V0TGluZUJyZWFrQm94LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dExpbmVCcmVha0JveC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI2NjUsNyArMjI2NjcsOCBAQAogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJNkZDNUNBOTQyMkUzNTk5NDAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQu
Y3BwICovLAogCQkJCTZGQzVDQTk1MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmggKi8sCi0JCQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJNkZGOUEwODMyNjQ4ODM0MTAwMTI1MEQ4
IC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi8sCisJCQkJMTFEMTlDMkUyMzE1OUJBRTAw
OEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKIAkJCQk2RjQ5QzNFNjI2
NDc5QjNCMDA1MTk1M0QgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmggKi8sCiAJCQkJNkZDNTNB
RUIyNEFGN0E4RTAwNjA1OUZFIC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5jcHAgKi8sCiAJCQkJ
NkZDNUNBOTIyMkUzNTk5MzAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ1N0YXRlLmNwcCAqLywK
QEAgLTMxNjAyLDYgKzMxNjA1LDcgQEAKIAkJCQk4M0I5ODcwOTI1MjI1RjcyMDBBOTM5RjEgLyog
QXVkaW9Xb3JrbGV0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCOTg3MEEyNTIyNUY3NjAw
QTkzOUYxIC8qIEF1ZGlvV29ya2xldE5vZGVPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
M0JCOEI1RjI1MjY3NzY0MDBEODlGMEIgLyogQXVkaW9Xb3JrbGV0UHJvY2Vzc29yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk2RkY5QTA4NDI2NDg4MzQyMDAxMjUwRDggLyogVGFibGVGb3JtYXR0aW5n
R2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzMjc0RkNGMjUyRTI2QjcwMDFFMzVEQyAv
KiBBdWRpb1dvcmtsZXRQcm9jZXNzb3JDb25zdHJ1Y3Rpb25EYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4MzcyNkVGQjI1MjY3OUM1MDBDNjExNEUgLyogQXVkaW9Xb3JrbGV0UHJvY2Vzc29yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRkM5OTRCMjUyNTU3RUEwMDE3NzYxOCAv
KiBBdWRpb1dvcmtsZXRUaHJlYWQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFi
bGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMzBiODM4Yzk4Mjk2ZGUzMzlkZjUz
MTE3YzEzYTYxODU5YWMzNzUyMC4uMDU3YThjODQ3MjQ2YjA2YzQ4NzBmNjU3NTYwNTY3ZDQ3YWY0
ZTk2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3Bw
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTGF5b3V0Q2hpbGRJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkxheW91dENvbnRleHQuaCIKICNpbmNsdWRlICJMYXlvdXRJbml0aWFsQ29udGFpbmlu
Z0Jsb2NrLmgiCisjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKICNpbmNsdWRl
ICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1F1aXJr
cy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CkBAIC01MTUsNiArNTE2LDEx
IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUFuZERpc3RyaWJ1dGVFeHRy
YVNwYWNlKExheW91dFVuaXQgYXZhaWxhYmxlCiAgICAgfQogfQogCitUYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeSBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KCp0aGlzLCBmb3JtYXR0aW5nU3RhdGUoKS50
YWJsZUdyaWQoKSk7Cit9CisKIFRhYmxlRm9ybWF0dGluZ1F1aXJrcyBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0OjpxdWlya3MoKSBjb25zdAogewogICAgIHJldHVybiBUYWJsZUZvcm1hdHRpbmdRdWly
a3MoKnRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdD
b250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuaApp
bmRleCA4ZmZmZTNjNGRjODQ1OTYzMzNkN2IyYmUyMGY2ODk4NTBjMjNlZjZjLi45Y2UyOTQxMzE3
MmY1ZTVjNzE4YWM5NmI3YWFkZmVkZGNiYWM2ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3MgSW52YWxpZGF0aW9uU3RhdGU7CitjbGFz
cyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTsKIGNsYXNzIFRhYmxlRm9ybWF0dGluZ1F1aXJrczsK
IAogLy8gVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBsYXlvdXQgbG9naWMgZm9yIHRhYmxlIGZv
cm1hdHRpbmcgY29udGV4dHMuCkBAIC01MCwyMiArNTEsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgVW5pcXVlUmVmPFRhYmxlR3JpZD4gZW5zdXJlVGFibGVHcmlkKGNvbnN0IENvbnRhaW5lckJv
eCYgdGFibGVCb3gpOwogCi0gICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExheW91dFVuaXQgY2VsbEhl
aWdoKGNvbnN0IENvbnRhaW5lckJveCYpIGNvbnN0OwotICAgICAgICBFZGdlcyBjb21wdXRlZENl
bGxCb3JkZXIoY29uc3QgVGFibGVHcmlkOjpDZWxsJikgY29uc3Q7Ci0gICAgICAgIE9wdGlvbmFs
PExheW91dFVuaXQ+IGNvbXB1dGVkQ29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1
bW5Cb3gpOwotICAgICAgICBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChjb25zdCBUYWJsZUdyaWQ6OkNl
bGwmKTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB1c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0
IENvbnRhaW5lckJveCYgY2VsbEJveCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQg
Y2xhc3MgVGFibGVGb3JtYXR0aW5nQ29udGV4dDsKLSAgICAgICAgR2VvbWV0cnkoY29uc3QgVGFi
bGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IFRhYmxlR3JpZCYpOwotCi0gICAgICAgIGNvbnN0
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5nQ29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgpKTsgfQotICAgICAgICBjb25zdCBUYWJsZUdyaWQm
IG1fZ3JpZDsKLSAgICB9OwotICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IGdl
b21ldHJ5KCkgY29uc3QgeyByZXR1cm4gR2VvbWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgp
LnRhYmxlR3JpZCgpKTsgfQorICAgIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IGdlb21ldHJ5KCkg
Y29uc3Q7CisgICAgVGFibGVGb3JtYXR0aW5nUXVpcmtzIHF1aXJrcygpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIGNsYXNzIFRhYmxlTGF5b3V0IHsKQEAgLTgzLDggKzcwLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgY29uc3QgVGFibGVHcmlkJiBtX2dyaWQ7CiAgICAgfTsKIAotICAgIFRhYmxlRm9y
bWF0dGluZ1F1aXJrcyBxdWlya3MoKSBjb25zdDsKLQogICAgIFRhYmxlRm9ybWF0dGluZ0NvbnRl
eHQ6OlRhYmxlTGF5b3V0IHRhYmxlTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gVGFibGVMYXlvdXQo
KnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsgfQogCiAgICAgSW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMoKSBvdmVy
cmlkZTsKQEAgLTEwMCwxMiArODUsNiBAQCBwcml2YXRlOgogICAgIFRhYmxlRm9ybWF0dGluZ1N0
YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdT
dGF0ZT4oRm9ybWF0dGluZ0NvbnRleHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogfTsKIAotaW5s
aW5lIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0JiB0YWJsZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBUYWJsZUdy
aWQmIGdyaWQpCi0gICAgOiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkodGFibGVGb3JtYXR0
aW5nQ29udGV4dCkKLSAgICAsIG1fZ3JpZChncmlkKQotewotfQotCiB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVG
b3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDczMjM5MjY5NGY2ZTdhODI0MjljMjBhNWU2
MTA5ODQwZTJhZWRjOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUYWJsZUZv
cm1hdHRpbmdDb250ZXh0LmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKLQotI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgotI2luY2x1ZGUgIkxheW91
dEJveEdlb21ldHJ5LmgiCi0jaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgotI2luY2x1ZGUgIkxh
eW91dERlc2NlbmRhbnRJdGVyYXRvci5oIgotI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWlu
aW5nQmxvY2suaCIKLSNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotTGF5b3V0VW5pdCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y2VsbEhlaWdoKGNvbnN0IENvbnRhaW5lckJveCYgY2Vs
bEJveCkgY29uc3QKLXsKLSAgICBBU1NFUlQoY2VsbEJveC5pc0luRmxvdygpKTsKLSAgICBhdXRv
IGNvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsgfTsKLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRl
eHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDaGlsZENvbnRlbnRWZXJ0aWNhbE1hcmdpbihjZWxs
Qm94KSkgewotICAgICAgICBBU1NFUlQoY2VsbEJveC5maXJzdEluRmxvd0NoaWxkKCkpOwotICAg
ICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsK
LSAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGlsZCA9ICpjZWxsQm94LmZpcnN0SW5GbG93Q2hp
bGQoKTsKLSAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmNlbGxCb3gubGFzdEluRmxv
d0NoaWxkKCk7Ci0gICAgICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZpcnN0SW5GbG93Q2hpbGQsIEVzY2FwZVJlYXNv
bjo6VGFibGVRdWlya05lZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4
dCk7Ci0gICAgICAgIGF1dG8mIGxhc3RJbkZsb3dDaGlsZEdlb21ldHJ5ID0gZm9ybWF0dGluZ0Nv
bnRleHQuZ2VvbWV0cnlGb3JCb3gobGFzdEluRmxvd0NoaWxkLCBFc2NhcGVSZWFzb246OlRhYmxl
UXVpcmtOZWVkc0dlb21ldHJ5RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpOwotCi0g
ICAgICAgIGF1dG8gdG9wID0gZmlyc3RJbkZsb3dDaGlsZC5zdHlsZSgpLmhhc01hcmdpbkJlZm9y
ZVF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2Vv
bWV0cnkpLnRvcCgpIDogQm94R2VvbWV0cnk6Om1hcmdpbkJveFJlY3QoZmlyc3RJbkZsb3dDaGls
ZEdlb21ldHJ5KS50b3AoKTsKLSAgICAgICAgYXV0byBib3R0b20gPSBsYXN0SW5GbG93Q2hpbGQu
c3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVj
dChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90dG9tKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2lu
Qm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90dG9tKCk7Ci0gICAgICAgIGNvbnRl
bnRIZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNvbnRlbnRIZWln
aHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNlbGxCb3gpOwotICAg
IHJldHVybiBzdGQ6Om1heChjb21wdXRlZEhlaWdodChjZWxsQm94KS52YWx1ZU9yKDBfbHUpLCBj
b250ZW50SGVpZ2h0KTsKLX0KLQotRWRnZXMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6OmNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwpIGNvbnN0
Ci17Ci0gICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7Ci0gICAgYXV0byBib3JkZXIgPSBj
b21wdXRlZEJvcmRlcihjZWxsQm94KTsKLSAgICBhdXRvIGNvbGxhcHNlZEJvcmRlciA9IG1fZ3Jp
ZC5jb2xsYXBzZWRCb3JkZXIoKTsKLSAgICBpZiAoIWNvbGxhcHNlZEJvcmRlcikKLSAgICAgICAg
cmV0dXJuIGJvcmRlcjsKLQotICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gY2FjaGUgdGhlc2UgY29s
bGFwc2VkIGJvcmRlcnMgb24gdGhlIGdyaWQuCi0gICAgYXV0byBjZWxsUG9zaXRpb24gPSBjZWxs
LnBvc2l0aW9uKCk7Ci0gICAgLy8gQ29sbGFwc2VkIGJvcmRlciBsZWZ0IGZyb20gdGFibGUgYW5k
IGFkamFjZW50IGNlbGxzLgotICAgIGlmICghY2VsbFBvc2l0aW9uLmNvbHVtbikKLSAgICAgICAg
Ym9yZGVyLmhvcml6b250YWwubGVmdCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5sZWZ0
IC8gMjsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBhZGphY2VudEJvcmRlclJpZ2h0ID0gY29t
cHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uIC0gMSwgY2VsbFBv
c2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJveCgpKS5ob3Jpem9udGFsLnJpZ2h0OwotICAgICAgICBi
b3JkZXIuaG9yaXpvbnRhbC5sZWZ0ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwubGVmdCwg
YWRqYWNlbnRCb3JkZXJSaWdodCkgLyAyOwotICAgIH0KLSAgICAvLyBDb2xsYXBzZWQgYm9yZGVy
IHJpZ2h0IGZyb20gdGFibGUgYW5kIGFkamFjZW50IGNlbGxzLgotICAgIGlmIChjZWxsUG9zaXRp
b24uY29sdW1uID09IG1fZ3JpZC5jb2x1bW5zKCkuc2l6ZSgpIC0gMSkKLSAgICAgICAgYm9yZGVy
Lmhvcml6b250YWwucmlnaHQgPSBjb2xsYXBzZWRCb3JkZXItPmhvcml6b250YWwucmlnaHQgLyAy
OwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyTGVmdCA9IGNvbXB1dGVk
Qm9yZGVyKG1fZ3JpZC5zbG90KHsgY2VsbFBvc2l0aW9uLmNvbHVtbiArIDEsIGNlbGxQb3NpdGlv
bi5yb3cgfSktPmNlbGwoKS5ib3goKSkuaG9yaXpvbnRhbC5sZWZ0OwotICAgICAgICBib3JkZXIu
aG9yaXpvbnRhbC5yaWdodCA9IHN0ZDo6bWF4KGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0LCBhZGph
Y2VudEJvcmRlckxlZnQpIC8gMjsKLSAgICB9Ci0gICAgLy8gQ29sbGFwc2VkIGJvcmRlciB0b3Ag
ZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KLSAgICBhdXRvJiByb3dzID0gbV9n
cmlkLnJvd3MoKS5saXN0KCk7Ci0gICAgaWYgKCFjZWxsUG9zaXRpb24ucm93KQotICAgICAgICBi
b3JkZXIudmVydGljYWwudG9wID0gY29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNhbC50b3AgLyAyOwot
ICAgIGVsc2UgewotICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyQm90dG9tID0gY29tcHV0ZWRC
b3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uLCBjZWxsUG9zaXRpb24ucm93
IC0gMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNhbC5ib3R0b207Ci0gICAgICAgIGF1dG8gYWRq
YWNlbnRSb3dCb3R0b20gPSBjb21wdXRlZEJvcmRlcihyb3dzW2NlbGxQb3NpdGlvbi5yb3cgLSAx
XS5ib3goKSkudmVydGljYWwuYm90dG9tOwotICAgICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2Vk
Qm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3JkZXJCb3R0b20sIGFkamFjZW50Um93Qm90dG9t
KTsKLSAgICAgICAgYm9yZGVyLnZlcnRpY2FsLnRvcCA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNh
bC50b3AsIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyKSAvIDI7Ci0gICAgfQotICAgIC8vIENvbGxh
cHNlZCBib3JkZXIgYm90dG9tIGZyb20gdGFibGUsIHJvdyBhbmQgYWRqYWNlbnQgY2VsbHMuCi0g
ICAgaWYgKGNlbGxQb3NpdGlvbi5yb3cgPT0gbV9ncmlkLnJvd3MoKS5zaXplKCkgLSAxKQotICAg
ICAgICBib3JkZXIudmVydGljYWwuYm90dG9tID0gY29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNhbC5i
b3R0b20gLyAyOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyVG9wID0g
Y29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uLCBjZWxsUG9z
aXRpb24ucm93ICsgMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNhbC50b3A7Ci0gICAgICAgIGF1
dG8gYWRqYWNlbnRSb3dUb3AgPSBjb21wdXRlZEJvcmRlcihyb3dzW2NlbGxQb3NpdGlvbi5yb3cg
KyAxXS5ib3goKSkudmVydGljYWwudG9wOwotICAgICAgICBhdXRvIGFkamFjZW50Q29sbGFwc2Vk
Qm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3JkZXJUb3AsIGFkamFjZW50Um93VG9wKTsKLSAg
ICAgICAgYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNhbC5i
b3R0b20sIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyKSAvIDI7Ci0gICAgfQotICAgIHJldHVybiBi
b3JkZXI7Ci19Ci0KLU9wdGlvbmFsPExheW91dFVuaXQ+IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5Ojpjb21wdXRlZENvbHVtbldpZHRoKGNvbnN0IENvbnRhaW5lckJveCYgY29sdW1u
Qm94KQotewotICAgIC8vIENoZWNrIGJvdGggc3R5bGUgYW5kIDxjb2w+J3Mgd2lkdGggYXR0cmli
dXRlLgotICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBjYWxjdWxhdGVk
IHZhbHVlcywgbGlrZSA8Y29sIHN0eWxlPSJ3aWR0aDogMTAlIj4uCi0gICAgaWYgKGF1dG8gY29t
cHV0ZWRXaWR0aFZhbHVlID0gY29tcHV0ZWRXaWR0aChjb2x1bW5Cb3gsIHsgfSkpCi0gICAgICAg
IHJldHVybiBjb21wdXRlZFdpZHRoVmFsdWU7Ci0gICAgcmV0dXJuIGNvbHVtbkJveC5jb2x1bW5X
aWR0aCgpOwotfQotCi1Gb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50
cyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJh
aW50c0ZvckNlbGwoY29uc3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKQotewotICAgIGF1dG8mIGNl
bGxCb3ggPSBjZWxsLmJveCgpOwotICAgIGF1dG8mIHN0eWxlID0gY2VsbEJveC5zdHlsZSgpOwot
Ci0gICAgYXV0byBjb21wdXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBG
b3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7Ci0gICAgICAgIC8v
IEV2ZW4gZml4ZWQgd2lkdGggY2VsbHMgZXhwYW5kIHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3
aWR0aAotICAgICAgICAvLyA8dGQgc3R5bGU9IndpZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3Rk
PiB3aWxsIHNpemUgdG8gbWF4KG1pbmltdW0gY29udGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgp
LgotICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29u
dGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7IH07Ci0gICAgICAgIGlmIChjZWxsQm94
Lmhhc0NoaWxkKCkpCi0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5
b3V0Q29udGV4dDo6Y3JlYXRlRm9ybWF0dGluZ0NvbnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUo
KSktPmNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpOwotICAgICAgICBpZiAoYXV0
byBmaXhlZFdpZHRoID0gZml4ZWRWYWx1ZShzdHlsZS5sb2dpY2FsV2lkdGgoKSkpCi0gICAgICAg
ICAgICByZXR1cm4geyBzdGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0s
ICpmaXhlZFdpZHRoKSwgc3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVt
LCAqZml4ZWRXaWR0aCkgfTsKLSAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWlu
dHM7Ci0gICAgfTsKLSAgICAvLyBGSVhNRSBDaGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJv
eDsKLSAgICBhdXRvIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1h
eFdpZHRoKGNlbGxCb3gsIGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKLSAg
ICAvLyBFeHBhbmQgd2l0aCBib3JkZXIKLSAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4
cGFuZChjb21wdXRlZENlbGxCb3JkZXIoY2VsbCkud2lkdGgoKSk7Ci0gICAgLy8gcGFkZGluZwot
ICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUucGFk
ZGluZ0xlZnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkp
LnZhbHVlT3IoMCkpOwotICAgIC8vIGFuZCBtYXJnaW4KLSAgICBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzLmV4cGFuZChmaXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkg
KyBmaXhlZFZhbHVlKHN0eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApKTsKLSAgICByZXR1cm4g
aW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLX0KLQotCi1JbmxpbmVMYXlvdXRVbml0IFRhYmxl
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojp1c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENv
bnRhaW5lckJveCYgY2VsbEJveCkKLXsKLSAgICAvLyBUaGUgYmFzZWxpbmUgb2YgYSBjZWxsIGlz
IGRlZmluZWQgYXMgdGhlIGJhc2VsaW5lIG9mIHRoZSBmaXJzdCBpbi1mbG93IGxpbmUgYm94IGlu
IHRoZSBjZWxsLAotICAgIC8vIG9yIHRoZSBmaXJzdCBpbi1mbG93IHRhYmxlLXJvdyBpbiB0aGUg
Y2VsbCwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgotICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1Y2gg
bGluZSBib3gsIHRoZSBiYXNlbGluZSBpcyB0aGUgYm90dG9tIG9mIGNvbnRlbnQgZWRnZSBvZiB0
aGUgY2VsbCBib3guCi0gICAgaWYgKGNlbGxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCgpKQotICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGlu
ZUZvcm1hdHRpbmdTdGF0ZShjZWxsQm94KS5saW5lcygpWzBdLmJhc2VsaW5lKCk7Ci0gICAgZm9y
IChhdXRvJiBjZWxsRGVzY2VuZGFudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPENvbnRhaW5lckJveD4o
Y2VsbEJveCkpIHsKLSAgICAgICAgaWYgKGNlbGxEZXNjZW5kYW50LmVzdGFibGlzaGVzSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgYXV0byYgaW5saW5lRm9ybWF0dGlu
Z1N0YXRlRm9yQ2VsbCA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5n
U3RhdGUoY2VsbERlc2NlbmRhbnQpOwotICAgICAgICAgICAgaWYgKCFpbmxpbmVGb3JtYXR0aW5n
U3RhdGVGb3JDZWxsLmxpbmVzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBp
bmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxpbmVzKClbMF0uYmFzZWxpbmUoKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoY2VsbERlc2NlbmRhbnQuZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRp
bmdDb250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hl
ZFRhYmxlRm9ybWF0dGluZ1N0YXRlKGNlbGxEZXNjZW5kYW50KS50YWJsZUdyaWQoKS5yb3dzKCku
bGlzdCgpWzBdLmJhc2VsaW5lKCk7Ci0gICAgfQotICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGNlbGxCb3gpLmNvbnRlbnRCb3hCb3R0b20oKTsKLX0KLQotfQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRy
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmMyOTlkMTdiZTk5NWU1NWFmNmFiMWNhZTNhOTkzYzc1NzQ5Mjll
YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuY3BwCkBAIC0wLDAgKzEsMTcxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRhYmxlRm9ybWF0
dGluZ0dlb21ldHJ5LmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkK
KworI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdTdGF0ZS5oIgorI2luY2x1ZGUgIkxheW91dEJv
eEdlb21ldHJ5LmgiCisjaW5jbHVkZSAiTGF5b3V0Q29udGV4dC5oIgorI2luY2x1ZGUgIkxheW91
dERlc2NlbmRhbnRJdGVyYXRvci5oIgorI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5n
QmxvY2suaCIKKyNpbmNsdWRlICJUYWJsZUZvcm1hdHRpbmdTdGF0ZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6
OlRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIHRh
YmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkKKyAgICA6IEZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9n
cmlkKGdyaWQpCit7Cit9CisKK0xheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmNl
bGxIZWlnaChjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGNlbGxCb3guaXNJbkZsb3coKSk7CisgICAgYXV0byBjb250ZW50SGVpZ2h0ID0gTGF5b3V0VW5p
dCB7IH07CisgICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkuc2hvdWxkSWdub3Jl
Q2hpbGRDb250ZW50VmVydGljYWxNYXJnaW4oY2VsbEJveCkpIHsKKyAgICAgICAgQVNTRVJUKGNl
bGxCb3guZmlyc3RJbkZsb3dDaGlsZCgpKTsKKyAgICAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4
dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CisgICAgICAgIGF1dG8mIGZpcnN0SW5GbG93
Q2hpbGQgPSAqY2VsbEJveC5maXJzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGF1dG8mIGxhc3RJ
bkZsb3dDaGlsZCA9ICpjZWxsQm94Lmxhc3RJbkZsb3dDaGlsZCgpOworICAgICAgICBhdXRvJiBm
aXJzdEluRmxvd0NoaWxkR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJv
eChmaXJzdEluRmxvd0NoaWxkLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlUmVhc29uOjpUYWJs
ZVF1aXJrTmVlZHNHZW9tZXRyeUZyb21Fc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0KTsKKyAg
ICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5n
ZW9tZXRyeUZvckJveChsYXN0SW5GbG93Q2hpbGQsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVS
ZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21ldHJ5RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0Nv
bnRleHQpOworCisgICAgICAgIGF1dG8gdG9wID0gZmlyc3RJbkZsb3dDaGlsZC5zdHlsZSgpLmhh
c01hcmdpbkJlZm9yZVF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6Ym9yZGVyQm94UmVjdChmaXJzdElu
Rmxvd0NoaWxkR2VvbWV0cnkpLnRvcCgpIDogQm94R2VvbWV0cnk6Om1hcmdpbkJveFJlY3QoZmly
c3RJbkZsb3dDaGlsZEdlb21ldHJ5KS50b3AoKTsKKyAgICAgICAgYXV0byBib3R0b20gPSBsYXN0
SW5GbG93Q2hpbGQuc3R5bGUoKS5oYXNNYXJnaW5BZnRlclF1aXJrKCkgPyBCb3hHZW9tZXRyeTo6
Ym9yZGVyQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90dG9tKCkgOiBCb3hHZW9t
ZXRyeTo6bWFyZ2luQm94UmVjdChsYXN0SW5GbG93Q2hpbGRHZW9tZXRyeSkuYm90dG9tKCk7Cisg
ICAgICAgIGNvbnRlbnRIZWlnaHQgPSBib3R0b20gLSB0b3A7CisgICAgfSBlbHNlCisgICAgICAg
IGNvbnRlbnRIZWlnaHQgPSBjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNl
bGxCb3gpOworICAgIHJldHVybiBzdGQ6Om1heChjb21wdXRlZEhlaWdodChjZWxsQm94KS52YWx1
ZU9yKDBfbHUpLCBjb250ZW50SGVpZ2h0KTsKK30KKworRWRnZXMgVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnk6OmNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBUYWJsZUdyaWQ6OkNlbGwmIGNlbGwpIGNv
bnN0Cit7CisgICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CisgICAgYXV0byBib3JkZXIg
PSBjb21wdXRlZEJvcmRlcihjZWxsQm94KTsKKyAgICBhdXRvIGNvbGxhcHNlZEJvcmRlciA9IG1f
Z3JpZC5jb2xsYXBzZWRCb3JkZXIoKTsKKyAgICBpZiAoIWNvbGxhcHNlZEJvcmRlcikKKyAgICAg
ICAgcmV0dXJuIGJvcmRlcjsKKworICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gY2FjaGUgdGhlc2Ug
Y29sbGFwc2VkIGJvcmRlcnMgb24gdGhlIGdyaWQuCisgICAgYXV0byBjZWxsUG9zaXRpb24gPSBj
ZWxsLnBvc2l0aW9uKCk7CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciBsZWZ0IGZyb20gdGFibGUg
YW5kIGFkamFjZW50IGNlbGxzLgorICAgIGlmICghY2VsbFBvc2l0aW9uLmNvbHVtbikKKyAgICAg
ICAgYm9yZGVyLmhvcml6b250YWwubGVmdCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5s
ZWZ0IC8gMjsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBhZGphY2VudEJvcmRlclJpZ2h0ID0g
Y29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uIC0gMSwgY2Vs
bFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJveCgpKS5ob3Jpem9udGFsLnJpZ2h0OworICAgICAg
ICBib3JkZXIuaG9yaXpvbnRhbC5sZWZ0ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwubGVm
dCwgYWRqYWNlbnRCb3JkZXJSaWdodCkgLyAyOworICAgIH0KKyAgICAvLyBDb2xsYXBzZWQgYm9y
ZGVyIHJpZ2h0IGZyb20gdGFibGUgYW5kIGFkamFjZW50IGNlbGxzLgorICAgIGlmIChjZWxsUG9z
aXRpb24uY29sdW1uID09IG1fZ3JpZC5jb2x1bW5zKCkuc2l6ZSgpIC0gMSkKKyAgICAgICAgYm9y
ZGVyLmhvcml6b250YWwucmlnaHQgPSBjb2xsYXBzZWRCb3JkZXItPmhvcml6b250YWwucmlnaHQg
LyAyOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyTGVmdCA9IGNvbXB1
dGVkQm9yZGVyKG1fZ3JpZC5zbG90KHsgY2VsbFBvc2l0aW9uLmNvbHVtbiArIDEsIGNlbGxQb3Np
dGlvbi5yb3cgfSktPmNlbGwoKS5ib3goKSkuaG9yaXpvbnRhbC5sZWZ0OworICAgICAgICBib3Jk
ZXIuaG9yaXpvbnRhbC5yaWdodCA9IHN0ZDo6bWF4KGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0LCBh
ZGphY2VudEJvcmRlckxlZnQpIC8gMjsKKyAgICB9CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciB0
b3AgZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KKyAgICBhdXRvJiByb3dzID0g
bV9ncmlkLnJvd3MoKS5saXN0KCk7CisgICAgaWYgKCFjZWxsUG9zaXRpb24ucm93KQorICAgICAg
ICBib3JkZXIudmVydGljYWwudG9wID0gY29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNhbC50b3AgLyAy
OworICAgIGVsc2UgeworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyQm90dG9tID0gY29tcHV0
ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uLCBjZWxsUG9zaXRpb24u
cm93IC0gMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNhbC5ib3R0b207CisgICAgICAgIGF1dG8g
YWRqYWNlbnRSb3dCb3R0b20gPSBjb21wdXRlZEJvcmRlcihyb3dzW2NlbGxQb3NpdGlvbi5yb3cg
LSAxXS5ib3goKSkudmVydGljYWwuYm90dG9tOworICAgICAgICBhdXRvIGFkamFjZW50Q29sbGFw
c2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3JkZXJCb3R0b20sIGFkamFjZW50Um93Qm90
dG9tKTsKKyAgICAgICAgYm9yZGVyLnZlcnRpY2FsLnRvcCA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0
aWNhbC50b3AsIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyKSAvIDI7CisgICAgfQorICAgIC8vIENv
bGxhcHNlZCBib3JkZXIgYm90dG9tIGZyb20gdGFibGUsIHJvdyBhbmQgYWRqYWNlbnQgY2VsbHMu
CisgICAgaWYgKGNlbGxQb3NpdGlvbi5yb3cgPT0gbV9ncmlkLnJvd3MoKS5zaXplKCkgLSAxKQor
ICAgICAgICBib3JkZXIudmVydGljYWwuYm90dG9tID0gY29sbGFwc2VkQm9yZGVyLT52ZXJ0aWNh
bC5ib3R0b20gLyAyOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyVG9w
ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3QoeyBjZWxsUG9zaXRpb24uY29sdW1uLCBjZWxs
UG9zaXRpb24ucm93ICsgMSB9KS0+Y2VsbCgpLmJveCgpKS52ZXJ0aWNhbC50b3A7CisgICAgICAg
IGF1dG8gYWRqYWNlbnRSb3dUb3AgPSBjb21wdXRlZEJvcmRlcihyb3dzW2NlbGxQb3NpdGlvbi5y
b3cgKyAxXS5ib3goKSkudmVydGljYWwudG9wOworICAgICAgICBhdXRvIGFkamFjZW50Q29sbGFw
c2VkQm9yZGVyID0gc3RkOjptYXgoYWRqYWNlbnRCb3JkZXJUb3AsIGFkamFjZW50Um93VG9wKTsK
KyAgICAgICAgYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSA9IHN0ZDo6bWF4KGJvcmRlci52ZXJ0aWNh
bC5ib3R0b20sIGFkamFjZW50Q29sbGFwc2VkQm9yZGVyKSAvIDI7CisgICAgfQorICAgIHJldHVy
biBib3JkZXI7Cit9CisKK09wdGlvbmFsPExheW91dFVuaXQ+IFRhYmxlRm9ybWF0dGluZ0dlb21l
dHJ5Ojpjb21wdXRlZENvbHVtbldpZHRoKGNvbnN0IENvbnRhaW5lckJveCYgY29sdW1uQm94KQor
eworICAgIC8vIENoZWNrIGJvdGggc3R5bGUgYW5kIDxjb2w+J3Mgd2lkdGggYXR0cmlidXRlLgor
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBjYWxjdWxhdGVkIHZhbHVl
cywgbGlrZSA8Y29sIHN0eWxlPSJ3aWR0aDogMTAlIj4uCisgICAgaWYgKGF1dG8gY29tcHV0ZWRX
aWR0aFZhbHVlID0gY29tcHV0ZWRXaWR0aChjb2x1bW5Cb3gsIHsgfSkpCisgICAgICAgIHJldHVy
biBjb21wdXRlZFdpZHRoVmFsdWU7CisgICAgcmV0dXJuIGNvbHVtbkJveC5jb2x1bW5XaWR0aCgp
OworfQorCitGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeTo6aW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29u
c3QgVGFibGVHcmlkOjpDZWxsJiBjZWxsKQoreworICAgIGF1dG8mIGNlbGxCb3ggPSBjZWxsLmJv
eCgpOworICAgIGF1dG8mIHN0eWxlID0gY2VsbEJveC5zdHlsZSgpOworCisgICAgYXV0byBjb21w
dXRlZEludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBbJl0oKSAtPiBGb3JtYXR0aW5nQ29udGV4
dDo6SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyB7CisgICAgICAgIC8vIEV2ZW4gZml4ZWQgd2lk
dGggY2VsbHMgZXhwYW5kIHRvIHRoZWlyIG1pbmltdW0gY29udGVudCB3aWR0aAorICAgICAgICAv
LyA8dGQgc3R5bGU9IndpZHRoOiAxMHB4Ij50ZXN0X2NvbnRlbnQ8L3RkPiB3aWxsIHNpemUgdG8g
bWF4KG1pbmltdW0gY29udGVudCB3aWR0aCwgY29tcHV0ZWQgd2lkdGgpLgorICAgICAgICBhdXRv
IGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2lj
V2lkdGhDb25zdHJhaW50cyB7IH07CisgICAgICAgIGlmIChjZWxsQm94Lmhhc0NoaWxkKCkpCisg
ICAgICAgICAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gTGF5b3V0Q29udGV4dDo6Y3Jl
YXRlRm9ybWF0dGluZ0NvbnRleHQoY2VsbEJveCwgbGF5b3V0U3RhdGUoKSktPmNvbXB1dGVkSW50
cmluc2ljV2lkdGhDb25zdHJhaW50cygpOworICAgICAgICBpZiAoYXV0byBmaXhlZFdpZHRoID0g
Zml4ZWRWYWx1ZShzdHlsZS5sb2dpY2FsV2lkdGgoKSkpCisgICAgICAgICAgICByZXR1cm4geyBz
dGQ6Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSwg
c3RkOjptYXgoaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCAqZml4ZWRXaWR0aCkg
fTsKKyAgICAgICAgcmV0dXJuIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHM7CisgICAgfTsKKyAg
ICAvLyBGSVhNRSBDaGVjayBmb3IgYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBhdXRvIGlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBjb25zdHJhaW5CeU1pbk1heFdpZHRoKGNlbGxCb3gs
IGNvbXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpKTsKKyAgICAvLyBFeHBhbmQgd2l0
aCBib3JkZXIKKyAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChjb21wdXRlZENl
bGxCb3JkZXIoY2VsbCkud2lkdGgoKSk7CisgICAgLy8gcGFkZGluZworICAgIGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ0xlZnQoKSkudmFs
dWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlT3IoMCkpOwor
ICAgIC8vIGFuZCBtYXJnaW4KKyAgICBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLmV4cGFuZChm
aXhlZFZhbHVlKHN0eWxlLm1hcmdpblN0YXJ0KCkpLnZhbHVlT3IoMCkgKyBmaXhlZFZhbHVlKHN0
eWxlLm1hcmdpbkVuZCgpKS52YWx1ZU9yKDApKTsKKyAgICByZXR1cm4gaW50cmluc2ljV2lkdGhD
b25zdHJhaW50czsKK30KKworCitJbmxpbmVMYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0dlb21l
dHJ5Ojp1c2VkQmFzZWxpbmVGb3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCkKK3sK
KyAgICAvLyBUaGUgYmFzZWxpbmUgb2YgYSBjZWxsIGlzIGRlZmluZWQgYXMgdGhlIGJhc2VsaW5l
IG9mIHRoZSBmaXJzdCBpbi1mbG93IGxpbmUgYm94IGluIHRoZSBjZWxsLAorICAgIC8vIG9yIHRo
ZSBmaXJzdCBpbi1mbG93IHRhYmxlLXJvdyBpbiB0aGUgY2VsbCwgd2hpY2hldmVyIGNvbWVzIGZp
cnN0LgorICAgIC8vIElmIHRoZXJlIGlzIG5vIHN1Y2ggbGluZSBib3gsIHRoZSBiYXNlbGluZSBp
cyB0aGUgYm90dG9tIG9mIGNvbnRlbnQgZWRnZSBvZiB0aGUgY2VsbCBib3guCisgICAgaWYgKGNl
bGxCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1
cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsQm94
KS5saW5lcygpWzBdLmJhc2VsaW5lKCk7CisgICAgZm9yIChhdXRvJiBjZWxsRGVzY2VuZGFudCA6
IGRlc2NlbmRhbnRzT2ZUeXBlPENvbnRhaW5lckJveD4oY2VsbEJveCkpIHsKKyAgICAgICAgaWYg
KGNlbGxEZXNjZW5kYW50LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewor
ICAgICAgICAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlRm9yQ2VsbCA9IGxheW91dFN0
YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpOwor
ICAgICAgICAgICAgaWYgKCFpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsLmxpbmVzKCkuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JD
ZWxsLmxpbmVzKClbMF0uYmFzZWxpbmUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2VsbERl
c2NlbmRhbnQuZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgICAg
ICByZXR1cm4gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZFRhYmxlRm9ybWF0dGluZ1N0YXRlKGNl
bGxEZXNjZW5kYW50KS50YWJsZUdyaWQoKS5yb3dzKCkubGlzdCgpWzBdLmJhc2VsaW5lKCk7Cisg
ICAgfQorICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNlbGxC
b3gpLmNvbnRlbnRCb3hCb3R0b20oKTsKK30KKworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4
dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGIxOTZlOTJj
MjA5NWZmZWExZDFmNmNlMmMxMjc1ZTlmNzRkM2YxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdH
ZW9tZXRyeS5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiRm9ybWF0
dGluZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIExheW91dCB7
CisKK2NsYXNzIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IDogcHVibGljIEZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeSB7CitwdWJsaWM6CisgICAgTGF5b3V0VW5pdCBjZWxsSGVpZ2goY29uc3Qg
Q29udGFpbmVyQm94JikgY29uc3Q7CisgICAgRWRnZXMgY29tcHV0ZWRDZWxsQm9yZGVyKGNvbnN0
IFRhYmxlR3JpZDo6Q2VsbCYpIGNvbnN0OworICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbXB1
dGVkQ29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpOworICAgIEZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRoQ29u
c3RyYWludHNGb3JDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYpOworICAgIElubGluZUxheW91
dFVuaXQgdXNlZEJhc2VsaW5lRm9yQ2VsbChjb25zdCBDb250YWluZXJCb3gmIGNlbGxCb3gpOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OworICAg
IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmLCBj
b25zdCBUYWJsZUdyaWQmKTsKKworICAgIGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8VGFibGVGb3JtYXR0aW5n
Q29udGV4dD4oRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpmb3JtYXR0aW5nQ29udGV4dCgp
KTsgfQorICAgIGNvbnN0IFRhYmxlR3JpZCYgbV9ncmlkOworfTsKKworfQorfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428753</attachid>
            <date>2021-05-15 17:02:38 -0700</date>
            <delta_ts>2021-05-15 18:19:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225753-20210515170237.patch</filename>
            <type>text/plain</type>
            <size>32642</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzc0OWQ3MzQ0ODBkNzQ2
ODMyNTA1YTUzMWRkNzJlMTBmOTc5MDU3ZC4uOTExNjE2N2ZjZmRiYjM3ZTUxNjgzMWI3YzYyOTYw
MjQwNmE1YjdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIHRhYmxlIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDog
UmVtb3ZlZC4KKwogMjAyMS0wNS0xNSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ10gTW92ZSBpbmxpbmUgZm9ybWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3du
IGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDEzODM2YWU0OGI2MGJlMTAxMTliZTY1MDExYjU0NWNl
ZTJhZTA1ZGIuLjk5MzEwMDFhZjYzMDFhYjc5YjgyMDBhMTNiMjZhODJjM2RkOTUyNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xNTYyLDcgKzE1NjIsNyBAQCBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRM
aW5lQnJlYWtCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZEJveC5jcHAK
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAotbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCits
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3Mu
Y3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1N0YXRl
LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NTUzYzU3Y2YyYmMzZWY1MWZjOTQzNTI1MmY1ZmFjNGU1OTk2NjQzZi4uZTlkZjY5NWU0Nzc0NDIw
MjUxMjkwNzFmYzliMTk1MmQ2NjQwOWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzNiw2ICsxMzM2LDcgQEAKIAkJNDc4
NjM1NjUyNjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Nzg2MzU2NDI2NTA3QTM3
MDBDNUUyRTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0N0M0RDU3RDI2NTA4QkNCMDBDN0FCMUYg
LyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0N0M0RDU3QzI2NTA4QkNBMDBDN0FCMUYgLyogSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDdG
OTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ3RkE5NzAwMjY1MDk4
MkIwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDdGQTk2RkYyNjUwOTgyQTAwODQxNDE2IC8q
IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDkyOTFFNEIxMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVu
ZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDkyOTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovOyB9
OwogCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTNFNUUwODEy
RDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDk0NUJGRDQxM0NGODA5MDAwQ0Mz
QjM4IC8qIFRyYW5zZm9ybVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OTQ1QkZEMjEzQ0Y4MDkwMDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUu
aCAqLzsgfTsKQEAgLTY0MjIsNyArNjQyMyw3IEBACiAJCTExQzVGMTM0MjAwNTI3RjkwMDAxQUU2
MCAvKiBSZW5kZXJUcmVlQnVpbGRlck1hdGhNTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlck1hdGhNTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxMUNCMjc4NjIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJGdWxs
U2NyZWVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVl
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQ0IyNzg3MjAzQkE1NzAwMDRB
MURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTFEMTlDMkUyMzE1OUJBRTAwOEYy
NEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTFFNTE2MzUyNjFFMUEwNTAwRTY5RjI1IC8qIFdlYlhSSW5wdXRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJYUklucHV0U3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTFFNTE2MzcyNjFFMUEwNTAwRTY5RjI1IC8qIFdlYlhSSW5wdXRTcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJYUklucHV0U3Bh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMUU1MTYzQTI2MUUxQTE0MDBF
NjlGMjUgLyogV2ViWFJHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlhSR2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM5Miw2ICs4
MzkzLDcgQEAKIAkJNDc4NjM1NjQyNjUwN0EzNzAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3QzRENTdDMjY1MDhC
Q0EwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0N0RBMjY1MDJGMkYwMDg3OTY4QyAvKiBCbG9ja0Zvcm1h
dHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ3RkE5NkZGMjY1
MDk4MkEwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OTI5MUU0QTEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5k
ZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUmVuZGVy
aW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTNFNUUwODEyRDY0MjA1
MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FMYXllckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OTQ1QkZEMTEzQ0Y4MDkwMDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtU3RhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI2NzksNyArMjI2ODEsOCBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNkZDNUNBOTQyMkUzNTk5NDAwQjEzRTExIC8qIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZGQzVDQTk1MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0JCQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8q
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJMTFEMTlDMkUyMzE1
OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKKwkJCQk0N0ZB
OTZGRjI2NTA5ODJBMDA4NDE0MTYgLyogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJ
CQk2RkM1M0FFQjI0QUY3QThFMDA2MDU5RkUgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmNwcCAq
LywKIAkJCQk2RjQ5QzNFNjI2NDc5QjNCMDA1MTk1M0QgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtz
LmggKi8sCiAJCQkJNkZDNUNBOTIyMkUzNTk5MzAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ1N0
YXRlLmNwcCAqLywKQEAgLTM1NDY1LDYgKzM1NDY4LDcgQEAKIAkJCQlFM0MwNDEzODI1NENCMzBE
MDAyMUQwRTYgLyogU3lzdGVtU291bmREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTND
MDQxMkYyNTRDQTI5QjAwMjFEMEU2IC8qIFN5c3RlbVNvdW5kTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUQ1OTc1QjMxOTYzNUYxMTAwRDAwODc4IC8qIFN5c3RlbVZlcnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQ3RkE5NzAwMjY1MDk4MkIwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRp
bmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY0OUMzRTcyNjQ3OUIzQzAwNTE5NTNE
IC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNTEw
QTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjE3
MjY0RjI0NzBDNjBCMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCA5NmRmOGJhYjVmN2VlODdkMjAyN2YxMTc4MjA3MTBlNjAwNTAxNmE2
Li40ZjA2YjI5ZGM2NDhiMTcyM2QyNGM3M2Y5ODU2NWI3ODQwOTNlNjljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1F1
aXJrcy5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTUxNSw2ICs1MTYsMTEgQEAgdm9pZCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBh
dmFpbGFibGUKICAgICB9CiB9CiAKK1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKK30KKwog
VGFibGVGb3JtYXR0aW5nUXVpcmtzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnF1aXJrcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIFRhYmxlRm9ybWF0dGluZ1F1aXJrcygqdGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDhmZmZlM2M0ZGM4NDU5
NjMzM2Q3YjJiZTIwZjY4OTg1MGMyM2VmNmMuLjljZTI5NDEzMTcyZjVlNWM3MThhYzk2YjdhYWRm
ZWRkY2JhYzZlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4
dC5oCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKK2NsYXNzIFRhYmxlRm9ybWF0dGluZ0dl
b21ldHJ5OwogY2xhc3MgVGFibGVGb3JtYXR0aW5nUXVpcmtzOwogCiAvLyBUaGlzIGNsYXNzIGlt
cGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgdGFibGUgZm9ybWF0dGluZyBjb250ZXh0cy4K
QEAgLTUwLDIyICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBVbmlxdWVSZWY8VGFibGVH
cmlkPiBlbnN1cmVUYWJsZUdyaWQoY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCk7CiAKLSAg
ICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgTGF5b3V0VW5pdCBjZWxsSGVpZ2goY29uc3QgQ29udGFpbmVy
Qm94JikgY29uc3Q7Ci0gICAgICAgIEVkZ2VzIGNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBUYWJs
ZUdyaWQ6OkNlbGwmKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRDb2x1bW5XaWR0aChjb25zdCBDb250YWluZXJCb3gmIGNvbHVtbkJveCk7Ci0gICAgICAgIEZv
cm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHNGb3JDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYpOwotICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHVzZWRCYXNlbGluZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxs
Qm94KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBUYWJsZUZvcm1hdHRp
bmdDb250ZXh0OwotICAgICAgICBHZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
JiwgY29uc3QgVGFibGVHcmlkJik7Ci0KLSAgICAgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZv
cm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdD
b250ZXh0KCkpOyB9Ci0gICAgICAgIGNvbnN0IFRhYmxlR3JpZCYgbV9ncmlkOwotICAgIH07Ci0g
ICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBHZW9tZXRyeSgqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCkpOyB9Cisg
ICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBUYWJsZUZv
cm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgVGFi
bGVMYXlvdXQgewpAQCAtODMsOCArNzAsNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBUYWJs
ZUdyaWQmIG1fZ3JpZDsKICAgICB9OwogCi0gICAgVGFibGVGb3JtYXR0aW5nUXVpcmtzIHF1aXJr
cygpIGNvbnN0OwotCiAgICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVMYXlvdXQgdGFi
bGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBUYWJsZUxheW91dCgqdGhpcywgZm9ybWF0dGluZ1N0
YXRlKCkudGFibGVHcmlkKCkpOyB9CiAKICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwpAQCAtMTAwLDEyICs4
NSw2IEBAIHByaXZhdGU6CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0
ZSgpIHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29u
dGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwogCi1pbmxpbmUgVGFibGVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQm
IHRhYmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkKLSAgICA6IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwg
bV9ncmlkKGdyaWQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJs
ZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNzMyMzkyNjk0ZjZlN2E4MjQyOWMyMGE1ZTYxMDk4NDBlMmFlZGM4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0NvbnRleHQuaCIK
LQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNp
bmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgotI2luY2x1
ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBMYXlvdXQgewotCi1MYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpjZWxsSGVpZ2goY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KSBjb25zdAotewotICAg
IEFTU0VSVChjZWxsQm94LmlzSW5GbG93KCkpOwotICAgIGF1dG8gY29udGVudEhlaWdodCA9IExh
eW91dFVuaXQgeyB9OwotICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLnNob3Vs
ZElnbm9yZUNoaWxkQ29udGVudFZlcnRpY2FsTWFyZ2luKGNlbGxCb3gpKSB7Ci0gICAgICAgIEFT
U0VSVChjZWxsQm94LmZpcnN0SW5GbG93Q2hpbGQoKSk7Ci0gICAgICAgIGF1dG8gZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgICAgICBhdXRvJiBmaXJz
dEluRmxvd0NoaWxkID0gKmNlbGxCb3guZmlyc3RJbkZsb3dDaGlsZCgpOwotICAgICAgICBhdXRv
JiBsYXN0SW5GbG93Q2hpbGQgPSAqY2VsbEJveC5sYXN0SW5GbG93Q2hpbGQoKTsKLSAgICAgICAg
YXV0byYgZmlyc3RJbkZsb3dDaGlsZEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0
cnlGb3JCb3goZmlyc3RJbkZsb3dDaGlsZCwgRXNjYXBlUmVhc29uOjpUYWJsZVF1aXJrTmVlZHNH
ZW9tZXRyeUZyb21Fc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0KTsKLSAgICAgICAgYXV0byYg
bGFzdEluRmxvd0NoaWxkR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJv
eChsYXN0SW5GbG93Q2hpbGQsIEVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05lZWRzR2VvbWV0cnlG
cm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7Ci0KLSAgICAgICAgYXV0byB0b3AgPSBm
aXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSA/IEJveEdlb21l
dHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRyeSkudG9wKCkgOiBCb3hH
ZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0cnkpLnRvcCgpOwot
ICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHlsZSgpLmhhc01hcmdpbkFm
dGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJbkZsb3dDaGlsZEdl
b21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0KGxhc3RJbkZsb3dD
aGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKLSAgICAgICAgY29udGVudEhlaWdodCA9IGJvdHRvbSAt
IHRvcDsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KGNv
bXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRlbnRIZWlnaHQpOwotfQot
Ci1FZGdlcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRDZWxsQm9y
ZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKLXsKLSAgICBhdXRvJiBjZWxs
Qm94ID0gY2VsbC5ib3goKTsKLSAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVyKGNlbGxC
b3gpOwotICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJvcmRlcigp
OwotICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQotICAgICAgICByZXR1cm4gYm9yZGVyOwotCi0g
ICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVycyBvbiB0
aGUgZ3JpZC4KLSAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsKLSAgICAv
LyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMuCi0g
ICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5s
ZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOwotICAgIGVsc2Ugewot
ICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlcihtX2dyaWQu
c2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0pLT5jZWxs
KCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7Ci0gICAgICAgIGJvcmRlci5ob3Jpem9udGFsLmxl
ZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRlclJpZ2h0
KSAvIDI7Ci0gICAgfQotICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0YWJsZSBh
bmQgYWRqYWNlbnQgY2VsbHMuCi0gICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0gbV9ncmlk
LmNvbHVtbnMoKS5zaXplKCkgLSAxKQotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdodCA9
IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3Qo
eyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJv
eCgpKS5ob3Jpem9udGFsLmxlZnQ7Ci0gICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0ID0g
c3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVmdCkgLyAy
OwotICAgIH0KLSAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCByb3cgYW5k
IGFkamFjZW50IGNlbGxzLgotICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxpc3QoKTsK
LSAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCi0gICAgICAgIGJvcmRlci52ZXJ0aWNhbC50b3Ag
PSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQuc2xvdCh7
IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxsKCkuYm94
KCkpLnZlcnRpY2FsLmJvdHRvbTsKLSAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRvbSA9IGNv
bXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0aWNhbC5i
b3R0b207Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1heChh
ZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOwotICAgICAgICBib3JkZXIu
dmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNlbnRDb2xs
YXBzZWRCb3JkZXIpIC8gMjsKLSAgICB9Ci0gICAgLy8gQ29sbGFwc2VkIGJvcmRlciBib3R0b20g
ZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KLSAgICBpZiAoY2VsbFBvc2l0aW9u
LnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCi0gICAgICAgIGJvcmRlci52ZXJ0aWNh
bC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRlcihtX2dy
aWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAxIH0pLT5j
ZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKLSAgICAgICAgYXV0byBhZGphY2VudFJvd1RvcCA9
IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52ZXJ0aWNh
bC50b3A7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1heChh
ZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOwotICAgICAgICBib3JkZXIudmVydGlj
YWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNlbnRDb2xs
YXBzZWRCb3JkZXIpIC8gMjsKLSAgICB9Ci0gICAgcmV0dXJuIGJvcmRlcjsKLX0KLQotT3B0aW9u
YWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVk
Q29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCi17Ci0gICAgLy8gQ2hl
Y2sgYm90aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCi0gICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wg
c3R5bGU9IndpZHRoOiAxMCUiPi4KLSAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBj
b21wdXRlZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lk
dGhWYWx1ZTsKLSAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Ci19Ci0KLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChjb25zdCBU
YWJsZUdyaWQ6OkNlbGwmIGNlbGwpCi17Ci0gICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7
Ci0gICAgYXV0byYgc3R5bGUgPSBjZWxsQm94LnN0eWxlKCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSgpIC0+IEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgLy8gRXZlbiBmaXhlZCB3aWR0aCBj
ZWxscyBleHBhbmQgdG8gdGhlaXIgbWluaW11bSBjb250ZW50IHdpZHRoCi0gICAgICAgIC8vIDx0
ZCBzdHlsZT0id2lkdGg6IDEwcHgiPnRlc3RfY29udGVudDwvdGQ+IHdpbGwgc2l6ZSB0byBtYXgo
bWluaW11bSBjb250ZW50IHdpZHRoLCBjb21wdXRlZCB3aWR0aCkuCi0gICAgICAgIGF1dG8gaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIHsgfTsKLSAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKLSAgICAg
ICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVG
b3JtYXR0aW5nQ29udGV4dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhl
ZFZhbHVlKHN0eWxlLmxvZ2ljYWxXaWR0aCgpKSkKLSAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6
bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6
Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9Owot
ICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAgICB9OwotICAgIC8v
IEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwotICAgIC8vIEV4cGFuZCB3aXRoIGJv
cmRlcgotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJv
cmRlcihjZWxsKS53aWR0aCgpKTsKLSAgICAvLyBwYWRkaW5nCi0gICAgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5leHBhbmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9y
KDApICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7Ci0gICAg
Ly8gYW5kIG1hcmdpbgotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVk
VmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luRW5kKCkpLnZhbHVlT3IoMCkpOwotICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOwotfQotCi0KLUlubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OnVzZWRCYXNlbGluZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94
KQotewotICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFz
ZWxpbmUgb2YgdGhlIGZpcnN0IGluLWZsb3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCi0gICAgLy8g
b3IgdGhlIGZpcnN0IGluLWZsb3cgdGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29t
ZXMgZmlyc3QuCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2Vs
aW5lIGlzIHRoZSBib3R0b20gb2YgY29udGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KLSAgICBp
ZiAoY2VsbEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybiBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNl
bGxCb3gpLmxpbmVzKClbMF0uYmFzZWxpbmUoKTsKLSAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5k
YW50IDogZGVzY2VuZGFudHNPZlR5cGU8Q29udGFpbmVyQm94PihjZWxsQm94KSkgewotICAgICAg
ICBpZiAoY2VsbERlc2NlbmRhbnQuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5
b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFu
dCk7Ci0gICAgICAgICAgICBpZiAoIWlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0
ZUZvckNlbGwubGluZXMoKVswXS5iYXNlbGluZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChj
ZWxsRGVzY2VuZGFudC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3Rh
dGUoY2VsbERlc2NlbmRhbnQpLnRhYmxlR3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
Y2VsbEJveCkuY29udGVudEJveEJvdHRvbSgpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YzI5OWQxN2JlOTk1ZTU1YWY2YWIxY2FlM2E5OTNjNzU3NDkyOWVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUg
IlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCitUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6VGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgdGFibGVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgVGFibGVHcmlkJiBncmlkKQorICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5KHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2dyaWQoZ3JpZCkKK3sKK30KKwor
TGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y2VsbEhlaWdoKGNvbnN0IENvbnRh
aW5lckJveCYgY2VsbEJveCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2VsbEJveC5pc0luRmxvdygp
KTsKKyAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsgfTsKKyAgICBpZiAoZm9y
bWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDaGlsZENvbnRlbnRWZXJ0aWNh
bE1hcmdpbihjZWxsQm94KSkgeworICAgICAgICBBU1NFUlQoY2VsbEJveC5maXJzdEluRmxvd0No
aWxkKCkpOworICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGlu
Z0NvbnRleHQoKTsKKyAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGlsZCA9ICpjZWxsQm94LmZp
cnN0SW5GbG93Q2hpbGQoKTsKKyAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmNlbGxC
b3gubGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGRHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZpcnN0SW5GbG93Q2hpbGQs
IEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21ldHJ5
RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBhdXRvJiBsYXN0SW5G
bG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxhc3RJ
bkZsb3dDaGlsZCwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05l
ZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7CisKKyAgICAgICAg
YXV0byB0b3AgPSBmaXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmso
KSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRyeSku
dG9wKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0
cnkpLnRvcCgpOworICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHlsZSgp
Lmhhc01hcmdpbkFmdGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJ
bkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0
KGxhc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKKyAgICAgICAgY29udGVudEhlaWdo
dCA9IGJvdHRvbSAtIHRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29udGVudEhlaWdodCA9IGNv
bnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KGNvbXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRlbnRI
ZWlnaHQpOworfQorCitFZGdlcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRDZWxs
Qm9yZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKK3sKKyAgICBhdXRvJiBj
ZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVyKGNl
bGxCb3gpOworICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJvcmRl
cigpOworICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQorICAgICAgICByZXR1cm4gYm9yZGVyOwor
CisgICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVycyBv
biB0aGUgZ3JpZC4KKyAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsKKyAg
ICAvLyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMu
CisgICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRh
bC5sZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlcihtX2dy
aWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0pLT5j
ZWxsKCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFs
LmxlZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRlclJp
Z2h0KSAvIDI7CisgICAgfQorICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0YWJs
ZSBhbmQgYWRqYWNlbnQgY2VsbHMuCisgICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0gbV9n
cmlkLmNvbHVtbnMoKS5zaXplKCkgLSAxKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdo
dCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNs
b3QoeyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgp
LmJveCgpKS5ob3Jpem9udGFsLmxlZnQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0
ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVmdCkg
LyAyOworICAgIH0KKyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCByb3cg
YW5kIGFkamFjZW50IGNlbGxzLgorICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxpc3Qo
KTsKKyAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCisgICAgICAgIGJvcmRlci52ZXJ0aWNhbC50
b3AgPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQuc2xv
dCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxsKCku
Ym94KCkpLnZlcnRpY2FsLmJvdHRvbTsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRvbSA9
IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0aWNh
bC5ib3R0b207CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1h
eChhZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOworICAgICAgICBib3Jk
ZXIudmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNlbnRD
b2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciBib3R0
b20gZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KKyAgICBpZiAoY2VsbFBvc2l0
aW9uLnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCisgICAgICAgIGJvcmRlci52ZXJ0
aWNhbC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRlciht
X2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAxIH0p
LT5jZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd1Rv
cCA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52ZXJ0
aWNhbC50b3A7CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1h
eChhZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOworICAgICAgICBib3JkZXIudmVy
dGljYWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNlbnRD
b2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIGJvcmRlcjsKK30KKworT3B0
aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkQ29sdW1u
V2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCit7CisgICAgLy8gQ2hlY2sgYm90
aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCisgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wgc3R5bGU9
IndpZHRoOiAxMCUiPi4KKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb21wdXRl
ZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1
ZTsKKyAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Cit9CisKK0Zvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwm
IGNlbGwpCit7CisgICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CisgICAgYXV0byYgc3R5
bGUgPSBjZWxsQm94LnN0eWxlKCk7CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyA9IFsmXSgpIC0+IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIHsKKyAgICAgICAgLy8gRXZlbiBmaXhlZCB3aWR0aCBjZWxscyBleHBhbmQgdG8g
dGhlaXIgbWluaW11bSBjb250ZW50IHdpZHRoCisgICAgICAgIC8vIDx0ZCBzdHlsZT0id2lkdGg6
IDEwcHgiPnRlc3RfY29udGVudDwvdGQ+IHdpbGwgc2l6ZSB0byBtYXgobWluaW11bSBjb250ZW50
IHdpZHRoLCBjb21wdXRlZCB3aWR0aCkuCisgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsg
fTsKKyAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgIGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4
dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCk7CisgICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxXaWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6bWF4KGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6Om1heChpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9OworICAgICAgICByZXR1cm4g
aW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNrIGZv
ciBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29tcHV0ZWRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzKCkpOworICAgIC8vIEV4cGFuZCB3aXRoIGJvcmRlcgorICAgIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKS53aWR0
aCgpKTsKKyAgICAvLyBwYWRkaW5nCisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBh
bmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApICsgZml4ZWRWYWx1
ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7CisgICAgLy8gYW5kIG1hcmdpbgor
ICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUubWFy
Z2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZh
bHVlT3IoMCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworfQorCisK
K0lubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OnVzZWRCYXNlbGluZUZv
ckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIFRoZSBiYXNlbGlu
ZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGluLWZs
b3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCisgICAgLy8gb3IgdGhlIGZpcnN0IGluLWZsb3cgdGFi
bGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgICAgLy8gSWYgdGhl
cmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2VsaW5lIGlzIHRoZSBib3R0b20gb2YgY29u
dGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KKyAgICBpZiAoY2VsbEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmVz
dGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNlbGxCb3gpLmxpbmVzKClbMF0uYmFzZWxp
bmUoKTsKKyAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5kYW50IDogZGVzY2VuZGFudHNPZlR5cGU8
Q29udGFpbmVyQm94PihjZWxsQm94KSkgeworICAgICAgICBpZiAoY2VsbERlc2NlbmRhbnQuZXN0
YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRvJiBp
bmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElu
bGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFudCk7CisgICAgICAgICAgICBpZiAoIWlu
bGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKVswXS5iYXNl
bGluZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjZWxsRGVzY2VuZGFudC5lc3RhYmxpc2hl
c1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXRTdGF0
ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpLnRhYmxl
R3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUoKTsKKyAgICB9CisgICAgcmV0dXJuIGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY2VsbEJveCkuY29udGVudEJveEJvdHRv
bSgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YjE5NmU5MmMyMDk1ZmZlYTFkMWY2Y2UyYzEy
NzVlOWY3NGQzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKK3B1
YmxpYzoKKyAgICBMYXlvdXRVbml0IGNlbGxIZWlnaChjb25zdCBDb250YWluZXJCb3gmKSBjb25z
dDsKKyAgICBFZGdlcyBjb21wdXRlZENlbGxCb3JkZXIoY29uc3QgVGFibGVHcmlkOjpDZWxsJikg
Y29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRDb2x1bW5XaWR0aChjb25z
dCBDb250YWluZXJCb3gmIGNvbHVtbkJveCk7CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29u
c3QgVGFibGVHcmlkOjpDZWxsJik7CisgICAgSW5saW5lTGF5b3V0VW5pdCB1c2VkQmFzZWxpbmVG
b3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IFRhYmxlR3JpZCYpOwor
CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisgICAgY29uc3QgVGFi
bGVHcmlkJiBtX2dyaWQ7Cit9OworCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>428757</attachid>
            <date>2021-05-15 18:19:23 -0700</date>
            <delta_ts>2021-05-15 18:21:30 -0700</delta_ts>
            <desc>[fast-cq] Patch</desc>
            <filename>bug-225753-20210515181922.patch</filename>
            <type>text/plain</type>
            <size>32642</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzc0OWQ3MzQ0ODBkNzQ2
ODMyNTA1YTUzMWRkNzJlMTBmOTc5MDU3ZC4uOTExNjE2N2ZjZmRiYjM3ZTUxNjgzMWI3YzYyOTYw
MjQwNmE1YjdmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA1LTE1ICBBbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAgICBbTEZDXSBNb3ZlIHRhYmxlIGZv
cm1hdHRpbmcgZ2VvbWV0cnkgdG8gaXRzIG93biBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NzUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
QW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Z2VvbWV0cnkgY29uc3QpOgor
ICAgICAgICAqIGxheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5n
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6R2VvbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcDog
UmVtb3ZlZC4KKwogMjAyMS0wNS0xNSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgW0xGQ10gTW92ZSBpbmxpbmUgZm9ybWF0dGluZyBnZW9tZXRyeSB0byBpdHMgb3du
IGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDEzODM2YWU0OGI2MGJlMTAxMTliZTY1MDExYjU0NWNl
ZTJhZTA1ZGIuLjk5MzEwMDFhZjYzMDFhYjc5YjgyMDBhMTNiMjZhODJjM2RkOTUyNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CkBAIC0xNTYyLDcgKzE1NjIsNyBAQCBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRM
aW5lQnJlYWtCb3guY3BwCiBsYXlvdXQvbGF5b3V0dHJlZS9MYXlvdXRSZXBsYWNlZEJveC5jcHAK
IGxheW91dC9sYXlvdXR0cmVlL0xheW91dFRyZWVCdWlsZGVyLmNwcAogbGF5b3V0L2Zvcm1hdHRp
bmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAotbGF5b3V0L2Zvcm1h
dHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCits
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNw
cAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdRdWlya3Mu
Y3BwCiBsYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ1N0YXRl
LmNwcAogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUdyaWQuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NTUzYzU3Y2YyYmMzZWY1MWZjOTQzNTI1MmY1ZmFjNGU1OTk2NjQzZi4uZTlkZjY5NWU0Nzc0NDIw
MjUxMjkwNzFmYzliMTk1MmQ2NjQwOWVhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzNiw2ICsxMzM2LDcgQEAKIAkJNDc4
NjM1NjUyNjUwN0EzODAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Nzg2MzU2NDI2NTA3QTM3
MDBDNUUyRTAgLyogQmxvY2tGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0N0M0RDU3RDI2NTA4QkNCMDBDN0FCMUYg
LyogSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0N0M0RDU3QzI2NTA4QkNBMDBDN0FCMUYgLyogSW5saW5lRm9y
bWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNDdGOTQ3REIyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1
aXJrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDdG
OTQ3REEyNjUwMkYyRjAwODc5NjhDIC8qIEJsb2NrRm9ybWF0dGluZ1F1aXJrcy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ3RkE5NzAwMjY1MDk4
MkIwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDdGQTk2RkYyNjUwOTgyQTAwODQxNDE2IC8q
IFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDkyOTFFNEIxMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVu
ZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDkyOTFFNEExMzQxNzJDODAwRTc1M0RFIC8qIEltYWdlUmVuZGVyaW5nTW9kZS5oICovOyB9
OwogCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTNFNUUwODEy
RDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDk0NUJGRDQxM0NGODA5MDAwQ0Mz
QjM4IC8qIFRyYW5zZm9ybVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OTQ1QkZEMjEzQ0Y4MDkwMDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUu
aCAqLzsgfTsKQEAgLTY0MjIsNyArNjQyMyw3IEBACiAJCTExQzVGMTM0MjAwNTI3RjkwMDAxQUU2
MCAvKiBSZW5kZXJUcmVlQnVpbGRlck1hdGhNTC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlck1hdGhNTC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxMUNCMjc4NjIwM0JBNTcwMDA0QTFEQzkgLyogUmVuZGVyVHJlZUJ1aWxkZXJGdWxs
U2NyZWVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlclRyZWVCdWlsZGVyRnVsbFNjcmVl
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTExQ0IyNzg3MjAzQkE1NzAwMDRB
MURDOSAvKiBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyVHJlZUJ1aWxkZXJGdWxsU2NyZWVuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTExRDE5QzJFMjMxNTlCQUUwMDhGMjREMyAvKiBUYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGFibGVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTFEMTlDMkUyMzE1OUJBRTAwOEYy
NEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRh
YmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTFFNTE2MzUyNjFFMUEwNTAwRTY5RjI1IC8qIFdlYlhSSW5wdXRTcGFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJYUklucHV0U3BhY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTFFNTE2MzcyNjFFMUEwNTAwRTY5RjI1IC8qIFdlYlhSSW5wdXRTcGFj
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJYUklucHV0U3Bh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxMUU1MTYzQTI2MUUxQTE0MDBF
NjlGMjUgLyogV2ViWFJHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYlhSR2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODM5Miw2ICs4
MzkzLDcgQEAKIAkJNDc4NjM1NjQyNjUwN0EzNzAwQzVFMkUwIC8qIEJsb2NrRm9ybWF0dGluZ0dl
b21ldHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJsb2NrRm9ybWF0dGlu
Z0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ3QzRENTdDMjY1MDhC
Q0EwMEM3QUIxRiAvKiBJbmxpbmVGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ3Rjk0N0RBMjY1MDJGMkYwMDg3OTY4QyAvKiBCbG9ja0Zvcm1h
dHRpbmdRdWlya3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmxvY2tGb3Jt
YXR0aW5nUXVpcmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ3RkE5NkZGMjY1
MDk4MkEwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0OTI5MUU0QTEzNDE3MkM4MDBFNzUzREUgLyogSW1hZ2VSZW5k
ZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUmVuZGVy
aW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTNFNUUwODEyRDY0MjA1
MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FMYXllckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OTQ1QkZEMTEzQ0Y4MDkwMDBDQzNCMzggLyogVHJhbnNmb3JtU3RhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtU3RhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI2NzksNyArMjI2ODEsOCBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNkZDNUNBOTQyMkUzNTk5NDAwQjEzRTExIC8qIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZGQzVDQTk1MjJFMzU5OTQwMEIxM0UxMSAvKiBUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0LmggKi8sCi0JCQkJMTFEMTlDMkUyMzE1OUJBRTAwOEYyNEQzIC8q
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgKi8sCisJCQkJMTFEMTlDMkUyMzE1
OUJBRTAwOEYyNEQzIC8qIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcCAqLywKKwkJCQk0N0ZB
OTZGRjI2NTA5ODJBMDA4NDE0MTYgLyogVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCAqLywKIAkJ
CQk2RkM1M0FFQjI0QUY3QThFMDA2MDU5RkUgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtzLmNwcCAq
LywKIAkJCQk2RjQ5QzNFNjI2NDc5QjNCMDA1MTk1M0QgLyogVGFibGVGb3JtYXR0aW5nUXVpcmtz
LmggKi8sCiAJCQkJNkZDNUNBOTIyMkUzNTk5MzAwQjEzRTExIC8qIFRhYmxlRm9ybWF0dGluZ1N0
YXRlLmNwcCAqLywKQEAgLTM1NDY1LDYgKzM1NDY4LDcgQEAKIAkJCQlFM0MwNDEzODI1NENCMzBE
MDAyMUQwRTYgLyogU3lzdGVtU291bmREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTND
MDQxMkYyNTRDQTI5QjAwMjFEMEU2IC8qIFN5c3RlbVNvdW5kTWFuYWdlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNUQ1OTc1QjMxOTYzNUYxMTAwRDAwODc4IC8qIFN5c3RlbVZlcnNpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTQ3RkE5NzAwMjY1MDk4MkIwMDg0MTQxNiAvKiBUYWJsZUZvcm1hdHRp
bmdHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkY0OUMzRTcyNjQ3OUIzQzAwNTE5NTNE
IC8qIFRhYmxlRm9ybWF0dGluZ1F1aXJrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThDRkYwNTEw
QTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RjE3
MjY0RjI0NzBDNjBCMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tGb3JtYXR0aW5nQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdD
b250ZXh0LmNwcAppbmRleCA5NmRmOGJhYjVmN2VlODdkMjAyN2YxMTc4MjA3MTBlNjAwNTAxNmE2
Li40ZjA2YjI5ZGM2NDhiMTcyM2QyNGM3M2Y5ODU2NWI3ODQwOTNlNjljIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0
dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAK
ICNpbmNsdWRlICJMYXlvdXRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTGF5b3V0Q29udGV4
dC5oIgogI2luY2x1ZGUgIkxheW91dEluaXRpYWxDb250YWluaW5nQmxvY2suaCIKKyNpbmNsdWRl
ICJUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1F1
aXJrcy5oIgogI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KQEAgLTUxNSw2ICs1MTYsMTEgQEAgdm9pZCBUYWJsZUZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQW5kRGlzdHJpYnV0ZUV4dHJhU3BhY2UoTGF5b3V0VW5pdCBh
dmFpbGFibGUKICAgICB9CiB9CiAKK1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5IFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6Omdlb21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gVGFibGVGb3JtYXR0
aW5nR2VvbWV0cnkoKnRoaXMsIGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpKTsKK30KKwog
VGFibGVGb3JtYXR0aW5nUXVpcmtzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnF1aXJrcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIFRhYmxlRm9ybWF0dGluZ1F1aXJrcygqdGhpcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxl
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5nQ29u
dGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDhmZmZlM2M0ZGM4NDU5
NjMzM2Q3YjJiZTIwZjY4OTg1MGMyM2VmNmMuLjljZTI5NDEzMTcyZjVlNWM3MThhYzk2YjdhYWRm
ZWRkY2JhYzZlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3JtYXR0aW5n
Q29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4
dC5oCkBAIC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlv
dXQgewogCiBjbGFzcyBJbnZhbGlkYXRpb25TdGF0ZTsKK2NsYXNzIFRhYmxlRm9ybWF0dGluZ0dl
b21ldHJ5OwogY2xhc3MgVGFibGVGb3JtYXR0aW5nUXVpcmtzOwogCiAvLyBUaGlzIGNsYXNzIGlt
cGxlbWVudHMgdGhlIGxheW91dCBsb2dpYyBmb3IgdGFibGUgZm9ybWF0dGluZyBjb250ZXh0cy4K
QEAgLTUwLDIyICs1MSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBVbmlxdWVSZWY8VGFibGVH
cmlkPiBlbnN1cmVUYWJsZUdyaWQoY29uc3QgQ29udGFpbmVyQm94JiB0YWJsZUJveCk7CiAKLSAg
ICBjbGFzcyBHZW9tZXRyeSA6IHB1YmxpYyBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgTGF5b3V0VW5pdCBjZWxsSGVpZ2goY29uc3QgQ29udGFpbmVy
Qm94JikgY29uc3Q7Ci0gICAgICAgIEVkZ2VzIGNvbXB1dGVkQ2VsbEJvcmRlcihjb25zdCBUYWJs
ZUdyaWQ6OkNlbGwmKSBjb25zdDsKLSAgICAgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0
ZWRDb2x1bW5XaWR0aChjb25zdCBDb250YWluZXJCb3gmIGNvbHVtbkJveCk7Ci0gICAgICAgIEZv
cm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGludHJpbnNpY1dpZHRo
Q29uc3RyYWludHNGb3JDZWxsKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYpOwotICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHVzZWRCYXNlbGluZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxs
Qm94KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBUYWJsZUZvcm1hdHRp
bmdDb250ZXh0OwotICAgICAgICBHZW9tZXRyeShjb25zdCBUYWJsZUZvcm1hdHRpbmdDb250ZXh0
JiwgY29uc3QgVGFibGVHcmlkJik7Ci0KLSAgICAgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29u
dGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZv
cm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdD
b250ZXh0KCkpOyB9Ci0gICAgICAgIGNvbnN0IFRhYmxlR3JpZCYgbV9ncmlkOwotICAgIH07Ci0g
ICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdCB7IHJl
dHVybiBHZW9tZXRyeSgqdGhpcywgZm9ybWF0dGluZ1N0YXRlKCkudGFibGVHcmlkKCkpOyB9Cisg
ICAgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkgZ2VvbWV0cnkoKSBjb25zdDsKKyAgICBUYWJsZUZv
cm1hdHRpbmdRdWlya3MgcXVpcmtzKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgY2xhc3MgVGFi
bGVMYXlvdXQgewpAQCAtODMsOCArNzAsNiBAQCBwcml2YXRlOgogICAgICAgICBjb25zdCBUYWJs
ZUdyaWQmIG1fZ3JpZDsKICAgICB9OwogCi0gICAgVGFibGVGb3JtYXR0aW5nUXVpcmtzIHF1aXJr
cygpIGNvbnN0OwotCiAgICAgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6VGFibGVMYXlvdXQgdGFi
bGVMYXlvdXQoKSBjb25zdCB7IHJldHVybiBUYWJsZUxheW91dCgqdGhpcywgZm9ybWF0dGluZ1N0
YXRlKCkudGFibGVHcmlkKCkpOyB9CiAKICAgICBJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIGNv
bXB1dGVkSW50cmluc2ljV2lkdGhDb25zdHJhaW50cygpIG92ZXJyaWRlOwpAQCAtMTAwLDEyICs4
NSw2IEBAIHByaXZhdGU6CiAgICAgVGFibGVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0
ZSgpIHsgcmV0dXJuIGRvd25jYXN0PFRhYmxlRm9ybWF0dGluZ1N0YXRlPihGb3JtYXR0aW5nQ29u
dGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9CiB9OwogCi1pbmxpbmUgVGFibGVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Okdlb21ldHJ5KGNvbnN0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQm
IHRhYmxlRm9ybWF0dGluZ0NvbnRleHQsIGNvbnN0IFRhYmxlR3JpZCYgZ3JpZCkKLSAgICA6IEZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeSh0YWJsZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwg
bV9ncmlkKGdyaWQpCi17Ci19Ci0KIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJs
ZS9UYWJsZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBkNzMyMzkyNjk0ZjZlN2E4MjQyOWMyMGE1ZTYxMDk4NDBlMmFlZGM4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9mb3JtYXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dEdl
b21ldHJ5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRhYmxlRm9ybWF0dGluZ0NvbnRleHQuaCIK
LQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgiCi0jaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKLSNp
bmNsdWRlICJMYXlvdXRDb250ZXh0LmgiCi0jaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJh
dG9yLmgiCi0jaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgotI2luY2x1
ZGUgIlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVz
cGFjZSBMYXlvdXQgewotCi1MYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjpjZWxsSGVpZ2goY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KSBjb25zdAotewotICAg
IEFTU0VSVChjZWxsQm94LmlzSW5GbG93KCkpOwotICAgIGF1dG8gY29udGVudEhlaWdodCA9IExh
eW91dFVuaXQgeyB9OwotICAgIGlmIChmb3JtYXR0aW5nQ29udGV4dCgpLnF1aXJrcygpLnNob3Vs
ZElnbm9yZUNoaWxkQ29udGVudFZlcnRpY2FsTWFyZ2luKGNlbGxCb3gpKSB7Ci0gICAgICAgIEFT
U0VSVChjZWxsQm94LmZpcnN0SW5GbG93Q2hpbGQoKSk7Ci0gICAgICAgIGF1dG8gZm9ybWF0dGlu
Z0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgICAgICBhdXRvJiBmaXJz
dEluRmxvd0NoaWxkID0gKmNlbGxCb3guZmlyc3RJbkZsb3dDaGlsZCgpOwotICAgICAgICBhdXRv
JiBsYXN0SW5GbG93Q2hpbGQgPSAqY2VsbEJveC5sYXN0SW5GbG93Q2hpbGQoKTsKLSAgICAgICAg
YXV0byYgZmlyc3RJbkZsb3dDaGlsZEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0
cnlGb3JCb3goZmlyc3RJbkZsb3dDaGlsZCwgRXNjYXBlUmVhc29uOjpUYWJsZVF1aXJrTmVlZHNH
ZW9tZXRyeUZyb21Fc3RhYmxpc2hlZEZvcm1hdHRpbmdDb250ZXh0KTsKLSAgICAgICAgYXV0byYg
bGFzdEluRmxvd0NoaWxkR2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJv
eChsYXN0SW5GbG93Q2hpbGQsIEVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05lZWRzR2VvbWV0cnlG
cm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7Ci0KLSAgICAgICAgYXV0byB0b3AgPSBm
aXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmsoKSA/IEJveEdlb21l
dHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRyeSkudG9wKCkgOiBCb3hH
ZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0cnkpLnRvcCgpOwot
ICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHlsZSgpLmhhc01hcmdpbkFm
dGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJbkZsb3dDaGlsZEdl
b21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0KGxhc3RJbkZsb3dD
aGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKLSAgICAgICAgY29udGVudEhlaWdodCA9IGJvdHRvbSAt
IHRvcDsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHRG
b3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KGNv
bXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRlbnRIZWlnaHQpOwotfQot
Ci1FZGdlcyBUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRDZWxsQm9y
ZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKLXsKLSAgICBhdXRvJiBjZWxs
Qm94ID0gY2VsbC5ib3goKTsKLSAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVyKGNlbGxC
b3gpOwotICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJvcmRlcigp
OwotICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQotICAgICAgICByZXR1cm4gYm9yZGVyOwotCi0g
ICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVycyBvbiB0
aGUgZ3JpZC4KLSAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsKLSAgICAv
LyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMuCi0g
ICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5s
ZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOwotICAgIGVsc2Ugewot
ICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlcihtX2dyaWQu
c2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0pLT5jZWxs
KCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7Ci0gICAgICAgIGJvcmRlci5ob3Jpem9udGFsLmxl
ZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRlclJpZ2h0
KSAvIDI7Ci0gICAgfQotICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0YWJsZSBh
bmQgYWRqYWNlbnQgY2VsbHMuCi0gICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0gbV9ncmlk
LmNvbHVtbnMoKS5zaXplKCkgLSAxKQotICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdodCA9
IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNsb3Qo
eyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgpLmJv
eCgpKS5ob3Jpem9udGFsLmxlZnQ7Ci0gICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0ID0g
c3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVmdCkgLyAy
OwotICAgIH0KLSAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCByb3cgYW5k
IGFkamFjZW50IGNlbGxzLgotICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxpc3QoKTsK
LSAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCi0gICAgICAgIGJvcmRlci52ZXJ0aWNhbC50b3Ag
PSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQuc2xvdCh7
IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxsKCkuYm94
KCkpLnZlcnRpY2FsLmJvdHRvbTsKLSAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRvbSA9IGNv
bXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0aWNhbC5i
b3R0b207Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1heChh
ZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOwotICAgICAgICBib3JkZXIu
dmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNlbnRDb2xs
YXBzZWRCb3JkZXIpIC8gMjsKLSAgICB9Ci0gICAgLy8gQ29sbGFwc2VkIGJvcmRlciBib3R0b20g
ZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KLSAgICBpZiAoY2VsbFBvc2l0aW9u
LnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCi0gICAgICAgIGJvcmRlci52ZXJ0aWNh
bC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRlcihtX2dy
aWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAxIH0pLT5j
ZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKLSAgICAgICAgYXV0byBhZGphY2VudFJvd1RvcCA9
IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52ZXJ0aWNh
bC50b3A7Ci0gICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1heChh
ZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOwotICAgICAgICBib3JkZXIudmVydGlj
YWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNlbnRDb2xs
YXBzZWRCb3JkZXIpIC8gMjsKLSAgICB9Ci0gICAgcmV0dXJuIGJvcmRlcjsKLX0KLQotT3B0aW9u
YWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVk
Q29sdW1uV2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCi17Ci0gICAgLy8gQ2hl
Y2sgYm90aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCi0gICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wg
c3R5bGU9IndpZHRoOiAxMCUiPi4KLSAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBj
b21wdXRlZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lk
dGhWYWx1ZTsKLSAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Ci19Ci0KLUZvcm1h
dHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChjb25zdCBU
YWJsZUdyaWQ6OkNlbGwmIGNlbGwpCi17Ci0gICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7
Ci0gICAgYXV0byYgc3R5bGUgPSBjZWxsQm94LnN0eWxlKCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVk
SW50cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IFsmXSgpIC0+IEZvcm1hdHRpbmdDb250ZXh0OjpJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsKLSAgICAgICAgLy8gRXZlbiBmaXhlZCB3aWR0aCBj
ZWxscyBleHBhbmQgdG8gdGhlaXIgbWluaW11bSBjb250ZW50IHdpZHRoCi0gICAgICAgIC8vIDx0
ZCBzdHlsZT0id2lkdGg6IDEwcHgiPnRlc3RfY29udGVudDwvdGQ+IHdpbGwgc2l6ZSB0byBtYXgo
bWluaW11bSBjb250ZW50IHdpZHRoLCBjb21wdXRlZCB3aWR0aCkuCi0gICAgICAgIGF1dG8gaW50
cmluc2ljV2lkdGhDb25zdHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzIHsgfTsKLSAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKLSAgICAg
ICAgICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVG
b3JtYXR0aW5nQ29udGV4dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5z
aWNXaWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhl
ZFZhbHVlKHN0eWxlLmxvZ2ljYWxXaWR0aCgpKSkKLSAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6
bWF4KGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6
Om1heChpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9Owot
ICAgICAgICByZXR1cm4gaW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKLSAgICB9OwotICAgIC8v
IEZJWE1FIENoZWNrIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGF1dG8gaW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29t
cHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCkpOwotICAgIC8vIEV4cGFuZCB3aXRoIGJv
cmRlcgotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJv
cmRlcihjZWxsKS53aWR0aCgpKTsKLSAgICAvLyBwYWRkaW5nCi0gICAgaW50cmluc2ljV2lkdGhD
b25zdHJhaW50cy5leHBhbmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9y
KDApICsgZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7Ci0gICAg
Ly8gYW5kIG1hcmdpbgotICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVk
VmFsdWUoc3R5bGUubWFyZ2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUu
bWFyZ2luRW5kKCkpLnZhbHVlT3IoMCkpOwotICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0
cmFpbnRzOwotfQotCi0KLUlubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OnVzZWRCYXNlbGluZUZvckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94
KQotewotICAgIC8vIFRoZSBiYXNlbGluZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFz
ZWxpbmUgb2YgdGhlIGZpcnN0IGluLWZsb3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCi0gICAgLy8g
b3IgdGhlIGZpcnN0IGluLWZsb3cgdGFibGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29t
ZXMgZmlyc3QuCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2Vs
aW5lIGlzIHRoZSBib3R0b20gb2YgY29udGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KLSAgICBp
ZiAoY2VsbEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCi0gICAgICAg
IHJldHVybiBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNl
bGxCb3gpLmxpbmVzKClbMF0uYmFzZWxpbmUoKTsKLSAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5k
YW50IDogZGVzY2VuZGFudHNPZlR5cGU8Q29udGFpbmVyQm94PihjZWxsQm94KSkgewotICAgICAg
ICBpZiAoY2VsbERlc2NlbmRhbnQuZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5
b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFu
dCk7Ci0gICAgICAgICAgICBpZiAoIWlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMo
KS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0
ZUZvckNlbGwubGluZXMoKVswXS5iYXNlbGluZSgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChj
ZWxsRGVzY2VuZGFudC5lc3RhYmxpc2hlc1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3Rh
dGUoY2VsbERlc2NlbmRhbnQpLnRhYmxlR3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
Y2VsbEJveCkuY29udGVudEJveEJvdHRvbSgpOwotfQotCi19Ci19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJs
ZUZvcm1hdHRpbmdHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YzI5OWQxN2JlOTk1ZTU1YWY2YWIxY2FlM2E5OTNjNzU3NDkyOWVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdHZW9tZXRyeS5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGFibGVGb3JtYXR0aW5nR2VvbWV0cnkuaCIKKwor
I2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5l
Rm9ybWF0dGluZ1N0YXRlLmgiCisjaW5jbHVkZSAiTGF5b3V0Qm94R2VvbWV0cnkuaCIKKyNpbmNs
dWRlICJMYXlvdXRDb250ZXh0LmgiCisjaW5jbHVkZSAiTGF5b3V0RGVzY2VuZGFudEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiTGF5b3V0SW5pdGlhbENvbnRhaW5pbmdCbG9jay5oIgorI2luY2x1ZGUg
IlRhYmxlRm9ybWF0dGluZ1N0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFj
ZSBMYXlvdXQgeworCitUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6VGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgdGFibGVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgVGFibGVHcmlkJiBncmlkKQorICAgIDogRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5KHRhYmxlRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2dyaWQoZ3JpZCkKK3sKK30KKwor
TGF5b3V0VW5pdCBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y2VsbEhlaWdoKGNvbnN0IENvbnRh
aW5lckJveCYgY2VsbEJveCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY2VsbEJveC5pc0luRmxvdygp
KTsKKyAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBMYXlvdXRVbml0IHsgfTsKKyAgICBpZiAoZm9y
bWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5zaG91bGRJZ25vcmVDaGlsZENvbnRlbnRWZXJ0aWNh
bE1hcmdpbihjZWxsQm94KSkgeworICAgICAgICBBU1NFUlQoY2VsbEJveC5maXJzdEluRmxvd0No
aWxkKCkpOworICAgICAgICBhdXRvIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGlu
Z0NvbnRleHQoKTsKKyAgICAgICAgYXV0byYgZmlyc3RJbkZsb3dDaGlsZCA9ICpjZWxsQm94LmZp
cnN0SW5GbG93Q2hpbGQoKTsKKyAgICAgICAgYXV0byYgbGFzdEluRmxvd0NoaWxkID0gKmNlbGxC
b3gubGFzdEluRmxvd0NoaWxkKCk7CisgICAgICAgIGF1dG8mIGZpcnN0SW5GbG93Q2hpbGRHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGZpcnN0SW5GbG93Q2hpbGQs
IEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVSZWFzb246OlRhYmxlUXVpcmtOZWVkc0dlb21ldHJ5
RnJvbUVzdGFibGlzaGVkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBhdXRvJiBsYXN0SW5G
bG93Q2hpbGRHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxhc3RJ
bkZsb3dDaGlsZCwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVJlYXNvbjo6VGFibGVRdWlya05l
ZWRzR2VvbWV0cnlGcm9tRXN0YWJsaXNoZWRGb3JtYXR0aW5nQ29udGV4dCk7CisKKyAgICAgICAg
YXV0byB0b3AgPSBmaXJzdEluRmxvd0NoaWxkLnN0eWxlKCkuaGFzTWFyZ2luQmVmb3JlUXVpcmso
KSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGZpcnN0SW5GbG93Q2hpbGRHZW9tZXRyeSku
dG9wKCkgOiBCb3hHZW9tZXRyeTo6bWFyZ2luQm94UmVjdChmaXJzdEluRmxvd0NoaWxkR2VvbWV0
cnkpLnRvcCgpOworICAgICAgICBhdXRvIGJvdHRvbSA9IGxhc3RJbkZsb3dDaGlsZC5zdHlsZSgp
Lmhhc01hcmdpbkFmdGVyUXVpcmsoKSA/IEJveEdlb21ldHJ5Ojpib3JkZXJCb3hSZWN0KGxhc3RJ
bkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKSA6IEJveEdlb21ldHJ5OjptYXJnaW5Cb3hSZWN0
KGxhc3RJbkZsb3dDaGlsZEdlb21ldHJ5KS5ib3R0b20oKTsKKyAgICAgICAgY29udGVudEhlaWdo
dCA9IGJvdHRvbSAtIHRvcDsKKyAgICB9IGVsc2UKKyAgICAgICAgY29udGVudEhlaWdodCA9IGNv
bnRlbnRIZWlnaHRGb3JGb3JtYXR0aW5nQ29udGV4dFJvb3QoY2VsbEJveCk7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KGNvbXB1dGVkSGVpZ2h0KGNlbGxCb3gpLnZhbHVlT3IoMF9sdSksIGNvbnRlbnRI
ZWlnaHQpOworfQorCitFZGdlcyBUYWJsZUZvcm1hdHRpbmdHZW9tZXRyeTo6Y29tcHV0ZWRDZWxs
Qm9yZGVyKGNvbnN0IFRhYmxlR3JpZDo6Q2VsbCYgY2VsbCkgY29uc3QKK3sKKyAgICBhdXRvJiBj
ZWxsQm94ID0gY2VsbC5ib3goKTsKKyAgICBhdXRvIGJvcmRlciA9IGNvbXB1dGVkQm9yZGVyKGNl
bGxCb3gpOworICAgIGF1dG8gY29sbGFwc2VkQm9yZGVyID0gbV9ncmlkLmNvbGxhcHNlZEJvcmRl
cigpOworICAgIGlmICghY29sbGFwc2VkQm9yZGVyKQorICAgICAgICByZXR1cm4gYm9yZGVyOwor
CisgICAgLy8gV2UgbWlnaHQgd2FudCB0byBjYWNoZSB0aGVzZSBjb2xsYXBzZWQgYm9yZGVycyBv
biB0aGUgZ3JpZC4KKyAgICBhdXRvIGNlbGxQb3NpdGlvbiA9IGNlbGwucG9zaXRpb24oKTsKKyAg
ICAvLyBDb2xsYXBzZWQgYm9yZGVyIGxlZnQgZnJvbSB0YWJsZSBhbmQgYWRqYWNlbnQgY2VsbHMu
CisgICAgaWYgKCFjZWxsUG9zaXRpb24uY29sdW1uKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRh
bC5sZWZ0ID0gY29sbGFwc2VkQm9yZGVyLT5ob3Jpem9udGFsLmxlZnQgLyAyOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIGFkamFjZW50Qm9yZGVyUmlnaHQgPSBjb21wdXRlZEJvcmRlcihtX2dy
aWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4gLSAxLCBjZWxsUG9zaXRpb24ucm93IH0pLT5j
ZWxsKCkuYm94KCkpLmhvcml6b250YWwucmlnaHQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFs
LmxlZnQgPSBzdGQ6Om1heChib3JkZXIuaG9yaXpvbnRhbC5sZWZ0LCBhZGphY2VudEJvcmRlclJp
Z2h0KSAvIDI7CisgICAgfQorICAgIC8vIENvbGxhcHNlZCBib3JkZXIgcmlnaHQgZnJvbSB0YWJs
ZSBhbmQgYWRqYWNlbnQgY2VsbHMuCisgICAgaWYgKGNlbGxQb3NpdGlvbi5jb2x1bW4gPT0gbV9n
cmlkLmNvbHVtbnMoKS5zaXplKCkgLSAxKQorICAgICAgICBib3JkZXIuaG9yaXpvbnRhbC5yaWdo
dCA9IGNvbGxhcHNlZEJvcmRlci0+aG9yaXpvbnRhbC5yaWdodCAvIDI7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJMZWZ0ID0gY29tcHV0ZWRCb3JkZXIobV9ncmlkLnNs
b3QoeyBjZWxsUG9zaXRpb24uY29sdW1uICsgMSwgY2VsbFBvc2l0aW9uLnJvdyB9KS0+Y2VsbCgp
LmJveCgpKS5ob3Jpem9udGFsLmxlZnQ7CisgICAgICAgIGJvcmRlci5ob3Jpem9udGFsLnJpZ2h0
ID0gc3RkOjptYXgoYm9yZGVyLmhvcml6b250YWwucmlnaHQsIGFkamFjZW50Qm9yZGVyTGVmdCkg
LyAyOworICAgIH0KKyAgICAvLyBDb2xsYXBzZWQgYm9yZGVyIHRvcCBmcm9tIHRhYmxlLCByb3cg
YW5kIGFkamFjZW50IGNlbGxzLgorICAgIGF1dG8mIHJvd3MgPSBtX2dyaWQucm93cygpLmxpc3Qo
KTsKKyAgICBpZiAoIWNlbGxQb3NpdGlvbi5yb3cpCisgICAgICAgIGJvcmRlci52ZXJ0aWNhbC50
b3AgPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLnRvcCAvIDI7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJCb3R0b20gPSBjb21wdXRlZEJvcmRlcihtX2dyaWQuc2xv
dCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgLSAxIH0pLT5jZWxsKCku
Ym94KCkpLnZlcnRpY2FsLmJvdHRvbTsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd0JvdHRvbSA9
IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyAtIDFdLmJveCgpKS52ZXJ0aWNh
bC5ib3R0b207CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1h
eChhZGphY2VudEJvcmRlckJvdHRvbSwgYWRqYWNlbnRSb3dCb3R0b20pOworICAgICAgICBib3Jk
ZXIudmVydGljYWwudG9wID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLnRvcCwgYWRqYWNlbnRD
b2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgLy8gQ29sbGFwc2VkIGJvcmRlciBib3R0
b20gZnJvbSB0YWJsZSwgcm93IGFuZCBhZGphY2VudCBjZWxscy4KKyAgICBpZiAoY2VsbFBvc2l0
aW9uLnJvdyA9PSBtX2dyaWQucm93cygpLnNpemUoKSAtIDEpCisgICAgICAgIGJvcmRlci52ZXJ0
aWNhbC5ib3R0b20gPSBjb2xsYXBzZWRCb3JkZXItPnZlcnRpY2FsLmJvdHRvbSAvIDI7CisgICAg
ZWxzZSB7CisgICAgICAgIGF1dG8gYWRqYWNlbnRCb3JkZXJUb3AgPSBjb21wdXRlZEJvcmRlciht
X2dyaWQuc2xvdCh7IGNlbGxQb3NpdGlvbi5jb2x1bW4sIGNlbGxQb3NpdGlvbi5yb3cgKyAxIH0p
LT5jZWxsKCkuYm94KCkpLnZlcnRpY2FsLnRvcDsKKyAgICAgICAgYXV0byBhZGphY2VudFJvd1Rv
cCA9IGNvbXB1dGVkQm9yZGVyKHJvd3NbY2VsbFBvc2l0aW9uLnJvdyArIDFdLmJveCgpKS52ZXJ0
aWNhbC50b3A7CisgICAgICAgIGF1dG8gYWRqYWNlbnRDb2xsYXBzZWRCb3JkZXIgPSBzdGQ6Om1h
eChhZGphY2VudEJvcmRlclRvcCwgYWRqYWNlbnRSb3dUb3ApOworICAgICAgICBib3JkZXIudmVy
dGljYWwuYm90dG9tID0gc3RkOjptYXgoYm9yZGVyLnZlcnRpY2FsLmJvdHRvbSwgYWRqYWNlbnRD
b2xsYXBzZWRCb3JkZXIpIC8gMjsKKyAgICB9CisgICAgcmV0dXJuIGJvcmRlcjsKK30KKworT3B0
aW9uYWw8TGF5b3V0VW5pdD4gVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OmNvbXB1dGVkQ29sdW1u
V2lkdGgoY29uc3QgQ29udGFpbmVyQm94JiBjb2x1bW5Cb3gpCit7CisgICAgLy8gQ2hlY2sgYm90
aCBzdHlsZSBhbmQgPGNvbD4ncyB3aWR0aCBhdHRyaWJ1dGUuCisgICAgLy8gRklYTUU6IEZpZ3Vy
ZSBvdXQgd2hhdCB0byBkbyB3aXRoIGNhbGN1bGF0ZWQgdmFsdWVzLCBsaWtlIDxjb2wgc3R5bGU9
IndpZHRoOiAxMCUiPi4KKyAgICBpZiAoYXV0byBjb21wdXRlZFdpZHRoVmFsdWUgPSBjb21wdXRl
ZFdpZHRoKGNvbHVtbkJveCwgeyB9KSkKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVkV2lkdGhWYWx1
ZTsKKyAgICByZXR1cm4gY29sdW1uQm94LmNvbHVtbldpZHRoKCk7Cit9CisKK0Zvcm1hdHRpbmdD
b250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIFRhYmxlRm9ybWF0dGluZ0dlb21ldHJ5
OjppbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbChjb25zdCBUYWJsZUdyaWQ6OkNlbGwm
IGNlbGwpCit7CisgICAgYXV0byYgY2VsbEJveCA9IGNlbGwuYm94KCk7CisgICAgYXV0byYgc3R5
bGUgPSBjZWxsQm94LnN0eWxlKCk7CisKKyAgICBhdXRvIGNvbXB1dGVkSW50cmluc2ljV2lkdGhD
b25zdHJhaW50cyA9IFsmXSgpIC0+IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENv
bnN0cmFpbnRzIHsKKyAgICAgICAgLy8gRXZlbiBmaXhlZCB3aWR0aCBjZWxscyBleHBhbmQgdG8g
dGhlaXIgbWluaW11bSBjb250ZW50IHdpZHRoCisgICAgICAgIC8vIDx0ZCBzdHlsZT0id2lkdGg6
IDEwcHgiPnRlc3RfY29udGVudDwvdGQ+IHdpbGwgc2l6ZSB0byBtYXgobWluaW11bSBjb250ZW50
IHdpZHRoLCBjb21wdXRlZCB3aWR0aCkuCisgICAgICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyA9IEZvcm1hdHRpbmdDb250ZXh0OjpJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzIHsg
fTsKKyAgICAgICAgaWYgKGNlbGxCb3guaGFzQ2hpbGQoKSkKKyAgICAgICAgICAgIGludHJpbnNp
Y1dpZHRoQ29uc3RyYWludHMgPSBMYXlvdXRDb250ZXh0OjpjcmVhdGVGb3JtYXR0aW5nQ29udGV4
dChjZWxsQm94LCBsYXlvdXRTdGF0ZSgpKS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFp
bnRzKCk7CisgICAgICAgIGlmIChhdXRvIGZpeGVkV2lkdGggPSBmaXhlZFZhbHVlKHN0eWxlLmxv
Z2ljYWxXaWR0aCgpKSkKKyAgICAgICAgICAgIHJldHVybiB7IHN0ZDo6bWF4KGludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMubWluaW11bSwgKmZpeGVkV2lkdGgpLCBzdGQ6Om1heChpbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sICpmaXhlZFdpZHRoKSB9OworICAgICAgICByZXR1cm4g
aW50cmluc2ljV2lkdGhDb25zdHJhaW50czsKKyAgICB9OworICAgIC8vIEZJWE1FIENoZWNrIGZv
ciBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGF1dG8gaW50cmluc2ljV2lkdGhDb25zdHJh
aW50cyA9IGNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoY2VsbEJveCwgY29tcHV0ZWRJbnRyaW5zaWNX
aWR0aENvbnN0cmFpbnRzKCkpOworICAgIC8vIEV4cGFuZCB3aXRoIGJvcmRlcgorICAgIGludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGNvbXB1dGVkQ2VsbEJvcmRlcihjZWxsKS53aWR0
aCgpKTsKKyAgICAvLyBwYWRkaW5nCisgICAgaW50cmluc2ljV2lkdGhDb25zdHJhaW50cy5leHBh
bmQoZml4ZWRWYWx1ZShzdHlsZS5wYWRkaW5nTGVmdCgpKS52YWx1ZU9yKDApICsgZml4ZWRWYWx1
ZShzdHlsZS5wYWRkaW5nUmlnaHQoKSkudmFsdWVPcigwKSk7CisgICAgLy8gYW5kIG1hcmdpbgor
ICAgIGludHJpbnNpY1dpZHRoQ29uc3RyYWludHMuZXhwYW5kKGZpeGVkVmFsdWUoc3R5bGUubWFy
Z2luU3RhcnQoKSkudmFsdWVPcigwKSArIGZpeGVkVmFsdWUoc3R5bGUubWFyZ2luRW5kKCkpLnZh
bHVlT3IoMCkpOworICAgIHJldHVybiBpbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzOworfQorCisK
K0lubGluZUxheW91dFVuaXQgVGFibGVGb3JtYXR0aW5nR2VvbWV0cnk6OnVzZWRCYXNlbGluZUZv
ckNlbGwoY29uc3QgQ29udGFpbmVyQm94JiBjZWxsQm94KQoreworICAgIC8vIFRoZSBiYXNlbGlu
ZSBvZiBhIGNlbGwgaXMgZGVmaW5lZCBhcyB0aGUgYmFzZWxpbmUgb2YgdGhlIGZpcnN0IGluLWZs
b3cgbGluZSBib3ggaW4gdGhlIGNlbGwsCisgICAgLy8gb3IgdGhlIGZpcnN0IGluLWZsb3cgdGFi
bGUtcm93IGluIHRoZSBjZWxsLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QuCisgICAgLy8gSWYgdGhl
cmUgaXMgbm8gc3VjaCBsaW5lIGJveCwgdGhlIGJhc2VsaW5lIGlzIHRoZSBib3R0b20gb2YgY29u
dGVudCBlZGdlIG9mIHRoZSBjZWxsIGJveC4KKyAgICBpZiAoY2VsbEJveC5lc3RhYmxpc2hlc0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBsYXlvdXRTdGF0ZSgpLmVz
dGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGNlbGxCb3gpLmxpbmVzKClbMF0uYmFzZWxp
bmUoKTsKKyAgICBmb3IgKGF1dG8mIGNlbGxEZXNjZW5kYW50IDogZGVzY2VuZGFudHNPZlR5cGU8
Q29udGFpbmVyQm94PihjZWxsQm94KSkgeworICAgICAgICBpZiAoY2VsbERlc2NlbmRhbnQuZXN0
YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICBhdXRvJiBp
bmxpbmVGb3JtYXR0aW5nU3RhdGVGb3JDZWxsID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElu
bGluZUZvcm1hdHRpbmdTdGF0ZShjZWxsRGVzY2VuZGFudCk7CisgICAgICAgICAgICBpZiAoIWlu
bGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlubGluZUZvcm1hdHRpbmdTdGF0ZUZvckNlbGwubGluZXMoKVswXS5iYXNl
bGluZSgpOworICAgICAgICB9CisgICAgICAgIGlmIChjZWxsRGVzY2VuZGFudC5lc3RhYmxpc2hl
c1RhYmxlRm9ybWF0dGluZ0NvbnRleHQoKSkKKyAgICAgICAgICAgIHJldHVybiBsYXlvdXRTdGF0
ZSgpLmVzdGFibGlzaGVkVGFibGVGb3JtYXR0aW5nU3RhdGUoY2VsbERlc2NlbmRhbnQpLnRhYmxl
R3JpZCgpLnJvd3MoKS5saXN0KClbMF0uYmFzZWxpbmUoKTsKKyAgICB9CisgICAgcmV0dXJuIGZv
cm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY2VsbEJveCkuY29udGVudEJveEJvdHRv
bSgpOworfQorCit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1hdHRpbmdHZW9tZXRyeS5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZvcm1h
dHRpbmdHZW9tZXRyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YjE5NmU5MmMyMDk1ZmZlYTFkMWY2Y2UyYzEy
NzVlOWY3NGQzZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0dlb21ldHJ5LmgKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJGb3JtYXR0aW5nQ29udGV4dC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgVGFibGVGb3Jt
YXR0aW5nR2VvbWV0cnkgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKK3B1
YmxpYzoKKyAgICBMYXlvdXRVbml0IGNlbGxIZWlnaChjb25zdCBDb250YWluZXJCb3gmKSBjb25z
dDsKKyAgICBFZGdlcyBjb21wdXRlZENlbGxCb3JkZXIoY29uc3QgVGFibGVHcmlkOjpDZWxsJikg
Y29uc3Q7CisgICAgT3B0aW9uYWw8TGF5b3V0VW5pdD4gY29tcHV0ZWRDb2x1bW5XaWR0aChjb25z
dCBDb250YWluZXJCb3gmIGNvbHVtbkJveCk7CisgICAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMgaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGwoY29u
c3QgVGFibGVHcmlkOjpDZWxsJik7CisgICAgSW5saW5lTGF5b3V0VW5pdCB1c2VkQmFzZWxpbmVG
b3JDZWxsKGNvbnN0IENvbnRhaW5lckJveCYgY2VsbEJveCk7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgVGFibGVGb3JtYXR0aW5nR2Vv
bWV0cnkoY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IFRhYmxlR3JpZCYpOwor
CisgICAgY29uc3QgVGFibGVGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQoKSBj
b25zdCB7IHJldHVybiBkb3duY2FzdDxUYWJsZUZvcm1hdHRpbmdDb250ZXh0PihGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6OmZvcm1hdHRpbmdDb250ZXh0KCkpOyB9CisgICAgY29uc3QgVGFi
bGVHcmlkJiBtX2dyaWQ7Cit9OworCit9Cit9CisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>