<?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>268933</bug_id>
          
          <creation_ts>2024-02-07 11:47:30 -0800</creation_ts>
          <short_desc>REGRESSION(274159@main): Moving some functions back to base class in refactor</short_desc>
          <delta_ts>2024-02-12 17:14:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>268636</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>aestes</cc>
    
    <cc>destra</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2011475</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-07 11:47:30 -0800</bug_when>
    <thetext>https://commits.webkit.org/274159@main introduced a regression:
Moving some functions back to base class in refactor

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2011477</commentid>
    <comment_count>1</comment_count>
      <attachid>469761</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-07 11:47:35 -0800</bug_when>
    <thetext>Created attachment 469761
REVERT of 274159@main

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

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

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2012977</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-02-12 17:13:17 -0800</bug_when>
    <thetext>Committed 274508@main (b35c01bc0ad5): &lt;https://commits.webkit.org/274508@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 469761.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2012978</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-02-12 17:14:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/122840606&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469761</attachid>
            <date>2024-02-07 11:47:35 -0800</date>
            <delta_ts>2024-02-12 17:13:18 -0800</delta_ts>
            <desc>REVERT of 274159@main</desc>
            <filename>bug-268933-20240207194734.patch</filename>
            <type>text/plain</type>
            <size>158162</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSBiNzNjOThkOTBiM2UxOTQ5MmI3YTU1ZjQzMDlkZjA1YjVhYjdlYTk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBXZWQsIDcgRmViIDIwMjQgMTk6NDc6MzIgKzAwMDAKU3ViamVjdDogW1BBVENIXSBV
bnJldmlld2VkLCByZXZlcnRpbmcgMjc0MTU5QG1haW4uCiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjY4OTMzCgpNb3Zpbmcgc29tZSBmdW5jdGlvbnMgYmFjayB0byBi
YXNlIGNsYXNzIGluIHJlZmFjdG9yCgpSZXZlcnRlZCBjaGFuZ2VzZXQ6CgoiUmVmYWN0b3IgVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MiCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNjg2MzYKaHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvMjc0MTU5QG1haW4K
LS0tCiAuLi4vV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogfCAgIDE2
IC0KIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgICAgICB8ICAgIDIg
Ky0KIC4uLi9QbGF0Zm9ybVZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlLmggICAgICB8ICAgIDUg
Ky0KIC4uLi9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdC5oICAgICB8ICAxMDAg
LS0KIC4uLi9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdC5tbSAgICB8IDE0NzIg
LS0tLS0tLS0tLS0tLS0tLS0KIC4uLi9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1Mu
aCAgICAgICB8ICAxNjAgKy0KIC4uLi9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1Mu
bW0gICAgICB8IDE0NjMgKysrKysrKysrKysrKysrLQogLi4uL2lvcy9WaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUxNSy5oICAgICAgIHwgICA3OCAtCiAuLi4vaW9zL1ZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlTE1LLm1tICAgICAgfCAgMTg4IC0tLQogLi4uL2lvcy9XZWJWaWRlb0Z1bGxzY3Jl
ZW5Db250cm9sbGVyQVZLaXQubW0gIHwgICAgOCArLQogLi4uL0NvY29hL1ZpZGVvUHJlc2VudGF0
aW9uTWFuYWdlclByb3h5Lm1tICAgIHwgICAgMiArLQogLi4uL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIubW0gIHwgICAgMiArLQogLi4uL1dLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXJJT1MubW0gICAgICAgIHwgICAgMiArLQogMTMgZmlsZXMgY2hhbmdlZCwgMTU1MCBp
bnNlcnRpb25zKCspLCAxOTQ4IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0LmgK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9QcmVz
ZW50YXRpb25JbnRlcmZhY2VBVktpdC5tbQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSy5oCiBkZWxldGUg
bW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlTE1LLm1tCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDMyNjMwMWM3NjgzNS4uMmRhOGZkZjg3NWMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04
NDcsMTAgKzg0Nyw2IEBACiAJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJv
bGxlck1lbW9yeUhhbmRsZXJJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1l
bW9yeUhhbmRsZXJJT1MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxRjdBNzQ2OTJCNjg3NDMyMDA0MzU5QzQgLyogUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTE1LLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxRjdBNzQ2ODJCNjg3M0VCMDA0MzU5QzQgLyogUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTE1L
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUY3
QTc0NkIyQjY4NzQ5RDAwNDM1OUM0IC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUxNSy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGN0E3NDZBMkI2
ODc0OTQwMDQzNTlDNCAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VMTUsubW0gKi87IH07Ci0J
CTFGN0RERTcyMkI2QzY2QzYwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFW
S2l0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjdE
REU3MTJCNkM2NkI5MDAxODE2QTEgLyogVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFGN0RE
RTc0MkI2QzY2RUYwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY3RERFNzMy
QjZDNjZFNDAwMTgxNkExIC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQubW0gKi87
IH07Ci0JCTFGN0RERTc2MkI2QzY3MUQwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVy
ZmFjZUxNSy5oIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUY3RERFNzUyQjZDNjcxNDAwMTgxNkExIC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1L
LmggKi87IH07Ci0JCTFGN0RERTc4MkI2QzY3M0MwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUxNSy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFGN0RERTc3MkI2QzY3MzMwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVy
ZmFjZUxNSy5tbSAqLzsgfTsKIAkJMUY4NzU2QjIxRTIyQzMzNTAwNDJDNDBEIC8qIFdlYlNRTGl0
ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUY4NzU2QjExRTIyQkVFRjAwNDJDNDBEIC8qIFdlYlNRTGl0ZURhdGFi
YXNlVHJhY2tlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTFGOTVDMzREMkI2NDRCMDgwMDZGN0I5MyAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUY5NUMzNEMyQjY0NEFGNjAwNkY3QjkzIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUY5NUMzNEYyQjY0NEIyODAwNkY3QjkzIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY5
NUMzNEUyQjY0NEIxRTAwNkY3QjkzIC8qIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0Lm1t
ICovOyB9OwpAQCAtODg2MSwxMCArODg1Nyw2IEBACiAJCTFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNC
MyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGN0E3NDY4MkI2ODczRUIwMDQzNTlDNCAvKiBQbGF5YmFj
a1Nlc3Npb25JbnRlcmZhY2VMTUsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlTE1LLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGN0E3NDZBMkI2ODc0
OTQwMDQzNTlDNCAvKiBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VMTUsubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VMTUsubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTFGN0RERTcxMkI2QzY2QjkwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUFWS2l0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZGVvUHJlc2VudGF0aW9uSW50
ZXJmYWNlQVZLaXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUY3RERFNzMyQjZD
NjZFNDAwMTgxNkExIC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxRjdEREU3NTJCNkM2NzE0MDAxODE2QTEgLyogVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmlkZW9QcmVzZW50
YXRpb25JbnRlcmZhY2VMTUsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUY3RERF
NzcyQjZDNjczMzAwMTgxNkExIC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUsubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGODc1NkIwMUUyMkJFRUYwMDQyQzQwRCAvKiBX
ZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGODc1NkIxMUUyMkJFRUYwMDQyQzQwRCAvKiBXZWJT
UUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViU1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFGOTVDMzRDMkI2NDRBRjYwMDZGN0I5MyAvKiBQbGF5YmFja1Nlc3Npb25J
bnRlcmZhY2VBVktpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzAzNjUsMTIgKzMwMzU3LDgg
QEAKIAkJCQlGNEM4MENDNTJBQkE0M0VCMDBERUI4MjAgLyogVUlWaWV3Q29udHJvbGxlclV0aWxp
dGllcy5tbSAqLywKIAkJCQlBM0FGOUQ4MzIwMzI1NjkxMDA2Q0FEMDYgLyogVXNlckFnZW50SU9T
Lm1tICovLAogCQkJCTgzN0I3RDFGMURDM0Y1NEMwMEQwNTFGQyAvKiBWYWxpZGF0aW9uQnViYmxl
SU9TLm1tICovLAotCQkJCTFGN0RERTcxMkI2QzY2QjkwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUFWS2l0LmggKi8sCi0JCQkJMUY3RERFNzMyQjZDNjZFNDAwMTgxNkExIC8q
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQubW0gKi8sCiAJCQkJM0ZCQzRBRjIxODk4
ODE1NjAwNDZFRTM4IC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TLmggKi8sCiAJCQkJ
M0ZCQzRBRjExODk4ODE1NjAwNDZFRTM4IC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9T
Lm1tICovLAotCQkJCTFGN0RERTc1MkI2QzY3MTQwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUxNSy5oICovLAotCQkJCTFGN0RERTc3MkI2QzY3MzMwMDE4MTZBMSAvKiBWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSy5tbSAqLywKIAkJCQlDREEyOUEyQzFDQkY3M0ZDMDA5
MDFDQ0YgLyogV2ViQVZQbGF5ZXJDb250cm9sbGVyLmggKi8sCiAJCQkJQ0RBMjlBMkQxQ0JGNzNG
QzAwOTAxQ0NGIC8qIFdlYkFWUGxheWVyQ29udHJvbGxlci5tbSAqLywKIAkJCQkxRjM2RUE5QTFF
MjFCQTE3MDA2MjFFMjUgLyogV2ViQmFja2dyb3VuZFRhc2tDb250cm9sbGVyLmggKi8sCkBAIC00
MjY4Niw3ICs0MjY3NCw2IEBACiAJCQkJNDE1ODcwN0UyOEVDNzlBOTAwQzE2M0M1IC8qIFZpZGVv
UGl4ZWxGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNERTgzREIyMTgzQzQ0MDYwMDMxRUFB
MyAvKiBWaWRlb1BsYXliYWNrUXVhbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc1MDMzQTgy
NTJCRDM2ODAwRjcwQ0UzIC8qIFZpZGVvUGxheWJhY2tRdWFsaXR5TWV0cmljcy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMUY3RERFNzIyQjZDNjZDNjAwMTgxNkExIC8qIFZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlQVZLaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTNGQkM0QUY0MTg5ODgxNTYwMDQ2
RUUzOCAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTJCMEQ0QzIxQzU3RkY5MTAwNzdDRTUzIC8qIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkQ1QTFBNzFDNTc0ODlEMDBERTM0QTMgLyogVmlk
ZW9QcmVzZW50YXRpb25Nb2RlbC5oIGluIEhlYWRlcnMgKi8sCkBAIC00NDQxMCwxMCArNDQzOTcs
NyBAQAogCQkJCTdDNzNGQjA3MTkxRUY0MTcwMDdERTA2MSAvKiBVc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMDA1MTE2MjlEQjkyRDMwMEUxQzNB
NCAvKiBWaWRlb0Z1bGxzY3JlZW5DYXB0aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTQxRkZE
MkM0Mjc1NjU3MEYwMDUwMUJCRiAvKiBWaWRlb0xheWVyTWFuYWdlck9iakMubW0gaW4gU291cmNl
cyAqLywKLQkJCQkxRjdEREU3NDJCNkM2NkVGMDAxODE2QTEgLyogVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VBVktpdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTNGQkM0QUYzMTg5ODgxNTYwMDQ2
RUUzOCAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTFGN0RERTc2MkI2QzY3MUQwMDE4MTZBMSAvKiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFj
ZUxNSy5oIGluIFNvdXJjZXMgKi8sCi0JCQkJMUY3RERFNzgyQjZDNjczQzAwMTgxNkExIC8qIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMjZGOUE4
MzgxOEEwNDZBQzAwQUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDREVEMUMzQzI0Q0QzMDU3MDA5MzRFMTIgLyogVlA5VXRpbGl0aWVzQ29jb2Eu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTQ4MzJCMTE4N0Y2MUUxMDBEQTYzQTYgLyogV0FLQXBw
S2l0U3R1YnMubSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggYWMzMjVkZTMwMDA3Li41ZTg3ZTE3MTkzNjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMTU0LDcgKzE1NCw3IEBACiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogI2luY2x1ZGUgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5o
IgotI2luY2x1ZGUgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQuaCIKKyNpbmNsdWRl
ICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUy5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUo
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1WaWRlb1ByZXNlbnRhdGlvbklu
dGVyZmFjZS5oCmluZGV4IDZkM2M4NjMxNGQwOS4uMzg0OTgzY2ZmY2RlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZS5oCkBAIC0yOCwxNCArMjgsMTMgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTnVsbFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlOwot
Y2xhc3MgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDsKLWNsYXNzIFZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlTE1LOworY2xhc3MgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M7
CiBjbGFzcyBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZU1hYzsKIAogI2lmIFBMQVRGT1JNKFdB
VENIT1MpCiB1c2luZyBQbGF0Zm9ybVZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlID0gTnVsbFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlOwogI2VsaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXVz
aW5nIFBsYXRmb3JtVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2UgPSBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUFWS2l0OwordXNpbmcgUGxhdGZvcm1WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFj
ZSA9IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOwogI2VsaWYgUExBVEZPUk0oTUFDKQog
dXNpbmcgUGxhdGZvcm1WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZSA9IFZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlTWFjOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkOTViMGZlZTY3Li4wMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZL
aXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDI0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiBIQVZFKEFWS0lUKQotCi0jaW5jbHVkZSAiVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VJT1MuaCIKLQotT0JKQ19DTEFTUyBBVlBsYXllclZpZXdDb250cm9sbGVyOwotT0JK
Q19DTEFTUyBXZWJBVlBsYXllckNvbnRyb2xsZXI7Ci1PQkpDX0NMQVNTIFdlYkFWUGxheWVyTGF5
ZXJWaWV3OwotT0JKQ19DTEFTUyBXZWJBVlBsYXllckxheWVyOwotT0JKQ19DTEFTUyBXZWJBVlBs
YXllclZpZXdDb250cm9sbGVyOwotT0JKQ19DTEFTUyBXZWJBVlBsYXllclZpZXdDb250cm9sbGVy
RGVsZWdhdGU7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQ7Ci0KLWNsYXNzIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQg
OiBwdWJsaWMgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MgewotCi1wdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0
PiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQmKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB+VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdCgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKmF2UGxheWVyVmlld0NvbnRyb2xsZXIoKSBjb25z
dDsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4aXRGdWxsc2NyZWVuKGNvbnN0IEZsb2F0UmVj
dCYgZmluYWxSZWN0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tD
aGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJh
Y2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBoYXNWaWRlb0NoYW5nZWQoYm9vbCkgZmluYWw7Ci0KLSNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25z
dCB7IHJldHVybiAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdCI7IH07Ci0jZW5kaWYK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBG
bG9hdFNpemUmKSBmaW5hbDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0dXBGdWxsc2Ny
ZWVuKFVJVmlldyYgdmlkZW9WaWV3LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxSZWN0LCBjb25z
dCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucywgVUlWaWV3KiBwYXJlbnRWaWV3LCBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUlu
UGljdHVyZVBsYXliYWNrLCBib29sIHN0YW5kYnksIGJvb2wgYmxvY2tzUmV0dXJuVG9GdWxsc2Ny
ZWVuRnJvbVBpY3R1cmVJblBpY3R1cmUpOwotCi0gICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBs
YXllckxheWVyVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyTGF5ZXJWaWV3LmdldCgpOyB9
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRWaWRlb1ByZXNlbnRhdGlvbk1vZGVsKFZpZGVv
UHJlc2VudGF0aW9uTW9kZWwqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBpY3R1cmVJblBp
Y3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3VuZCgpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldFBsYXllcklkZW50aWZpZXIoc3RkOjpvcHRpb25hbDxNZWRpYVBsYXllcklkZW50aWZp
ZXI+KSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcXVlc3RIaWRlQW5kRXhpdEZ1
bGxzY3JlZW4oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub0lu
bGluZShib29sIHZpc2libGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5saW5lUmVjdCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVy
ZSgpIGNvbnN0OwotICAgIHZvaWQgd2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZv
aWQgZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9pZCBmYWlsZWRUb1N0YXJ0UGlj
dHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKLSAg
ICB2b2lkIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxl
cih2b2lkICheKShCT09MKSk7Ci0gICAgYm9vbCBzaG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFz
b24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW5s
aW5lUmVjdChjb25zdCBGbG9hdFJlY3QmLCBib29sIHZpc2libGUpOwotICAgIGJvb2wgaXNQbGF5
aW5nVmlkZW9JbkVuaGFuY2VkRnVsbHNjcmVlbigpIGNvbnN0OwotICAgIGJvb2wgY2hhbmdpbmdT
dGFuZGJ5T25seSgpIHsgcmV0dXJuIG1fY2hhbmdpbmdTdGFuZGJ5T25seTsgfQotICAgIGJvb2wg
YWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2s7IH0KLXByaXZhdGU6Ci0gICAgV0VCQ09SRV9FWFBPUlQg
VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdChQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VB
VktpdCYpOwotICAgIHZvaWQgZG9TZXR1cCgpOwotICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4o
KTsKLSAgICB2b2lkIGRvRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVu
SGFuZGxlcihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKiwgTmV4dEFjdGlvbnMgPSBOZXh0QWN0aW9u
cygpKTsKLSAgICB2b2lkIGVudGVyRnVsbHNjcmVlbkhhbmRsZXIoQk9PTCBzdWNjZXNzLCBOU0Vy
cm9yICosIE5leHRBY3Rpb25zID0gTmV4dEFjdGlvbnMoKSk7Ci0gICAgdm9pZCB3YXRjaGRvZ1Rp
bWVyRmlyZWQoKTsKLQotICAgIFJldGFpblB0cjxXZWJBVlBsYXllckxheWVyVmlldz4gbV9wbGF5
ZXJMYXllclZpZXc7Ci0gICAgYm9vbCBtX3Nob3VsZElnbm9yZUFWS2l0Q2FsbGJhY2tBYm91dEV4
aXRGdWxsc2NyZWVuUmVhc29uIHsgZmFsc2UgfTsKLSAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckRlbGVnYXRlPiBtX3BsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU7Ci0g
ICAgUmV0YWluUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXI+IG1fcGxheWVyVmlld0NvbnRy
b2xsZXI7Ci0gICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKLSAgICBib29s
IG1fY2hhbmdpbmdTdGFuZGJ5T25seSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93c1BpY3R1
cmVJblBpY3R1cmVQbGF5YmFjayB7IGZhbHNlIH07Ci0gICAgUmV0YWluUHRyPFVJVmlldz4gbV92
aWRlb1ZpZXc7Ci19OwotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oSU9TX0ZBTUlMWSkgJiYgSEFWRShBVktJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Lm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQubW0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZmEyNDVhNTZjNi4uMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRhdGlvbkludGVy
ZmFjZUFWS2l0Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDI0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0j
aW1wb3J0ICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0LmgiCi0KLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKSAmJiBIQVZFKEFWS0lUKQotCi0jaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1w
b3J0ICJQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIgotI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlQVZLaXQuaCIKLSNpbXBvcnQgIlVJVmlld0NvbnRyb2xsZXJVdGlsaXRpZXMuaCIK
LSNpbXBvcnQgIldlYkFWUGxheWVyQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJM
YXllci5oIgotI2ltcG9ydCAiV2ViQVZQbGF5ZXJMYXllclZpZXcuaCIKLSNpbXBvcnQgPEFWRm91
bmRhdGlvbi9BVlRpbWUuaD4KLSNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+Ci0jaW1wb3J0IDxVSUtp
dC9VSVdpbmRvdy5oPgotI2ltcG9ydCA8b2JqYy9tZXNzYWdlLmg+Ci0jaW1wb3J0IDxvYmpjL3J1
bnRpbWUuaD4KLSNpbXBvcnQgPHBhbC9zcGkvY29jb2EvQVZLaXRTUEkuaD4KLSNpbXBvcnQgPHBh
bC9zcGkvaW9zL1VJS2l0U1BJLmg+Ci0jaW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KLQotI2lm
IEhBVkUoUElQX0NPTlRST0xMRVIpCi0jaW1wb3J0IDxBVktpdC9BVlBpY3R1cmVJblBpY3R1cmVD
b250cm9sbGVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLSNpbXBv
cnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgotI2ltcG9ydCA8cGFsL2NvY29hL0FWRm91
bmRhdGlvblNvZnRMaW5rLmg+Ci0jaW1wb3J0IDxwYWwvaW9zL1VJS2l0U29mdExpbmsuaD4KLQot
I2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVUVikKLXN0YXRpYyBjb25z
dCBOU1RpbWVJbnRlcnZhbCBwbGF5YmFja0NvbnRyb2xzVmlzaWJsZUR1cmF0aW9uQWZ0ZXJSZXNl
dHRpbmdWaWRlb1NvdXJjZSA9IDEuMDsKLSNlbmRpZgotCi1TT0ZUTElOS19BVktJVF9GUkFNRVdP
UksoKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1cmVJblBpY3R1cmVD
b250cm9sbGVyKQotU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBsYXllclZpZXdD
b250cm9sbGVyKQotCi0jaWYgSEFWRShQSVBfQ09OVFJPTExFUikKLVNPRlRfTElOS19DTEFTU19P
UFRJT05BTChBVktpdCwgQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlckNvbnRlbnRTb3VyY2Up
Ci1TT0ZUX0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRl
bnRWaWV3Q29udHJvbGxlcikKLSNlbmRpZgotCi1AaW50ZXJmYWNlIFVJV2luZG93ICgpCi0tIChC
T09MKV9pc0hvc3RlZEluQW5vdGhlclByb2Nlc3M7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVUlWaWV3
Q29udHJvbGxlciAoKQotQHByb3BlcnR5IChub25hdG9taWMsIGFzc2lnbiwgc2V0dGVyPV9zZXRJ
Z25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6KSBCT09MIF9pZ25vcmVBcHBTdXBwb3J0ZWRP
cmllbnRhdGlvbnM7Ci1AZW5kCi0KLXN0YXRpYyBVSUNvbG9yICpjbGVhclVJQ29sb3IoKQotewot
ICAgIHJldHVybiAoVUlDb2xvciAqKVtQQUw6OmdldFVJQ29sb3JDbGFzcygpIGNsZWFyQ29sb3Jd
OwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIqIGJvb2xTdHJpbmco
Ym9vbCB2YWwpCi17Ci0gICAgcmV0dXJuIHZhbCA/ICJ0cnVlIiA6ICJmYWxzZSI7Ci19Ci0jZW5k
aWYKLQotc3RhdGljIGNvbnN0IFNlY29uZHMgZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCB7
IDFfcyB9Owotc3RhdGljIGJvb2wgaWdub3JlV2F0Y2hkb2dGb3JEZWJ1Z2dpbmcgPSBmYWxzZTsK
LQotQGludGVyZmFjZSBBVlBsYXllclZpZXdDb250cm9sbGVyIChEZXRhaWxzKQotQHByb3BlcnR5
IChub25hdG9taWMpIEJPT0wgc2hvd3NQbGF5YmFja0NvbnRyb2xzOwotQHByb3BlcnR5IChub25h
dG9taWMpIFVJVmlldyogdmlldzsKLUBlbmQKLQotQGNsYXNzIFdlYkFWTWVkaWFTZWxlY3Rpb25P
cHRpb247Ci0KLUBpbnRlcmZhY2UgV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlIDog
TlNPYmplY3QgPAotICAgIEFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZQotI2lmIEhBVkUo
UElQX0NPTlRST0xMRVIpCi0gICAgLCBBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyRGVsZWdh
dGUKLSNlbmRpZgotPiB7Ci0gICAgVGhyZWFkU2FmZVdlYWtQdHI8VmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5JbnRlcmZhY2U7Ci19Ci1AcHJvcGVydHkgKG5vbmF0
b21pYywgYXNzaWduIC8qIHdlYWsgKi8pIFJlZlB0cjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFj
ZUFWS2l0PiBmdWxsc2NyZWVuSW50ZXJmYWNlOwotI2lmICFQTEFURk9STShBUFBMRVRWKQotLSAo
Qk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXll
clZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKLSNlbmRpZgotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlCi0tIChS
ZWZQdHI8VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdD4pZnVsbHNjcmVlbkludGVyZmFj
ZQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIF9mdWxsc2NyZWVu
SW50ZXJmYWNlLmdldCgpOwotfQotCi0tICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFJl
ZlB0cjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0PilmdWxsc2NyZWVuSW50ZXJmYWNl
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIWZ1bGxzY3JlZW5JbnRl
cmZhY2UpIHsKLSAgICAgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBudWxscHRyOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gVGhyZWFkU2FmZVdl
YWtQdHIgeyAqZnVsbHNjcmVlbkludGVyZmFjZSB9OwotfQotCi0jaWYgUExBVEZPUk0oV0FUQ0hP
UykKLUlHTk9SRV9XQVJOSU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQot
I2VuZGlmCi0KLS0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RhcnRQaWN0dXJlSW5Q
aWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKLXsK
LSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIGlmIChhdXRvIGZ1
bGxzY3JlZW5JbnRlcmZhY2UgPSBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UpCi0gICAgICAgIGZ1
bGxzY3JlZW5JbnRlcmZhY2UtPndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAo
dm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQbGF5
ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJm
YWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJm
YWNlLT5kaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3
Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVy
IGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IK
LXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIFVOVVNFRF9Q
QVJBTShlcnJvcik7Ci0gICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVs
bHNjcmVlbkludGVyZmFjZSkKLSAgICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9T
dGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxl
cldpbGxTdG9wUGljdHVyZUluUGljdHVyZTooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXll
clZpZXdDb250cm9sbGVyCi17Ci0gICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVy
KTsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50
ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKTsKLX0KLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlckRpZFN0b3BQaWN0dXJl
SW5QaWN0dXJlOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIK
LXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAgIGlmIChhdXRv
IGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UpCi0gICAgICAg
IGZ1bGxzY3JlZW5JbnRlcmZhY2UtPmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci19Ci0KLS0g
KEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXJTaG91bGRBdXRvbWF0aWNhbGx5RGlzbWlzc0F0UGlj
dHVyZUluUGljdHVyZVN0YXJ0OihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0Nv
bnRyb2xsZXIKLXsKLSAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOwotICAg
IHJldHVybiBOTzsKLX0KLQotI2lmICFQTEFURk9STShBUFBMRVRWKQotCi1zdGF0aWMgVmlkZW9Q
cmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gY29udmVydFRv
RXhpdEZ1bGxTY3JlZW5SZWFzb24oQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVu
UmVhc29uIHJlYXNvbikKLXsKLSAgICBzd2l0Y2ggKHJlYXNvbikgewotICAgIGNhc2UgQVZQbGF5
ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRG9uZUJ1dHRvblRhcHBlZDoKLSAg
ICAgICAgcmV0dXJuIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2Ny
ZWVuUmVhc29uOjpEb25lQnV0dG9uVGFwcGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckV4aXRGdWxsU2NyZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKLSAgICAgICAg
cmV0dXJuIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OkV4aXRGdWxsU2NyZWVuUmVh
c29uOjpGdWxsU2NyZWVuQnV0dG9uVGFwcGVkOwotICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJv
bGxlckV4aXRGdWxsU2NyZWVuUmVhc29uUGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ6Ci0gICAgICAg
IHJldHVybiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVlblJl
YXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250
cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25QaW5jaEdlc3R1cmVIYW5kbGVkOgotICAgICAgICBy
ZXR1cm4gVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6RXhpdEZ1bGxTY3JlZW5SZWFz
b246OlBpbmNoR2VzdHVyZUhhbmRsZWQ7Ci0gICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVy
RXhpdEZ1bGxTY3JlZW5SZWFzb25SZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6Ci0gICAg
ICAgIHJldHVybiBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpFeGl0RnVsbFNjcmVl
blJlYXNvbjo6UmVtb3RlQ29udHJvbFN0b3BFdmVudFJlY2VpdmVkOwotICAgIH0KLX0KLQotLSAo
Qk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXll
clZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjooQVZQbGF5ZXJW
aWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbgotewotICAgIFVOVVNFRF9Q
QVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVy
ZmFjZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKLSAgICAgICAgcmV0dXJuIGZ1bGxzY3Jl
ZW5JbnRlcmZhY2UtPnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihjb252ZXJ0VG9FeGl0
RnVsbFNjcmVlblJlYXNvbihyZWFzb24pKTsKLQotICAgIHJldHVybiBZRVM7Ci19Ci0KLSNlbmRp
ZiAvLyAhUExBVEZPUk0oQVBQTEVUVikKLQotLSAodm9pZClwbGF5ZXJWaWV3Q29udHJvbGxlcjoo
QVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyIHJlc3RvcmVVc2Vy
SW50ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRpb25IYW5kbGVyCi17Ci0gICAgVU5VU0VEX1BB
UkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJm
YWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJm
YWNlLT5wcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIo
Y29tcGxldGlvbkhhbmRsZXIpOwotfQotCi0jaWYgUExBVEZPUk0oV0FUQ0hPUykKLUlHTk9SRV9X
QVJOSU5HU19FTkQKLSNlbmRpZgotCi0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyU2hvdWxk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlRnJvbUlubGluZVdoZW5FbnRlcmluZ0JhY2tncm91bmQ6KEFW
UGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgotewotICAgIFVOVVNF
RF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7Ci0gICAgcmV0dXJuIFlFUzsKLX0KLQotI2lm
IEhBVkUoUElQX0NPTlRST0xMRVIpCi0KLS8vIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJE
ZWxlZ2F0ZQotCi0tICh2b2lkKXBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyV2lsbFN0YXJ0UGlj
dHVyZUluUGljdHVyZTooQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlciAqKXBpY3R1cmVJblBp
Y3R1cmVDb250cm9sbGVyCi17Ci0gICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNl
bGYuZnVsbHNjcmVlbkludGVyZmFjZSkKLSAgICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+d2ls
bFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBpY3R1cmVJblBpY3R1cmVD
b250cm9sbGVyRGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlOihBVlBpY3R1cmVJblBpY3R1cmVDb250
cm9sbGVyICopcGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIKLXsKLSAgICBpZiAoYXV0byBmdWxs
c2NyZWVuSW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQotICAgICAgICBmdWxs
c2NyZWVuSW50ZXJmYWNlLT5kaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotLSAodm9p
ZClwaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcjooQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxl
ciAqKXBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0
dXJlV2l0aEVycm9yOihOU0Vycm9yICopZXJyb3IKLXsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVu
SW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVu
SW50ZXJmYWNlLT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lk
KXBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyV2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlOihBVlBp
Y3R1cmVJblBpY3R1cmVDb250cm9sbGVyICopcGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIKLXsK
LSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJm
YWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJmYWNlLT53aWxsU3RvcFBpY3R1cmVJblBpY3R1
cmUoKTsKLX0KLQotLSAodm9pZClwaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlckRpZFN0b3BQaWN0
dXJlSW5QaWN0dXJlOihBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyICopcGljdHVyZUluUGlj
dHVyZUNvbnRyb2xsZXIKLXsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gc2Vs
Zi5mdWxsc2NyZWVuSW50ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJmYWNlLT5kaWRT
dG9wUGljdHVyZUluUGljdHVyZSgpOwotfQotCi0tICh2b2lkKXBpY3R1cmVJblBpY3R1cmVDb250
cm9sbGVyOihBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyICopcGljdHVyZUluUGljdHVyZUNv
bnRyb2xsZXIgcmVzdG9yZVVzZXJJbnRlcmZhY2VGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhD
b21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCByZXN0b3JlZCkpY29tcGxldGlvbkhhbmRs
ZXIKLXsKLSAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVu
SW50ZXJmYWNlKQotICAgICAgICBmdWxsc2NyZWVuSW50ZXJmYWNlLT5wcmVwYXJlRm9yUGljdHVy
ZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoY29tcGxldGlvbkhhbmRsZXIpOwot
fQotCi0jZW5kaWYgLy8gSEFWRShQSVBfQ09OVFJPTExFUikKLQotQGVuZAotCi0jaWYgSEFWRShQ
SVBfQ09OVFJPTExFUikKLQotQGludGVyZmFjZSBXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50
Vmlld0NvbnRyb2xsZXIgOiBBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXIK
LQotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQ29udHJvbGxlcjooQVZQbGF5ZXJDb250cm9sbGVy
ICopY29udHJvbGxlcjsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBub25udWxsLCByZWFkb25seSkg
QVZQbGF5ZXJDb250cm9sbGVyKiBjb250cm9sbGVyOwotQHByb3BlcnR5IChyZXRhaW4pIEFWUGxh
eWVyTGF5ZXIqIHBsYXllckxheWVyOwotCi1AZW5kCi0KLXN0YXRpYyBXZWJBVlBpY3R1cmVJblBp
Y3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXIqIFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRW
aWV3Q29udHJvbGxlcl9pbml0V2l0aENvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCwgQVZQbGF5ZXJD
b250cm9sbGVyKiBjb250cm9sbGVyKQotewotICAgIEFTU0VSVChjb250cm9sbGVyKTsKLQotICAg
IFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlciAqcGlwQ29udHJvbGxl
ciA9IGFTZWxmOwotICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBpcENvbnRyb2xsZXIsIGdl
dEFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlckNsYXNzKCkgfTsKLSAgICBh
dXRvIHN1cGVyX2luaXQgPSByZWludGVycHJldF9jYXN0PGlkKCopKG9iamNfc3VwZXIqLCBTRUwp
PihvYmpjX21zZ1NlbmRTdXBlcik7Ci0gICAgYVNlbGYgPSBzdXBlcl9pbml0KCZzdXBlckNsYXNz
LCBAc2VsZWN0b3IoaW5pdCkpOwotICAgIGlmICghYVNlbGYpCi0gICAgICAgIHJldHVybiBhU2Vs
ZjsKLQotICAgIFtjb250cm9sbGVyIHJldGFpbl07Ci0gICAgb2JqZWN0X3NldEluc3RhbmNlVmFy
aWFibGUoYVNlbGYsICJfY29udHJvbGxlciIsIGNvbnRyb2xsZXIpOwotICAgIHJldHVybiBhU2Vs
ZjsKLX0KLQotc3RhdGljIEFWUGxheWVyQ29udHJvbGxlciAqV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyX2NvbnRyb2xsZXIoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICB2
b2lkKiBjb250cm9sbGVyOwotICAgIG9iamVjdF9nZXRJbnN0YW5jZVZhcmlhYmxlKGFTZWxmLCAi
X2NvbnRyb2xsZXIiLCAmY29udHJvbGxlcik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFWUGxh
eWVyQ29udHJvbGxlcio+KGNvbnRyb2xsZXIpOwotfQotCi1zdGF0aWMgQVZQbGF5ZXJMYXllciAq
V2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyX3BsYXllckxheWVyKGlk
IGFTZWxmLCBTRUwpCi17Ci0gICAgdm9pZCogbGF5ZXI7Ci0gICAgb2JqZWN0X2dldEluc3RhbmNl
VmFyaWFibGUoYVNlbGYsICJfcGxheWVyTGF5ZXIiLCAmbGF5ZXIpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxBVlBsYXllckxheWVyKj4obGF5ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBXZWJBVlBp
Y3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJfc2V0UGxheWVyTGF5ZXIoaWQgYVNl
bGYsIFNFTCwgQVZQbGF5ZXJMYXllciogbGF5ZXIpCi17Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0
dXJlQ29udGVudFZpZXdDb250cm9sbGVyICpwaXBDb250cm9sbGVyID0gYVNlbGY7Ci0gICAgYXV0
byBvbGRQbGF5ZXJMYXllciA9IFtwaXBDb250cm9sbGVyIHBsYXllckxheWVyXTsKLSAgICBpZiAo
b2xkUGxheWVyTGF5ZXIgPT0gbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBbb2xkUGxheWVy
TGF5ZXIgcmVsZWFzZV07Ci0gICAgW2xheWVyIHJldGFpbl07Ci0gICAgb2JqZWN0X3NldEluc3Rh
bmNlVmFyaWFibGUoYVNlbGYsICJfcGxheWVyTGF5ZXIiLCBsYXllcik7Ci0gICAgW1twaXBDb250
cm9sbGVyIHZpZXddLmxheWVyIGFkZFN1YmxheWVyOmxheWVyXTsKLX0KLQotc3RhdGljIHZvaWQg
V2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyX3ZpZXdXaWxsTGF5b3V0
U3Vidmlld3MoaWQgYVNlbGYsIFNFTCkKLXsKLSAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250
ZW50Vmlld0NvbnRyb2xsZXIgKnBpcENvbnRyb2xsZXIgPSBhU2VsZjsKLSAgICBvYmpjX3N1cGVy
IHN1cGVyQ2xhc3MgeyBwaXBDb250cm9sbGVyLCBnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50
Vmlld0NvbnRyb2xsZXJDbGFzcygpIH07Ci0gICAgYXV0byBzdXBlcl92aWV3V2lsbExheW91dFN1
YnZpZXdzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKCopKG9iamNfc3VwZXIqLCBTRUwpPihvYmpj
X21zZ1NlbmRTdXBlcik7Ci0gICAgc3VwZXJfdmlld1dpbGxMYXlvdXRTdWJ2aWV3cygmc3VwZXJD
bGFzcywgQHNlbGVjdG9yKHZpZXdXaWxsTGF5b3V0U3Vidmlld3MpKTsKLSAgICBbW3BpcENvbnRy
b2xsZXIgcGxheWVyTGF5ZXJdIHNldEZyYW1lOltwaXBDb250cm9sbGVyIHZpZXddLmJvdW5kc107
Ci19Ci0KLXN0YXRpYyB2b2lkIFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJv
bGxlcl9kZWFsbG9jKGlkIGFTZWxmLCBTRUwpCi17Ci0gICAgV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyICpwaXBDb250cm9sbGVyID0gYVNlbGY7Ci0gICAgW1twaXBD
b250cm9sbGVyIGNvbnRyb2xsZXJdIHJlbGVhc2VdOwotICAgIFtbcGlwQ29udHJvbGxlciBwbGF5
ZXJMYXllcl0gcmVsZWFzZV07Ci0gICAgb2JqY19zdXBlciBzdXBlckNsYXNzIHsgcGlwQ29udHJv
bGxlciwgZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyQ2xhc3MoKSB9
OwotICAgIGF1dG8gc3VwZXJfZGVhbGxvYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKShvYmpj
X3N1cGVyKiwgU0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOwotICAgIHN1cGVyX2RlYWxsb2MoJnN1
cGVyQ2xhc3MsIEBzZWxlY3RvcihkZWFsbG9jKSk7Ci19Ci0KLXN0YXRpYyBXZWJBVlBpY3R1cmVJ
blBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXIgKmFsbG9jV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVySW5zdGFuY2UoKQotewotICAgIHN0YXRpYyBDbGFzcyB0aGVD
bGFzcyA9IG5pbDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBk
aXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIHRoZUNsYXNzID0gb2JqY19hbGxv
Y2F0ZUNsYXNzUGFpcihnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJD
bGFzcygpLCAiV2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyIiwgMCk7
Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKGluaXRXaXRoQ29u
dHJvbGxlcjopLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxl
cl9pbml0V2l0aENvbnRyb2xsZXIsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0
aGVDbGFzcywgQHNlbGVjdG9yKGNvbnRyb2xsZXIpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVy
ZUNvbnRlbnRWaWV3Q29udHJvbGxlcl9jb250cm9sbGVyLCAiQEA6Iik7Ci0gICAgICAgIGNsYXNz
X2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckNvbnRyb2xsZXIpLCAoSU1QKVdl
YkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcl9jb250cm9sbGVyLCAiQEA6
Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHBsYXllckxh
eWVyKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJfcGxh
eWVyTGF5ZXIsICJAQDoiKTsKLSAgICAgICAgY2xhc3NfYWRkTWV0aG9kKHRoZUNsYXNzLCBAc2Vs
ZWN0b3Ioc2V0UGxheWVyTGF5ZXI6KSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50
Vmlld0NvbnRyb2xsZXJfc2V0UGxheWVyTGF5ZXIsICJ2QDpAIik7Ci0gICAgICAgIGNsYXNzX2Fk
ZE1ldGhvZCh0aGVDbGFzcywgQHNlbGVjdG9yKHZpZXdXaWxsTGF5b3V0U3Vidmlld3MpLCAoSU1Q
KVdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcl92aWV3V2lsbExheW91
dFN1YnZpZXdzLCAidkA6Iik7Ci0gICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFzcywgQHNl
bGVjdG9yKGRlYWxsb2MpLCAoSU1QKVdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29u
dHJvbGxlcl9kZWFsbG9jLCAidkA6Iik7Ci0KLSAgICAgICAgY2xhc3NfYWRkSXZhcih0aGVDbGFz
cywgIl9jb250cm9sbGVyIiwgc2l6ZW9mKEFWUGxheWVyQ29udHJvbGxlciopLCBsb2cyKHNpemVv
ZihBVlBsYXllckNvbnRyb2xsZXIqKSksICJAIik7Ci0gICAgICAgIGNsYXNzX2FkZEl2YXIodGhl
Q2xhc3MsICJfcGxheWVyTGF5ZXIiLCBzaXplb2YoQVZQbGF5ZXJMYXllciopLCBsb2cyKHNpemVv
ZihBVlBsYXllckxheWVyKikpLCAiQCIpOwotICAgICAgICBvYmpjX3JlZ2lzdGVyQ2xhc3NQYWly
KHRoZUNsYXNzKTsKLSAgICB9KTsKLQotICAgIHJldHVybiAoV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyICopW3RoZUNsYXNzIGFsbG9jXTsKLX0KLQotI2VuZGlmIC8v
IEhBVkUoUElQX0NPTlRST0xMRVIpCi0KLU5TX0FTU1VNRV9OT05OVUxMX0JFR0lOCi1AaW50ZXJm
YWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXIgOiBOU09iamVjdDxBVlBsYXllclZpZXdDb250
cm9sbGVyRGVsZWdhdGU+Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGdWxsc2NyZWVuSW50ZXJm
YWNlOihWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0ICopaW50ZXJmYWNlOwotLSAodm9p
ZCllbnRlckZ1bGxTY3JlZW5BbmltYXRlZDooQk9PTClhbmltYXRlZCBjb21wbGV0aW9uSGFuZGxl
cjoodm9pZCAoXikoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICopKWNvbXBsZXRpb25IYW5kbGVyOwot
LSAodm9pZClleGl0RnVsbFNjcmVlbkFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXI7Ci0tICh2b2lkKXN0YXJ0UGljdHVyZUluUGljdHVyZTsKLS0gKHZvaWQpc3RvcFBpY3R1cmVJ
blBpY3R1cmU7Ci0jaWYgIVBMQVRGT1JNKEFQUExFVFYpCi0tIChCT09MKXBsYXllclZpZXdDb250
cm9sbGVyU2hvdWxkSGFuZGxlRG9uZUJ1dHRvblRhcDooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAq
KXBsYXllclZpZXdDb250cm9sbGVyOwotI2VuZGlmCi0tICh2b2lkKXNldFdlYktpdE92ZXJyaWRl
Um91dGVTaGFyaW5nUG9saWN5OihOU1VJbnRlZ2VyKXJvdXRlU2hhcmluZ1BvbGljeSByb3V0aW5n
Q29udGV4dFVJRDooTlNTdHJpbmcgKilyb3V0aW5nQ29udGV4dFVJRDsKLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLUBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgY29uc3Qgdm9pZCog
bG9nSWRlbnRpZmllcjsKLUBwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgY29uc3QgTG9n
Z2VyKiBsb2dnZXJQdHI7Ci1AcHJvcGVydHkgKHJlYWRvbmx5LCBub25hdG9taWMpIFdURkxvZ0No
YW5uZWwqIGxvZ0NoYW5uZWw7Ci0jZW5kaWYKLUBlbmQKLU5TX0FTU1VNRV9OT05OVUxMX0VORAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlciB7Ci0gICAgVGhyZWFk
U2FmZVdlYWtQdHI8VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdD4gX2Z1bGxzY3JlZW5J
bnRlcmZhY2U7Ci0jaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikKLSAg
ICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gX3ByZXNlbnRpbmdWaWV3Q29udHJvbGxlcjsK
LSNlbmRpZgotICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdDb250cm9sbGVyPiBfYXZQbGF5ZXJW
aWV3Q29udHJvbGxlcjsKLSAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3N0YXJ0UGljdHVyZUluUGlj
dHVyZVRpbWVyOwotICAgIFdlYWtPYmpDUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZT4gX2RlbGVnYXRlOwotCi0jaWYgSEFWRShQSVBfQ09OVFJPTExFUikKLSAgICBSZXRhaW5Q
dHI8QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcj4gX3BpcENvbnRyb2xsZXI7Ci0gICAgUmV0
YWluUHRyPFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcj4gX3BpcENv
bnRlbnRWaWV3Q29udHJvbGxlcjsKLSNlbmRpZgotfQotCi0tIChpbnN0YW5jZXR5cGUpaW5pdFdp
dGhGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0ICop
aW50ZXJmYWNlCi17Ci0gICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IFRocmVhZFNhZmVXZWFrUHRy
IHsgKmludGVyZmFjZSB9OwotCi0gICAgT0JKQ19BTFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJRklF
Uik7Ci0KLSNpZiBQTEFURk9STShBUFBMRVRWKQotICAgIF9hdlBsYXllclZpZXdDb250cm9sbGVy
ID0gYWRvcHROUyhbYWxsb2NBVlBsYXllclZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0XSk7
Ci0gICAgW3NlbGYgY29uZmlndXJlUGxheWVyVmlld0NvbnRyb2xsZXJXaXRoRnVsbHNjcmVlbklu
dGVyZmFjZTppbnRlcmZhY2VdOwotI2Vsc2UKLSAgICBfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciA9
IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhQ
bGF5ZXJMYXllclZpZXc6aW50ZXJmYWNlLT5wbGF5ZXJMYXllclZpZXcoKV0pOwotI2VuZGlmCi0g
ICAgW19hdlBsYXllclZpZXdDb250cm9sbGVyIHNldE1vZGFsUHJlc2VudGF0aW9uU3R5bGU6VUlN
b2RhbFByZXNlbnRhdGlvbk92ZXJGdWxsU2NyZWVuXTsKLSNpZiBQTEFURk9STShXQVRDSE9TKQot
ICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpzZWxmXTsKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oVklTSU9OKQotICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRQ
cmVmZXJzUm9vbURpbW1pbmc6Tk9dOwotICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRG
dWxsU2NyZWVuQmVoYXZpb3JzOkFWUGxheWVyVmlld0NvbnRyb2xsZXJGdWxsU2NyZWVuQmVoYXZp
b3JIb3N0Q29udGVudElubGluZV07Ci0jZW5kaWYKLQotI2lmIEhBVkUoUElQX0NPTlRST0xMRVIp
Ci0gICAgYXV0byAqcGxheWVyQ29udHJvbGxlciA9IHN0YXRpY19jYXN0PEFWUGxheWVyQ29udHJv
bGxlciAqPihpbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKSk7Ci0gICAgX3BpcENvbnRlbnRW
aWV3Q29udHJvbGxlciA9IGFkb3B0TlMoW2FsbG9jV2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVu
dFZpZXdDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0aENvbnRyb2xsZXI6cGxheWVyQ29udHJv
bGxlcl0pOwotCi0gICAgYXV0byBzb3VyY2UgPSBhZG9wdE5TKFthbGxvY0FWUGljdHVyZUluUGlj
dHVyZUNvbnRyb2xsZXJDb250ZW50U291cmNlSW5zdGFuY2UoKSBpbml0V2l0aFNvdXJjZVZpZXc6
c3RhdGljX2Nhc3Q8VUlWaWV3ICo+KGludGVyZmFjZS0+cGxheWVyTGF5ZXJWaWV3KCkpIGNvbnRl
bnRWaWV3Q29udHJvbGxlcjpfcGlwQ29udGVudFZpZXdDb250cm9sbGVyLmdldCgpIHBsYXllckNv
bnRyb2xsZXI6cGxheWVyQ29udHJvbGxlcl0pOwotCi0gICAgX3BpcENvbnRyb2xsZXIgPSBhZG9w
dE5TKFthbGxvY0FWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRo
Q29udGVudFNvdXJjZTpzb3VyY2UuZ2V0KCldKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHNlbGY7
Ci19Ci0KLSNpZiBQTEFURk9STShBUFBMRVRWKQotLSAodm9pZCljb25maWd1cmVQbGF5ZXJWaWV3
Q29udHJvbGxlcldpdGhGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb1ByZXNlbnRhdGlvbkludGVy
ZmFjZUFWS2l0ICopaW50ZXJmYWNlCi17Ci0gICAgLy8gRklYTUUgKDExNjU5MjM0NCk6IFRoaXMg
aXMgYSBwcm9vZi1vZi1jb25jZXB0IGhhY2sgdG8gd29yayBhcm91bmQgbGFjayBzdXBwb3J0IGZv
ciBhIGN1c3RvbQotICAgIC8vIEFWUGxheWVyTGF5ZXJWaWV3IGluIHR2T1MncyB2ZXJzaW9uIG9m
IEFWUGxheWVyVmlld0NvbnRyb2xsZXIuIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBvbmNlCi0gICAg
Ly8gcHJvcGVyIEFQSSBpcyBhdmFpbGFibGUuCi0KLSAgICBSRUxFQVNFX0FTU0VSVChbX2F2UGxh
eWVyVmlld0NvbnRyb2xsZXIgdmlld10pOwotCi0gICAgW1tfYXZQbGF5ZXJWaWV3Q29udHJvbGxl
ciBwbGF5ZXJMYXllclZpZXddIHJlbW92ZUZyb21TdXBlcnZpZXddOwotCi0gICAgV2ViQVZQbGF5
ZXJMYXllclZpZXcgKnBsYXllckxheWVyVmlldyA9IGludGVyZmFjZS0+cGxheWVyTGF5ZXJWaWV3
KCk7Ci0gICAgW19hdlBsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckxheWVyVmlldzpwbGF5
ZXJMYXllclZpZXddOwotCi0gICAgcGxheWVyTGF5ZXJWaWV3LnBpeGVsQnVmZmVyQXR0cmlidXRl
cyA9IFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBwaXhlbEJ1ZmZlckF0dHJpYnV0ZXNdOwotICAg
IHBsYXllckxheWVyVmlldy5wbGF5ZXJDb250cm9sbGVyID0gKEFWUGxheWVyQ29udHJvbGxlciAq
KWludGVyZmFjZS0+cGxheWVyQ29udHJvbGxlcigpOwotICAgIHBsYXllckxheWVyVmlldy50cmFu
c2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POwotICAgIHBsYXllckxh
eWVyVmlldy5wbGF5ZXJMYXllci52aWRlb0dyYXZpdHkgPSBbX2F2UGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlkZW9HcmF2aXR5XTsKLQotICAgIFVJVmlldyAqY29udGVudENvbnRhaW5lclZpZXcgPSBb
X2F2UGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAg
W2NvbnRlbnRDb250YWluZXJWaWV3IGFkZFN1YnZpZXc6cGxheWVyTGF5ZXJWaWV3XTsKLSAgICBb
TlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6QFsKLSAgICAgICAgW3BsYXll
ckxheWVyVmlldy53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpjb250ZW50Q29u
dGFpbmVyVmlldy53aWR0aEFuY2hvcl0sCi0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcuaGVpZ2h0
QW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmNvbnRlbnRDb250YWluZXJWaWV3LmhlaWdo
dEFuY2hvcl0sCi0gICAgICAgIFtwbGF5ZXJMYXllclZpZXcuY2VudGVyWEFuY2hvciBjb25zdHJh
aW50RXF1YWxUb0FuY2hvcjpjb250ZW50Q29udGFpbmVyVmlldy5jZW50ZXJYQW5jaG9yXSwKLSAg
ICAgICAgW3BsYXllckxheWVyVmlldy5jZW50ZXJZQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5j
aG9yOmNvbnRlbnRDb250YWluZXJWaWV3LmNlbnRlcllBbmNob3JdLAotICAgIF1dOwotfQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKEFQUExFVFYpCi0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIE9CSkNf
QUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJRVIpOwotCi0gICAgaWYgKF9zdGFydFBpY3R1cmVJ
blBpY3R1cmVUaW1lcikgewotICAgICAgICBbc2VsZiByZW1vdmVPYnNlcnZlcl07Ci0gICAgICAg
IFtfc3RhcnRQaWN0dXJlSW5QaWN0dXJlVGltZXIgaW52YWxpZGF0ZV07Ci0gICAgICAgIF9zdGFy
dFBpY3R1cmVJblBpY3R1cmVUaW1lciA9IG5pbDsKLSAgICB9Ci0jaWYgSEFWRShQSVBfQ09OVFJP
TExFUikKLSAgICBfcGlwQ29udGVudFZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIF9waXBDb250
cm9sbGVyID0gbmlsOwotI2VuZGlmCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0jaWYgIVBM
QVRGT1JNKEFQUExFVFYpCi0tIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyU2hvdWxkSGFuZGxl
RG9uZUJ1dHRvblRhcDooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9s
bGVyCi17Ci0gICAgQVNTRVJUKHBsYXllclZpZXdDb250cm9sbGVyID09IF9hdlBsYXllclZpZXdD
b250cm9sbGVyLmdldCgpKTsKLSAgICBpZiAoIV9kZWxlZ2F0ZSkKLSAgICAgICAgcmV0dXJuIFlF
UzsKLQotICAgIHJldHVybiBbX2RlbGVnYXRlIHBsYXllclZpZXdDb250cm9sbGVyOnBsYXllclZp
ZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjpBVlBsYXllclZpZXdD
b250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkXTsKLX0KLSNlbmRp
ZgotCi0tICh2b2lkKXNldFdlYktpdE92ZXJyaWRlUm91dGVTaGFyaW5nUG9saWN5OihOU1VJbnRl
Z2VyKXJvdXRlU2hhcmluZ1BvbGljeSByb3V0aW5nQ29udGV4dFVJRDooTlNTdHJpbmcgKilyb3V0
aW5nQ29udGV4dFVJRAotewotQUxMT1dfTkVXX0FQSV9XSVRIT1VUX0dVQVJEU19CRUdJTgotICAg
IGlmIChbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihzZXRXZWJLaXRPdmVycmlkZVJvdXRlU2hhcmluZ1BvbGljeTpyb3V0aW5nQ29udGV4dFVJRDop
XSkKLSAgICAgICAgW19hdlBsYXllclZpZXdDb250cm9sbGVyIHNldFdlYktpdE92ZXJyaWRlUm91
dGVTaGFyaW5nUG9saWN5OnJvdXRlU2hhcmluZ1BvbGljeSByb3V0aW5nQ29udGV4dFVJRDpyb3V0
aW5nQ29udGV4dFVJRF07Ci1BTExPV19ORVdfQVBJX1dJVEhPVVRfR1VBUkRTX0VORAotfQotCi0t
ICh2b2lkKWVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKiBfX251bGxhYmxlIGVycm9y
KSljb21wbGV0aW9uSGFuZGxlcgotewotICAgIE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5U
SUZJRVIsICEhYW5pbWF0ZWQpOwotI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQ
UExFVFYpCi0gICAgYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gX2Z1bGxzY3JlZW5JbnRlcmZh
Y2UuZ2V0KCk7Ci0gICAgaWYgKCFmdWxsc2NyZWVuSW50ZXJmYWNlKSB7Ci0gICAgICAgIGlmIChj
b21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKE5PLCBuaWwp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgX3ByZXNlbnRpbmdWaWV3Q29udHJvbGxl
ciA9IGZ1bGxzY3JlZW5JbnRlcmZhY2UtPnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigpOwotCi0g
ICAgX2F2UGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCkudmlldy5mcmFtZSA9IF9wcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXIuZ2V0KCkudmlldy5mcmFtZTsKLSAgICBbX3ByZXNlbnRpbmdWaWV3Q29u
dHJvbGxlciBwcmVzZW50Vmlld0NvbnRyb2xsZXI6ZnVsbHNjcmVlbkludGVyZmFjZS0+ZnVsbHNj
cmVlblZpZXdDb250cm9sbGVyKCkgYW5pbWF0ZWQ6YW5pbWF0ZWQgY29tcGxldGlvbjpeewotICAg
ICAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCi0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihZRVMsIG5pbCk7Ci0gICAgfV07Ci0jZWxzZQotICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxl
ciBlbnRlckZ1bGxTY3JlZW5BbmltYXRlZDphbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjpjb21w
bGV0aW9uSGFuZGxlcl07Ci0jZW5kaWYKLX0KLQotLSAodm9pZClleGl0RnVsbFNjcmVlbkFuaW1h
dGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShCT09MIHN1Y2Nl
c3MsIE5TRXJyb3IgKiBfX251bGxhYmxlIGVycm9yKSljb21wbGV0aW9uSGFuZGxlcgotewotICAg
IE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJRVIsICEhYW5pbWF0ZWQpOwotI2lmIFBM
QVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpCi0gICAgaWYgKCFfcHJlc2VudGlu
Z1ZpZXdDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBbX3ByZXNlbnRpbmdWaWV3
Q29udHJvbGxlciBkaXNtaXNzVmlld0NvbnRyb2xsZXJBbmltYXRlZDphbmltYXRlZCBjb21wbGV0
aW9uOl57Ci0gICAgICAgIF9wcmVzZW50aW5nVmlld0NvbnRyb2xsZXIgPSBuaWw7Ci0gICAgICAg
IGlmIChjb21wbGV0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFlF
UywgbmlsKTsKLSAgICB9XTsKLSNlbHNlCi0gICAgW19hdlBsYXllclZpZXdDb250cm9sbGVyIGV4
aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6YW5pbWF0ZWQgY29tcGxldGlvbkhhbmRsZXI6Y29tcGxldGlv
bkhhbmRsZXJdOwotI2VuZGlmCi19Ci0KLSNpZiBQTEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9S
TShBUFBMRVRWKQotI2RlZmluZSBNWV9OT19SRVRVUk4gTk9fUkVUVVJOX0RVRV9UT19BU1NFUlQK
LSNlbHNlCi0jZGVmaW5lIE1ZX05PX1JFVFVSTgotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBOU1Rp
bWVJbnRlcnZhbCBzdGFydFBpY3R1cmVJblBpY3R1cmVUaW1lSW50ZXJ2YWwgPSA1LjA7Ci0KLS0g
KHZvaWQpb2JzZXJ2ZVZhbHVlRm9yS2V5UGF0aDooTlNTdHJpbmcgKilrZXlQYXRoIG9mT2JqZWN0
OihpZClvYmplY3QgY2hhbmdlOihOU0RpY3Rpb25hcnkgKiljaGFuZ2UgY29udGV4dDoodm9pZCAq
KWNvbnRleHQKLXsKLSAgICBBU1NFUlQoW2tleVBhdGggaXNFcXVhbFRvU3RyaW5nOkAicGljdHVy
ZUluUGljdHVyZVBvc3NpYmxlIl0pOwotCi0gICAgaWYgKCFba2V5UGF0aCBpc0VxdWFsVG9TdHJp
bmc6QCJwaWN0dXJlSW5QaWN0dXJlUG9zc2libGUiXSB8fCAhW3NlbGYgaXNQaWN0dXJlSW5QaWN0
dXJlUG9zc2libGVdKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIV9zdGFydFBpY3R1cmVJ
blBpY3R1cmVUaW1lcikKLSAgICAgICAgcmV0dXJuOwotICAgIFtfc3RhcnRQaWN0dXJlSW5QaWN0
dXJlVGltZXIgaW52YWxpZGF0ZV07Ci0gICAgX3N0YXJ0UGljdHVyZUluUGljdHVyZVRpbWVyID0g
bmlsOwotCi0gICAgW3NlbGYgcmVtb3ZlT2JzZXJ2ZXJdOwotCi0gICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKLSAgICAgICAgW3NlbGYgc3RhcnRQaWN0dXJl
SW5QaWN0dXJlXTsKLSAgICB9KTsKLX0KLQotLSAodm9pZClpbml0T2JzZXJ2ZXIKLXsKLSNpZiBI
QVZFKFBJUF9DT05UUk9MTEVSKQotICAgIFtfcGlwQ29udHJvbGxlciBhZGRPYnNlcnZlcjpzZWxm
IGZvcktleVBhdGg6QCJwaWN0dXJlSW5QaWN0dXJlUG9zc2libGUiIG9wdGlvbnM6TlNLZXlWYWx1
ZU9ic2VydmluZ09wdGlvbk5ldyBjb250ZXh0Om5pbF07Ci0jZWxzZQotICAgIFtfYXZQbGF5ZXJW
aWV3Q29udHJvbGxlciBhZGRPYnNlcnZlcjpzZWxmIGZvcktleVBhdGg6QCJwaWN0dXJlSW5QaWN0
dXJlUG9zc2libGUiIG9wdGlvbnM6TlNLZXlWYWx1ZU9ic2VydmluZ09wdGlvbk5ldyBjb250ZXh0
Om5pbF07Ci0jZW5kaWYKLX0KLQotLSAodm9pZClyZW1vdmVPYnNlcnZlcgotewotI2lmIEhBVkUo
UElQX0NPTlRST0xMRVIpCi0gICAgW19waXBDb250cm9sbGVyIHJlbW92ZU9ic2VydmVyOnNlbGYg
Zm9yS2V5UGF0aDpAInBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZSIgY29udGV4dDpuaWxdOwotI2Vs
c2UKLSAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBmb3JL
ZXlQYXRoOkAicGljdHVyZUluUGljdHVyZVBvc3NpYmxlIiBjb250ZXh0Om5pbF07Ci0jZW5kaWYK
LX0KLQotLSAodm9pZCl0cnlUb1N0YXJ0UGljdHVyZUluUGljdHVyZSBNWV9OT19SRVRVUk4KLXsK
LSAgICBPQkpDX0FMV0FZU19MT0coT0JKQ19MT0dJREVOVElGSUVSKTsKLSNpZiBQTEFURk9STShX
QVRDSE9TKSB8fCBQTEFURk9STShBUFBMRVRWKQotICAgIFVOVVNFRF9WQVJJQUJMRShzdGFydFBp
Y3R1cmVJblBpY3R1cmVUaW1lSW50ZXJ2YWwpOwotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2Vsc2UKLSAgICBpZiAoX3N0YXJ0UGljdHVyZUluUGljdHVyZVRpbWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoW3NlbGYgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdKSB7Ci0gICAg
ICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57Ci0gICAgICAg
ICAgICBbc2VsZiBzdGFydFBpY3R1cmVJblBpY3R1cmVdOwotICAgICAgICB9KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIF9zdGFydFBpY3R1cmVJblBpY3R1cmVUaW1lciA9IFtOU1Rp
bWVyIHNjaGVkdWxlZFRpbWVyV2l0aFRpbWVJbnRlcnZhbDpzdGFydFBpY3R1cmVJblBpY3R1cmVU
aW1lSW50ZXJ2YWwgcmVwZWF0czpOTyBibG9jazpeKE5TVGltZXIgKl9Ob25udWxsKSB7Ci0gICAg
ICAgIFtzZWxmIHJlbW92ZU9ic2VydmVyXTsKLSAgICAgICAgX3N0YXJ0UGljdHVyZUluUGljdHVy
ZVRpbWVyID0gbmlsOwotICAgICAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gX2Z1
bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCkpCi0gICAgICAgICAgICBmdWxsc2NyZWVuSW50ZXJmYWNl
LT5mYWlsZWRUb1N0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIH1dOwotCi0gICAgW3NlbGYg
aW5pdE9ic2VydmVyXTsKLSNlbmRpZgotfQotCi0tICh2b2lkKXN0YXJ0UGljdHVyZUluUGljdHVy
ZSBNWV9OT19SRVRVUk4KLXsKLSAgICBPQkpDX0FMV0FZU19MT0coT0JKQ19MT0dJREVOVElGSUVS
KTsKLSNpZiBQTEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9STShBUFBMRVRWKQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VsaWYgSEFWRShQSVBfQ09OVFJPTExFUikKLSAgICBbX3BpcENv
bnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5QaWN0dXJlXTsKLSNlbHNlCi0gICAgW19hdlBsYXllclZp
ZXdDb250cm9sbGVyIHN0YXJ0UGljdHVyZUluUGljdHVyZV07Ci0jZW5kaWYKLX0KLQotLSAodm9p
ZClzdG9wUGljdHVyZUluUGljdHVyZSBNWV9OT19SRVRVUk4KLXsKLSAgICBPQkpDX0FMV0FZU19M
T0coT0JKQ19MT0dJREVOVElGSUVSKTsKLSNpZiBQTEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9S
TShBUFBMRVRWKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VsaWYgSEFWRShQSVBfQ09O
VFJPTExFUikKLSAgICBbX3BpcENvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwotI2Vs
c2UKLSAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOwot
I2VuZGlmCi19Ci0KLS0gKEJPT0wpaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGUKLXsKLSNpZiBQ
TEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9STShBUFBMRVRWKQotICAgIHJldHVybiBOTzsKLSNl
bGlmIEhBVkUoUElQX0NPTlRST0xMRVIpCi0gICAgcmV0dXJuIFtfcGlwQ29udHJvbGxlciBpc1Bp
Y3R1cmVJblBpY3R1cmVQb3NzaWJsZV07Ci0jZWxzZQotICAgIHJldHVybiBbX2F2UGxheWVyVmll
d0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlUG9zc2libGVdOwotI2VuZGlmCi19Ci0KLS0g
KEJPT0wpaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlCi17Ci0jaWYgUExBVEZPUk0oV0FUQ0hPUykg
fHwgUExBVEZPUk0oQVBQTEVUVikKLSAgICByZXR1cm4gTk87Ci0jZWxpZiBIQVZFKFBJUF9DT05U
Uk9MTEVSKQotICAgIHJldHVybiBbX3BpcENvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0
aXZlXTsKLSNlbHNlCi0gICAgcmV0dXJuIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1
cmVJblBpY3R1cmVBY3RpdmVdOwotI2VuZGlmCi19Ci0KLS0gKEJPT0wpcGljdHVyZUluUGljdHVy
ZUFjdGl2ZQotewotI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpCi0g
ICAgcmV0dXJuIE5POwotI2VsaWYgSEFWRShQSVBfQ09OVFJPTExFUikKLSAgICByZXR1cm4gW19w
aXBDb250cm9sbGVyIGlzUGljdHVyZUluUGljdHVyZUFjdGl2ZV07Ci0jZWxzZQotICAgIHJldHVy
biBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXTsKLSNl
bmRpZgotfQotCi0tIChCT09MKXBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5n
QmFja2dyb3VuZAotewotI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYp
Ci0gICAgcmV0dXJuIE5POwotI2VsaWYgSEFWRShQSVBfQ09OVFJPTExFUikKLSAgICByZXR1cm4g
W19waXBDb250cm9sbGVyIHBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFj
a2dyb3VuZF07Ci0jZWxzZQotICAgIHJldHVybiBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgcGlj
dHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kXTsKLSNlbmRpZgot
fQotCi0tIChVSVZpZXcgKil2aWV3Ci17Ci0gICAgcmV0dXJuIFtfYXZQbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XTsKLX0KLQotI2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQ
TEVUVikKLS0gKHZvaWQpZmxhc2hQbGF5YmFja0NvbnRyb2xzV2l0aER1cmF0aW9uOihOU1RpbWVJ
bnRlcnZhbClkdXJhdGlvbgotewotICAgIE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJ
RVIpOwotICAgIGlmIChbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3RvcihmbGFzaFBsYXliYWNrQ29udHJvbHNXaXRoRHVyYXRpb246KV0pCi0gICAgICAg
IFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBmbGFzaFBsYXliYWNrQ29udHJvbHNXaXRoRHVyYXRp
b246ZHVyYXRpb25dOwotfQotI2VuZGlmCi0KLS0gKEJPT0wpc2hvd3NQbGF5YmFja0NvbnRyb2xz
Ci17Ci0jaWYgUExBVEZPUk0oV0FUQ0hPUykKLSAgICByZXR1cm4gWUVTOwotI2Vsc2UKLSAgICBy
ZXR1cm4gW19hdlBsYXllclZpZXdDb250cm9sbGVyIHNob3dzUGxheWJhY2tDb250cm9sc107Ci0j
ZW5kaWYKLX0KLQotLSAodm9pZClzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6KEJPT0wpc2hvd3NQ
bGF5YmFja0NvbnRyb2xzCi17Ci0gICAgT0JKQ19BTFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJRklF
UiwgISFzaG93c1BsYXliYWNrQ29udHJvbHMpOwotI2lmIFBMQVRGT1JNKFdBVENIT1MpCi0gICAg
VU5VU0VEX1BBUkFNKHNob3dzUGxheWJhY2tDb250cm9scyk7Ci0jZWxzZQotICAgIFtfYXZQbGF5
ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6c2hvd3NQbGF5YmFja0Nv
bnRyb2xzXTsKLSNlbmRpZgotfQotCi0tICh2b2lkKXNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVQ
bGF5YmFjazooQk9PTClhbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sKLXsKLSAgICBPQkpD
X0FMV0FZU19MT0coT0JKQ19MT0dJREVOVElGSUVSLCAhIWFsbG93c1BpY3R1cmVJblBpY3R1cmVQ
bGF5YmFjayk7Ci0jaWYgUExBVEZPUk0oV0FUQ0hPUykKLSAgICBVTlVTRURfUEFSQU0oYWxsb3dz
UGljdHVyZUluUGljdHVyZVBsYXliYWNrKTsKLSNlbHNlCi0gICAgW19hdlBsYXllclZpZXdDb250
cm9sbGVyIHNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazphbGxvd3NQaWN0dXJlSW5Q
aWN0dXJlUGxheWJhY2tdOwotI2VuZGlmCi19Ci0KLS0gKHZvaWQpc2V0RGVsZWdhdGU6KFdlYkFW
UGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZSAqKWRlbGVnYXRlCi17Ci0jaWYgUExBVEZPUk0o
V0FUQ0hPUykKLSAgICBBU1NFUlQoIWRlbGVnYXRlIHx8IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKHBsYXllclZpZXdDb250cm9sbGVyOnNob3VsZEV4aXRGdWxsU2NyZWVu
V2l0aFJlYXNvbjopXSk7Ci0gICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0jZWxzZQotICAgIFtf
YXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZV07Ci0jZW5kaWYKLQot
I2lmIEhBVkUoUElQX0NPTlRST0xMRVIpCi0gICAgW19waXBDb250cm9sbGVyIHNldERlbGVnYXRl
OmRlbGVnYXRlXTsKLSNlbmRpZgotfQotCi0tICh2b2lkKXNldFBsYXllckNvbnRyb2xsZXI6KEFW
UGxheWVyQ29udHJvbGxlciAqKXBsYXllckNvbnRyb2xsZXIKLXsKLSAgICBbX2F2UGxheWVyVmll
d0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpwbGF5ZXJDb250cm9sbGVyXTsKLX0KLQot
LSAoQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKWF2UGxheWVyVmlld0NvbnRyb2xsZXIKLXsKLSAg
ICByZXR1cm4gX2F2UGxheWVyVmlld0NvbnRyb2xsZXIuZ2V0KCk7Ci19Ci0KLS0gKHZvaWQpcmVt
b3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyCi17Ci0gICAgW19hdlBsYXllclZpZXdDb250cm9s
bGVyIHJlbW92ZUZyb21QYXJlbnRWaWV3Q29udHJvbGxlcl07Ci19Ci0KLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLS0gKGNvbnN0IHZvaWQqKWxvZ0lkZW50aWZpZXIKLXsKLSAgICBpZiAoYXV0
byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCkpCi0gICAg
ICAgIHJldHVybiBmdWxsc2NyZWVuSW50ZXJmYWNlLT5sb2dJZGVudGlmaWVyKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLS0gKGNvbnN0IExvZ2dlciopbG9nZ2VyUHRyCi17Ci0gICAgaWYg
KGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IF9mdWxsc2NyZWVuSW50ZXJmYWNlLmdldCgpKQot
ICAgICAgICByZXR1cm4gZnVsbHNjcmVlbkludGVyZmFjZS0+bG9nZ2VyUHRyKCk7Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLS0gKFdURkxvZ0NoYW5uZWwqKWxvZ0NoYW5uZWwKLXsKLSAgICBy
ZXR1cm4gJkxvZ0Z1bGxzY3JlZW47Ci19Ci0jZW5kaWYKLUBlbmQKLQotUmVmPFZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlQVZLaXQ+IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmNy
ZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdCYgcGxheWJhY2tTZXNzaW9uSW50ZXJm
YWNlKQotewotICAgIFJlZjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0PiBpbnRlcmZh
Y2UgPSBhZG9wdFJlZigqbmV3IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKSk7Ci0gICAgW2ludGVyZmFjZS0+bV9wbGF5ZXJWaWV3Q29udHJv
bGxlckRlbGVnYXRlIHNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6aW50ZXJmYWNlLnB0cigpXTsKLSAg
ICByZXR1cm4gaW50ZXJmYWNlOwotfQotCi1WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0
OjpWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0KFBsYXliYWNrU2Vzc2lvbkludGVyZmFj
ZUFWS2l0JiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgOiBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUlPUyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCi0gICAgLCBtX3BsYXllclZp
ZXdDb250cm9sbGVyRGVsZWdhdGUoYWRvcHROUyhbW1dlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZSBhbGxvY10gaW5pdF0pKQotewotCi19Ci0KLVZpZGVvUHJlc2VudGF0aW9uSW50ZXJm
YWNlQVZLaXQ6On5WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0KCkKLXsKLSAgICBXZWJB
VlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlzLT5wbGF5ZXJDb250cm9s
bGVyKCk7Ci0gICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVyQ29udHJvbGxlci5leHRl
cm5hbFBsYXliYWNrQWN0aXZlKQotICAgICAgICBleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChmYWxz
ZSwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlOjpUYXJn
ZXRUeXBlTm9uZSwgZW1wdHlTdHJpbmcoKSk7Ci0gICAgaWYgKGF1dG8gbW9kZWwgPSB2aWRlb1By
ZXNlbnRhdGlvbk1vZGVsKCkpCi0gICAgICAgIG1vZGVsLT5yZW1vdmVDbGllbnQoKnRoaXMpOwot
fQotCi1BVlBsYXllclZpZXdDb250cm9sbGVyICpWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFW
S2l0OjphdlBsYXllclZpZXdDb250cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgYXZQbGF5ZXJWaWV3Q29udHJvbGxlcl07Ci19Ci0KLXZvaWQgVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25z
dCBGbG9hdFNpemUmIHZpZGVvRGltZW5zaW9ucykKLXsKLSAgICBpZiAodmlkZW9EaW1lbnNpb25z
LmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJBVlBsYXllckxheWVyICpwbGF5
ZXJMYXllciA9IChXZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxh
eWVyXTsKLQotICAgIFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNp
b25zXTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVv
RGltZW5zaW9uc107Ci0gICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKLQot
I2lmIEhBVkUoUElDVFVSRUlOUElDVFVSRVBMQVlFUkxBWUVSVklFVykKLSAgICBXZWJBVlBpY3R1
cmVJblBpY3R1cmVQbGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0
dXJlUGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXddOwotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0g
KFdlYkFWUGxheWVyTGF5ZXIgKilbcGlwVmlldyBsYXllcl07Ci0gICAgW3BpcFBsYXllckxheWVy
IHNldFZpZGVvRGltZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOwotICAgIFtw
aXBWaWV3IHNldE5lZWRzTGF5b3V0XTsKLSNlbmRpZgotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsUmVjdCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lv
bnMsIFVJVmlldyogcGFyZW50VmlldywgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxz
Y3JlZW5Nb2RlIG1vZGUsIGJvb2wgYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrLCBib29s
IHN0YW5kYnksIGJvb2wgYmxvY2tzUmV0dXJuVG9GdWxsc2NyZWVuRnJvbVBpY3R1cmVJblBpY3R1
cmUpCi17Ci0gICAgQVNTRVJUKHN0YW5kYnkgfHwgbW9kZSAhPSBIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKLSAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsK
LQotICAgIG1fY2hhbmdpbmdTdGFuZGJ5T25seSA9IG1vZGUgPT0gSFRNTE1lZGlhRWxlbWVudEVu
dW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSAmJiBzdGFuZGJ5OwotCi0gICAgW3BsYXllckNv
bnRyb2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86dHJ1ZV07Ci0gICAgW3BsYXllckNvbnRyb2xs
ZXIoKSBzZXRIYXNWaWRlbzp0cnVlXTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldENvbnRl
bnREaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107Ci0KLSAgICBtX2FsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFjayA9IGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjazsKLSAgICBtX3Zp
ZGVvVmlldyA9ICZ2aWRlb1ZpZXc7Ci0gICAgbV9wYXJlbnRWaWV3ID0gcGFyZW50VmlldzsKLSAg
ICBtX3BhcmVudFdpbmRvdyA9IHBhcmVudFZpZXcud2luZG93OwotCi0gICAgbV90YXJnZXRTdGFu
ZGJ5ID0gc3RhbmRieTsKLSAgICBtX3RhcmdldE1vZGUgPSBtb2RlOwotICAgIG1fYmxvY2tzUmV0
dXJuVG9GdWxsc2NyZWVuRnJvbVBpY3R1cmVJblBpY3R1cmUgPSBibG9ja3NSZXR1cm5Ub0Z1bGxz
Y3JlZW5Gcm9tUGljdHVyZUluUGljdHVyZTsKLSAgICBzZXRJbmxpbmVSZWN0KGluaXRpYWxSZWN0
LCB0cnVlKTsKLSAgICBkb1NldHVwKCk7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VBVktpdDo6c2V0VmlkZW9QcmVzZW50YXRpb25Nb2RlbChWaWRlb1ByZXNlbnRhdGlvbk1v
ZGVsKiBtb2RlbCkKLXsKLSAgICBpZiAoYXV0byBvbGRNb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9u
TW9kZWwoKSkKLSAgICAgICAgb2xkTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7Ci0KLSAgICBt
X3ZpZGVvUHJlc2VudGF0aW9uTW9kZWwgPSBtb2RlbDsKLQotICAgIGlmIChtb2RlbCkgewotICAg
ICAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKLSAgICAgICAgbW9kZWwtPnJlcXVlc3RSb3V0
ZVNoYXJpbmdQb2xpY3lBbmRDb250ZXh0VUlEKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsg
KnRoaXMgfV0gKFJvdXRlU2hhcmluZ1BvbGljeSBwb2xpY3ksIFN0cmluZyBjb250ZXh0VUlEKSB7
Ci0gICAgICAgICAgICBtX3JvdXRlU2hhcmluZ1BvbGljeSA9IHBvbGljeTsKLSAgICAgICAgICAg
IG1fcm91dGluZ0NvbnRleHRVSUQgPSBjb250ZXh0VUlEOwotCi0gICAgICAgICAgICBpZiAobV9w
bGF5ZXJWaWV3Q29udHJvbGxlciAmJiAhbV9yb3V0aW5nQ29udGV4dFVJRC5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0V2ViS2l0T3ZlcnJpZGVS
b3V0ZVNoYXJpbmdQb2xpY3k6KE5TVUludGVnZXIpbV9yb3V0ZVNoYXJpbmdQb2xpY3kgcm91dGlu
Z0NvbnRleHRVSUQ6bV9yb3V0aW5nQ29udGV4dFVJRF07Ci0gICAgICAgIH0pOwotICAgIH0KLQot
ICAgIGhhc1ZpZGVvQ2hhbmdlZChtb2RlbCA/IG1vZGVsLT5oYXNWaWRlbygpIDogZmFsc2UpOwot
ICAgIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQobW9kZWwgPyBtb2RlbC0+dmlkZW9EaW1lbnNpb25z
KCkgOiBGbG9hdFNpemUoKSk7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VB
VktpdDo6aGFzVmlkZW9DaGFuZ2VkKGJvb2wgaGFzVmlkZW8pCi17Ci0gICAgW3BsYXllckNvbnRy
b2xsZXIoKSBzZXRIYXNFbmFibGVkVmlkZW86aGFzVmlkZW9dOwotICAgIFtwbGF5ZXJDb250cm9s
bGVyKCkgc2V0SGFzVmlkZW86aGFzVmlkZW9dOwotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlQVZLaXQ6OmV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxh
eWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJp
bmcmKQotewotICAgIFttX3BsYXllckxheWVyVmlldyBzZXRIaWRkZW46ZW5hYmxlZF07Ci19Ci0K
LWJvb2wgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6cGljdHVyZUluUGljdHVyZVdh
c1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNrZ3JvdW5kKCkgY29uc3QKLXsKLSAgICByZXR1cm4gW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJp
bmdCYWNrZ3JvdW5kXTsKLX0KLQotYm9vbCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0
OjpleGl0RnVsbHNjcmVlbihjb25zdCBGbG9hdFJlY3QmIGZpbmFsUmVjdCkKLXsKLSAgICBtX3dh
dGNoZG9nVGltZXIuc3RvcCgpOwotCi0gICAgLy8gVmlkZW9QcmVzZW50YXRpb25NYW5hZ2VyIG1h
eSBhc2sgYSB2aWRlbyB0byBleGl0IHN0YW5kYnkgd2hpbGUgdGhlIHZpZGVvCi0gICAgLy8gaXMg
ZW50ZXJpbmcgcGljdHVyZS1pbi1waWN0dXJlLiBXZSBuZWVkIHRvIGlnbm9yZSB0aGUgcmVxdWVz
dCBpbiB0aGF0IGNhc2UuCi0gICAgaWYgKG1fc3RhbmRieSAmJiBtX2VudGVyaW5nUGljdHVyZUlu
UGljdHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9jaGFuZ2luZ1N0YW5kYnlP
bmx5ID0gIW1fY3VycmVudE1vZGUuaGFzVmlkZW8oKSAmJiBtX3N0YW5kYnk7Ci0KLSAgICBtX3Rh
cmdldE1vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25l
OwotCi0gICAgc2V0SW5saW5lUmVjdChmaW5hbFJlY3QsIHRydWUpOwotICAgIGRvRXhpdEZ1bGxz
Y3JlZW4oKTsKLSAgICBtX3Nob3VsZElnbm9yZUFWS2l0Q2FsbGJhY2tBYm91dEV4aXRGdWxsc2Ny
ZWVuUmVhc29uID0gdHJ1ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmNsZWFudXBGdWxs
c2NyZWVuKCVwKSIsIHRoaXMpOwotICAgIG1fc2hvdWxkSWdub3JlQVZLaXRDYWxsYmFja0Fib3V0
RXhpdEZ1bGxzY3JlZW5SZWFzb24gPSBmYWxzZTsKLQotICAgIG1fY2xlYW51cE5lZWRzUmV0dXJu
VmlkZW9Db250ZW50TGF5ZXIgPSB0cnVlOwotICAgIGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNlbnRh
dGlvbk1vZGVsKCk7Ci0gICAgaWYgKG1faGFzVmlkZW9Db250ZW50TGF5ZXIgJiYgbW9kZWwpIHsK
LSAgICAgICAgbW9kZWwtPnJldHVyblZpZGVvQ29udGVudExheWVyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9jbGVhbnVwTmVlZHNSZXR1cm5WaWRlb0NvbnRlbnRMYXllciA9IGZh
bHNlOwotCi0gICAgaWYgKG1fd2luZG93KSB7Ci0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKLSAgICAgICAgW21fd2luZG93IHNldFJvb3RWaWV3Q29udHJvbGxlcjpuaWxdOwotICAg
IH0KLQotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm5pbF07Ci0gICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyQ29udHJvbGxlcjpuaWxdOwotCi0gICAg
aWYgKG1fY3VycmVudE1vZGUuaGFzUGljdHVyZUluUGljdHVyZSgpKQotICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0KLSAgICBpZiAobV9jdXJy
ZW50TW9kZS5oYXNGdWxsc2NyZWVuKCkpIHsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9s
bGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgZXhpdEZ1bGxTY3JlZW5BbmltYXRlZDpOTyBjb21wbGV0aW9uSGFuZGxlcjpbXSAoQk9PTCBz
dWNjZXNzLCBOU0Vycm9yKiBlcnJvcikgewotICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiLVtBVlBsYXllclZpZXdDb250cm9sbGVyIGV4aXRG
dWxsU2NyZWVuQW5pbWF0ZWQ6Y29tcGxldGlvbkhhbmRsZXI6XSBmYWlsZWQgd2l0aCBlcnJvciAl
cyIsIFtbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddKTsKLSAgICAgICAg
fV07Ci0gICAgfQotCi0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHJlbW92ZUZy
b21TdXBlcnZpZXddOwotICAgIGlmIChtX3ZpZXdDb250cm9sbGVyKQotICAgICAgICBbbV9wbGF5
ZXJWaWV3Q29udHJvbGxlciByZW1vdmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXJdOwotCi0gICAg
W21fcGxheWVyTGF5ZXJWaWV3IHNldFZpZGVvVmlldzpuaWxdOwotICAgIFttX3BsYXllckxheWVy
VmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10g
cmVtb3ZlRnJvbVN1cGVydmlld107Ci0KLSAgICBtX3BsYXllckxheWVyVmlldyA9IG5pbDsKLSAg
ICBtX3BsYXllclZpZXdDb250cm9sbGVyID0gbmlsOwotICAgIG1fd2luZG93ID0gbmlsOwotICAg
IG1fdmlkZW9WaWV3ID0gbmlsOwotICAgIG1fcGFyZW50VmlldyA9IG5pbDsKLSAgICBtX3BhcmVu
dFdpbmRvdyA9IG5pbDsKLQotICAgIFtwbGF5ZXJDb250cm9sbGVyKCkgc2V0SGFzRW5hYmxlZFZp
ZGVvOmZhbHNlXTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc1ZpZGVvOmZhbHNlXTsK
LQotICAgIGlmIChtX2V4aXRpbmdQaWN0dXJlSW5QaWN0dXJlKSB7Ci0gICAgICAgIG1fZXhpdGlu
Z1BpY3R1cmVJblBpY3R1cmUgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1vZGVsKQotICAgICAgICAg
ICAgbW9kZWwtPmRpZEV4aXRQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgfQotCi0gICAgaWYgKG1v
ZGVsKQotICAgICAgICBtb2RlbC0+ZGlkQ2xlYW51cEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBW
aWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpzZXRQbGF5ZXJJZGVudGlmaWVyKHN0ZDo6
b3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBpZGVudGlmaWVyKQotewotI2lmICFQTEFU
Rk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVUVikKLSAgICBpZiAoIWlkZW50aWZpZXIp
Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGZsYXNoUGxheWJhY2tDb250cm9sc1dp
dGhEdXJhdGlvbjpwbGF5YmFja0NvbnRyb2xzVmlzaWJsZUR1cmF0aW9uQWZ0ZXJSZXNldHRpbmdW
aWRlb1NvdXJjZV07Ci0jZW5kaWYKLQotICAgIG1fcGxheWVySWRlbnRpZmllciA9IGlkZW50aWZp
ZXI7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6cmVxdWVzdEhp
ZGVBbmRFeGl0RnVsbHNjcmVlbigpCi17Ci0gICAgaWYgKG1fY3VycmVudE1vZGUuaGFzUGljdHVy
ZUluUGljdHVyZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3Jl
ZW4oJXApIiwgdGhpcyk7Ci0KLSAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAgW1tt
X3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZRVNdOwotCi0gICAgYXV0byBt
b2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwoKTsKLSAgICBpZiAocGxheWJhY2tTZXNzaW9u
TW9kZWwoKSAmJiBtb2RlbCkgewotICAgICAgICBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVz
ZSgpOwotICAgICAgICBtb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwotICAgIH0KLX0KLQotdm9pZCBWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9v
bCB2aXNpYmxlLCBjb25zdCBGbG9hdFJlY3QmIGlubGluZVJlY3QpCi17Ci0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlZFRvUmV0dXJu
VG9JbmxpbmUoJXApIC0gdmlzaWJsZSglcykiLCB0aGlzLCBib29sU3RyaW5nKHZpc2libGUpKTsK
LSAgICBzZXRJbmxpbmVSZWN0KGlubGluZVJlY3QsIHZpc2libGUpOwotICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91dF07Ci0gICAgW1ttX3BsYXllclZpZXdD
b250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLSAgICBpZiAobV9wcmVwYXJlVG9Jbmxp
bmVDYWxsYmFjaykgewotICAgICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+IGNhbGxiYWNr
ID0gV1RGTW92ZShtX3ByZXBhcmVUb0lubGluZUNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2so
dmlzaWJsZSk7Ci0gICAgfQotfQotCi1ib29sIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZL
aXQ6Om1heUF1dG9tYXRpY2FsbHlTaG93VmlkZW9QaWN0dXJlSW5QaWN0dXJlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gW3BsYXllckNvbnRyb2xsZXIoKSBpc1BsYXlpbmddICYmIChtX3N0YW5kYnkg
fHwgbV9jdXJyZW50TW9kZS5pc0Z1bGxzY3JlZW4oKSkgJiYgc3VwcG9ydHNQaWN0dXJlSW5QaWN0
dXJlKCk7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6d2lsbFN0
YXJ0UGljdHVyZUluUGljdHVyZSgpCi17Ci0gICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNl
bnRhdGlvbkludGVyZmFjZUFWS2l0Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRo
aXMpOwotICAgIG1fZW50ZXJpbmdQaWN0dXJlSW5QaWN0dXJlID0gdHJ1ZTsKLQotICAgIGlmICht
X3N0YW5kYnkgJiYgIW1fY3VycmVudE1vZGUuaGFzVmlkZW8oKSkgewotICAgICAgICBbbV93aW5k
b3cgc2V0SGlkZGVuOk5PXTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEhpZGRlbjpOT107Ci0gICAgfQotCi0gICAgaWYgKGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNl
bnRhdGlvbk1vZGVsKCkpIHsKLSAgICAgICAgaWYgKCFtX2hhc1ZpZGVvQ29udGVudExheWVyKQot
ICAgICAgICAgICAgbW9kZWwtPnJlcXVlc3RWaWRlb0NvbnRlbnRMYXllcigpOwotICAgICAgICBt
b2RlbC0+d2lsbEVudGVyUGljdHVyZUluUGljdHVyZSgpOwotICAgIH0KLX0KLQotdm9pZCBWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQot
ewotICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6
ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwotICAgIHNldE1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSwgIW1f
ZW50ZXJGdWxsc2NyZWVuTmVlZHNFbnRlclBpY3R1cmVJblBpY3R1cmUpOwotICAgIFttX3BsYXll
clZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOwotICAgIFttX3Zp
ZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6Tk9dOwotCi0g
ICAgaWYgKG1fY3VycmVudE1vZGUuaGFzRnVsbHNjcmVlbigpKSB7Ci0gICAgICAgIG1fc2hvdWxk
UmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGljdHVyZUluUGljdHVyZSA9IHRydWU7Ci0g
ICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07Ci0g
ICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVT
IGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpc10g
KEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIGV4aXRGdWxsc2Ny
ZWVuSGFuZGxlcihzdWNjZXNzLCBlcnJvcik7Ci0gICAgICAgIH1dOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChtX3N0YW5kYnkgJiYgIW1fYmxvY2tzUmV0dXJuVG9GdWxsc2NyZWVuRnJvbVBp
Y3R1cmVJblBpY3R1cmUpCi0gICAgICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldo
ZW5TdG9wcGluZ1BpY3R1cmVJblBpY3R1cmUgPSB0cnVlOwotCi0gICAgICAgIFttX3dpbmRvdyBz
ZXRIaWRkZW46WUVTXTsKLSAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNl
dEhpZGRlbjpZRVNdOwotICAgIH0KLQotICAgIGlmIChtX2VudGVyRnVsbHNjcmVlbk5lZWRzRW50
ZXJQaWN0dXJlSW5QaWN0dXJlKQotICAgICAgICBkb0VudGVyRnVsbHNjcmVlbigpOwotfQotCi12
b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50
ZXJmYWNlQVZLaXQ6OmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOwot
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNd
OwotCi0gICAgbV90YXJnZXRNb2RlLnNldFBpY3R1cmVJblBpY3R1cmUoZmFsc2UpOwotICAgIGlm
IChtX2N1cnJlbnRNb2RlLmhhc0Z1bGxzY3JlZW4oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNlbnRhdGlvbk1vZGVsKCkpIHsKLSAgICAgICAgbW9k
ZWwtPmZhaWxlZFRvRW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgICAgIG1vZGVsLT5yZXF1
ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5N
b2RlTm9uZSk7Ci0gICAgICAgIG1vZGVsLT5mdWxsc2NyZWVuTW9kZUNoYW5nZWQoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Ci0gICAgICAgIG1vZGVsLT5m
YWlsZWRUb0VudGVyRnVsbHNjcmVlbigpOwotICAgIH0KLSAgICBtX2NoYW5naW5nU3RhbmRieU9u
bHkgPSBmYWxzZTsKLQotICAgIG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGlj
dHVyZSA9IGZhbHNlOwotICAgIG1fZXhpdEZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0
dXJlID0gZmFsc2U7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6
ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKQotewotICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9Q
cmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRo
aXMpOwotICAgIG1fdGFyZ2V0TW9kZS5zZXRQaWN0dXJlSW5QaWN0dXJlKGZhbHNlKTsKLSAgICBb
bV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOllFU107
Ci0KLSAgICBpZiAobV9yZXR1cm5pbmdUb1N0YW5kYnkpIHsKLSAgICAgICAgbV9leGl0aW5nUGlj
dHVyZUluUGljdHVyZSA9IGZhbHNlOwotICAgICAgICBtX2VudGVyaW5nUGljdHVyZUluUGljdHVy
ZSA9IGZhbHNlOwotICAgICAgICBpZiAoYXV0byBtb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9k
ZWwoKSkKLSAgICAgICAgICAgIG1vZGVsLT5kaWRFeGl0UGljdHVyZUluUGljdHVyZSgpOwotCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9jdXJyZW50TW9kZS5oYXNGdWxsc2Ny
ZWVuKCkpIHsKLSAgICAgICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9G
dWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUsICFtX2V4aXRGdWxsc2NyZWVuTmVlZHNFeGl0
UGljdHVyZUluUGljdHVyZSk7Ci0gICAgICAgIFttX3dpbmRvdyBtYWtlS2V5V2luZG93XTsKLSAg
ICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllF
U107Ci0KLSAgICAgICAgaWYgKG1fZXhpdEZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0
dXJlKQotICAgICAgICAgICAgZG9FeGl0RnVsbHNjcmVlbigpOwotICAgICAgICBlbHNlIGlmICht
X2V4aXRpbmdQaWN0dXJlSW5QaWN0dXJlKSB7Ci0gICAgICAgICAgICBtX2V4aXRpbmdQaWN0dXJl
SW5QaWN0dXJlID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoYXV0byBtb2RlbCA9IHZpZGVvUHJl
c2VudGF0aW9uTW9kZWwoKSkKLSAgICAgICAgICAgICAgICBtb2RlbC0+ZGlkRXhpdFBpY3R1cmVJ
blBpY3R1cmUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2VudGVyRnVsbHNjcmVlbk5l
ZWRzRXhpdFBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgICAgICBkb0VudGVyRnVsbHNjcmVlbigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUsICFtX2V4aXRGdWxs
c2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGljdHVyZSk7Ci0KLSAgICBbbV9wbGF5ZXJMYXllclZp
ZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLSAgICBbW21fcGxheWVyVmll
d0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsKLQot
ICAgIGlmIChtX2VudGVyRnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1cmVJblBpY3R1cmUpCi0gICAg
ICAgIGRvRW50ZXJGdWxsc2NyZWVuKCk7Ci0KLSAgICBpZiAobV9leGl0RnVsbHNjcmVlbk5lZWRz
RXhpdFBpY3R1cmVJblBpY3R1cmUpCi0gICAgICAgIGRvRXhpdEZ1bGxzY3JlZW4oKTsKLQotICAg
IGlmICghbV90YXJnZXRNb2RlLmhhc0Z1bGxzY3JlZW4oKSAmJiAhbV9jdXJyZW50TW9kZS5oYXNG
dWxsc2NyZWVuKCkgJiYgIW1faGFzVmlkZW9Db250ZW50TGF5ZXIpIHsKLSAgICAgICAgLy8gV2Ug
aGF2ZSBqdXN0IGV4aXRlZCBwaXAgYW5kIG5vdCBlbnRlcmVkIGZ1bGxzY3JlZW4gaW4gdHVybi4g
VG8gYXZvaWQgZ2V0dGluZwotICAgICAgICAvLyBzdHVjayBob2xkaW5nIHRoZSB2aWRlbyBjb250
ZW50IGxheWVyLCBleHBsaWNpdGx5IHJldHVybiBpdCBoZXJlOgotICAgICAgICBpZiAoYXV0byBt
b2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwoKSkKLSAgICAgICAgICAgIG1vZGVsLT5yZXR1
cm5WaWRlb1ZpZXcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZh
Y2VBVktpdDo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5k
bGVyKHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCi17Ci0gICAgTE9H
KEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpwcmVwYXJlRm9y
UGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIoJXApIiwgdGhpcyk7Ci0K
LSAgICBpZiAobV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaWN0dXJlSW5Q
aWN0dXJlKSB7Ci0gICAgICAgIG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5n
UGljdHVyZUluUGljdHVyZSA9IGZhbHNlOwotCi0gICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
Tk9dOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOk5P
XTsKLQotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gbGF5b3V0SWZOZWVk
ZWRdOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5Bbmlt
YXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6XihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKmVycm9y
KSB7Ci0gICAgICAgICAgICBlbnRlckZ1bGxzY3JlZW5IYW5kbGVyKHN1Y2Nlc3MsIGVycm9yKTsK
LSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN1Y2Nlc3MpOwotICAgICAgICB9XTsKLQot
ICAgICAgICBpZiAobV9zdGFuZGJ5KSB7Ci0gICAgICAgICAgICBtX3JldHVybmluZ1RvU3RhbmRi
eSA9IHRydWU7Ci0gICAgICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRBbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2s6Tk9dOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJlU3RvcChbcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHN0cm9uZ0NvbXBsZXRpb25IYW5kbGVyID0gYWRvcHROUyhb
Y29tcGxldGlvbkhhbmRsZXIgY29weV0pXShib29sIHJlc3RvcmVkKSAgewotICAgICAgICBMT0co
RnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpwcmVwYXJlRm9yUGlj
dHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIgbGFtYmRhKCVwKSAtIHJlc3Rv
cmVkKCVzKSIsIHByb3RlY3RlZFRoaXMucHRyKCksIGJvb2xTdHJpbmcocmVzdG9yZWQpKTsKLSAg
ICAgICAgKCh2b2lkICheKShCT09MKSlzdHJvbmdDb21wbGV0aW9uSGFuZGxlci5nZXQoKSkocmVz
dG9yZWQpOwotICAgIH0pOwotfQotCi1ib29sIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZL
aXQ6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihWaWRlb1ByZXNlbnRhdGlvbkludGVy
ZmFjZUlPUzo6RXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29uKQotewotICAgIC8vIEFWS2l0IGNh
bGxzIHBsYXllclZpZXdDb250cm9sbGVyOnNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbiBp
biB0aGUgc2NlbmFyaW8gdGhhdCB0aGUgZXhpdCBmdWxsc2NyZWVuIHJlcXVlc3QKLSAgICAvLyBp
cyBmcm9tIHRoZSB3ZWIgcHJvY2VzcyAoZS5nLiwgdGhyb3VnaCBKYXZhc2NyaXB0IEFQSSB2aWRl
b0VsZW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKSkuCi0gICAgLy8gV2UgaGF2ZSB0byBpZ25v
cmUgdGhlIGNhbGxiYWNrIGluIHRoYXQgY2FzZS4KLSAgICBpZiAobV9zaG91bGRJZ25vcmVBVktp
dENhbGxiYWNrQWJvdXRFeGl0RnVsbHNjcmVlblJlYXNvbikKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpOwotICAgIGlmICgh
bW9kZWwpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHJlYXNvbiA9PSBFeGl0RnVs
bFNjcmVlblJlYXNvbjo6UGljdHVyZUluUGljdHVyZVN0YXJ0ZWQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIChyZWFzb24gPT0gRXhp
dEZ1bGxTY3JlZW5SZWFzb246OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxs
U2NyZWVuUmVhc29uOjpSZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQpKQotICAgICAgICBw
bGF5YmFja1Nlc3Npb25Nb2RlbCgpLT5wYXVzZSgpOwotCi0gICAgaWYgKCFtX3dhdGNoZG9nVGlt
ZXIuaXNBY3RpdmUoKSAmJiAhaWdub3JlV2F0Y2hkb2dGb3JEZWJ1Z2dpbmcpCi0gICAgICAgIG1f
d2F0Y2hkb2dUaW1lci5zdGFydE9uZVNob3QoZGVmYXVsdFdhdGNoZG9nVGltZXJJbnRlcnZhbCk7
Ci0KLSNpZiBQTEFURk9STShXQVRDSE9TKQotICAgIG1fd2FpdGluZ0ZvclByZXBhcmVkVG9FeGl0
ID0gdHJ1ZTsKLSAgICBtb2RlbC0+d2lsbEV4aXRGdWxsc2NyZWVuKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotI2Vsc2UKLSAgICBCT09MIGZpbmlzaGVkID0gcmVhc29uID09IEV4aXRGdWxsU2NyZWVu
UmVhc29uOjpEb25lQnV0dG9uVGFwcGVkIHx8IHJlYXNvbiA9PSBFeGl0RnVsbFNjcmVlblJlYXNv
bjo6UGluY2hHZXN0dXJlSGFuZGxlZDsKLSAgICBtb2RlbC0+cmVxdWVzdEZ1bGxzY3JlZW5Nb2Rl
KEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUsIGZpbmlzaGVk
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUFWS2l0OjpzZXRJbmxpbmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgaW5saW5lUmVj
dCwgYm9vbCB2aXNpYmxlKQotewotICAgIG1faW5saW5lUmVjdCA9IGlubGluZVJlY3Q7Ci0gICAg
bV9pbmxpbmVJc1Zpc2libGUgPSB2aXNpYmxlOwotICAgIG1faGFzVXBkYXRlZElubGluZVJlY3Qg
PSB0cnVlOwotCi0gICAgaWYgKG1fcGxheWVyVmlld0NvbnRyb2xsZXIgJiYgbV9wYXJlbnRWaWV3
KSB7Ci0gICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICAgICAgW0NBVHJhbnNhY3Rp
b24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKLSAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgdmlld10uZnJhbWUgPSBbbV9wYXJlbnRWaWV3IGNvbnZlcnRSZWN0OmlubGluZVJlY3QgdG9W
aWV3OlttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddLnN1cGVydmlld107Ci0gICAgICAgIFtD
QVRyYW5zYWN0aW9uIGNvbW1pdF07Ci0gICAgfQotCi0gICAgaWYgKG1fc2V0dXBOZWVkc0lubGlu
ZVJlY3QpCi0gICAgICAgIGRvU2V0dXAoKTsKLQotICAgIGlmIChtX2V4aXRGdWxsc2NyZWVuTmVl
ZElubGluZVJlY3QpCi0gICAgICAgIGRvRXhpdEZ1bGxzY3JlZW4oKTsKLX0KLQotdm9pZCBWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Ojpkb1NldHVwKCkKLXsKLSAgICBpZiAobV9jdXJy
ZW50TW9kZS5oYXNWaWRlbygpICYmIG1fdGFyZ2V0TW9kZS5oYXNWaWRlbygpKSB7Ci0gICAgICAg
IEFMV0FZU19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImJvdGggdGFyZ2V0TW9kZSBh
bmQgY3VycmVudE1vZGUgaGF2ZVZpZGVvLCBiYWlsaW5nIik7Ci0gICAgICAgIG1fc3RhbmRieSA9
IG1fdGFyZ2V0U3RhbmRieTsKLSAgICAgICAgZmluYWxpemVTZXR1cCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgYXV0byBtb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwoKTsK
LSAgICBpZiAoIW1faGFzVXBkYXRlZElubGluZVJlY3QgJiYgbW9kZWwpIHsKLSAgICAgICAgQUxX
QVlTX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiIWhhc1VwZGF0ZWRJbmxpbmVSZWN0
LCBiYWlsaW5nIik7Ci0gICAgICAgIG1fc2V0dXBOZWVkc0lubGluZVJlY3QgPSB0cnVlOwotICAg
ICAgICBtb2RlbC0+cmVxdWVzdFVwZGF0ZUlubGluZVJlY3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX3NldHVwTmVlZHNJbmxpbmVSZWN0ID0gZmFsc2U7Ci0KLSAgICBbQ0FUcmFu
c2FjdGlvbiBiZWdpbl07Ci0gICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVT
XTsKLQotI2lmICFQTEFURk9STShXQVRDSE9TKQotICAgIGlmICghW1ttX3BhcmVudFZpZXcgd2lu
ZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzXSAmJiAhbV93aW5kb3cpIHsKLSAgICAgICAg
bV93aW5kb3cgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlXaW5kb3dJbnN0YW5jZSgpIGluaXRXaXRo
V2luZG93U2NlbmU6W1ttX3BhcmVudFZpZXcgd2luZG93XSB3aW5kb3dTY2VuZV1dKTsKLSAgICAg
ICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07Ci0gICAgICAg
IGlmICghbV92aWV3Q29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtQQUw6OmFsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOwotICAg
ICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21fd2luZG93IGJvdW5kc11d
OwotICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50
YXRpb25zOllFU107Ci0gICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bV92
aWV3Q29udHJvbGxlci5nZXQoKV07Ci0gICAgICAgIGF1dG8gdGV4dEVmZmVjdHNXaW5kb3dMZXZl
bCA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvICp0ZXh0RWZmZWN0c1dpbmRvdyA9IFtQQUw6Omdl
dFVJVGV4dEVmZmVjdHNXaW5kb3dDbGFzcygpIHNoYXJlZFRleHRFZmZlY3RzV2luZG93Rm9yV2lu
ZG93U2NlbmU6W21fd2luZG93IHdpbmRvd1NjZW5lXV07Ci0gICAgICAgICAgICByZXR1cm4gdGV4
dEVmZmVjdHNXaW5kb3cgPyB0ZXh0RWZmZWN0c1dpbmRvdy53aW5kb3dMZXZlbCA6IFBBTDo6Z2V0
X1VJS2l0X1VJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKTsKLSAgICAg
ICAgfSgpOwotICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6dGV4dEVmZmVjdHNXaW5k
b3dMZXZlbCAtIDFdOwotICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwotICAg
IH0KLSNlbmRpZiAvLyAhUExBVEZPUk0oV0FUQ0hPUykKLQotICAgIGlmICghbV9wbGF5ZXJMYXll
clZpZXcpCi0gICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHROUyhbYWxsb2NXZWJBVlBs
YXllckxheWVyVmlld0luc3RhbmNlKCkgaW5pdF0pOwotICAgIFttX3BsYXllckxheWVyVmlldyBz
ZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxheWJhY2tBY3RpdmVdXTsK
LSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigp
XTsKLSAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9WaWV3Om1fdmlkZW9WaWV3LmdldCgp
XTsKLQotICAgIGlmICghbV9jdXJyZW50TW9kZS5oYXNQaWN0dXJlSW5QaWN0dXJlKCkgJiYgIW1f
Y2hhbmdpbmdTdGFuZGJ5T25seSkgewotICAgICAgICBBTFdBWVNfTE9HX0lGX1BPU1NJQkxFKExP
R0lERU5USUZJRVIsICJNb3ZpbmcgdmlkZW9WaWV3IHRvIGZ1bGxzY3JlZW4gV2ViQVZQbGF5ZXJM
YXllclZpZXciKTsKLSAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6bV92aWRl
b1ZpZXcuZ2V0KCldOwotICAgIH0KLQotICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxheWVy
ID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJdOwot
Ci0gICAgcGxheWVyTGF5ZXIucHJlc2VudGF0aW9uTW9kZWwgPSBtb2RlbC5nZXQoKTsKLQotICAg
IGlmICghbV9wbGF5ZXJWaWV3Q29udHJvbGxlcikKLSAgICAgICAgbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciA9IGFkb3B0TlMoW1tXZWJBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0
aEZ1bGxzY3JlZW5JbnRlcmZhY2U6dGhpc10pOwotCi0gICAgW21fcGxheWVyVmlld0NvbnRyb2xs
ZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJDb250
cm9sbGVyKCldOwotICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1fcGxh
eWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07Ci0gICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVyZUlu
UGljdHVyZVBsYXliYWNrXTsKLSAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEFsbG93c1BpY3R1
cmVJblBpY3R1cmU6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOwotICAgIGlmICgh
bV9yb3V0aW5nQ29udGV4dFVJRC5pc0VtcHR5KCkpCi0gICAgICAgIFttX3BsYXllclZpZXdDb250
cm9sbGVyIHNldFdlYktpdE92ZXJyaWRlUm91dGVTaGFyaW5nUG9saWN5OihOU1VJbnRlZ2VyKW1f
cm91dGVTaGFyaW5nUG9saWN5IHJvdXRpbmdDb250ZXh0VUlEOm1fcm91dGluZ0NvbnRleHRVSURd
OwotCi0jaWYgUExBVEZPUk0oV0FUQ0hPUykKLSAgICBtX3ZpZXdDb250cm9sbGVyID0gbW9kZWwg
PyBtb2RlbC0+Y3JlYXRlVmlkZW9GdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIobV9wbGF5ZXJWaWV3
Q29udHJvbGxlci5nZXQoKS5hdlBsYXllclZpZXdDb250cm9sbGVyKSA6IG5pbDsKLSNlbmRpZgot
Ci0gICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKLSAgICAgICAgW21fdmlld0NvbnRyb2xsZXIg
YWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpLmF2UGxh
eWVyVmlld0NvbnRyb2xsZXJdOwotICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gYWRk
U3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07Ci0gICAgfSBlbHNlCi0gICAg
ICAgIFttX3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XV07Ci0KLSAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVu
dFZpZXcgY29udmVydFJlY3Q6bV9pbmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XS5zdXBlcnZpZXddOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXppbmdG
bGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlUmlnaHRNYXJn
aW4pXTsKLQotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xheW91
dF07Ci0gICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsK
LQotICAgIGlmIChtX3RhcmdldFN0YW5kYnkgJiYgIW1fY3VycmVudE1vZGUuaGFzVmlkZW8oKSAm
JiAhbV9yZXR1cm5pbmdUb1N0YW5kYnkpIHsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpZ
RVNdOwotICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVuOllF
U107Ci0gICAgfQotCi0gICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLQotICAgIGZpbmFsaXpl
U2V0dXAoKTsKLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Ojpkb0Vu
dGVyRnVsbHNjcmVlbigpCi17Ci0gICAgbV9zdGFuZGJ5ID0gbV90YXJnZXRTdGFuZGJ5OwotCi0g
ICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsKLSAgICBp
ZiAobV90YXJnZXRNb2RlLmhhc0Z1bGxzY3JlZW4oKSAmJiAhbV9jdXJyZW50TW9kZS5oYXNGdWxs
c2NyZWVuKCkpIHsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAgICAgIFtt
X3BsYXllclZpZXdDb250cm9sbGVyIGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0
aW9uSGFuZGxlcjpbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH1dIChCT09MIHN1
Y2Nlc3MsIE5TRXJyb3IgKmVycm9yKSB7Ci0gICAgICAgICAgICBlbnRlckZ1bGxzY3JlZW5IYW5k
bGVyKHN1Y2Nlc3MsIGVycm9yLCBOZXh0QWN0aW9uOjpOZWVkc0VudGVyRnVsbFNjcmVlbik7Ci0g
ICAgICAgIH1dOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fdGFyZ2V0TW9k
ZS5oYXNQaWN0dXJlSW5QaWN0dXJlKCkgJiYgIW1fY3VycmVudE1vZGUuaGFzUGljdHVyZUluUGlj
dHVyZSgpKSB7Ci0gICAgICAgIG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFbnRlclBpY3R1cmVJblBp
Y3R1cmUgPSB0cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB0cnlUb1N0YXJ0
UGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9lbnRlckZ1
bGxzY3JlZW5OZWVkc0VudGVyUGljdHVyZUluUGljdHVyZSA9IGZhbHNlOwotCi0gICAgaWYgKCFt
X3RhcmdldE1vZGUuaGFzRnVsbHNjcmVlbigpICYmIG1fY3VycmVudE1vZGUuaGFzRnVsbHNjcmVl
bigpKSB7Ci0gICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5p
bWF0ZWQ6WUVTIGNvbXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMg
fSwgdGhpc10gKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpIHsKLSAgICAgICAgICAgIGV4
aXRGdWxsc2NyZWVuSGFuZGxlcihzdWNjZXNzLCBlcnJvciwgTmV4dEFjdGlvbjo6TmVlZHNFbnRl
ckZ1bGxTY3JlZW4pOwotICAgICAgICB9XTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghbV90YXJnZXRNb2RlLmhhc1BpY3R1cmVJblBpY3R1cmUoKSAmJiBtX2N1cnJlbnRNb2Rl
Lmhhc1BpY3R1cmVJblBpY3R1cmUoKSkgewotICAgICAgICBtX2VudGVyRnVsbHNjcmVlbk5lZWRz
RXhpdFBpY3R1cmVJblBpY3R1cmUgPSB0cnVlOwotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9lbnRlckZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0dXJlID0gZmFsc2U7Ci0KLSAg
ICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpOwotICAgIGlmICghbW9kZWwp
Ci0gICAgICAgIHJldHVybjsKLSAgICBGbG9hdFNpemUgc2l6ZTsKLSNpZiBIQVZFKFBJQ1RVUkVJ
TlBJQ1RVUkVQTEFZRVJMQVlFUlZJRVcpCi0gICAgaWYgKG1fY3VycmVudE1vZGUuaGFzUGljdHVy
ZUluUGljdHVyZSgpKSB7Ci0gICAgICAgIGF1dG8gKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5Q
aWN0dXJlUGxheWVyTGF5ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1
cmVQbGF5ZXJMYXllclZpZXddOwotICAgICAgICBhdXRvICpwaXBQbGF5ZXJMYXllciA9IChXZWJB
VlBsYXllckxheWVyICopW3BpcFZpZXcgbGF5ZXJdOwotICAgICAgICBhdXRvIHZpZGVvRnJhbWUg
PSBbcGlwUGxheWVyTGF5ZXIgY2FsY3VsYXRlVGFyZ2V0VmlkZW9GcmFtZV07Ci0gICAgICAgIHNp
emUgPSBGbG9hdFNpemUodmlkZW9GcmFtZS5zaXplKCkpOwotICAgIH0KLSNlbmRpZgotICAgIG1v
ZGVsLT5kaWRFbnRlckZ1bGxzY3JlZW4oc2l6ZSk7Ci0gICAgbV9lbnRlcmluZ1BpY3R1cmVJblBp
Y3R1cmUgPSBmYWxzZTsKLSAgICBtX2NoYW5naW5nU3RhbmRieU9ubHkgPSBmYWxzZTsKLSAgICBp
ZiAobV9jdXJyZW50TW9kZS5oYXNQaWN0dXJlSW5QaWN0dXJlKCkpCi0gICAgICAgIG1vZGVsLT5k
aWRFbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRhdGlvbklu
dGVyZmFjZUFWS2l0Ojpkb0V4aXRGdWxsc2NyZWVuKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwg
IlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmRvRXhpdEZ1bGxzY3JlZW4oJXApIiwg
dGhpcyk7Ci0KLSAgICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpOwotICAg
IGlmIChtX2N1cnJlbnRNb2RlLmhhc1ZpZGVvKCkgJiYgIW1faGFzVXBkYXRlZElubGluZVJlY3Qg
JiYgbW9kZWwpIHsKLSAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRJbmxpbmVSZWN0ID0gdHJ1
ZTsKLSAgICAgICAgbW9kZWwtPnJlcXVlc3RVcGRhdGVJbmxpbmVSZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9leGl0RnVsbHNjcmVlbk5lZWRJbmxpbmVSZWN0ID0gZmFsc2U7
Ci0KLSAgICBpZiAobV9jdXJyZW50TW9kZS5oYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6
VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgewotICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJv
dGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXNdIChCT09MIHN1Y2Nlc3MsIE5TRXJyb3Ig
KmVycm9yKSB7Ci0gICAgICAgICAgICBleGl0RnVsbHNjcmVlbkhhbmRsZXIoc3VjY2VzcywgZXJy
b3IsIE5leHRBY3Rpb246Ok5lZWRzRXhpdEZ1bGxTY3JlZW4pOwotICAgICAgICB9XTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2N1cnJlbnRNb2RlLmhhc01vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSkpIHsK
LSAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1cmVJblBpY3R1cmUgPSB0cnVl
OwotICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpY3R1cmVJ
blBpY3R1cmUgPSBmYWxzZTsKLSAgICAgICAgW21fd2luZG93IHNldEhpZGRlbjpOT107Ci0gICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5QaWN0dXJlXTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2V4aXRGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUlu
UGljdHVyZSA9IGZhbHNlOwotCi0gICAgaWYgKG1faGFzVmlkZW9Db250ZW50TGF5ZXIgJiYgbW9k
ZWwpIHsKLSAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzUmV0dXJuQ29udGVudExheWVyID0g
dHJ1ZTsKLSAgICAgICAgbW9kZWwtPnJldHVyblZpZGVvQ29udGVudExheWVyKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzUmV0dXJuQ29udGVudExh
eWVyID0gZmFsc2U7Ci0KLSAgICBtX3N0YW5kYnkgPSBmYWxzZTsKLQotICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXNdIHsKLSAg
ICAgICAgaWYgKGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNlbnRhdGlvbk1vZGVsKCkpCi0gICAgICAg
ICAgICBtb2RlbC0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICAgICAgbV9jaGFuZ2luZ1N0YW5k
YnlPbmx5ID0gZmFsc2U7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VBVktpdDo6ZXhpdEZ1bGxzY3JlZW5IYW5kbGVyKEJPT0wgc3VjY2VzcywgTlNFcnJvciog
ZXJyb3IsIE5leHRBY3Rpb25zIG5leHRBY3Rpb25zKQotewotICAgIGlmICghc3VjY2VzcykKLSAg
ICAgICAgV1RGTG9nQWx3YXlzKCItW0FWUGxheWVyVmlld0NvbnRyb2xsZXIgZXhpdEZ1bGxTY3Jl
ZW5BbmltYXRlZDpjb21wbGV0aW9uSGFuZGxlcjpdIGZhaWxlZCB3aXRoIGVycm9yICVzIiwgW1tl
cnJvciBsb2NhbGl6ZWREZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOwotCi0gICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0OjpkaWRFeGl0RnVsbHNjcmVl
biglcCkgLSAlZCIsIHRoaXMsIHN1Y2Nlc3MpOwotCi0gICAgY2xlYXJNb2RlKEhUTUxNZWRpYUVs
ZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkLCBmYWxzZSk7Ci0KLSAgICBp
ZiAoaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVQaWN0
dXJlSW5QaWN0dXJlKSkgewotICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOllFU107Ci0gICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLSAgICB9
IGVsc2UgewotICAgICAgICBbQ0FUcmFuc2FjdGlvbiBiZWdpbl07Ci0gICAgICAgIFtDQVRyYW5z
YWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAgICAgIFttX3BsYXllckxheWVyVmll
dyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOwotICAgICAgICBbW21fcGxheWVy
Vmlld0NvbnRyb2xsZXIgdmlld10gc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xvcigpXTsK
LSAgICAgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKLSAgICB9Ci0KLSAgICBpZiAobmV4dEFj
dGlvbnMuY29udGFpbnMoTmV4dEFjdGlvbjo6TmVlZHNFbnRlckZ1bGxTY3JlZW4pKQotICAgICAg
ICBkb0VudGVyRnVsbHNjcmVlbigpOwotCi0gICAgaWYgKG5leHRBY3Rpb25zLmNvbnRhaW5zKE5l
eHRBY3Rpb246Ok5lZWRzRXhpdEZ1bGxTY3JlZW4pKQotICAgICAgICBkb0V4aXRGdWxsc2NyZWVu
KCk7Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6ZW50ZXJGdWxs
c2NyZWVuSGFuZGxlcihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IqIGVycm9yLCBOZXh0QWN0aW9ucyBu
ZXh0QWN0aW9ucykKLXsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCItW0FWUGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6Y29tcGxl
dGlvbkhhbmRsZXI6XSBmYWlsZWQgd2l0aCBlcnJvciAlcyIsIFtbZXJyb3IgbG9jYWxpemVkRGVz
Y3JpcHRpb25dIFVURjhTdHJpbmddKTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlQVZLaXQ6OmVudGVyRnVsbHNjcmVlblN0YW5kYXJkIC0gbGFtYmRhKCVw
KSIsIHRoaXMpOwotICAgIGlmICghbV9zdGFuZGJ5KQotICAgICAgICBzZXRNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkLCAhbmV4dEFjdGlvbnMu
Y29udGFpbnMoTmV4dEFjdGlvbjo6TmVlZHNFbnRlckZ1bGxTY3JlZW4pKTsKLQotICAgIC8vIE5P
VEU6IER1cmluZyBhICJyZXR1cm5Ub1N0YW5kYnkiIG9wZXJhdGlvbiwgdGhpcyB3aWxsIGNhdXNl
IHRoZSBBVktpdCBjb250cm9scwotICAgIC8vIHRvIGJlIHZpc2libGUgaWYgdGhlIHVzZXIgdGFw
cyBvbiB0aGUgZnVsbHNjcmVlbiBwcmVzZW50YXRpb24gYmVmb3JlIHRoZSBFbGVtZW50Ci0gICAg
Ly8gRnVsbHNjcmVlbiBwcmVzZW50YXRpb24gaXMgZnVsbHkgcmVzdG9yZWQuIFRoaXMgaXMgaW50
ZW50aW9uYWw7IGluIHRoZSBjYXNlIHRoYXQKLSAgICAvLyB0aGUgRWxlbWVudCBGdWxsc2NyZWVu
IHByZXNlbnRhdGlvbiBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhpcyBnaXZlcyB0aGUgdXNlcgot
ICAgIC8vIHRoZSBhYmlsaXR5IHRvIGRpc21pc3MgQVZLaXQgZnVsbHNjcmVlbi4KLSAgICBbbV9w
bGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVTXTsKLQotICAg
IGlmIChuZXh0QWN0aW9ucy5jb250YWlucyhOZXh0QWN0aW9uOjpOZWVkc0VudGVyRnVsbFNjcmVl
bikpCi0gICAgICAgIGRvRW50ZXJGdWxsc2NyZWVuKCk7Ci19Ci0KLU5PX1JFVFVSTl9EVUVfVE9f
QVNTRVJUIHZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdDo6d2F0Y2hkb2dUaW1l
ckZpcmVkKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJm
YWNlQVZLaXQ6OndhdGNoZG9nVGltZXJGaXJlZCglcCkgLSBubyBleGl0IGZ1bGxzY3JlZW4gcmVz
cG9uc2UgaW4gJWdzOyBmb3JjaW5nIGZ1bGxzY3JlZW4gaGlkZGVuLiIsIHRoaXMsIGRlZmF1bHRX
YXRjaGRvZ1RpbWVySW50ZXJ2YWwudmFsdWUoKSk7Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgW21fd2luZG93IHNldEhpZGRlbjpZRVNdOwotICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBzZXRIaWRkZW46WUVTXTsKLX0KLQotYm9vbCBWaWRlb1ByZXNlbnRhdGlvbklu
dGVyZmFjZUFWS2l0Ojppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gaGFzTW9kZShXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZp
ZGVvRnVsbHNjcmVlbk1vZGVQaWN0dXJlSW5QaWN0dXJlKSAmJiBbcGxheWVyQ29udHJvbGxlcigp
IGlzUGxheWluZ107Ci19Ci0KLXN0YXRpYyBzdGQ6Om9wdGlvbmFsPGJvb2w+IGlzUGljdHVyZUlu
UGljdHVyZVN1cHBvcnRlZDsKLQotdm9pZCBXZWJDb3JlOjpzZXRTdXBwb3J0c1BpY3R1cmVJblBp
Y3R1cmUoYm9vbCBpc1N1cHBvcnRlZCkKLXsKLSAgICBpc1BpY3R1cmVJblBpY3R1cmVTdXBwb3J0
ZWQgPSBpc1N1cHBvcnRlZDsKLX0KLQotYm9vbCBXZWJDb3JlOjpzdXBwb3J0c1BpY3R1cmVJblBp
Y3R1cmUoKQotewotI2lmIEVOQUJMRShWSURFT19QUkVTRU5UQVRJT05fTU9ERSkgJiYgIVBMQVRG
T1JNKFdBVENIT1MpCi0gICAgaWYgKGlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRlZC5oYXNfdmFs
dWUoKSkKLSAgICAgICAgcmV0dXJuICppc1BpY3R1cmVJblBpY3R1cmVTdXBwb3J0ZWQ7Ci0gICAg
cmV0dXJuIFtnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyQ2xhc3MoKSBpc1BpY3R1cmVJ
blBpY3R1cmVTdXBwb3J0ZWRdOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
LQotI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpICYmIEhBVkUoQVZLSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZh
Y2VJT1MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRhdGlvbklu
dGVyZmFjZUlPUy5oCmluZGV4IDA3ZDlmZjYzMDM3MC4uZDZjNzE0Njg0YWIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJ
T1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VJT1MuaApAQCAtMjYsNyArMjYsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgSEFWRShBVktJ
VCkKIAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50RW51bXMuaCIKQEAgLTQ5LDE2ICs0OSwxOSBAQCBPQkpDX0NMQVNTIFVJVmlld0NvbnRyb2xs
ZXI7CiBPQkpDX0NMQVNTIFVJV2luZG93OwogT0JKQ19DTEFTUyBVSVZpZXc7CiBPQkpDX0NMQVNT
IENBTGF5ZXI7Ci1PQkpDX0NMQVNTIE5TRXJyb3I7CiBPQkpDX0NMQVNTIFdlYkFWUGxheWVyQ29u
dHJvbGxlcjsKIE9CSkNfQ0xBU1MgV2ViQVZQbGF5ZXJMYXllclZpZXc7CitPQkpDX0NMQVNTIFdl
YkFWUGxheWVyTGF5ZXI7CitPQkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXI7CitP
QkpDX0NMQVNTIFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZTsKK09CSkNfQ0xBU1Mg
TlNFcnJvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFz
cyBGbG9hdFNpemU7CiAKLWNsYXNzIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TCitjbGFz
cyBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUyBmaW5hbAogICAgIDogcHVibGljIFZpZGVv
UHJlc2VudGF0aW9uTW9kZWxDbGllbnQKICAgICAsIHB1YmxpYyBQbGF5YmFja1Nlc3Npb25Nb2Rl
bENsaWVudAogICAgICwgcHVibGljIFZpZGVvRnVsbHNjcmVlbkNhcHRpb25zCkBAIC02OSwyNiAr
NzIsMjggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VmlkZW9QcmVzZW50
YXRpb25Nb2RlbChWaWRlb1ByZXNlbnRhdGlvbk1vZGVsKik7CiAgICAgUGxheWJhY2tTZXNzaW9u
SW50ZXJmYWNlSU9TJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UoKSBjb25zdCB7IHJldHVybiBt
X3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZS5nZXQoKTsgfQogICAgIFBsYXliYWNrU2Vzc2lvbk1v
ZGVsKiBwbGF5YmFja1Nlc3Npb25Nb2RlbCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlLT5wbGF5YmFja1Nlc3Npb25Nb2RlbCgpOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQoY29uc3QgRmxvYXRTaXplJikg
PSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzZXR1cEZ1bGxzY3JlZW4oVUlW
aWV3JiB2aWRlb1ZpZXcsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbFJlY3QsIGNvbnN0IEZsb2F0
U2l6ZSYgdmlkZW9EaW1lbnNpb25zLCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1l
bnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSwgYm9vbCBhbGxvd3NQaWN0dXJlSW5QaWN0dXJl
UGxheWJhY2ssIGJvb2wgc3RhbmRieSwgYm9vbCBibG9ja3NSZXR1cm5Ub0Z1bGxzY3JlZW5Gcm9t
UGljdHVyZUluUGljdHVyZSkgPSAwOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBz
ZXRQbGF5ZXJJZGVudGlmaWVyKHN0ZDo6b3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPikg
PSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChi
b29sKSA9IDA7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGV4dGVybmFsUGxheWJh
Y2tDaGFuZ2VkKGJvb2wgZW5hYmxlZCwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxh
eWJhY2tUYXJnZXRUeXBlLCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERldmljZU5hbWUpID0gMDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKmF2UGxh
eWVyVmlld0NvbnRyb2xsZXIoKSBjb25zdCA9IDA7Ci0gICAgV2ViQVZQbGF5ZXJDb250cm9sbGVy
ICpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXZWJBVlBsYXllckxheWVy
VmlldyAqcGxheWVyTGF5ZXJWaWV3KCkgY29uc3QgPSAwOworICAgIC8vIFZpZGVvUHJlc2VudGF0
aW9uTW9kZWxDbGllbnQKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChi
b29sKSBmaW5hbDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHZpZGVvRGltZW5zaW9uc0NoYW5n
ZWQoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQ
bGF5ZXJJZGVudGlmaWVyKHN0ZDo6b3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPikgZmlu
YWw7CisKKyAgICAvLyBQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudAorICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXh0ZXJuYWxQbGF5YmFja0NoYW5nZWQoYm9vbCBlbmFibGVkLCBQbGF5YmFja1Nl
c3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0IFN0cmluZyYgbG9j
YWxpemVkRGV2aWNlTmFtZSkgZmluYWw7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldHVw
RnVsbHNjcmVlbihVSVZpZXcmIHZpZGVvVmlldywgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsUmVj
dCwgY29uc3QgRmxvYXRTaXplJiB2aWRlb0RpbWVuc2lvbnMsIFVJVmlldyogcGFyZW50Vmlldywg
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIGFsbG93c1Bp
Y3R1cmVJblBpY3R1cmVQbGF5YmFjaywgYm9vbCBzdGFuZGJ5LCBib29sIGJsb2Nrc1JldHVyblRv
RnVsbHNjcmVlbkZyb21QaWN0dXJlSW5QaWN0dXJlKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGVudGVyRnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBleGl0
RnVsbHNjcmVlbihjb25zdCBGbG9hdFJlY3QmIGZpbmFsUmVjdCkgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgZXhpdEZ1bGxzY3JlZW4oY29uc3QgRmxvYXRSZWN0JiBmaW5hbFJlY3QpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhpdEZ1bGxzY3JlZW5XaXRob3V0QW5pbWF0aW9uVG9N
b2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFudXBGdWxsc2NyZWVuKCkgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xlYW51cEZ1bGxzY3JlZW4oKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGludmFsaWRhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpID0gMDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgcHJlcGFyZWRUb1JldHVyblRvSW5saW5lKGJvb2wgdmlzaWJsZSwgY29uc3QgRmxv
YXRSZWN0JiBpbmxpbmVSZWN0KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXF1ZXN0
SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwcmVwYXJl
ZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBGbG9hdFJlY3QmIGlubGluZVJl
Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFyZWRUb0V4aXRGdWxsc2NyZWVuKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIYXNWaWRlb0NvbnRlbnRMYXllcihib29sKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2V0SW5saW5lUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHZpc2libGUpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElu
bGluZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCB2aXNpYmxlKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHByZXBhcmVkVG9SZXR1cm5Ub1N0YW5kYnkoKTsKKyAgICBib29sIGNoYW5naW5n
U3RhbmRieU9ubHkoKSB7IHJldHVybiBtX2NoYW5naW5nU3RhbmRieU9ubHk7IH0KIAogICAgIGVu
dW0gY2xhc3MgRXhpdEZ1bGxTY3JlZW5SZWFzb24gewogICAgICAgICBEb25lQnV0dG9uVGFwcGVk
LApAQCAtMTI2LDMyICsxMzEsMzcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBSZWZQdHI8Vmlk
ZW9QcmVzZW50YXRpb25Nb2RlbD4gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlkZW9QcmVzZW50YXRpb25Nb2RlbC5nZXQoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRFeGl0RnVsbHNjcmVlbldpdGhSZWFzb24oRXhpdEZ1bGxTY3JlZW5SZWFzb24pID0gMDsK
KyAgICBib29sIHNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNvbihFeGl0RnVsbFNjcmVlblJl
YXNvbik7CiAgICAgSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRNb2RlLm1vZGUoKTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGlj
dHVyZSgpIGNvbnN0ID0gMDsKKyAgICBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFj
aygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOyB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBtYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUlu
UGljdHVyZSgpIGNvbnN0OwogICAgIHZvaWQgcHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9w
KEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYXBwbGljYXRpb25EaWRCZWNvbWVBY3RpdmUoKTsKICAgICBib29sIGluUGljdHVyZUluUGlj
dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50ZXJpbmdQaWN0dXJlSW5QaWN0dXJlIHx8IG1fY3Vy
cmVudE1vZGUuaGFzUGljdHVyZUluUGljdHVyZSgpOyB9CiAgICAgYm9vbCByZXR1cm5pbmdUb1N0
YW5kYnkoKSBjb25zdCB7IHJldHVybiBtX3JldHVybmluZ1RvU3RhbmRieTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmFp
bGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKSA9IDA7CisgICAgdm9pZCB3aWxsU3RhcnRQaWN0
dXJlSW5QaWN0dXJlKCk7CisgICAgdm9pZCBkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKKyAg
ICB2b2lkIGZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CiAgICAgdm9pZCB3aWxsU3Rv
cFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBp
Y3R1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JQaWN0dXJlSW5QaWN0dXJl
U3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3QgPSAwOwor
ICAgIHZvaWQgZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB2b2lkIHByZXBhcmVGb3JQ
aWN0dXJlSW5QaWN0dXJlU3RvcFdpdGhDb21wbGV0aW9uSGFuZGxlcih2b2lkICheKShCT09MKSk7
CisgICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpW
aWRlb0Z1bGxzY3JlZW5Nb2RlLCBib29sIHNob3VsZE5vdGlmeU1vZGVsKTsKICAgICB2b2lkIGNs
ZWFyTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wg
c2hvdWxkTm90aWZ5TW9kZWwpOwogICAgIGJvb2wgaGFzTW9kZShIVE1MTWVkaWFFbGVtZW50RW51
bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUgbW9kZSkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50TW9k
ZS5oYXNNb2RlKG1vZGUpOyB9CisKICNpZiBQTEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9STShB
UFBMRVRWKQogICAgIFVJVmlld0NvbnRyb2xsZXIgKnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigp
OwogICAgIFVJVmlld0NvbnRyb2xsZXIgKmZ1bGxzY3JlZW5WaWV3Q29udHJvbGxlcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmlld0NvbnRyb2xsZXIuZ2V0KCk7IH0KICNlbmRpZgotICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgYm9vbCBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmlu
Z0JhY2tncm91bmQoKSBjb25zdCA9IDA7CisgICAgV2ViQVZQbGF5ZXJMYXllclZpZXcgKnBsYXll
ckxheWVyVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyTGF5ZXJWaWV3LmdldCgpOyB9Cisg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRl
cmluZ0JhY2tncm91bmQoKSBjb25zdDsKIAogICAgIHN0ZDo6b3B0aW9uYWw8TWVkaWFQbGF5ZXJJ
ZGVudGlmaWVyPiBwbGF5ZXJJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXJJZGVu
dGlmaWVyOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqYXZQ
bGF5ZXJWaWV3Q29udHJvbGxlcigpIGNvbnN0OworICAgIFdlYkFWUGxheWVyQ29udHJvbGxlciAq
cGxheWVyQ29udHJvbGxlcigpIGNvbnN0OwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAg
ICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0OwpAQCAtMTYwLDYzICsxNzAsODEg
QEAgcHVibGljOgogICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdDsKICNlbmRp
ZgogCi1wcm90ZWN0ZWQ6Ci0gICAgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MoUGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlSU9TJik7Ci0gICAgUnVuTG9vcDo6VGltZXIgbV93YXRjaGRvZ1Rp
bWVyOwotICAgIFJldGFpblB0cjxVSVZpZXc+IG1fcGFyZW50VmlldzsKK3ByaXZhdGU6CisgICAg
V0VCQ09SRV9FWFBPUlQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MoUGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlSU9TJik7CisKKyAgICB2b2lkIGRvU2V0dXAoKTsKKyAgICB2b2lkIGZpbmFs
aXplU2V0dXAoKTsKKyAgICB2b2lkIGRvRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIHJldHVy
blRvU3RhbmRieSgpOworICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKKyAgICB2b2lkIHdh
dGNoZG9nVGltZXJGaXJlZCgpOworCisgICAgZW51bSBjbGFzcyBOZXh0QWN0aW9uIDogdWludDhf
dCB7CisgICAgICAgIE5lZWRzRW50ZXJGdWxsU2NyZWVuID0gMSA8PCAwLAorICAgICAgICBOZWVk
c0V4aXRGdWxsU2NyZWVuID0gMSA8PCAxLAorICAgIH07CisgICAgdXNpbmcgTmV4dEFjdGlvbnMg
PSBPcHRpb25TZXQ8TmV4dEFjdGlvbj47CisKKyAgICB2b2lkIGV4aXRGdWxsc2NyZWVuSGFuZGxl
cihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKiwgTmV4dEFjdGlvbnMgPSBOZXh0QWN0aW9ucygpKTsK
KyAgICB2b2lkIGVudGVyRnVsbHNjcmVlbkhhbmRsZXIoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICos
IE5leHRBY3Rpb25zID0gTmV4dEFjdGlvbnMoKSk7CisKKyAgICBNb2RlIG1fY3VycmVudE1vZGU7
CiAgICAgTW9kZSBtX3RhcmdldE1vZGU7Ci0gICAgUm91dGVTaGFyaW5nUG9saWN5IG1fcm91dGVT
aGFyaW5nUG9saWN5IHsgUm91dGVTaGFyaW5nUG9saWN5OjpEZWZhdWx0IH07Ci0gICAgU3RyaW5n
IG1fcm91dGluZ0NvbnRleHRVSUQ7CisKKyAgICBSZWY8UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
SU9TPiBtX3BsYXliYWNrU2Vzc2lvbkludGVyZmFjZTsKKyAgICBzdGQ6Om9wdGlvbmFsPE1lZGlh
UGxheWVySWRlbnRpZmllcj4gbV9wbGF5ZXJJZGVudGlmaWVyOworICAgIFJldGFpblB0cjxXZWJB
VlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGU+IG1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxl
Z2F0ZTsKKyAgICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJWaWV3Q29udHJvbGxlcj4gbV9wbGF5ZXJW
aWV3Q29udHJvbGxlcjsKICAgICBUaHJlYWRTYWZlV2Vha1B0cjxWaWRlb1ByZXNlbnRhdGlvbk1v
ZGVsPiBtX3ZpZGVvUHJlc2VudGF0aW9uTW9kZWw7Ci0gICAgYm9vbCBtX2Jsb2Nrc1JldHVyblRv
RnVsbHNjcmVlbkZyb21QaWN0dXJlSW5QaWN0dXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdGFy
Z2V0U3RhbmRieSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NsZWFudXBOZWVkc1JldHVyblZpZGVv
Q29udGVudExheWVyIHsgZmFsc2UgfTsKLSAgICBib29sIG1fc3RhbmRieSB7IGZhbHNlIH07Ci0g
ICAgTW9kZSBtX2N1cnJlbnRNb2RlOwotICAgIGJvb2wgbV9lbnRlcmluZ1BpY3R1cmVJblBpY3R1
cmUgeyBmYWxzZSB9OworCisgICAgLy8gVGhlc2UgYXJlIG9ubHkgdXNlZCB3aGVuIGZ1bGxzY3Jl
ZW4gaXMgcHJlc2VudGVkIGluIGEgc2VwYXJhdGUgd2luZG93LgogICAgIFJldGFpblB0cjxVSVdp
bmRvdz4gbV93aW5kb3c7CiAgICAgUmV0YWluUHRyPFVJVmlld0NvbnRyb2xsZXI+IG1fdmlld0Nv
bnRyb2xsZXI7Ci0gICAgYm9vbCBtX2hhc1ZpZGVvQ29udGVudExheWVyIHsgZmFsc2UgfTsKKyAg
ICBSZXRhaW5QdHI8VUlWaWV3PiBtX3ZpZGVvVmlldzsKKyAgICBSZXRhaW5QdHI8VUlWaWV3PiBt
X3BhcmVudFZpZXc7CisgICAgUmV0YWluUHRyPFVJV2luZG93PiBtX3BhcmVudFdpbmRvdzsKKyAg
ICBSZXRhaW5QdHI8V2ViQVZQbGF5ZXJMYXllclZpZXc+IG1fcGxheWVyTGF5ZXJWaWV3OwogICAg
IEZ1bmN0aW9uPHZvaWQoYm9vbCk+IG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2s7Ci0gICAgc3Rk
OjpvcHRpb25hbDxNZWRpYVBsYXllcklkZW50aWZpZXI+IG1fcGxheWVySWRlbnRpZmllcjsKLSAg
ICBib29sIG1fZXhpdGluZ1BpY3R1cmVJblBpY3R1cmUgeyBmYWxzZSB9OworICAgIFJ1bkxvb3A6
OlRpbWVyIG1fd2F0Y2hkb2dUaW1lcjsKKyAgICBGbG9hdFJlY3QgbV9pbmxpbmVSZWN0OworICAg
IFJvdXRlU2hhcmluZ1BvbGljeSBtX3JvdXRlU2hhcmluZ1BvbGljeSB7IFJvdXRlU2hhcmluZ1Bv
bGljeTo6RGVmYXVsdCB9OworICAgIFN0cmluZyBtX3JvdXRpbmdDb250ZXh0VUlEOworICAgIGJv
b2wgbV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2sgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9zaG91bGRSZXR1cm5Ub0Z1bGxzY3JlZW5XaGVuU3RvcHBpbmdQaWN0dXJlSW5QaWN0dXJlIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGlj
dHVyZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2VudGVyRnVsbHNjcmVlbk5lZWRzRW50ZXJQaWN0
dXJlSW5QaWN0dXJlIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzVXBkYXRlZElubGluZVJlY3Qg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9pbmxpbmVJc1Zpc2libGUgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9ibG9ja3NSZXR1cm5Ub0Z1bGxzY3JlZW5Gcm9tUGljdHVyZUluUGljdHVyZSB7IGZhbHNl
IH07CiAgICAgYm9vbCBtX3JldHVybmluZ1RvU3RhbmRieSB7IGZhbHNlIH07Ci0gICAgYm9vbCBt
X2V4aXRGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGljdHVyZSB7IGZhbHNlIH07CisKICAg
ICBib29sIG1fc2V0dXBOZWVkc0lubGluZVJlY3QgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9leGl0
RnVsbHNjcmVlbk5lZWRJbmxpbmVSZWN0IHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9maW5hbGl6
ZVNldHVwTmVlZHNWaWRlb0NvbnRlbnRMYXllciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NsZWFu
dXBOZWVkc1JldHVyblZpZGVvQ29udGVudExheWVyIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9m
aW5hbGl6ZVNldHVwTmVlZHNSZXR1cm5WaWRlb0NvbnRlbnRMYXllciB7IGZhbHNlIH07CisKKyAg
ICBib29sIG1fZXhpdEZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0dXJlIHsgZmFsc2Ug
fTsKICAgICBib29sIG1fZXhpdEZ1bGxzY3JlZW5OZWVkc1JldHVybkNvbnRlbnRMYXllciB7IGZh
bHNlIH07Ci0gICAgRmxvYXRSZWN0IG1faW5saW5lUmVjdDsKIAotICAgIHZvaWQgZmluYWxpemVT
ZXR1cCgpOworICAgIGJvb2wgbV9lbnRlckZ1bGxzY3JlZW5OZWVkc0VudGVyUGljdHVyZUluUGlj
dHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2VudGVyRnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1
cmVJblBpY3R1cmUgeyBmYWxzZSB9OwogCi0gICAgZW51bSBjbGFzcyBOZXh0QWN0aW9uIDogdWlu
dDhfdCB7Ci0gICAgICAgIE5lZWRzRW50ZXJGdWxsU2NyZWVuID0gMSA8PCAwLAotICAgICAgICBO
ZWVkc0V4aXRGdWxsU2NyZWVuID0gMSA8PCAxLAotICAgIH07Ci0gICAgdXNpbmcgTmV4dEFjdGlv
bnMgPSBPcHRpb25TZXQ8TmV4dEFjdGlvbj47CisgICAgYm9vbCBtX2hhc1ZpZGVvQ29udGVudExh
eWVyIHsgZmFsc2UgfTsKKworICAgIGJvb2wgbV9oYXNVcGRhdGVkSW5saW5lUmVjdCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lubGluZUlzVmlzaWJsZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX3N0
YW5kYnkgeyBmYWxzZSB9OworICAgIGJvb2wgbV90YXJnZXRTdGFuZGJ5IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1fY2hhbmdpbmdTdGFuZGJ5T25seSB7IGZhbHNlIH07CiAKICNpZiBQTEFURk9STShX
QVRDSE9TKQogICAgIGJvb2wgbV93YWl0aW5nRm9yUHJlcGFyZWRUb0V4aXQgeyBmYWxzZSB9Owog
I2VuZGlmCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBkb1NldHVwKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkb0V4aXRGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZvaWQgcmV0dXJuVG9TdGFu
ZGJ5KCk7Ci0gICAgdmlydHVhbCB2b2lkIGRvRW50ZXJGdWxsc2NyZWVuKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB3YXRjaGRvZ1RpbWVyRmlyZWQoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZXhpdEZ1bGxzY3JlZW5IYW5kbGVyKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqLCBOZXh0QWN0aW9u
cyA9IE5leHRBY3Rpb25zKCkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW50ZXJGdWxsc2NyZWVu
SGFuZGxlcihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKiwgTmV4dEFjdGlvbnMgPSBOZXh0QWN0aW9u
cygpKSA9IDA7Ci0KLSAgICBib29sIG1fZmluYWxpemVTZXR1cE5lZWRzVmlkZW9Db250ZW50TGF5
ZXIgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9maW5hbGl6ZVNldHVwTmVlZHNSZXR1cm5WaWRlb0Nv
bnRlbnRMYXllciB7IGZhbHNlIH07Ci0gICAgUmVmPFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUlP
Uz4gbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2U7CisgICAgYm9vbCBtX3Nob3VsZElnbm9yZUFW
S2l0Q2FsbGJhY2tBYm91dEV4aXRGdWxsc2NyZWVuUmVhc29uIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fZW50ZXJpbmdQaWN0dXJlSW5QaWN0dXJlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZXhpdGlu
Z1BpY3R1cmVJblBpY3R1cmUgeyBmYWxzZSB9OwogfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNlbmRpZiAvLyBQTEFURk9STShJ
T1NfRkFNSUxZKSAmJiBIQVZFKEFWS0lUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TLm1tCmluZGV4IDU4
NjcyMmYwNTI2My4uMDYzNjBhY2IwMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TLm1tCkBAIC0y
NiwxNyArMjYsMjIgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiVmlkZW9QcmVzZW50
YXRpb25JbnRlcmZhY2VJT1MuaCIKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgJiYgSEFWRShBVktJVCkKIAogI2ltcG9ydCAiTG9nZ2luZy5oIgog
I2ltcG9ydCAiUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrcy5oIgogI2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiVUlWaWV3
Q29udHJvbGxlclV0aWxpdGllcy5oIgorI2ltcG9ydCAiV2ViQVZQbGF5ZXJDb250cm9sbGVyLmgi
CisjaW1wb3J0ICJXZWJBVlBsYXllckxheWVyLmgiCisjaW1wb3J0ICJXZWJBVlBsYXllckxheWVy
Vmlldy5oIgorI2ltcG9ydCA8QVZGb3VuZGF0aW9uL0FWVGltZS5oPgogI2ltcG9ydCA8VUlLaXQv
VUlLaXQuaD4KICNpbXBvcnQgPFVJS2l0L1VJV2luZG93Lmg+CiAjaW1wb3J0IDxvYmpjL21lc3Nh
Z2UuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgorI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9B
VktpdFNQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9pb3MvVUlLaXRTUEkuaD4KICNpbXBvcnQgPHd0
Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ0LDggKzQ5LDgzNSBA
QAogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKKyNpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorI2ltcG9ydCA8QVZLaXQvQVZQaWN0
dXJlSW5QaWN0dXJlQ29udHJvbGxlci5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCisjaW1wb3J0IDxwYWwvY2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgPHBh
bC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgorI2ltcG9ydCA8cGFsL2lvcy9VSUtpdFNv
ZnRMaW5rLmg+CisKKyNpZiAhUExBVEZPUk0oV0FUQ0hPUykgJiYgIVBMQVRGT1JNKEFQUExFVFYp
CitzdGF0aWMgY29uc3QgTlNUaW1lSW50ZXJ2YWwgcGxheWJhY2tDb250cm9sc1Zpc2libGVEdXJh
dGlvbkFmdGVyUmVzZXR0aW5nVmlkZW9Tb3VyY2UgPSAxLjA7CisjZW5kaWYKKworU09GVExJTktf
QVZLSVRfRlJBTUVXT1JLKCkKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwgQVZQaWN0
dXJlSW5QaWN0dXJlQ29udHJvbGxlcikKK1NPRlRfTElOS19DTEFTU19PUFRJT05BTChBVktpdCwg
QVZQbGF5ZXJWaWV3Q29udHJvbGxlcikKKworI2lmIEhBVkUoUElQX0NPTlRST0xMRVIpCitTT0ZU
X0xJTktfQ0xBU1NfT1BUSU9OQUwoQVZLaXQsIEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJD
b250ZW50U291cmNlKQorU09GVF9MSU5LX0NMQVNTX09QVElPTkFMKEFWS2l0LCBBVlBpY3R1cmVJ
blBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXIpCisjZW5kaWYKKworQGludGVyZmFjZSBVSVdp
bmRvdyAoKQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzOworQGVuZAorCitAaW50
ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKCkKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24s
IHNldHRlcj1fc2V0SWdub3JlQXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOikgQk9PTCBfaWdub3Jl
QXBwU3VwcG9ydGVkT3JpZW50YXRpb25zOworQGVuZAorCitzdGF0aWMgVUlDb2xvciAqY2xlYXJV
SUNvbG9yKCkKK3sKKyAgICByZXR1cm4gKFVJQ29sb3IgKilbUEFMOjpnZXRVSUNvbG9yQ2xhc3Mo
KSBjbGVhckNvbG9yXTsKK30KKworI2lmICFMT0dfRElTQUJMRUQKK3N0YXRpYyBjb25zdCBjaGFy
KiBib29sU3RyaW5nKGJvb2wgdmFsKQoreworICAgIHJldHVybiB2YWwgPyAidHJ1ZSIgOiAiZmFs
c2UiOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGRlZmF1bHRXYXRjaGRvZ1Rp
bWVySW50ZXJ2YWwgeyAxX3MgfTsKK3N0YXRpYyBib29sIGlnbm9yZVdhdGNoZG9nRm9yRGVidWdn
aW5nID0gZmFsc2U7CisKK0BpbnRlcmZhY2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAoRGV0YWls
cykKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBCT09MIHNob3dzUGxheWJhY2tDb250cm9sczsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljKSBVSVZpZXcqIHZpZXc7CitAZW5kCisKK0BjbGFzcyBXZWJBVk1l
ZGlhU2VsZWN0aW9uT3B0aW9uOworCitAaW50ZXJmYWNlIFdlYkFWUGxheWVyVmlld0NvbnRyb2xs
ZXJEZWxlZ2F0ZSA6IE5TT2JqZWN0IDwKKyAgICBBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdh
dGUKKyNpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorICAgICwgQVZQaWN0dXJlSW5QaWN0dXJlQ29u
dHJvbGxlckRlbGVnYXRlCisjZW5kaWYKKz4geworICAgIFRocmVhZFNhZmVXZWFrUHRyPFZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TPiBfZnVsbHNjcmVlbkludGVyZmFjZTsKK30KK0Bwcm9w
ZXJ0eSAobm9uYXRvbWljLCBhc3NpZ24gLyogd2VhayAqLykgUmVmUHRyPFZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlSU9TPiBmdWxsc2NyZWVuSW50ZXJmYWNlOworI2lmICFQTEFURk9STShBUFBM
RVRWKQorLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxlcjooQVZQbGF5ZXJWaWV3Q29udHJvbGxl
ciAqKXBsYXllclZpZXdDb250cm9sbGVyIHNob3VsZEV4aXRGdWxsU2NyZWVuV2l0aFJlYXNvbjoo
QVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2NyZWVuUmVhc29uKXJlYXNvbjsKKyNlbHNl
CistIChCT09MKXBsYXllclZpZXdDb250cm9sbGVyU2hvdWxkRGlzbWlzczooQVZQbGF5ZXJWaWV3
Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyOworI2VuZGlmCitAZW5kCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUKKy0gKFJlZlB0cjxW
aWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUz4pZnVsbHNjcmVlbkludGVyZmFjZQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIF9mdWxsc2NyZWVuSW50ZXJmYWNl
LmdldCgpOworfQorCistICh2b2lkKXNldEZ1bGxzY3JlZW5JbnRlcmZhY2U6KFJlZlB0cjxWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUz4pZnVsbHNjcmVlbkludGVyZmFjZQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFmdWxsc2NyZWVuSW50ZXJmYWNlKSB7Cisg
ICAgICAgIF9mdWxsc2NyZWVuSW50ZXJmYWNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBfZnVsbHNjcmVlbkludGVyZmFjZSA9IFRocmVhZFNhZmVXZWFrUHRyIHsgKmZ1
bGxzY3JlZW5JbnRlcmZhY2UgfTsKK30KKworI2lmIFBMQVRGT1JNKFdBVENIT1MpCitJR05PUkVf
V0FSTklOR1NfQkVHSU4oImRlcHJlY2F0ZWQtaW1wbGVtZW50YXRpb25zIikKKyNlbmRpZgorCist
ICh2b2lkKXBsYXllclZpZXdDb250cm9sbGVyV2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VE
X1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50
ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBmdWxsc2NyZWVuSW50
ZXJmYWNlLT53aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVy
Vmlld0NvbnRyb2xsZXJEaWRTdGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRy
b2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJW
aWV3Q29udHJvbGxlcik7CisgICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYu
ZnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3Rh
cnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXI6
KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBmYWlsZWRUb1N0
YXJ0UGljdHVyZUluUGljdHVyZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgVU5V
U0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBVTlVTRURfUEFSQU0oZXJyb3Ip
OworICAgIGlmIChhdXRvIGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBzZWxmLmZ1bGxzY3JlZW5JbnRl
cmZhY2UpCisgICAgICAgIGZ1bGxzY3JlZW5JbnRlcmZhY2UtPmZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJXaWxsU3RvcFBp
Y3R1cmVJblBpY3R1cmU6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJv
bGxlcgoreworICAgIFVOVVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgaWYg
KGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKKyAg
ICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Cit9
CisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRyb2xsZXJEaWRTdG9wUGljdHVyZUluUGljdHVyZToo
QVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7CisgICAgVU5V
U0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICBpZiAoYXV0byBmdWxsc2NyZWVu
SW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJmYWNlKQorICAgICAgICBmdWxsc2NyZWVu
SW50ZXJmYWNlLT5kaWRTdG9wUGljdHVyZUluUGljdHVyZSgpOworfQorCistIChCT09MKXBsYXll
clZpZXdDb250cm9sbGVyU2hvdWxkQXV0b21hdGljYWxseURpc21pc3NBdFBpY3R1cmVJblBpY3R1
cmVTdGFydDooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZpZXdDb250cm9sbGVyCit7
CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsKKyAgICByZXR1cm4gTk87
Cit9CisKKyNpZiAhUExBVEZPUk0oQVBQTEVUVikKKworc3RhdGljIFZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlSU9TOjpFeGl0RnVsbFNjcmVlblJlYXNvbiBjb252ZXJ0VG9FeGl0RnVsbFNjcmVl
blJlYXNvbihBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb24gcmVhc29u
KQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9s
bGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25Eb25lQnV0dG9uVGFwcGVkOgorICAgICAgICByZXR1cm4g
VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpEb25l
QnV0dG9uVGFwcGVkOworICAgIGNhc2UgQVZQbGF5ZXJWaWV3Q29udHJvbGxlckV4aXRGdWxsU2Ny
ZWVuUmVhc29uRnVsbFNjcmVlbkJ1dHRvblRhcHBlZDoKKyAgICAgICAgcmV0dXJuIFZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlSU9TOjpFeGl0RnVsbFNjcmVlblJlYXNvbjo6RnVsbFNjcmVlbkJ1
dHRvblRhcHBlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVl
blJlYXNvblBpY3R1cmVJblBpY3R1cmVTdGFydGVkOgorICAgICAgICByZXR1cm4gVmlkZW9QcmVz
ZW50YXRpb25JbnRlcmZhY2VJT1M6OkV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaWN0dXJlSW5QaWN0
dXJlU3RhcnRlZDsKKyAgICBjYXNlIEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNjcmVl
blJlYXNvblBpbmNoR2VzdHVyZUhhbmRsZWQ6CisgICAgICAgIHJldHVybiBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUlPUzo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlBpbmNoR2VzdHVyZUhhbmRs
ZWQ7CisgICAgY2FzZSBBVlBsYXllclZpZXdDb250cm9sbGVyRXhpdEZ1bGxTY3JlZW5SZWFzb25S
ZW1vdGVDb250cm9sU3RvcEV2ZW50UmVjZWl2ZWQ6CisgICAgICAgIHJldHVybiBWaWRlb1ByZXNl
bnRhdGlvbkludGVyZmFjZUlPUzo6RXhpdEZ1bGxTY3JlZW5SZWFzb246OlJlbW90ZUNvbnRyb2xT
dG9wRXZlbnRSZWNlaXZlZDsKKyAgICB9Cit9CisKKy0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xs
ZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciBzaG91bGRF
eGl0RnVsbFNjcmVlbldpdGhSZWFzb246KEFWUGxheWVyVmlld0NvbnRyb2xsZXJFeGl0RnVsbFNj
cmVlblJlYXNvbilyZWFzb24KK3sKKyAgICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xs
ZXIpOworICAgIGlmIChhdXRvIGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBzZWxmLmZ1bGxzY3JlZW5J
bnRlcmZhY2UpCisgICAgICAgIHJldHVybiBmdWxsc2NyZWVuSW50ZXJmYWNlLT5zaG91bGRFeGl0
RnVsbHNjcmVlbldpdGhSZWFzb24oY29udmVydFRvRXhpdEZ1bGxTY3JlZW5SZWFzb24ocmVhc29u
KSk7CisKKyAgICByZXR1cm4gWUVTOworfQorCisjZWxzZQorCistIChCT09MKXBsYXllclZpZXdD
b250cm9sbGVyU2hvdWxkRGlzbWlzczooQVZQbGF5ZXJWaWV3Q29udHJvbGxlciAqKXBsYXllclZp
ZXdDb250cm9sbGVyCit7CisgICAgVU5VU0VEX1BBUkFNKHBsYXllclZpZXdDb250cm9sbGVyKTsK
KyAgICBpZiAoYXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gc2VsZi5mdWxsc2NyZWVuSW50ZXJm
YWNlKQorICAgICAgICByZXR1cm4gZnVsbHNjcmVlbkludGVyZmFjZS0+c2hvdWxkRXhpdEZ1bGxz
Y3JlZW5XaXRoUmVhc29uKFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpFeGl0RnVsbFNj
cmVlblJlYXNvbjo6UGluY2hHZXN0dXJlSGFuZGxlZCk7CisKKyAgICByZXR1cm4gWUVTOworfQor
CisjZW5kaWYgLy8gIVBMQVRGT1JNKEFQUExFVFYpCisKKy0gKHZvaWQpcGxheWVyVmlld0NvbnRy
b2xsZXI6KEFWUGxheWVyVmlld0NvbnRyb2xsZXIgKilwbGF5ZXJWaWV3Q29udHJvbGxlciByZXN0
b3JlVXNlckludGVyZmFjZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5k
bGVyOih2b2lkICheKShCT09MIHJlc3RvcmVkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIFVO
VVNFRF9QQVJBTShwbGF5ZXJWaWV3Q29udHJvbGxlcik7CisgICAgaWYgKGF1dG8gZnVsbHNjcmVl
bkludGVyZmFjZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgZnVsbHNjcmVl
bkludGVyZmFjZS0+cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25I
YW5kbGVyKGNvbXBsZXRpb25IYW5kbGVyKTsKK30KKworI2lmIFBMQVRGT1JNKFdBVENIT1MpCitJ
R05PUkVfV0FSTklOR1NfRU5ECisjZW5kaWYKKworLSAoQk9PTClwbGF5ZXJWaWV3Q29udHJvbGxl
clNob3VsZFN0YXJ0UGljdHVyZUluUGljdHVyZUZyb21JbmxpbmVXaGVuRW50ZXJpbmdCYWNrZ3Jv
dW5kOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xsZXIKK3sKKyAg
ICBVTlVTRURfUEFSQU0ocGxheWVyVmlld0NvbnRyb2xsZXIpOworICAgIHJldHVybiBZRVM7Cit9
CisKKyNpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorCisvLyBBVlBpY3R1cmVJblBpY3R1cmVDb250
cm9sbGVyRGVsZWdhdGUKKworLSAodm9pZClwaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcldpbGxT
dGFydFBpY3R1cmVJblBpY3R1cmU6KEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXIgKilwaWN0
dXJlSW5QaWN0dXJlQ29udHJvbGxlcgoreworICAgIGlmIChhdXRvIGZ1bGxzY3JlZW5JbnRlcmZh
Y2UgPSBzZWxmLmZ1bGxzY3JlZW5JbnRlcmZhY2UpCisgICAgICAgIGZ1bGxzY3JlZW5JbnRlcmZh
Y2UtPndpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwaWN0dXJlSW5Q
aWN0dXJlQ29udHJvbGxlckRpZFN0YXJ0UGljdHVyZUluUGljdHVyZTooQVZQaWN0dXJlSW5QaWN0
dXJlQ29udHJvbGxlciAqKXBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVyCit7CisgICAgaWYgKGF1
dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAg
ICAgZnVsbHNjcmVlbkludGVyZmFjZS0+ZGlkU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisK
Ky0gKHZvaWQpcGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXI6KEFWUGljdHVyZUluUGljdHVyZUNv
bnRyb2xsZXIgKilwaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlciBmYWlsZWRUb1N0YXJ0UGljdHVy
ZUluUGljdHVyZVdpdGhFcnJvcjooTlNFcnJvciAqKWVycm9yCit7CisgICAgaWYgKGF1dG8gZnVs
bHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgZnVs
bHNjcmVlbkludGVyZmFjZS0+ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKwor
LSAodm9pZClwaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcldpbGxTdG9wUGljdHVyZUluUGljdHVy
ZTooQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlciAqKXBpY3R1cmVJblBpY3R1cmVDb250cm9s
bGVyCit7CisgICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVsbHNjcmVl
bkludGVyZmFjZSkKKyAgICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+d2lsbFN0b3BQaWN0dXJl
SW5QaWN0dXJlKCk7Cit9CisKKy0gKHZvaWQpcGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJEaWRT
dG9wUGljdHVyZUluUGljdHVyZTooQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlciAqKXBpY3R1
cmVJblBpY3R1cmVDb250cm9sbGVyCit7CisgICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFj
ZSA9IHNlbGYuZnVsbHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgZnVsbHNjcmVlbkludGVyZmFj
ZS0+ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoKTsKK30KKworLSAodm9pZClwaWN0dXJlSW5QaWN0
dXJlQ29udHJvbGxlcjooQVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlciAqKXBpY3R1cmVJblBp
Y3R1cmVDb250cm9sbGVyIHJlc3RvcmVVc2VySW50ZXJmYWNlRm9yUGljdHVyZUluUGljdHVyZVN0
b3BXaXRoQ29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgcmVzdG9yZWQpKWNvbXBsZXRp
b25IYW5kbGVyCit7CisgICAgaWYgKGF1dG8gZnVsbHNjcmVlbkludGVyZmFjZSA9IHNlbGYuZnVs
bHNjcmVlbkludGVyZmFjZSkKKyAgICAgICAgZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlcGFyZUZv
clBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKGNvbXBsZXRpb25IYW5k
bGVyKTsKK30KKworI2VuZGlmIC8vIEhBVkUoUElQX0NPTlRST0xMRVIpCisKK0BlbmQKKworI2lm
IEhBVkUoUElQX0NPTlRST0xMRVIpCisKK0BpbnRlcmZhY2UgV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyIDogQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250
cm9sbGVyCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvbnRyb2xsZXI6KEFWUGxheWVyQ29u
dHJvbGxlciAqKWNvbnRyb2xsZXI7CitAcHJvcGVydHkgKG5vbmF0b21pYywgbm9ubnVsbCwgcmVh
ZG9ubHkpIEFWUGxheWVyQ29udHJvbGxlciogY29udHJvbGxlcjsKK0Bwcm9wZXJ0eSAocmV0YWlu
KSBBVlBsYXllckxheWVyKiBwbGF5ZXJMYXllcjsKKworQGVuZAorCitzdGF0aWMgV2ViQVZQaWN0
dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyKiBXZWJBVlBpY3R1cmVJblBpY3R1cmVD
b250ZW50Vmlld0NvbnRyb2xsZXJfaW5pdFdpdGhDb250cm9sbGVyKGlkIGFTZWxmLCBTRUwsIEFW
UGxheWVyQ29udHJvbGxlciogY29udHJvbGxlcikKK3sKKyAgICBBU1NFUlQoY29udHJvbGxlcik7
CisKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXIgKnBpcENv
bnRyb2xsZXIgPSBhU2VsZjsKKyAgICBvYmpjX3N1cGVyIHN1cGVyQ2xhc3MgeyBwaXBDb250cm9s
bGVyLCBnZXRBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJDbGFzcygpIH07
CisgICAgYXV0byBzdXBlcl9pbml0ID0gcmVpbnRlcnByZXRfY2FzdDxpZCgqKShvYmpjX3N1cGVy
KiwgU0VMKT4ob2JqY19tc2dTZW5kU3VwZXIpOworICAgIGFTZWxmID0gc3VwZXJfaW5pdCgmc3Vw
ZXJDbGFzcywgQHNlbGVjdG9yKGluaXQpKTsKKyAgICBpZiAoIWFTZWxmKQorICAgICAgICByZXR1
cm4gYVNlbGY7CisKKyAgICBbY29udHJvbGxlciByZXRhaW5dOworICAgIG9iamVjdF9zZXRJbnN0
YW5jZVZhcmlhYmxlKGFTZWxmLCAiX2NvbnRyb2xsZXIiLCBjb250cm9sbGVyKTsKKyAgICByZXR1
cm4gYVNlbGY7Cit9CisKK3N0YXRpYyBBVlBsYXllckNvbnRyb2xsZXIgKldlYkFWUGljdHVyZUlu
UGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcl9jb250cm9sbGVyKGlkIGFTZWxmLCBTRUwpCit7
CisgICAgdm9pZCogY29udHJvbGxlcjsKKyAgICBvYmplY3RfZ2V0SW5zdGFuY2VWYXJpYWJsZShh
U2VsZiwgIl9jb250cm9sbGVyIiwgJmNvbnRyb2xsZXIpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxBVlBsYXllckNvbnRyb2xsZXIqPihjb250cm9sbGVyKTsKK30KKworc3RhdGljIEFWUGxheWVy
TGF5ZXIgKldlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcl9wbGF5ZXJM
YXllcihpZCBhU2VsZiwgU0VMKQoreworICAgIHZvaWQqIGxheWVyOworICAgIG9iamVjdF9nZXRJ
bnN0YW5jZVZhcmlhYmxlKGFTZWxmLCAiX3BsYXllckxheWVyIiwgJmxheWVyKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QVZQbGF5ZXJMYXllcio+KGxheWVyKTsKK30KKworc3RhdGljIHZvaWQg
V2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyX3NldFBsYXllckxheWVy
KGlkIGFTZWxmLCBTRUwsIEFWUGxheWVyTGF5ZXIqIGxheWVyKQoreworICAgIFdlYkFWUGljdHVy
ZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlciAqcGlwQ29udHJvbGxlciA9IGFTZWxmOwor
ICAgIGF1dG8gb2xkUGxheWVyTGF5ZXIgPSBbcGlwQ29udHJvbGxlciBwbGF5ZXJMYXllcl07Cisg
ICAgaWYgKG9sZFBsYXllckxheWVyID09IGxheWVyKQorICAgICAgICByZXR1cm47CisgICAgW29s
ZFBsYXllckxheWVyIHJlbGVhc2VdOworICAgIFtsYXllciByZXRhaW5dOworICAgIG9iamVjdF9z
ZXRJbnN0YW5jZVZhcmlhYmxlKGFTZWxmLCAiX3BsYXllckxheWVyIiwgbGF5ZXIpOworICAgIFtb
cGlwQ29udHJvbGxlciB2aWV3XS5sYXllciBhZGRTdWJsYXllcjpsYXllcl07Cit9CisKK3N0YXRp
YyB2b2lkIFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcl92aWV3V2ls
bExheW91dFN1YnZpZXdzKGlkIGFTZWxmLCBTRUwpCit7CisgICAgV2ViQVZQaWN0dXJlSW5QaWN0
dXJlQ29udGVudFZpZXdDb250cm9sbGVyICpwaXBDb250cm9sbGVyID0gYVNlbGY7CisgICAgb2Jq
Y19zdXBlciBzdXBlckNsYXNzIHsgcGlwQ29udHJvbGxlciwgZ2V0QVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyQ2xhc3MoKSB9OworICAgIGF1dG8gc3VwZXJfdmlld1dpbGxM
YXlvdXRTdWJ2aWV3cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKShvYmpjX3N1cGVyKiwgU0VM
KT4ob2JqY19tc2dTZW5kU3VwZXIpOworICAgIHN1cGVyX3ZpZXdXaWxsTGF5b3V0U3Vidmlld3Mo
JnN1cGVyQ2xhc3MsIEBzZWxlY3Rvcih2aWV3V2lsbExheW91dFN1YnZpZXdzKSk7CisgICAgW1tw
aXBDb250cm9sbGVyIHBsYXllckxheWVyXSBzZXRGcmFtZTpbcGlwQ29udHJvbGxlciB2aWV3XS5i
b3VuZHNdOworfQorCitzdGF0aWMgdm9pZCBXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmll
d0NvbnRyb2xsZXJfZGVhbGxvYyhpZCBhU2VsZiwgU0VMKQoreworICAgIFdlYkFWUGljdHVyZUlu
UGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlciAqcGlwQ29udHJvbGxlciA9IGFTZWxmOworICAg
IFtbcGlwQ29udHJvbGxlciBjb250cm9sbGVyXSByZWxlYXNlXTsKKyAgICBbW3BpcENvbnRyb2xs
ZXIgcGxheWVyTGF5ZXJdIHJlbGVhc2VdOworICAgIG9iamNfc3VwZXIgc3VwZXJDbGFzcyB7IHBp
cENvbnRyb2xsZXIsIGdldEFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlckNs
YXNzKCkgfTsKKyAgICBhdXRvIHN1cGVyX2RlYWxsb2MgPSByZWludGVycHJldF9jYXN0PHZvaWQo
Kikob2JqY19zdXBlciosIFNFTCk+KG9iamNfbXNnU2VuZFN1cGVyKTsKKyAgICBzdXBlcl9kZWFs
bG9jKCZzdXBlckNsYXNzLCBAc2VsZWN0b3IoZGVhbGxvYykpOworfQorCitzdGF0aWMgV2ViQVZQ
aWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9sbGVyICphbGxvY1dlYkFWUGljdHVyZUlu
UGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlckluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgQ2xh
c3MgdGhlQ2xhc3MgPSBuaWw7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47
CisgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeeworICAgICAgICB0aGVDbGFzcyA9IG9i
amNfYWxsb2NhdGVDbGFzc1BhaXIoZ2V0QVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250
cm9sbGVyQ2xhc3MoKSwgIldlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxl
ciIsIDApOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihpbml0
V2l0aENvbnRyb2xsZXI6KSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0Nv
bnRyb2xsZXJfaW5pdFdpdGhDb250cm9sbGVyLCAidkA6QCIpOworICAgICAgICBjbGFzc19hZGRN
ZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihjb250cm9sbGVyKSwgKElNUClXZWJBVlBpY3R1cmVJ
blBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJfY29udHJvbGxlciwgIkBAOiIpOworICAgICAg
ICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3RvcihwbGF5ZXJDb250cm9sbGVyKSwg
KElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJfY29udHJvbGxl
ciwgIkBAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcihw
bGF5ZXJMYXllciksIChJTVApV2ViQVZQaWN0dXJlSW5QaWN0dXJlQ29udGVudFZpZXdDb250cm9s
bGVyX3BsYXllckxheWVyLCAiQEA6Iik7CisgICAgICAgIGNsYXNzX2FkZE1ldGhvZCh0aGVDbGFz
cywgQHNlbGVjdG9yKHNldFBsYXllckxheWVyOiksIChJTVApV2ViQVZQaWN0dXJlSW5QaWN0dXJl
Q29udGVudFZpZXdDb250cm9sbGVyX3NldFBsYXllckxheWVyLCAidkA6QCIpOworICAgICAgICBj
bGFzc19hZGRNZXRob2QodGhlQ2xhc3MsIEBzZWxlY3Rvcih2aWV3V2lsbExheW91dFN1YnZpZXdz
KSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50Vmlld0NvbnRyb2xsZXJfdmlld1dp
bGxMYXlvdXRTdWJ2aWV3cywgInZAOiIpOworICAgICAgICBjbGFzc19hZGRNZXRob2QodGhlQ2xh
c3MsIEBzZWxlY3RvcihkZWFsbG9jKSwgKElNUClXZWJBVlBpY3R1cmVJblBpY3R1cmVDb250ZW50
Vmlld0NvbnRyb2xsZXJfZGVhbGxvYywgInZAOiIpOworCisgICAgICAgIGNsYXNzX2FkZEl2YXIo
dGhlQ2xhc3MsICJfY29udHJvbGxlciIsIHNpemVvZihBVlBsYXllckNvbnRyb2xsZXIqKSwgbG9n
MihzaXplb2YoQVZQbGF5ZXJDb250cm9sbGVyKikpLCAiQCIpOworICAgICAgICBjbGFzc19hZGRJ
dmFyKHRoZUNsYXNzLCAiX3BsYXllckxheWVyIiwgc2l6ZW9mKEFWUGxheWVyTGF5ZXIqKSwgbG9n
MihzaXplb2YoQVZQbGF5ZXJMYXllciopKSwgIkAiKTsKKyAgICAgICAgb2JqY19yZWdpc3RlckNs
YXNzUGFpcih0aGVDbGFzcyk7CisgICAgfSk7CisKKyAgICByZXR1cm4gKFdlYkFWUGljdHVyZUlu
UGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlciAqKVt0aGVDbGFzcyBhbGxvY107Cit9CisKKyNl
bmRpZiAvLyBIQVZFKFBJUF9DT05UUk9MTEVSKQorCitOU19BU1NVTUVfTk9OTlVMTF9CRUdJTgor
QGludGVyZmFjZSBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyIDogTlNPYmplY3Q8QVZQbGF5ZXJW
aWV3Q29udHJvbGxlckRlbGVnYXRlPgorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnVsbHNjcmVl
bkludGVyZmFjZTooVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MgKilpbnRlcmZhY2U7Cist
ICh2b2lkKWVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKShCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKikpY29tcGxldGlvbkhhbmRs
ZXI7CistICh2b2lkKWV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQgY29tcGxl
dGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqKSljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpc3RhcnRQaWN0dXJlSW5QaWN0dXJlOworLSAodm9pZClzdG9wUGlj
dHVyZUluUGljdHVyZTsKKyNpZiAhUExBVEZPUk0oQVBQTEVUVikKKy0gKEJPT0wpcGxheWVyVmll
d0NvbnRyb2xsZXJTaG91bGRIYW5kbGVEb25lQnV0dG9uVGFwOihBVlBsYXllclZpZXdDb250cm9s
bGVyICopcGxheWVyVmlld0NvbnRyb2xsZXI7CisjZW5kaWYKKy0gKHZvaWQpc2V0V2ViS2l0T3Zl
cnJpZGVSb3V0ZVNoYXJpbmdQb2xpY3k6KE5TVUludGVnZXIpcm91dGVTaGFyaW5nUG9saWN5IHJv
dXRpbmdDb250ZXh0VUlEOihOU1N0cmluZyAqKXJvdXRpbmdDb250ZXh0VUlEOworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBjb25zdCB2
b2lkKiBsb2dJZGVudGlmaWVyOworQHByb3BlcnR5IChyZWFkb25seSwgbm9uYXRvbWljKSBjb25z
dCBMb2dnZXIqIGxvZ2dlclB0cjsKK0Bwcm9wZXJ0eSAocmVhZG9ubHksIG5vbmF0b21pYykgV1RG
TG9nQ2hhbm5lbCogbG9nQ2hhbm5lbDsKKyNlbmRpZgorQGVuZAorTlNfQVNTVU1FX05PTk5VTExf
RU5ECisKK0BpbXBsZW1lbnRhdGlvbiBXZWJBVlBsYXllclZpZXdDb250cm9sbGVyIHsKKyAgICBU
aHJlYWRTYWZlV2Vha1B0cjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUz4gX2Z1bGxzY3Jl
ZW5JbnRlcmZhY2U7CisjaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikK
KyAgICBSZXRhaW5QdHI8VUlWaWV3Q29udHJvbGxlcj4gX3ByZXNlbnRpbmdWaWV3Q29udHJvbGxl
cjsKKyNlbmRpZgorICAgIFJldGFpblB0cjxBVlBsYXllclZpZXdDb250cm9sbGVyPiBfYXZQbGF5
ZXJWaWV3Q29udHJvbGxlcjsKKyAgICBSZXRhaW5QdHI8TlNUaW1lcj4gX3N0YXJ0UGljdHVyZUlu
UGljdHVyZVRpbWVyOworICAgIFdlYWtPYmpDUHRyPFdlYkFWUGxheWVyVmlld0NvbnRyb2xsZXJE
ZWxlZ2F0ZT4gX2RlbGVnYXRlOworCisjaWYgSEFWRShQSVBfQ09OVFJPTExFUikKKyAgICBSZXRh
aW5QdHI8QVZQaWN0dXJlSW5QaWN0dXJlQ29udHJvbGxlcj4gX3BpcENvbnRyb2xsZXI7CisgICAg
UmV0YWluUHRyPFdlYkFWUGljdHVyZUluUGljdHVyZUNvbnRlbnRWaWV3Q29udHJvbGxlcj4gX3Bp
cENvbnRlbnRWaWV3Q29udHJvbGxlcjsKKyNlbmRpZgorfQorCistIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGdWxsc2NyZWVuSW50ZXJmYWNlOihWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUyAq
KWludGVyZmFjZQoreworICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdF0pKQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgX2Z1bGxzY3JlZW5JbnRlcmZhY2UgPSBUaHJlYWRTYWZlV2Vha1B0
ciB7ICppbnRlcmZhY2UgfTsKKworICAgIE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJ
RVIpOworCisjaWYgUExBVEZPUk0oQVBQTEVUVikKKyAgICBfYXZQbGF5ZXJWaWV3Q29udHJvbGxl
ciA9IGFkb3B0TlMoW2FsbG9jQVZQbGF5ZXJWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0p
OworICAgIFtzZWxmIGNvbmZpZ3VyZVBsYXllclZpZXdDb250cm9sbGVyV2l0aEZ1bGxzY3JlZW5J
bnRlcmZhY2U6aW50ZXJmYWNlXTsKKyNlbHNlCisgICAgX2F2UGxheWVyVmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFthbGxvY0FWUGxheWVyVmlld0NvbnRyb2xsZXJJbnN0YW5jZSgpIGluaXRXaXRo
UGxheWVyTGF5ZXJWaWV3OmludGVyZmFjZS0+cGxheWVyTGF5ZXJWaWV3KCldKTsKKyNlbmRpZgor
ICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRNb2RhbFByZXNlbnRhdGlvblN0eWxlOlVJ
TW9kYWxQcmVzZW50YXRpb25PdmVyRnVsbFNjcmVlbl07CisjaWYgUExBVEZPUk0oV0FUQ0hPUykK
KyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2V0RGVsZWdhdGU6c2VsZl07CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFZJU0lPTikKKyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
UHJlZmVyc1Jvb21EaW1taW5nOk5PXTsKKyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2V0
RnVsbFNjcmVlbkJlaGF2aW9yczpBVlBsYXllclZpZXdDb250cm9sbGVyRnVsbFNjcmVlbkJlaGF2
aW9ySG9zdENvbnRlbnRJbmxpbmVdOworI2VuZGlmCisKKyNpZiBIQVZFKFBJUF9DT05UUk9MTEVS
KQorICAgIGF1dG8gKnBsYXllckNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxBVlBsYXllckNvbnRy
b2xsZXIgKj4oaW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCkpOworICAgIF9waXBDb250ZW50
Vmlld0NvbnRyb2xsZXIgPSBhZG9wdE5TKFthbGxvY1dlYkFWUGljdHVyZUluUGljdHVyZUNvbnRl
bnRWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdFdpdGhDb250cm9sbGVyOnBsYXllckNvbnRy
b2xsZXJdKTsKKworICAgIGF1dG8gc291cmNlID0gYWRvcHROUyhbYWxsb2NBVlBpY3R1cmVJblBp
Y3R1cmVDb250cm9sbGVyQ29udGVudFNvdXJjZUluc3RhbmNlKCkgaW5pdFdpdGhTb3VyY2VWaWV3
OnN0YXRpY19jYXN0PFVJVmlldyAqPihpbnRlcmZhY2UtPnBsYXllckxheWVyVmlldygpKSBjb250
ZW50Vmlld0NvbnRyb2xsZXI6X3BpcENvbnRlbnRWaWV3Q29udHJvbGxlci5nZXQoKSBwbGF5ZXJD
b250cm9sbGVyOnBsYXllckNvbnRyb2xsZXJdKTsKKworICAgIF9waXBDb250cm9sbGVyID0gYWRv
cHROUyhbYWxsb2NBVlBpY3R1cmVJblBpY3R1cmVDb250cm9sbGVySW5zdGFuY2UoKSBpbml0V2l0
aENvbnRlbnRTb3VyY2U6c291cmNlLmdldCgpXSk7CisjZW5kaWYKKworICAgIHJldHVybiBzZWxm
OworfQorCisjaWYgUExBVEZPUk0oQVBQTEVUVikKKy0gKHZvaWQpY29uZmlndXJlUGxheWVyVmll
d0NvbnRyb2xsZXJXaXRoRnVsbHNjcmVlbkludGVyZmFjZTooVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VJT1MgKilpbnRlcmZhY2UKK3sKKyAgICAvLyBGSVhNRSAoMTE2NTkyMzQ0KTogVGhpcyBp
cyBhIHByb29mLW9mLWNvbmNlcHQgaGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIHN1cHBvcnQgZm9y
IGEgY3VzdG9tCisgICAgLy8gQVZQbGF5ZXJMYXllclZpZXcgaW4gdHZPUydzIHZlcnNpb24gb2Yg
QVZQbGF5ZXJWaWV3Q29udHJvbGxlci4gVGhpcyB3aWxsIGJlIHJlcGxhY2VkIG9uY2UKKyAgICAv
LyBwcm9wZXIgQVBJIGlzIGF2YWlsYWJsZS4KKworICAgIFJFTEVBU0VfQVNTRVJUKFtfYXZQbGF5
ZXJWaWV3Q29udHJvbGxlciB2aWV3XSk7CisKKyAgICBbW19hdlBsYXllclZpZXdDb250cm9sbGVy
IHBsYXllckxheWVyVmlld10gcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBXZWJBVlBsYXll
ckxheWVyVmlldyAqcGxheWVyTGF5ZXJWaWV3ID0gaW50ZXJmYWNlLT5wbGF5ZXJMYXllclZpZXco
KTsKKyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2V0UGxheWVyTGF5ZXJWaWV3OnBsYXll
ckxheWVyVmlld107CisKKyAgICBwbGF5ZXJMYXllclZpZXcucGl4ZWxCdWZmZXJBdHRyaWJ1dGVz
ID0gW19hdlBsYXllclZpZXdDb250cm9sbGVyIHBpeGVsQnVmZmVyQXR0cmlidXRlc107CisgICAg
cGxheWVyTGF5ZXJWaWV3LnBsYXllckNvbnRyb2xsZXIgPSAoQVZQbGF5ZXJDb250cm9sbGVyICop
aW50ZXJmYWNlLT5wbGF5ZXJDb250cm9sbGVyKCk7CisgICAgcGxheWVyTGF5ZXJWaWV3LnRyYW5z
bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzID0gTk87CisgICAgcGxheWVyTGF5
ZXJWaWV3LnBsYXllckxheWVyLnZpZGVvR3Jhdml0eSA9IFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxl
ciB2aWRlb0dyYXZpdHldOworCisgICAgVUlWaWV3ICpjb250ZW50Q29udGFpbmVyVmlldyA9IFtf
YXZQbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5zdWJ2aWV3cy5maXJzdE9iamVjdDsKKyAgICBb
Y29udGVudENvbnRhaW5lclZpZXcgYWRkU3VidmlldzpwbGF5ZXJMYXllclZpZXddOworICAgIFtO
U0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBbcGxheWVy
TGF5ZXJWaWV3LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmNvbnRlbnRDb250
YWluZXJWaWV3LndpZHRoQW5jaG9yXSwKKyAgICAgICAgW3BsYXllckxheWVyVmlldy5oZWlnaHRB
bmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Y29udGVudENvbnRhaW5lclZpZXcuaGVpZ2h0
QW5jaG9yXSwKKyAgICAgICAgW3BsYXllckxheWVyVmlldy5jZW50ZXJYQW5jaG9yIGNvbnN0cmFp
bnRFcXVhbFRvQW5jaG9yOmNvbnRlbnRDb250YWluZXJWaWV3LmNlbnRlclhBbmNob3JdLAorICAg
ICAgICBbcGxheWVyTGF5ZXJWaWV3LmNlbnRlcllBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNo
b3I6Y29udGVudENvbnRhaW5lclZpZXcuY2VudGVyWUFuY2hvcl0sCisgICAgXV07Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oQVBQTEVUVikKKworLSAodm9pZClkZWFsbG9jCit7CisgICAgT0JKQ19B
TFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJRklFUik7CisKKyAgICBpZiAoX3N0YXJ0UGljdHVyZUlu
UGljdHVyZVRpbWVyKSB7CisgICAgICAgIFtzZWxmIHJlbW92ZU9ic2VydmVyXTsKKyAgICAgICAg
W19zdGFydFBpY3R1cmVJblBpY3R1cmVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICAgICAgX3N0YXJ0
UGljdHVyZUluUGljdHVyZVRpbWVyID0gbmlsOworICAgIH0KKyNpZiBIQVZFKFBJUF9DT05UUk9M
TEVSKQorICAgIF9waXBDb250ZW50Vmlld0NvbnRyb2xsZXIgPSBuaWw7CisgICAgX3BpcENvbnRy
b2xsZXIgPSBuaWw7CisjZW5kaWYKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNpZiAhUExB
VEZPUk0oQVBQTEVUVikKKy0gKEJPT0wpcGxheWVyVmlld0NvbnRyb2xsZXJTaG91bGRIYW5kbGVE
b25lQnV0dG9uVGFwOihBVlBsYXllclZpZXdDb250cm9sbGVyICopcGxheWVyVmlld0NvbnRyb2xs
ZXIKK3sKKyAgICBBU1NFUlQocGxheWVyVmlld0NvbnRyb2xsZXIgPT0gX2F2UGxheWVyVmlld0Nv
bnRyb2xsZXIuZ2V0KCkpOworICAgIGlmICghX2RlbGVnYXRlKQorICAgICAgICByZXR1cm4gWUVT
OworCisgICAgcmV0dXJuIFtfZGVsZWdhdGUgcGxheWVyVmlld0NvbnRyb2xsZXI6cGxheWVyVmll
d0NvbnRyb2xsZXIgc2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uOkFWUGxheWVyVmlld0Nv
bnRyb2xsZXJFeGl0RnVsbFNjcmVlblJlYXNvbkRvbmVCdXR0b25UYXBwZWRdOworfQorI2VuZGlm
CisKKy0gKHZvaWQpc2V0V2ViS2l0T3ZlcnJpZGVSb3V0ZVNoYXJpbmdQb2xpY3k6KE5TVUludGVn
ZXIpcm91dGVTaGFyaW5nUG9saWN5IHJvdXRpbmdDb250ZXh0VUlEOihOU1N0cmluZyAqKXJvdXRp
bmdDb250ZXh0VUlECit7CitBTExPV19ORVdfQVBJX1dJVEhPVVRfR1VBUkRTX0JFR0lOCisgICAg
aWYgKFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHNldFdlYktpdE92ZXJyaWRlUm91dGVTaGFyaW5nUG9saWN5OnJvdXRpbmdDb250ZXh0VUlEOild
KQorICAgICAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2V0V2ViS2l0T3ZlcnJpZGVSb3V0
ZVNoYXJpbmdQb2xpY3k6cm91dGVTaGFyaW5nUG9saWN5IHJvdXRpbmdDb250ZXh0VUlEOnJvdXRp
bmdDb250ZXh0VUlEXTsKK0FMTE9XX05FV19BUElfV0lUSE9VVF9HVUFSRFNfRU5ECit9CisKKy0g
KHZvaWQpZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQgY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKEJPT0wgc3VjY2VzcywgTlNFcnJvciAqIF9fbnVsbGFibGUgZXJyb3Ip
KWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAgT0JKQ19BTFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJ
RklFUiwgISFhbmltYXRlZCk7CisjaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQ
TEVUVikKKyAgICBhdXRvIGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBfZnVsbHNjcmVlbkludGVyZmFj
ZS5nZXQoKTsKKyAgICBpZiAoIWZ1bGxzY3JlZW5JbnRlcmZhY2UpIHsKKyAgICAgICAgaWYgKGNv
bXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoTk8sIG5pbCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBfcHJlc2VudGluZ1ZpZXdDb250cm9sbGVy
ID0gZnVsbHNjcmVlbkludGVyZmFjZS0+cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKCk7CisKKyAg
ICBfYXZQbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKS52aWV3LmZyYW1lID0gX3ByZXNlbnRpbmdW
aWV3Q29udHJvbGxlci5nZXQoKS52aWV3LmZyYW1lOworICAgIFtfcHJlc2VudGluZ1ZpZXdDb250
cm9sbGVyIHByZXNlbnRWaWV3Q29udHJvbGxlcjpmdWxsc2NyZWVuSW50ZXJmYWNlLT5mdWxsc2Ny
ZWVuVmlld0NvbnRyb2xsZXIoKSBhbmltYXRlZDphbmltYXRlZCBjb21wbGV0aW9uOl57CisgICAg
ICAgIGlmIChjb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFlFUywgbmlsKTsKKyAgICB9XTsKKyNlbHNlCisgICAgW19hdlBsYXllclZpZXdDb250cm9sbGVy
IGVudGVyRnVsbFNjcmVlbkFuaW1hdGVkOmFuaW1hdGVkIGNvbXBsZXRpb25IYW5kbGVyOmNvbXBs
ZXRpb25IYW5kbGVyXTsKKyNlbmRpZgorfQorCistICh2b2lkKWV4aXRGdWxsU2NyZWVuQW5pbWF0
ZWQ6KEJPT0wpYW5pbWF0ZWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKEJPT0wgc3VjY2Vz
cywgTlNFcnJvciAqIF9fbnVsbGFibGUgZXJyb3IpKWNvbXBsZXRpb25IYW5kbGVyCit7CisgICAg
T0JKQ19BTFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJRklFUiwgISFhbmltYXRlZCk7CisjaWYgUExB
VEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikKKyAgICBpZiAoIV9wcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFtfcHJlc2VudGluZ1ZpZXdD
b250cm9sbGVyIGRpc21pc3NWaWV3Q29udHJvbGxlckFuaW1hdGVkOmFuaW1hdGVkIGNvbXBsZXRp
b246XnsKKyAgICAgICAgX3ByZXNlbnRpbmdWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICAgICAg
aWYgKGNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoWUVT
LCBuaWwpOworICAgIH1dOworI2Vsc2UKKyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgZXhp
dEZ1bGxTY3JlZW5BbmltYXRlZDphbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjpjb21wbGV0aW9u
SGFuZGxlcl07CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JN
KEFQUExFVFYpCisjZGVmaW5lIE1ZX05PX1JFVFVSTiBOT19SRVRVUk5fRFVFX1RPX0FTU0VSVAor
I2Vsc2UKKyNkZWZpbmUgTVlfTk9fUkVUVVJOCisjZW5kaWYKKworc3RhdGljIGNvbnN0IE5TVGlt
ZUludGVydmFsIHN0YXJ0UGljdHVyZUluUGljdHVyZVRpbWVJbnRlcnZhbCA9IDUuMDsKKworLSAo
dm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6
KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICop
Y29udGV4dAoreworICAgIEFTU0VSVChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJwaWN0dXJl
SW5QaWN0dXJlUG9zc2libGUiXSk7CisKKyAgICBpZiAoIVtrZXlQYXRoIGlzRXF1YWxUb1N0cmlu
ZzpAInBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZSJdIHx8ICFbc2VsZiBpc1BpY3R1cmVJblBpY3R1
cmVQb3NzaWJsZV0pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghX3N0YXJ0UGljdHVyZUlu
UGljdHVyZVRpbWVyKQorICAgICAgICByZXR1cm47CisgICAgW19zdGFydFBpY3R1cmVJblBpY3R1
cmVUaW1lciBpbnZhbGlkYXRlXTsKKyAgICBfc3RhcnRQaWN0dXJlSW5QaWN0dXJlVGltZXIgPSBu
aWw7CisKKyAgICBbc2VsZiByZW1vdmVPYnNlcnZlcl07CisKKyAgICBkaXNwYXRjaF9hc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICBbc2VsZiBzdGFydFBpY3R1cmVJ
blBpY3R1cmVdOworICAgIH0pOworfQorCistICh2b2lkKWluaXRPYnNlcnZlcgoreworI2lmIEhB
VkUoUElQX0NPTlRST0xMRVIpCisgICAgW19waXBDb250cm9sbGVyIGFkZE9ic2VydmVyOnNlbGYg
Zm9yS2V5UGF0aDpAInBpY3R1cmVJblBpY3R1cmVQb3NzaWJsZSIgb3B0aW9uczpOU0tleVZhbHVl
T2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRleHQ6bmlsXTsKKyNlbHNlCisgICAgW19hdlBsYXllclZp
ZXdDb250cm9sbGVyIGFkZE9ic2VydmVyOnNlbGYgZm9yS2V5UGF0aDpAInBpY3R1cmVJblBpY3R1
cmVQb3NzaWJsZSIgb3B0aW9uczpOU0tleVZhbHVlT2JzZXJ2aW5nT3B0aW9uTmV3IGNvbnRleHQ6
bmlsXTsKKyNlbmRpZgorfQorCistICh2b2lkKXJlbW92ZU9ic2VydmVyCit7CisjaWYgSEFWRShQ
SVBfQ09OVFJPTExFUikKKyAgICBbX3BpcENvbnRyb2xsZXIgcmVtb3ZlT2JzZXJ2ZXI6c2VsZiBm
b3JLZXlQYXRoOkAicGljdHVyZUluUGljdHVyZVBvc3NpYmxlIiBjb250ZXh0Om5pbF07CisjZWxz
ZQorICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciByZW1vdmVPYnNlcnZlcjpzZWxmIGZvcktl
eVBhdGg6QCJwaWN0dXJlSW5QaWN0dXJlUG9zc2libGUiIGNvbnRleHQ6bmlsXTsKKyNlbmRpZgor
fQorCistICh2b2lkKXRyeVRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlIE1ZX05PX1JFVFVSTgorewor
ICAgIE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJRVIpOworI2lmIFBMQVRGT1JNKFdB
VENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpCisgICAgVU5VU0VEX1ZBUklBQkxFKHN0YXJ0UGlj
dHVyZUluUGljdHVyZVRpbWVJbnRlcnZhbCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
ZWxzZQorICAgIGlmIChfc3RhcnRQaWN0dXJlSW5QaWN0dXJlVGltZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChbc2VsZiBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV0pIHsKKyAgICAg
ICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAg
ICAgIFtzZWxmIHN0YXJ0UGljdHVyZUluUGljdHVyZV07CisgICAgICAgIH0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgX3N0YXJ0UGljdHVyZUluUGljdHVyZVRpbWVyID0gW05TVGlt
ZXIgc2NoZWR1bGVkVGltZXJXaXRoVGltZUludGVydmFsOnN0YXJ0UGljdHVyZUluUGljdHVyZVRp
bWVJbnRlcnZhbCByZXBlYXRzOk5PIGJsb2NrOl4oTlNUaW1lciAqX05vbm51bGwpIHsKKyAgICAg
ICAgW3NlbGYgcmVtb3ZlT2JzZXJ2ZXJdOworICAgICAgICBfc3RhcnRQaWN0dXJlSW5QaWN0dXJl
VGltZXIgPSBuaWw7CisgICAgICAgIGlmIChhdXRvIGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBfZnVs
bHNjcmVlbkludGVyZmFjZS5nZXQoKSkKKyAgICAgICAgICAgIGZ1bGxzY3JlZW5JbnRlcmZhY2Ut
PmZhaWxlZFRvU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCk7CisgICAgfV07CisKKyAgICBbc2VsZiBp
bml0T2JzZXJ2ZXJdOworI2VuZGlmCit9CisKKy0gKHZvaWQpc3RhcnRQaWN0dXJlSW5QaWN0dXJl
IE1ZX05PX1JFVFVSTgoreworICAgIE9CSkNfQUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJRVIp
OworI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisjZWxpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorICAgIFtfcGlwQ29u
dHJvbGxlciBzdGFydFBpY3R1cmVJblBpY3R1cmVdOworI2Vsc2UKKyAgICBbX2F2UGxheWVyVmll
d0NvbnRyb2xsZXIgc3RhcnRQaWN0dXJlSW5QaWN0dXJlXTsKKyNlbmRpZgorfQorCistICh2b2lk
KXN0b3BQaWN0dXJlSW5QaWN0dXJlIE1ZX05PX1JFVFVSTgoreworICAgIE9CSkNfQUxXQVlTX0xP
RyhPQkpDX0xPR0lERU5USUZJRVIpOworI2lmIFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JN
KEFQUExFVFYpCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZWxpZiBIQVZFKFBJUF9DT05U
Uk9MTEVSKQorICAgIFtfcGlwQ29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07CisjZWxz
ZQorICAgIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBzdG9wUGljdHVyZUluUGljdHVyZV07Cisj
ZW5kaWYKK30KKworLSAoQk9PTClpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZQoreworI2lmIFBM
QVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpCisgICAgcmV0dXJuIE5POworI2Vs
aWYgSEFWRShQSVBfQ09OVFJPTExFUikKKyAgICByZXR1cm4gW19waXBDb250cm9sbGVyIGlzUGlj
dHVyZUluUGljdHVyZVBvc3NpYmxlXTsKKyNlbHNlCisgICAgcmV0dXJuIFtfYXZQbGF5ZXJWaWV3
Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVQb3NzaWJsZV07CisjZW5kaWYKK30KKworLSAo
Qk9PTClpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmUKK3sKKyNpZiBQTEFURk9STShXQVRDSE9TKSB8
fCBQTEFURk9STShBUFBMRVRWKQorICAgIHJldHVybiBOTzsKKyNlbGlmIEhBVkUoUElQX0NPTlRS
T0xMRVIpCisgICAgcmV0dXJuIFtfcGlwQ29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVBY3Rp
dmVdOworI2Vsc2UKKyAgICByZXR1cm4gW19hdlBsYXllclZpZXdDb250cm9sbGVyIGlzUGljdHVy
ZUluUGljdHVyZUFjdGl2ZV07CisjZW5kaWYKK30KKworLSAoQk9PTClwaWN0dXJlSW5QaWN0dXJl
QWN0aXZlCit7CisjaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikKKyAg
ICByZXR1cm4gTk87CisjZWxpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorICAgIHJldHVybiBbX3Bp
cENvbnRyb2xsZXIgaXNQaWN0dXJlSW5QaWN0dXJlQWN0aXZlXTsKKyNlbHNlCisgICAgcmV0dXJu
IFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBpc1BpY3R1cmVJblBpY3R1cmVBY3RpdmVdOworI2Vu
ZGlmCit9CisKKy0gKEJPT0wpcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdC
YWNrZ3JvdW5kCit7CisjaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikK
KyAgICByZXR1cm4gTk87CisjZWxpZiBIQVZFKFBJUF9DT05UUk9MTEVSKQorICAgIHJldHVybiBb
X3BpcENvbnRyb2xsZXIgcGljdHVyZUluUGljdHVyZVdhc1N0YXJ0ZWRXaGVuRW50ZXJpbmdCYWNr
Z3JvdW5kXTsKKyNlbHNlCisgICAgcmV0dXJuIFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciBwaWN0
dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRdOworI2VuZGlmCit9
CisKKy0gKFVJVmlldyAqKXZpZXcKK3sKKyAgICByZXR1cm4gW19hdlBsYXllclZpZXdDb250cm9s
bGVyIHZpZXddOworfQorCisjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBM
RVRWKQorLSAodm9pZClmbGFzaFBsYXliYWNrQ29udHJvbHNXaXRoRHVyYXRpb246KE5TVGltZUlu
dGVydmFsKWR1cmF0aW9uCit7CisgICAgT0JKQ19BTFdBWVNfTE9HKE9CSkNfTE9HSURFTlRJRklF
Uik7CisgICAgaWYgKFtfYXZQbGF5ZXJWaWV3Q29udHJvbGxlciByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGZsYXNoUGxheWJhY2tDb250cm9sc1dpdGhEdXJhdGlvbjopXSkKKyAgICAgICAg
W19hdlBsYXllclZpZXdDb250cm9sbGVyIGZsYXNoUGxheWJhY2tDb250cm9sc1dpdGhEdXJhdGlv
bjpkdXJhdGlvbl07Cit9CisjZW5kaWYKKworLSAoQk9PTClzaG93c1BsYXliYWNrQ29udHJvbHMK
K3sKKyNpZiBQTEFURk9STShXQVRDSE9TKQorICAgIHJldHVybiBZRVM7CisjZWxzZQorICAgIHJl
dHVybiBbX2F2UGxheWVyVmlld0NvbnRyb2xsZXIgc2hvd3NQbGF5YmFja0NvbnRyb2xzXTsKKyNl
bmRpZgorfQorCistICh2b2lkKXNldFNob3dzUGxheWJhY2tDb250cm9sczooQk9PTClzaG93c1Bs
YXliYWNrQ29udHJvbHMKK3sKKyAgICBPQkpDX0FMV0FZU19MT0coT0JKQ19MT0dJREVOVElGSUVS
LCAhIXNob3dzUGxheWJhY2tDb250cm9scyk7CisjaWYgUExBVEZPUk0oV0FUQ0hPUykKKyAgICBV
TlVTRURfUEFSQU0oc2hvd3NQbGF5YmFja0NvbnRyb2xzKTsKKyNlbHNlCisgICAgW19hdlBsYXll
clZpZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpzaG93c1BsYXliYWNrQ29u
dHJvbHNdOworI2VuZGlmCit9CisKKy0gKHZvaWQpc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrOihCT09MKWFsbG93c1BpY3R1cmVJblBpY3R1cmVQbGF5YmFjaworeworICAgIE9CSkNf
QUxXQVlTX0xPRyhPQkpDX0xPR0lERU5USUZJRVIsICEhYWxsb3dzUGljdHVyZUluUGljdHVyZVBs
YXliYWNrKTsKKyNpZiBQTEFURk9STShXQVRDSE9TKQorICAgIFVOVVNFRF9QQVJBTShhbGxvd3NQ
aWN0dXJlSW5QaWN0dXJlUGxheWJhY2spOworI2Vsc2UKKyAgICBbX2F2UGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOmFsbG93c1BpY3R1cmVJblBp
Y3R1cmVQbGF5YmFja107CisjZW5kaWYKK30KKworLSAodm9pZClzZXREZWxlZ2F0ZTooV2ViQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRlICopZGVsZWdhdGUKK3sKKyNpZiBQTEFURk9STShX
QVRDSE9TKQorICAgIEFTU0VSVCghZGVsZWdhdGUgfHwgW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IocGxheWVyVmlld0NvbnRyb2xsZXI6c2hvdWxkRXhpdEZ1bGxTY3JlZW5X
aXRoUmVhc29uOildKTsKKyAgICBfZGVsZWdhdGUgPSBkZWxlZ2F0ZTsKKyNlbHNlCisgICAgW19h
dlBsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOmRlbGVnYXRlXTsKKyNlbmRpZgorCisj
aWYgSEFWRShQSVBfQ09OVFJPTExFUikKKyAgICBbX3BpcENvbnRyb2xsZXIgc2V0RGVsZWdhdGU6
ZGVsZWdhdGVdOworI2VuZGlmCit9CisKKy0gKHZvaWQpc2V0UGxheWVyQ29udHJvbGxlcjooQVZQ
bGF5ZXJDb250cm9sbGVyICopcGxheWVyQ29udHJvbGxlcgoreworICAgIFtfYXZQbGF5ZXJWaWV3
Q29udHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOnBsYXllckNvbnRyb2xsZXJdOworfQorCist
IChBVlBsYXllclZpZXdDb250cm9sbGVyICopYXZQbGF5ZXJWaWV3Q29udHJvbGxlcgoreworICAg
IHJldHVybiBfYXZQbGF5ZXJWaWV3Q29udHJvbGxlci5nZXQoKTsKK30KKworLSAodm9pZClyZW1v
dmVGcm9tUGFyZW50Vmlld0NvbnRyb2xsZXIKK3sKKyAgICBbX2F2UGxheWVyVmlld0NvbnRyb2xs
ZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKK30KKworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorLSAoY29uc3Qgdm9pZCopbG9nSWRlbnRpZmllcgoreworICAgIGlmIChhdXRv
IGZ1bGxzY3JlZW5JbnRlcmZhY2UgPSBfZnVsbHNjcmVlbkludGVyZmFjZS5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGZ1bGxzY3JlZW5JbnRlcmZhY2UtPmxvZ0lkZW50aWZpZXIoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworLSAoY29uc3QgTG9nZ2VyKilsb2dnZXJQdHIKK3sKKyAgICBpZiAo
YXV0byBmdWxsc2NyZWVuSW50ZXJmYWNlID0gX2Z1bGxzY3JlZW5JbnRlcmZhY2UuZ2V0KCkpCisg
ICAgICAgIHJldHVybiBmdWxsc2NyZWVuSW50ZXJmYWNlLT5sb2dnZXJQdHIoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworLSAoV1RGTG9nQ2hhbm5lbCopbG9nQ2hhbm5lbAoreworICAgIHJl
dHVybiAmTG9nRnVsbHNjcmVlbjsKK30KKyNlbmRpZgorQGVuZAorCitSZWY8VmlkZW9QcmVzZW50
YXRpb25JbnRlcmZhY2VJT1M+IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpjcmVhdGUo
UGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlSU9TJiBwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit7
CisgICAgUmVmPFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TPiBpbnRlcmZhY2UgPSBhZG9w
dFJlZigqbmV3IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TKHBsYXliYWNrU2Vzc2lvbklu
dGVyZmFjZSkpOworICAgIFtpbnRlcmZhY2UtPm1fcGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0
ZSBzZXRGdWxsc2NyZWVuSW50ZXJmYWNlOmludGVyZmFjZS5wdHIoKV07CisgICAgcmV0dXJuIGlu
dGVyZmFjZTsKK30KKworVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OlZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlSU9TKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUlPUyYgcGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlKQorICAgIDogbV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UocGxheWJh
Y2tTZXNzaW9uSW50ZXJmYWNlKQorICAgICwgbV9wbGF5ZXJWaWV3Q29udHJvbGxlckRlbGVnYXRl
KGFkb3B0TlMoW1tXZWJBVlBsYXllclZpZXdDb250cm9sbGVyRGVsZWdhdGUgYWxsb2NdIGluaXRd
KSkKKyAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZWaWRlb1By
ZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6d2F0Y2hkb2dUaW1lckZpcmVkKQoreworfQorCitWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6flZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9T
KCkKK3sKKyAgICBXZWJBVlBsYXllckNvbnRyb2xsZXIqIHBsYXllckNvbnRyb2xsZXIgPSB0aGlz
LT5wbGF5ZXJDb250cm9sbGVyKCk7CisgICAgaWYgKHBsYXllckNvbnRyb2xsZXIgJiYgcGxheWVy
Q29udHJvbGxlci5leHRlcm5hbFBsYXliYWNrQWN0aXZlKQorICAgICAgICBleHRlcm5hbFBsYXli
YWNrQ2hhbmdlZChmYWxzZSwgUGxheWJhY2tTZXNzaW9uTW9kZWw6OkV4dGVybmFsUGxheWJhY2tU
YXJnZXRUeXBlOjpUYXJnZXRUeXBlTm9uZSwgZW1wdHlTdHJpbmcoKSk7CisgICAgaWYgKGF1dG8g
bW9kZWwgPSB2aWRlb1ByZXNlbnRhdGlvbk1vZGVsKCkpCisgICAgICAgIG1vZGVsLT5yZW1vdmVD
bGllbnQoKnRoaXMpOworfQorCitXZWJBVlBsYXllckNvbnRyb2xsZXIgKlZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlSU9TOjpwbGF5ZXJDb250cm9sbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UtPnBsYXllckNvbnRyb2xsZXIoKTsKK30KKworQVZQ
bGF5ZXJWaWV3Q29udHJvbGxlciAqVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmF2UGxh
eWVyVmlld0NvbnRyb2xsZXIoKSBjb25zdAoreworICAgIHJldHVybiBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBhdlBsYXllclZpZXdDb250cm9sbGVyXTsKK30KKwordm9pZCBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUlPUzo6c2V0VmlkZW9QcmVzZW50YXRpb25Nb2RlbChWaWRlb1ByZXNlbnRh
dGlvbk1vZGVsKiBtb2RlbCkKK3sKKyAgICBpZiAoYXV0byBvbGRNb2RlbCA9IHZpZGVvUHJlc2Vu
dGF0aW9uTW9kZWwoKSkKKyAgICAgICAgb2xkTW9kZWwtPnJlbW92ZUNsaWVudCgqdGhpcyk7CisK
KyAgICBtX3ZpZGVvUHJlc2VudGF0aW9uTW9kZWwgPSBtb2RlbDsKKworICAgIGlmIChtb2RlbCkg
eworICAgICAgICBtb2RlbC0+YWRkQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbW9kZWwtPnJlcXVl
c3RSb3V0ZVNoYXJpbmdQb2xpY3lBbmRDb250ZXh0VUlEKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0g
UmVmIHsgKnRoaXMgfV0gKFJvdXRlU2hhcmluZ1BvbGljeSBwb2xpY3ksIFN0cmluZyBjb250ZXh0
VUlEKSB7CisgICAgICAgICAgICBtX3JvdXRlU2hhcmluZ1BvbGljeSA9IHBvbGljeTsKKyAgICAg
ICAgICAgIG1fcm91dGluZ0NvbnRleHRVSUQgPSBjb250ZXh0VUlEOworCisgICAgICAgICAgICBp
ZiAobV9wbGF5ZXJWaWV3Q29udHJvbGxlciAmJiAhbV9yb3V0aW5nQ29udGV4dFVJRC5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0V2ViS2l0T3Zl
cnJpZGVSb3V0ZVNoYXJpbmdQb2xpY3k6KE5TVUludGVnZXIpbV9yb3V0ZVNoYXJpbmdQb2xpY3kg
cm91dGluZ0NvbnRleHRVSUQ6bV9yb3V0aW5nQ29udGV4dFVJRF07CisgICAgICAgIH0pOworICAg
IH0KKworICAgIGhhc1ZpZGVvQ2hhbmdlZChtb2RlbCA/IG1vZGVsLT5oYXNWaWRlbygpIDogZmFs
c2UpOworICAgIHZpZGVvRGltZW5zaW9uc0NoYW5nZWQobW9kZWwgPyBtb2RlbC0+dmlkZW9EaW1l
bnNpb25zKCkgOiBGbG9hdFNpemUoKSk7Cit9CisKK3ZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VJT1M6Omhhc1ZpZGVvQ2hhbmdlZChib29sIGhhc1ZpZGVvKQoreworICAgIFtwbGF5ZXJD
b250cm9sbGVyKCkgc2V0SGFzRW5hYmxlZFZpZGVvOmhhc1ZpZGVvXTsKKyAgICBbcGxheWVyQ29u
dHJvbGxlcigpIHNldEhhc1ZpZGVvOmhhc1ZpZGVvXTsKK30KKwordm9pZCBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUlPUzo6dmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNpemUm
IHZpZGVvRGltZW5zaW9ucykKK3sKKyAgICBpZiAodmlkZW9EaW1lbnNpb25zLmlzWmVybygpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXZWJBVlBsYXllckxheWVyICpwbGF5ZXJMYXllciA9IChX
ZWJBVlBsYXllckxheWVyICopW21fcGxheWVyTGF5ZXJWaWV3IHBsYXllckxheWVyXTsKKworICAg
IFtwbGF5ZXJMYXllciBzZXRWaWRlb0RpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKyAgICBb
cGxheWVyQ29udHJvbGxlcigpIHNldENvbnRlbnREaW1lbnNpb25zOnZpZGVvRGltZW5zaW9uc107
CisgICAgW21fcGxheWVyTGF5ZXJWaWV3IHNldE5lZWRzTGF5b3V0XTsKKworI2lmIEhBVkUoUElD
VFVSRUlOUElDVFVSRVBMQVlFUkxBWUVSVklFVykKKyAgICBXZWJBVlBpY3R1cmVJblBpY3R1cmVQ
bGF5ZXJMYXllclZpZXcgKnBpcFZpZXcgPSAoV2ViQVZQaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5
ZXJWaWV3ICopW21fcGxheWVyTGF5ZXJWaWV3IHBpY3R1cmVJblBpY3R1cmVQbGF5ZXJMYXllclZp
ZXddOworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBpcFBsYXllckxheWVyID0gKFdlYkFWUGxheWVy
TGF5ZXIgKilbcGlwVmlldyBsYXllcl07CisgICAgW3BpcFBsYXllckxheWVyIHNldFZpZGVvRGlt
ZW5zaW9uczpwbGF5ZXJMYXllci52aWRlb0RpbWVuc2lvbnNdOworICAgIFtwaXBWaWV3IHNldE5l
ZWRzTGF5b3V0XTsKKyNlbmRpZgorfQorCit2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
SU9TOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29sIGVuYWJsZWQsIFBsYXliYWNrU2Vzc2lv
bk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5nJikKK3sKKyAg
ICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0SGlkZGVuOmVuYWJsZWRdOworfQorCitib29sIFZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5F
bnRlcmluZ0JhY2tncm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBwaWN0dXJlSW5QaWN0dXJlV2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmRd
OworfQorCiAjaWYgUExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikKIHN0YXRp
YyBVSVZpZXdDb250cm9sbGVyICpmYWxsYmFja1ZpZXdDb250cm9sbGVyKFVJVmlldyAqdmlldykK
IHsKQEAgLTczLDI3ICs5MDUsMzIgQEAgVUlWaWV3Q29udHJvbGxlciAqVmlkZW9QcmVzZW50YXRp
b25JbnRlcmZhY2VJT1M6OnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigpCiB9CiAjZW5kaWYKIAot
VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
SU9TKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUlPUyYgcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNl
KQotICAgIDogbV93YXRjaGRvZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlSU9TOjp3YXRjaGRvZ1RpbWVyRmlyZWQpCi0gICAgLCBtX3BsYXli
YWNrU2Vzc2lvbkludGVyZmFjZShwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpCit2b2lkIFZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSgpCiB7
Ci0KKyAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjph
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKIH0KIAotVmlkZW9QcmVzZW50
YXRpb25JbnRlcmZhY2VJT1M6On5WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUygpCit2b2lk
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpzZXR1cEZ1bGxzY3JlZW4oVUlWaWV3JiB2
aWRlb1ZpZXcsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
dmlkZW9EaW1lbnNpb25zLCBVSVZpZXcqIHBhcmVudFZpZXcsIEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2RlLCBib29sIGFsbG93c1BpY3R1cmVJblBpY3R1cmVQ
bGF5YmFjaywgYm9vbCBzdGFuZGJ5LCBib29sIGJsb2Nrc1JldHVyblRvRnVsbHNjcmVlbkZyb21Q
aWN0dXJlSW5QaWN0dXJlKQogewotICAgIGlmIChhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRp
b25Nb2RlbCgpKQotICAgICAgICBtb2RlbC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKLX0KKyAgICBB
U1NFUlQoc3RhbmRieSB8fCBtb2RlICE9IEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxs
c2NyZWVuTW9kZU5vbmUpOworICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VJT1M6OnNldHVwRnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKIAotV2ViQVZQbGF5ZXJD
b250cm9sbGVyICpWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6cGxheWVyQ29udHJvbGxl
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlLT5wbGF5
ZXJDb250cm9sbGVyKCk7Ci19CisgICAgbV9jaGFuZ2luZ1N0YW5kYnlPbmx5ID0gbW9kZSA9PSBI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lICYmIHN0YW5kYnk7
CiAKLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmFwcGxpY2F0aW9uRGlkQmVj
b21lQWN0aXZlKCkKLXsKLSAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50
ZXJmYWNlSU9TOjphcHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZSglcCkiLCB0aGlzKTsKKyAgICBb
cGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRWaWRlbzp0cnVlXTsKKyAgICBbcGxheWVy
Q29udHJvbGxlcigpIHNldEhhc1ZpZGVvOnRydWVdOworICAgIFtwbGF5ZXJDb250cm9sbGVyKCkg
c2V0Q29udGVudERpbWVuc2lvbnM6dmlkZW9EaW1lbnNpb25zXTsKKworICAgIG1fYWxsb3dzUGlj
dHVyZUluUGljdHVyZVBsYXliYWNrID0gYWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOwor
ICAgIG1fdmlkZW9WaWV3ID0gJnZpZGVvVmlldzsKKyAgICBtX3BhcmVudFZpZXcgPSBwYXJlbnRW
aWV3OworICAgIG1fcGFyZW50V2luZG93ID0gcGFyZW50Vmlldy53aW5kb3c7CisKKyAgICBtX3Rh
cmdldFN0YW5kYnkgPSBzdGFuZGJ5OworICAgIG1fdGFyZ2V0TW9kZSA9IG1vZGU7CisgICAgbV9i
bG9ja3NSZXR1cm5Ub0Z1bGxzY3JlZW5Gcm9tUGljdHVyZUluUGljdHVyZSA9IGJsb2Nrc1JldHVy
blRvRnVsbHNjcmVlbkZyb21QaWN0dXJlSW5QaWN0dXJlOworICAgIHNldElubGluZVJlY3QoaW5p
dGlhbFJlY3QsIHRydWUpOworICAgIGRvU2V0dXAoKTsKIH0KIAogdm9pZCBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUlPUzo6ZW50ZXJGdWxsc2NyZWVuKCkKQEAgLTEwMyw2ICs5NDAsMjYgQEAg
dm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6ZW50ZXJGdWxsc2NyZWVuKCkKICAg
ICBkb0VudGVyRnVsbHNjcmVlbigpOwogfQogCitib29sIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJm
YWNlSU9TOjpleGl0RnVsbHNjcmVlbihjb25zdCBGbG9hdFJlY3QmIGZpbmFsUmVjdCkKK3sKKyAg
ICBtX3dhdGNoZG9nVGltZXIuc3RvcCgpOworCisgICAgLy8gVmlkZW9QcmVzZW50YXRpb25NYW5h
Z2VyIG1heSBhc2sgYSB2aWRlbyB0byBleGl0IHN0YW5kYnkgd2hpbGUgdGhlIHZpZGVvCisgICAg
Ly8gaXMgZW50ZXJpbmcgcGljdHVyZS1pbi1waWN0dXJlLiBXZSBuZWVkIHRvIGlnbm9yZSB0aGUg
cmVxdWVzdCBpbiB0aGF0IGNhc2UuCisgICAgaWYgKG1fc3RhbmRieSAmJiBtX2VudGVyaW5nUGlj
dHVyZUluUGljdHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9jaGFuZ2luZ1N0
YW5kYnlPbmx5ID0gIW1fY3VycmVudE1vZGUuaGFzVmlkZW8oKSAmJiBtX3N0YW5kYnk7CisKKyAg
ICBtX3RhcmdldE1vZGUgPSBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGVOb25lOworCisgICAgc2V0SW5saW5lUmVjdChmaW5hbFJlY3QsIHRydWUpOworICAgIGRvRXhp
dEZ1bGxzY3JlZW4oKTsKKyAgICBtX3Nob3VsZElnbm9yZUFWS2l0Q2FsbGJhY2tBYm91dEV4aXRG
dWxsc2NyZWVuUmVhc29uID0gdHJ1ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRp
b25Ub01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlIG1vZGUp
CiB7CiAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IEhUTUxNZWRpYUVsZW1lbnRFbnVt
czo6VmlkZW9GdWxsc2NyZWVuTW9kZU5vbmUpOwpAQCAtMTEyLDYgKzk2OSw2NiBAQCB2b2lkIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpleGl0RnVsbHNjcmVlbldpdGhvdXRBbmltYXRp
b25Ub01vZGUoSFRNTE1lZAogICAgIGNsZWFudXBGdWxsc2NyZWVuKCk7CiB9CiAKK3ZvaWQgVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmNsZWFudXBGdWxsc2NyZWVuKCkKK3sKKyAgICBM
T0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpjbGVhbnVwRnVs
bHNjcmVlbiglcCkiLCB0aGlzKTsKKyAgICBtX3Nob3VsZElnbm9yZUFWS2l0Q2FsbGJhY2tBYm91
dEV4aXRGdWxsc2NyZWVuUmVhc29uID0gZmFsc2U7CisKKyAgICBtX2NsZWFudXBOZWVkc1JldHVy
blZpZGVvQ29udGVudExheWVyID0gdHJ1ZTsKKyAgICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50
YXRpb25Nb2RlbCgpOworICAgIGlmIChtX2hhc1ZpZGVvQ29udGVudExheWVyICYmIG1vZGVsKSB7
CisgICAgICAgIG1vZGVsLT5yZXR1cm5WaWRlb0NvbnRlbnRMYXllcigpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIG1fY2xlYW51cE5lZWRzUmV0dXJuVmlkZW9Db250ZW50TGF5ZXIgPSBm
YWxzZTsKKworICAgIGlmIChtX3dpbmRvdykgeworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVu
OllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6bmlsXTsKKyAg
ICB9CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXREZWxlZ2F0ZTpuaWxdOworICAg
IFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldFBsYXllckNvbnRyb2xsZXI6bmlsXTsKKworICAg
IGlmIChtX2N1cnJlbnRNb2RlLmhhc1BpY3R1cmVJblBpY3R1cmUoKSkKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworCisgICAgaWYgKG1fY3Vy
cmVudE1vZGUuaGFzRnVsbHNjcmVlbigpKSB7CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJv
bGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9s
bGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Tk8gY29tcGxldGlvbkhhbmRsZXI6W10gKEJPT0wg
c3VjY2VzcywgTlNFcnJvciogZXJyb3IpIHsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIi1bQVZQbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0
RnVsbFNjcmVlbkFuaW1hdGVkOmNvbXBsZXRpb25IYW5kbGVyOl0gZmFpbGVkIHdpdGggZXJyb3Ig
JXMiLCBbW2Vycm9yIGxvY2FsaXplZERlc2NyaXB0aW9uXSBVVEY4U3RyaW5nXSk7CisgICAgICAg
IH1dOworICAgIH0KKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSByZW1vdmVG
cm9tU3VwZXJ2aWV3XTsKKyAgICBpZiAobV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgW21fcGxh
eWVyVmlld0NvbnRyb2xsZXIgcmVtb3ZlRnJvbVBhcmVudFZpZXdDb250cm9sbGVyXTsKKworICAg
IFttX3BsYXllckxheWVyVmlldyBzZXRWaWRlb1ZpZXc6bmlsXTsKKyAgICBbbV9wbGF5ZXJMYXll
clZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107CisgICAgW1ttX3ZpZXdDb250cm9sbGVyIHZpZXdd
IHJlbW92ZUZyb21TdXBlcnZpZXddOworCisgICAgbV9wbGF5ZXJMYXllclZpZXcgPSBuaWw7Cisg
ICAgbV9wbGF5ZXJWaWV3Q29udHJvbGxlciA9IG5pbDsKKyAgICBtX3dpbmRvdyA9IG5pbDsKKyAg
ICBtX3ZpZGVvVmlldyA9IG5pbDsKKyAgICBtX3BhcmVudFZpZXcgPSBuaWw7CisgICAgbV9wYXJl
bnRXaW5kb3cgPSBuaWw7CisKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEhhc0VuYWJsZWRW
aWRlbzpmYWxzZV07CisgICAgW3BsYXllckNvbnRyb2xsZXIoKSBzZXRIYXNWaWRlbzpmYWxzZV07
CisKKyAgICBpZiAobV9leGl0aW5nUGljdHVyZUluUGljdHVyZSkgeworICAgICAgICBtX2V4aXRp
bmdQaWN0dXJlSW5QaWN0dXJlID0gZmFsc2U7CisgICAgICAgIGlmIChtb2RlbCkKKyAgICAgICAg
ICAgIG1vZGVsLT5kaWRFeGl0UGljdHVyZUluUGljdHVyZSgpOworICAgIH0KKworICAgIGlmICht
b2RlbCkKKyAgICAgICAgbW9kZWwtPmRpZENsZWFudXBGdWxsc2NyZWVuKCk7Cit9CisKIHZvaWQg
VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmludmFsaWRhdGUoKQogewogICAgIG1fdmlk
ZW9QcmVzZW50YXRpb25Nb2RlbCA9IG51bGxwdHI7CkBAIC0xMjEsNiArMTAzOCw0NSBAQCB2b2lk
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjppbnZhbGlkYXRlKCkKICAgICBjbGVhbnVw
RnVsbHNjcmVlbigpOwogfQogCit2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpz
ZXRQbGF5ZXJJZGVudGlmaWVyKHN0ZDo6b3B0aW9uYWw8TWVkaWFQbGF5ZXJJZGVudGlmaWVyPiBp
ZGVudGlmaWVyKQoreworI2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVU
VikKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVy
IGZsYXNoUGxheWJhY2tDb250cm9sc1dpdGhEdXJhdGlvbjpwbGF5YmFja0NvbnRyb2xzVmlzaWJs
ZUR1cmF0aW9uQWZ0ZXJSZXNldHRpbmdWaWRlb1NvdXJjZV07CisjZW5kaWYKKworICAgIG1fcGxh
eWVySWRlbnRpZmllciA9IGlkZW50aWZpZXI7Cit9CisKK3ZvaWQgVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VJT1M6OnJlcXVlc3RIaWRlQW5kRXhpdEZ1bGxzY3JlZW4oKQoreworICAgIGlmICht
X2N1cnJlbnRNb2RlLmhhc1BpY3R1cmVJblBpY3R1cmUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6cmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbiglcCkiLCB0aGlzKTsKKworICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46WUVTXTsKKyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVu
OllFU107CisKKyAgICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpOworICAg
IGlmIChwbGF5YmFja1Nlc3Npb25Nb2RlbCgpICYmIG1vZGVsKSB7CisgICAgICAgIHBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisgICAgICAgIG1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVl
bk1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSk7Cisg
ICAgfQorfQorCit2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpwcmVwYXJlZFRv
UmV0dXJuVG9JbmxpbmUoYm9vbCB2aXNpYmxlLCBjb25zdCBGbG9hdFJlY3QmIGlubGluZVJlY3Qp
Cit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6
cHJlcGFyZWRUb1JldHVyblRvSW5saW5lKCVwKSAtIHZpc2libGUoJXMpIiwgdGhpcywgYm9vbFN0
cmluZyh2aXNpYmxlKSk7CisgICAgc2V0SW5saW5lUmVjdChpbmxpbmVSZWN0LCB2aXNpYmxlKTsK
KyAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0TmVlZHNMYXlvdXRdOworICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAgaWYg
KG1fcHJlcGFyZVRvSW5saW5lQ2FsbGJhY2spIHsKKyAgICAgICAgV1RGOjpGdW5jdGlvbjx2b2lk
KGJvb2wpPiBjYWxsYmFjayA9IFdURk1vdmUobV9wcmVwYXJlVG9JbmxpbmVDYWxsYmFjayk7Cisg
ICAgICAgIGNhbGxiYWNrKHZpc2libGUpOworICAgIH0KK30KKwogdm9pZCBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUlPUzo6cHJlcGFyZWRUb0V4aXRGdWxsc2NyZWVuKCkKIHsKICNpZiBQTEFU
Rk9STShXQVRDSE9TKQpAQCAtMTM0LDYgKzEwOTAsMTEgQEAgdm9pZCBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUlPUzo6cHJlcGFyZWRUb0V4aXRGdWxsc2NyZWVuKCkKICNlbmRpZgogfQogCiti
b29sIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjptYXlBdXRvbWF0aWNhbGx5U2hvd1Zp
ZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtwbGF5ZXJDb250cm9s
bGVyKCkgaXNQbGF5aW5nXSAmJiAobV9zdGFuZGJ5IHx8IG1fY3VycmVudE1vZGUuaXNGdWxsc2Ny
ZWVuKCkpICYmIHN1cHBvcnRzUGljdHVyZUluUGljdHVyZSgpOworfQorCiB2b2lkIFZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlSU9TOjpwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3AoV1RG
OjpGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIG1fcHJlcGFyZVRvSW5s
aW5lQ2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKQEAgLTE0MSw2ICsxMTAyLDY5IEBAIHZv
aWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OnByZXBhcmVGb3JQaWN0dXJlSW5QaWN0
dXJlU3RvcChXVEY6OkZ1bmN0aW9uCiAgICAgICAgIG1vZGVsLT5mdWxsc2NyZWVuTWF5UmV0dXJu
VG9JbmxpbmUoKTsKIH0KIAordm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6d2ls
bFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1By
ZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6d2lsbFN0YXJ0UGljdHVyZUluUGljdHVyZSglcCkiLCB0
aGlzKTsKKyAgICBtX2VudGVyaW5nUGljdHVyZUluUGljdHVyZSA9IHRydWU7CisKKyAgICBpZiAo
bV9zdGFuZGJ5ICYmICFtX2N1cnJlbnRNb2RlLmhhc1ZpZGVvKCkpIHsKKyAgICAgICAgW21fd2lu
ZG93IHNldEhpZGRlbjpOT107CisgICAgICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3
XSBzZXRIaWRkZW46Tk9dOworICAgIH0KKworICAgIGlmIChhdXRvIG1vZGVsID0gdmlkZW9QcmVz
ZW50YXRpb25Nb2RlbCgpKSB7CisgICAgICAgIGlmICghbV9oYXNWaWRlb0NvbnRlbnRMYXllcikK
KyAgICAgICAgICAgIG1vZGVsLT5yZXF1ZXN0VmlkZW9Db250ZW50TGF5ZXIoKTsKKyAgICAgICAg
bW9kZWwtPndpbGxFbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmRpZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpCit7
CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6ZGlk
U3RhcnRQaWN0dXJlSW5QaWN0dXJlKCVwKSIsIHRoaXMpOworICAgIHNldE1vZGUoSFRNTE1lZGlh
RWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSwgIW1fZW50
ZXJGdWxsc2NyZWVuTmVlZHNFbnRlclBpY3R1cmVJblBpY3R1cmUpOworICAgIFttX3BsYXllclZp
ZXdDb250cm9sbGVyIHNldFNob3dzUGxheWJhY2tDb250cm9sczpZRVNdOworICAgIFttX3ZpZXdD
b250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6Tk9dOworCisgICAg
aWYgKG1fY3VycmVudE1vZGUuaGFzRnVsbHNjcmVlbigpKSB7CisgICAgICAgIG1fc2hvdWxkUmV0
dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGljdHVyZUluUGljdHVyZSA9IHRydWU7CisgICAg
ICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlvdXRJZk5lZWRlZF07CisgICAg
ICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6WUVTIGNv
bXBsZXRpb25IYW5kbGVyOltwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpc10gKEJP
T0wgc3VjY2VzcywgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgICAgIGV4aXRGdWxsc2NyZWVu
SGFuZGxlcihzdWNjZXNzLCBlcnJvcik7CisgICAgICAgIH1dOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChtX3N0YW5kYnkgJiYgIW1fYmxvY2tzUmV0dXJuVG9GdWxsc2NyZWVuRnJvbVBpY3R1
cmVJblBpY3R1cmUpCisgICAgICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5T
dG9wcGluZ1BpY3R1cmVJblBpY3R1cmUgPSB0cnVlOworCisgICAgICAgIFttX3dpbmRvdyBzZXRI
aWRkZW46WUVTXTsKKyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhp
ZGRlbjpZRVNdOworICAgIH0KKworICAgIGlmIChtX2VudGVyRnVsbHNjcmVlbk5lZWRzRW50ZXJQ
aWN0dXJlSW5QaWN0dXJlKQorICAgICAgICBkb0VudGVyRnVsbHNjcmVlbigpOworfQorCit2b2lk
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpmYWlsZWRUb1N0YXJ0UGljdHVyZUluUGlj
dHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFj
ZUlPUzo6ZmFpbGVkVG9TdGFydFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CisgICAgW21f
cGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107CisKKyAg
ICBtX3RhcmdldE1vZGUuc2V0UGljdHVyZUluUGljdHVyZShmYWxzZSk7CisgICAgaWYgKG1fY3Vy
cmVudE1vZGUuaGFzRnVsbHNjcmVlbigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0
byBtb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwoKSkgeworICAgICAgICBtb2RlbC0+ZmFp
bGVkVG9FbnRlclBpY3R1cmVJblBpY3R1cmUoKTsKKyAgICAgICAgbW9kZWwtPnJlcXVlc3RGdWxs
c2NyZWVuTW9kZShIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25l
KTsKKyAgICAgICAgbW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChIVE1MTWVkaWFFbGVtZW50
RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVOb25lKTsKKyAgICAgICAgbW9kZWwtPmZhaWxlZFRv
RW50ZXJGdWxsc2NyZWVuKCk7CisgICAgfQorICAgIG1fY2hhbmdpbmdTdGFuZGJ5T25seSA9IGZh
bHNlOworCisgICAgbV9lbnRlckZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0dXJlID0g
ZmFsc2U7CisgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1cmVJblBpY3R1cmUgPSBm
YWxzZTsKK30KKwogdm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6d2lsbFN0b3BQ
aWN0dXJlSW5QaWN0dXJlKCkKIHsKICAgICBMT0coRnVsbHNjcmVlbiwgIlZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlSU9TOjp3aWxsU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhpcyk7CkBA
IC0xNTUsNiArMTE3OSwxMjAgQEAgdm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6
d2lsbFN0b3BQaWN0dXJlSW5QaWN0dXJlKCkKICAgICAgICAgbW9kZWwtPndpbGxFeGl0UGljdHVy
ZUluUGljdHVyZSgpOwogfQogCit2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpk
aWRTdG9wUGljdHVyZUluUGljdHVyZSgpCit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1By
ZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6ZGlkU3RvcFBpY3R1cmVJblBpY3R1cmUoJXApIiwgdGhp
cyk7CisgICAgbV90YXJnZXRNb2RlLnNldFBpY3R1cmVJblBpY3R1cmUoZmFsc2UpOworICAgIFtt
X3ZpZXdDb250cm9sbGVyIF9zZXRJZ25vcmVBcHBTdXBwb3J0ZWRPcmllbnRhdGlvbnM6WUVTXTsK
KworICAgIGlmIChtX3JldHVybmluZ1RvU3RhbmRieSkgeworICAgICAgICBtX2V4aXRpbmdQaWN0
dXJlSW5QaWN0dXJlID0gZmFsc2U7CisgICAgICAgIG1fZW50ZXJpbmdQaWN0dXJlSW5QaWN0dXJl
ID0gZmFsc2U7CisgICAgICAgIGlmIChhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2Rl
bCgpKQorICAgICAgICAgICAgbW9kZWwtPmRpZEV4aXRQaWN0dXJlSW5QaWN0dXJlKCk7CisKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRNb2RlLmhhc0Z1bGxzY3Jl
ZW4oKSkgeworICAgICAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1
bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSwgIW1fZXhpdEZ1bGxzY3JlZW5OZWVkc0V4aXRQ
aWN0dXJlSW5QaWN0dXJlKTsKKyAgICAgICAgW21fd2luZG93IG1ha2VLZXlXaW5kb3ddOworICAg
ICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBzZXRTaG93c1BsYXliYWNrQ29udHJvbHM6WUVT
XTsKKworICAgICAgICBpZiAobV9leGl0RnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1cmVJblBpY3R1
cmUpCisgICAgICAgICAgICBkb0V4aXRGdWxsc2NyZWVuKCk7CisgICAgICAgIGVsc2UgaWYgKG1f
ZXhpdGluZ1BpY3R1cmVJblBpY3R1cmUpIHsKKyAgICAgICAgICAgIG1fZXhpdGluZ1BpY3R1cmVJ
blBpY3R1cmUgPSBmYWxzZTsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vZGVsID0gdmlkZW9QcmVz
ZW50YXRpb25Nb2RlbCgpKQorICAgICAgICAgICAgICAgIG1vZGVsLT5kaWRFeGl0UGljdHVyZUlu
UGljdHVyZSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZW50ZXJGdWxsc2NyZWVuTmVl
ZHNFeGl0UGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgICAgIGRvRW50ZXJGdWxsc2NyZWVuKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjbGVhck1vZGUoSFRNTE1lZGlhRWxlbWVu
dEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVyZUluUGljdHVyZSwgIW1fZXhpdEZ1bGxz
Y3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0dXJlKTsKKworICAgIFttX3BsYXllckxheWVyVmll
dyBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgIFtbbV9wbGF5ZXJWaWV3
Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworCisg
ICAgaWYgKG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGljdHVyZSkKKyAgICAg
ICAgZG9FbnRlckZ1bGxzY3JlZW4oKTsKKworICAgIGlmIChtX2V4aXRGdWxsc2NyZWVuTmVlZHNF
eGl0UGljdHVyZUluUGljdHVyZSkKKyAgICAgICAgZG9FeGl0RnVsbHNjcmVlbigpOworCisgICAg
aWYgKCFtX3RhcmdldE1vZGUuaGFzRnVsbHNjcmVlbigpICYmICFtX2N1cnJlbnRNb2RlLmhhc0Z1
bGxzY3JlZW4oKSAmJiAhbV9oYXNWaWRlb0NvbnRlbnRMYXllcikgeworICAgICAgICAvLyBXZSBo
YXZlIGp1c3QgZXhpdGVkIHBpcCBhbmQgbm90IGVudGVyZWQgZnVsbHNjcmVlbiBpbiB0dXJuLiBU
byBhdm9pZCBnZXR0aW5nCisgICAgICAgIC8vIHN0dWNrIGhvbGRpbmcgdGhlIHZpZGVvIGNvbnRl
bnQgbGF5ZXIsIGV4cGxpY2l0bHkgcmV0dXJuIGl0IGhlcmU6CisgICAgICAgIGlmIChhdXRvIG1v
ZGVsID0gdmlkZW9QcmVzZW50YXRpb25Nb2RlbCgpKQorICAgICAgICAgICAgbW9kZWwtPnJldHVy
blZpZGVvVmlldygpOworICAgIH0KK30KKwordm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFj
ZUlPUzo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVy
KHZvaWQgKF5jb21wbGV0aW9uSGFuZGxlcikoQk9PTCByZXN0b3JlZCkpCit7CisgICAgTE9HKEZ1
bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6cHJlcGFyZUZvclBpY3R1
cmVJblBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyKCVwKSIsIHRoaXMpOworCisgICAg
aWYgKG1fc2hvdWxkUmV0dXJuVG9GdWxsc2NyZWVuV2hlblN0b3BwaW5nUGljdHVyZUluUGljdHVy
ZSkgeworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5TdG9wcGluZ1BpY3R1
cmVJblBpY3R1cmUgPSBmYWxzZTsKKworICAgICAgICBbbV93aW5kb3cgc2V0SGlkZGVuOk5PXTsK
KyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpOT107CisK
KyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVkXTsK
KyAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0ZWQ6
WUVTIGNvbXBsZXRpb25IYW5kbGVyOl4oQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikgewor
ICAgICAgICAgICAgZW50ZXJGdWxsc2NyZWVuSGFuZGxlcihzdWNjZXNzLCBlcnJvcik7CisgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdWNjZXNzKTsKKyAgICAgICAgfV07CisKKyAgICAg
ICAgaWYgKG1fc3RhbmRieSkgeworICAgICAgICAgICAgbV9yZXR1cm5pbmdUb1N0YW5kYnkgPSB0
cnVlOworICAgICAgICAgICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0QWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrOk5PXTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3AoW3Byb3RlY3RlZFRoaXMg
PSBSZWYgeyAqdGhpcyB9LCBzdHJvbmdDb21wbGV0aW9uSGFuZGxlciA9IGFkb3B0TlMoW2NvbXBs
ZXRpb25IYW5kbGVyIGNvcHldKV0oYm9vbCByZXN0b3JlZCkgIHsKKyAgICAgICAgTE9HKEZ1bGxz
Y3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6cHJlcGFyZUZvclBpY3R1cmVJ
blBpY3R1cmVTdG9wV2l0aENvbXBsZXRpb25IYW5kbGVyIGxhbWJkYSglcCkgLSByZXN0b3JlZCgl
cykiLCBwcm90ZWN0ZWRUaGlzLnB0cigpLCBib29sU3RyaW5nKHJlc3RvcmVkKSk7CisgICAgICAg
ICgodm9pZCAoXikoQk9PTCkpc3Ryb25nQ29tcGxldGlvbkhhbmRsZXIuZ2V0KCkpKHJlc3RvcmVk
KTsKKyAgICB9KTsKK30KKworYm9vbCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6c2hv
dWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9T
OjpFeGl0RnVsbFNjcmVlblJlYXNvbiByZWFzb24pCit7CisgICAgLy8gQVZLaXQgY2FsbHMgcGxh
eWVyVmlld0NvbnRyb2xsZXI6c2hvdWxkRXhpdEZ1bGxTY3JlZW5XaXRoUmVhc29uIGluIHRoZSBz
Y2VuYXJpbyB0aGF0IHRoZSBleGl0IGZ1bGxzY3JlZW4gcmVxdWVzdAorICAgIC8vIGlzIGZyb20g
dGhlIHdlYiBwcm9jZXNzIChlLmcuLCB0aHJvdWdoIEphdmFzY3JpcHQgQVBJIHZpZGVvRWxlbWVu
dC53ZWJraXRFeGl0RnVsbHNjcmVlbigpKS4KKyAgICAvLyBXZSBoYXZlIHRvIGlnbm9yZSB0aGUg
Y2FsbGJhY2sgaW4gdGhhdCBjYXNlLgorICAgIGlmIChtX3Nob3VsZElnbm9yZUFWS2l0Q2FsbGJh
Y2tBYm91dEV4aXRGdWxsc2NyZWVuUmVhc29uKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNlbnRhdGlvbk1vZGVsKCk7CisgICAgaWYgKCFtb2RlbCkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAocmVhc29uID09IEV4aXRGdWxsU2NyZWVu
UmVhc29uOjpQaWN0dXJlSW5QaWN0dXJlU3RhcnRlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKHBsYXliYWNrU2Vzc2lvbk1vZGVsKCkgJiYgKHJlYXNvbiA9PSBFeGl0RnVsbFNj
cmVlblJlYXNvbjo6RG9uZUJ1dHRvblRhcHBlZCB8fCByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5S
ZWFzb246OlJlbW90ZUNvbnRyb2xTdG9wRXZlbnRSZWNlaXZlZCkpCisgICAgICAgIHBsYXliYWNr
U2Vzc2lvbk1vZGVsKCktPnBhdXNlKCk7CisKKyAgICBpZiAoIW1fd2F0Y2hkb2dUaW1lci5pc0Fj
dGl2ZSgpICYmICFpZ25vcmVXYXRjaGRvZ0ZvckRlYnVnZ2luZykKKyAgICAgICAgbV93YXRjaGRv
Z1RpbWVyLnN0YXJ0T25lU2hvdChkZWZhdWx0V2F0Y2hkb2dUaW1lckludGVydmFsKTsKKworI2lm
IFBMQVRGT1JNKFdBVENIT1MpCisgICAgbV93YWl0aW5nRm9yUHJlcGFyZWRUb0V4aXQgPSB0cnVl
OworICAgIG1vZGVsLT53aWxsRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICByZXR1cm4gZmFsc2U7Cisj
ZWxzZQorICAgIEJPT0wgZmluaXNoZWQgPSByZWFzb24gPT0gRXhpdEZ1bGxTY3JlZW5SZWFzb246
OkRvbmVCdXR0b25UYXBwZWQgfHwgcmVhc29uID09IEV4aXRGdWxsU2NyZWVuUmVhc29uOjpQaW5j
aEdlc3R1cmVIYW5kbGVkOworICAgIG1vZGVsLT5yZXF1ZXN0RnVsbHNjcmVlbk1vZGUoSFRNTE1l
ZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlTm9uZSwgZmluaXNoZWQpOworICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCiB2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJm
YWNlSU9TOjpzZXRIYXNWaWRlb0NvbnRlbnRMYXllcihib29sIHZhbHVlKQogewogICAgIG1faGFz
VmlkZW9Db250ZW50TGF5ZXIgPSB2YWx1ZTsKQEAgLTE3MSw2ICsxMzA5LDExOCBAQCB2b2lkIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpzZXRIYXNWaWRlb0NvbnRlbnRMYXllcihib29s
IHZhbHVlKQogICAgICAgICBkb0V4aXRGdWxsc2NyZWVuKCk7CiB9CiAKK3ZvaWQgVmlkZW9QcmVz
ZW50YXRpb25JbnRlcmZhY2VJT1M6OnNldElubGluZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBpbmxp
bmVSZWN0LCBib29sIHZpc2libGUpCit7CisgICAgbV9pbmxpbmVSZWN0ID0gaW5saW5lUmVjdDsK
KyAgICBtX2lubGluZUlzVmlzaWJsZSA9IHZpc2libGU7CisgICAgbV9oYXNVcGRhdGVkSW5saW5l
UmVjdCA9IHRydWU7CisKKyAgICBpZiAobV9wbGF5ZXJWaWV3Q29udHJvbGxlciAmJiBtX3BhcmVu
dFZpZXcpIHsKKyAgICAgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgICAgICBbQ0FUcmFu
c2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3BhcmVudFZpZXcgY29udmVydFJlY3Q6aW5saW5lUmVj
dCB0b1ZpZXc6W21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10uc3VwZXJ2aWV3XTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICB9CisKKyAgICBpZiAobV9zZXR1cE5lZWRz
SW5saW5lUmVjdCkKKyAgICAgICAgZG9TZXR1cCgpOworCisgICAgaWYgKG1fZXhpdEZ1bGxzY3Jl
ZW5OZWVkSW5saW5lUmVjdCkKKyAgICAgICAgZG9FeGl0RnVsbHNjcmVlbigpOworfQorCit2b2lk
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpkb1NldHVwKCkKK3sKKyAgICBpZiAobV9j
dXJyZW50TW9kZS5oYXNWaWRlbygpICYmIG1fdGFyZ2V0TW9kZS5oYXNWaWRlbygpKSB7CisgICAg
ICAgIEFMV0FZU19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgImJvdGggdGFyZ2V0TW9k
ZSBhbmQgY3VycmVudE1vZGUgaGF2ZVZpZGVvLCBiYWlsaW5nIik7CisgICAgICAgIG1fc3RhbmRi
eSA9IG1fdGFyZ2V0U3RhbmRieTsKKyAgICAgICAgZmluYWxpemVTZXR1cCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXV0byBtb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwo
KTsKKyAgICBpZiAoIW1faGFzVXBkYXRlZElubGluZVJlY3QgJiYgbW9kZWwpIHsKKyAgICAgICAg
QUxXQVlTX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiIWhhc1VwZGF0ZWRJbmxpbmVS
ZWN0LCBiYWlsaW5nIik7CisgICAgICAgIG1fc2V0dXBOZWVkc0lubGluZVJlY3QgPSB0cnVlOwor
ICAgICAgICBtb2RlbC0+cmVxdWVzdFVwZGF0ZUlubGluZVJlY3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3NldHVwTmVlZHNJbmxpbmVSZWN0ID0gZmFsc2U7CisKKyAgICBbQ0FU
cmFuc2FjdGlvbiBiZWdpbl07CisgICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6
WUVTXTsKKworI2lmICFQTEFURk9STShXQVRDSE9TKQorICAgIGlmICghW1ttX3BhcmVudFZpZXcg
d2luZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNzXSAmJiAhbV93aW5kb3cpIHsKKyAgICAg
ICAgbV93aW5kb3cgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlXaW5kb3dJbnN0YW5jZSgpIGluaXRX
aXRoV2luZG93U2NlbmU6W1ttX3BhcmVudFZpZXcgd2luZG93XSB3aW5kb3dTY2VuZV1dKTsKKyAg
ICAgICAgW21fd2luZG93IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAg
ICAgIGlmICghbV92aWV3Q29udHJvbGxlcikKKyAgICAgICAgICAgIG1fdmlld0NvbnRyb2xsZXIg
PSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlWaWV3Q29udHJvbGxlckluc3RhbmNlKCkgaW5pdF0pOwor
ICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10gc2V0RnJhbWU6W21fd2luZG93IGJvdW5k
c11dOworICAgICAgICBbbV92aWV3Q29udHJvbGxlciBfc2V0SWdub3JlQXBwU3VwcG9ydGVkT3Jp
ZW50YXRpb25zOllFU107CisgICAgICAgIFttX3dpbmRvdyBzZXRSb290Vmlld0NvbnRyb2xsZXI6
bV92aWV3Q29udHJvbGxlci5nZXQoKV07CisgICAgICAgIGF1dG8gdGV4dEVmZmVjdHNXaW5kb3dM
ZXZlbCA9IFsmXSB7CisgICAgICAgICAgICBhdXRvICp0ZXh0RWZmZWN0c1dpbmRvdyA9IFtQQUw6
OmdldFVJVGV4dEVmZmVjdHNXaW5kb3dDbGFzcygpIHNoYXJlZFRleHRFZmZlY3RzV2luZG93Rm9y
V2luZG93U2NlbmU6W21fd2luZG93IHdpbmRvd1NjZW5lXV07CisgICAgICAgICAgICByZXR1cm4g
dGV4dEVmZmVjdHNXaW5kb3cgPyB0ZXh0RWZmZWN0c1dpbmRvdy53aW5kb3dMZXZlbCA6IFBBTDo6
Z2V0X1VJS2l0X1VJVGV4dEVmZmVjdHNCZW5lYXRoU3RhdHVzQmFyV2luZG93TGV2ZWwoKTsKKyAg
ICAgICAgfSgpOworICAgICAgICBbbV93aW5kb3cgc2V0V2luZG93TGV2ZWw6dGV4dEVmZmVjdHNX
aW5kb3dMZXZlbCAtIDFdOworICAgICAgICBbbV93aW5kb3cgbWFrZUtleUFuZFZpc2libGVdOwor
ICAgIH0KKyNlbmRpZiAvLyAhUExBVEZPUk0oV0FUQ0hPUykKKworICAgIGlmICghbV9wbGF5ZXJM
YXllclZpZXcpCisgICAgICAgIG1fcGxheWVyTGF5ZXJWaWV3ID0gYWRvcHROUyhbYWxsb2NXZWJB
VlBsYXllckxheWVyVmlld0luc3RhbmNlKCkgaW5pdF0pOworICAgIFttX3BsYXllckxheWVyVmll
dyBzZXRIaWRkZW46W3BsYXllckNvbnRyb2xsZXIoKSBpc0V4dGVybmFsUGxheWJhY2tBY3RpdmVd
XTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0QmFja2dyb3VuZENvbG9yOmNsZWFyVUlDb2xv
cigpXTsKKyAgICBbbV9wbGF5ZXJMYXllclZpZXcgc2V0VmlkZW9WaWV3Om1fdmlkZW9WaWV3Lmdl
dCgpXTsKKworICAgIGlmICghbV9jdXJyZW50TW9kZS5oYXNQaWN0dXJlSW5QaWN0dXJlKCkgJiYg
IW1fY2hhbmdpbmdTdGFuZGJ5T25seSkgeworICAgICAgICBBTFdBWVNfTE9HX0lGX1BPU1NJQkxF
KExPR0lERU5USUZJRVIsICJNb3ZpbmcgdmlkZW9WaWV3IHRvIGZ1bGxzY3JlZW4gV2ViQVZQbGF5
ZXJMYXllclZpZXciKTsKKyAgICAgICAgW21fcGxheWVyTGF5ZXJWaWV3IGFkZFN1YnZpZXc6bV92
aWRlb1ZpZXcuZ2V0KCldOworICAgIH0KKworICAgIFdlYkFWUGxheWVyTGF5ZXIgKnBsYXllckxh
eWVyID0gKFdlYkFWUGxheWVyTGF5ZXIgKilbbV9wbGF5ZXJMYXllclZpZXcgcGxheWVyTGF5ZXJd
OworCisgICAgcGxheWVyTGF5ZXIucHJlc2VudGF0aW9uTW9kZWwgPSBtb2RlbC5nZXQoKTsKKwor
ICAgIGlmICghbV9wbGF5ZXJWaWV3Q29udHJvbGxlcikKKyAgICAgICAgbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciA9IGFkb3B0TlMoW1tXZWJBVlBsYXllclZpZXdDb250cm9sbGVyIGFsbG9jXSBpbml0
V2l0aEZ1bGxzY3JlZW5JbnRlcmZhY2U6dGhpc10pOworCisgICAgW21fcGxheWVyVmlld0NvbnRy
b2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOk5PXTsKKyAgICBbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciBzZXRQbGF5ZXJDb250cm9sbGVyOihBVlBsYXllckNvbnRyb2xsZXIgKilwbGF5ZXJD
b250cm9sbGVyKCldOworICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHNldERlbGVnYXRlOm1f
cGxheWVyVmlld0NvbnRyb2xsZXJEZWxlZ2F0ZS5nZXQoKV07CisgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgc2V0QWxsb3dzUGljdHVyZUluUGljdHVyZVBsYXliYWNrOm1fYWxsb3dzUGljdHVy
ZUluUGljdHVyZVBsYXliYWNrXTsKKyAgICBbcGxheWVyQ29udHJvbGxlcigpIHNldEFsbG93c1Bp
Y3R1cmVJblBpY3R1cmU6bV9hbGxvd3NQaWN0dXJlSW5QaWN0dXJlUGxheWJhY2tdOworICAgIGlm
ICghbV9yb3V0aW5nQ29udGV4dFVJRC5pc0VtcHR5KCkpCisgICAgICAgIFttX3BsYXllclZpZXdD
b250cm9sbGVyIHNldFdlYktpdE92ZXJyaWRlUm91dGVTaGFyaW5nUG9saWN5OihOU1VJbnRlZ2Vy
KW1fcm91dGVTaGFyaW5nUG9saWN5IHJvdXRpbmdDb250ZXh0VUlEOm1fcm91dGluZ0NvbnRleHRV
SURdOworCisjaWYgUExBVEZPUk0oV0FUQ0hPUykKKyAgICBtX3ZpZXdDb250cm9sbGVyID0gbW9k
ZWwgPyBtb2RlbC0+Y3JlYXRlVmlkZW9GdWxsc2NyZWVuVmlld0NvbnRyb2xsZXIobV9wbGF5ZXJW
aWV3Q29udHJvbGxlci5nZXQoKS5hdlBsYXllclZpZXdDb250cm9sbGVyKSA6IG5pbDsKKyNlbmRp
ZgorCisgICAgaWYgKG1fdmlld0NvbnRyb2xsZXIpIHsKKyAgICAgICAgW21fdmlld0NvbnRyb2xs
ZXIgYWRkQ2hpbGRWaWV3Q29udHJvbGxlcjptX3BsYXllclZpZXdDb250cm9sbGVyLmdldCgpLmF2
UGxheWVyVmlld0NvbnRyb2xsZXJdOworICAgICAgICBbW21fdmlld0NvbnRyb2xsZXIgdmlld10g
YWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XV07CisgICAgfSBlbHNlCisg
ICAgICAgIFttX3BhcmVudFZpZXcgYWRkU3VidmlldzpbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XV07CisKKyAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XS5mcmFtZSA9IFttX3Bh
cmVudFZpZXcgY29udmVydFJlY3Q6bV9pbmxpbmVSZWN0IHRvVmlldzpbbV9wbGF5ZXJWaWV3Q29u
dHJvbGxlciB2aWV3XS5zdXBlcnZpZXddOworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2
aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJVSUNvbG9yKCldOworICAgIFtbbV9wbGF5ZXJW
aWV3Q29udHJvbGxlciB2aWV3XSBzZXRBdXRvcmVzaXppbmdNYXNrOihVSVZpZXdBdXRvcmVzaXpp
bmdGbGV4aWJsZUJvdHRvbU1hcmdpbiB8IFVJVmlld0F1dG9yZXNpemluZ0ZsZXhpYmxlUmlnaHRN
YXJnaW4pXTsKKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXROZWVkc0xh
eW91dF07CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIGxheW91dElmTmVlZGVk
XTsKKworICAgIGlmIChtX3RhcmdldFN0YW5kYnkgJiYgIW1fY3VycmVudE1vZGUuaGFzVmlkZW8o
KSAmJiAhbV9yZXR1cm5pbmdUb1N0YW5kYnkpIHsKKyAgICAgICAgW21fd2luZG93IHNldEhpZGRl
bjpZRVNdOworICAgICAgICBbW21fcGxheWVyVmlld0NvbnRyb2xsZXIgdmlld10gc2V0SGlkZGVu
OllFU107CisgICAgfQorCisgICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKworICAgIGZpbmFs
aXplU2V0dXAoKTsKK30KKwogdm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6cHJl
cGFyZWRUb1JldHVyblRvU3RhbmRieSgpCiB7CiAgICAgaWYgKCFtX3JldHVybmluZ1RvU3RhbmRi
eSkKQEAgLTIwMCw2ICsxNDUwLDE1MyBAQCB2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
SU9TOjpmaW5hbGl6ZVNldHVwKCkKICAgICB9KTsKIH0KIAordm9pZCBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUlPUzo6ZG9FbnRlckZ1bGxzY3JlZW4oKQoreworICAgIG1fc3RhbmRieSA9IG1f
dGFyZ2V0U3RhbmRieTsKKworICAgIFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBsYXlv
dXRJZk5lZWRlZF07CisgICAgaWYgKG1fdGFyZ2V0TW9kZS5oYXNGdWxsc2NyZWVuKCkgJiYgIW1f
Y3VycmVudE1vZGUuaGFzRnVsbHNjcmVlbigpKSB7CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRk
ZW46Tk9dOworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciBlbnRlckZ1bGxTY3JlZW5B
bmltYXRlZDpZRVMgY29tcGxldGlvbkhhbmRsZXI6W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYg
eyAqdGhpcyB9XSAoQk9PTCBzdWNjZXNzLCBOU0Vycm9yICplcnJvcikgeworICAgICAgICAgICAg
ZW50ZXJGdWxsc2NyZWVuSGFuZGxlcihzdWNjZXNzLCBlcnJvciwgTmV4dEFjdGlvbjo6TmVlZHNF
bnRlckZ1bGxTY3JlZW4pOworICAgICAgICB9XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChtX3RhcmdldE1vZGUuaGFzUGljdHVyZUluUGljdHVyZSgpICYmICFtX2N1cnJlbnRN
b2RlLmhhc1BpY3R1cmVJblBpY3R1cmUoKSkgeworICAgICAgICBtX2VudGVyRnVsbHNjcmVlbk5l
ZWRzRW50ZXJQaWN0dXJlSW5QaWN0dXJlID0gdHJ1ZTsKKyAgICAgICAgW21fcGxheWVyVmlld0Nv
bnRyb2xsZXIgdHJ5VG9TdGFydFBpY3R1cmVJblBpY3R1cmVdOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFbnRlclBpY3R1cmVJblBpY3R1cmUgPSBm
YWxzZTsKKworICAgIGlmICghbV90YXJnZXRNb2RlLmhhc0Z1bGxzY3JlZW4oKSAmJiBtX2N1cnJl
bnRNb2RlLmhhc0Z1bGxzY3JlZW4oKSkgeworICAgICAgICBbbV9wbGF5ZXJWaWV3Q29udHJvbGxl
ciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0aW9uSGFuZGxlcjpbcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXNdIChCT09MIHN1Y2Nlc3MsIE5TRXJyb3IgKmVycm9y
KSB7CisgICAgICAgICAgICBleGl0RnVsbHNjcmVlbkhhbmRsZXIoc3VjY2VzcywgZXJyb3IsIE5l
eHRBY3Rpb246Ok5lZWRzRW50ZXJGdWxsU2NyZWVuKTsKKyAgICAgICAgfV07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fdGFyZ2V0TW9kZS5oYXNQaWN0dXJlSW5QaWN0dXJl
KCkgJiYgbV9jdXJyZW50TW9kZS5oYXNQaWN0dXJlSW5QaWN0dXJlKCkpIHsKKyAgICAgICAgbV9l
bnRlckZ1bGxzY3JlZW5OZWVkc0V4aXRQaWN0dXJlSW5QaWN0dXJlID0gdHJ1ZTsKKyAgICAgICAg
W21fcGxheWVyVmlld0NvbnRyb2xsZXIgc3RvcFBpY3R1cmVJblBpY3R1cmVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fZW50ZXJGdWxsc2NyZWVuTmVlZHNFeGl0UGljdHVyZUluUGlj
dHVyZSA9IGZhbHNlOworCisgICAgYXV0byBtb2RlbCA9IHZpZGVvUHJlc2VudGF0aW9uTW9kZWwo
KTsKKyAgICBpZiAoIW1vZGVsKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRTaXplIHNpemU7
CisjaWYgSEFWRShQSUNUVVJFSU5QSUNUVVJFUExBWUVSTEFZRVJWSUVXKQorICAgIGlmIChtX2N1
cnJlbnRNb2RlLmhhc1BpY3R1cmVJblBpY3R1cmUoKSkgeworICAgICAgICBhdXRvICpwaXBWaWV3
ID0gKFdlYkFWUGljdHVyZUluUGljdHVyZVBsYXllckxheWVyVmlldyAqKVttX3BsYXllckxheWVy
VmlldyBwaWN0dXJlSW5QaWN0dXJlUGxheWVyTGF5ZXJWaWV3XTsKKyAgICAgICAgYXV0byAqcGlw
UGxheWVyTGF5ZXIgPSAoV2ViQVZQbGF5ZXJMYXllciAqKVtwaXBWaWV3IGxheWVyXTsKKyAgICAg
ICAgYXV0byB2aWRlb0ZyYW1lID0gW3BpcFBsYXllckxheWVyIGNhbGN1bGF0ZVRhcmdldFZpZGVv
RnJhbWVdOworICAgICAgICBzaXplID0gRmxvYXRTaXplKHZpZGVvRnJhbWUuc2l6ZSgpKTsKKyAg
ICB9CisjZW5kaWYKKyAgICBtb2RlbC0+ZGlkRW50ZXJGdWxsc2NyZWVuKHNpemUpOworICAgIG1f
ZW50ZXJpbmdQaWN0dXJlSW5QaWN0dXJlID0gZmFsc2U7CisgICAgbV9jaGFuZ2luZ1N0YW5kYnlP
bmx5ID0gZmFsc2U7CisgICAgaWYgKG1fY3VycmVudE1vZGUuaGFzUGljdHVyZUluUGljdHVyZSgp
KQorICAgICAgICBtb2RlbC0+ZGlkRW50ZXJQaWN0dXJlSW5QaWN0dXJlKCk7Cit9CisKK3ZvaWQg
VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmRvRXhpdEZ1bGxzY3JlZW4oKQoreworICAg
IExPRyhGdWxsc2NyZWVuLCAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmRvRXhpdEZ1
bGxzY3JlZW4oJXApIiwgdGhpcyk7CisKKyAgICBhdXRvIG1vZGVsID0gdmlkZW9QcmVzZW50YXRp
b25Nb2RlbCgpOworICAgIGlmIChtX2N1cnJlbnRNb2RlLmhhc1ZpZGVvKCkgJiYgIW1faGFzVXBk
YXRlZElubGluZVJlY3QgJiYgbW9kZWwpIHsKKyAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRJ
bmxpbmVSZWN0ID0gdHJ1ZTsKKyAgICAgICAgbW9kZWwtPnJlcXVlc3RVcGRhdGVJbmxpbmVSZWN0
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRJbmxp
bmVSZWN0ID0gZmFsc2U7CisKKyAgICBpZiAobV9jdXJyZW50TW9kZS5oYXNNb2RlKEhUTUxNZWRp
YUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZVN0YW5kYXJkKSkgeworICAgICAgICBb
bV9wbGF5ZXJWaWV3Q29udHJvbGxlciBleGl0RnVsbFNjcmVlbkFuaW1hdGVkOllFUyBjb21wbGV0
aW9uSGFuZGxlcjpbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIHRoaXNdIChCT09MIHN1
Y2Nlc3MsIE5TRXJyb3IgKmVycm9yKSB7CisgICAgICAgICAgICBleGl0RnVsbHNjcmVlbkhhbmRs
ZXIoc3VjY2VzcywgZXJyb3IsIE5leHRBY3Rpb246Ok5lZWRzRXhpdEZ1bGxTY3JlZW4pOworICAg
ICAgICB9XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnRNb2Rl
Lmhhc01vZGUoSFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlUGljdHVy
ZUluUGljdHVyZSkpIHsKKyAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzRXhpdFBpY3R1cmVJ
blBpY3R1cmUgPSB0cnVlOworICAgICAgICBtX3Nob3VsZFJldHVyblRvRnVsbHNjcmVlbldoZW5T
dG9wcGluZ1BpY3R1cmVJblBpY3R1cmUgPSBmYWxzZTsKKyAgICAgICAgW21fd2luZG93IHNldEhp
ZGRlbjpOT107CisgICAgICAgIFttX3BsYXllclZpZXdDb250cm9sbGVyIHN0b3BQaWN0dXJlSW5Q
aWN0dXJlXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2V4aXRGdWxsc2NyZWVuTmVl
ZHNFeGl0UGljdHVyZUluUGljdHVyZSA9IGZhbHNlOworCisgICAgaWYgKG1faGFzVmlkZW9Db250
ZW50TGF5ZXIgJiYgbW9kZWwpIHsKKyAgICAgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRzUmV0dXJu
Q29udGVudExheWVyID0gdHJ1ZTsKKyAgICAgICAgbW9kZWwtPnJldHVyblZpZGVvQ29udGVudExh
eWVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9leGl0RnVsbHNjcmVlbk5lZWRz
UmV0dXJuQ29udGVudExheWVyID0gZmFsc2U7CisKKyAgICBtX3N0YW5kYnkgPSBmYWxzZTsKKwor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlz
IH0sIHRoaXNdIHsKKyAgICAgICAgaWYgKGF1dG8gbW9kZWwgPSB2aWRlb1ByZXNlbnRhdGlvbk1v
ZGVsKCkpCisgICAgICAgICAgICBtb2RlbC0+ZGlkRXhpdEZ1bGxzY3JlZW4oKTsKKyAgICAgICAg
bV9jaGFuZ2luZ1N0YW5kYnlPbmx5ID0gZmFsc2U7CisgICAgfSk7Cit9CisKK3ZvaWQgVmlkZW9Q
cmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmV4aXRGdWxsc2NyZWVuSGFuZGxlcihCT09MIHN1Y2Nl
c3MsIE5TRXJyb3IqIGVycm9yLCBOZXh0QWN0aW9ucyBuZXh0QWN0aW9ucykKK3sKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiLVtBVlBsYXllclZpZXdDb250cm9sbGVy
IGV4aXRGdWxsU2NyZWVuQW5pbWF0ZWQ6Y29tcGxldGlvbkhhbmRsZXI6XSBmYWlsZWQgd2l0aCBl
cnJvciAlcyIsIFtbZXJyb3IgbG9jYWxpemVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddKTsKKwor
ICAgIExPRyhGdWxsc2NyZWVuLCAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmRpZEV4
aXRGdWxsc2NyZWVuKCVwKSAtICVkIiwgdGhpcywgc3VjY2Vzcyk7CisKKyAgICBjbGVhck1vZGUo
SFRNTE1lZGlhRWxlbWVudEVudW1zOjpWaWRlb0Z1bGxzY3JlZW5Nb2RlU3RhbmRhcmQsIGZhbHNl
KTsKKworICAgIGlmIChoYXNNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2Ny
ZWVuTW9kZVBpY3R1cmVJblBpY3R1cmUpKSB7CisgICAgICAgIFttX3dpbmRvdyBzZXRIaWRkZW46
WUVTXTsKKyAgICAgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXddIHNldEhpZGRlbjpZ
RVNdOworICAgIH0gZWxzZSB7CisgICAgICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKKyAgICAg
ICAgW0NBVHJhbnNhY3Rpb24gc2V0RGlzYWJsZUFjdGlvbnM6WUVTXTsKKyAgICAgICAgW21fcGxh
eWVyTGF5ZXJWaWV3IHNldEJhY2tncm91bmRDb2xvcjpjbGVhclVJQ29sb3IoKV07CisgICAgICAg
IFtbbV9wbGF5ZXJWaWV3Q29udHJvbGxlciB2aWV3XSBzZXRCYWNrZ3JvdW5kQ29sb3I6Y2xlYXJV
SUNvbG9yKCldOworICAgICAgICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworICAgIH0KKworICAg
IGlmIChuZXh0QWN0aW9ucy5jb250YWlucyhOZXh0QWN0aW9uOjpOZWVkc0VudGVyRnVsbFNjcmVl
bikpCisgICAgICAgIGRvRW50ZXJGdWxsc2NyZWVuKCk7CisKKyAgICBpZiAobmV4dEFjdGlvbnMu
Y29udGFpbnMoTmV4dEFjdGlvbjo6TmVlZHNFeGl0RnVsbFNjcmVlbikpCisgICAgICAgIGRvRXhp
dEZ1bGxzY3JlZW4oKTsKK30KKwordm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6
ZW50ZXJGdWxsc2NyZWVuSGFuZGxlcihCT09MIHN1Y2Nlc3MsIE5TRXJyb3IqIGVycm9yLCBOZXh0
QWN0aW9ucyBuZXh0QWN0aW9ucykKK3sKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgV1RG
TG9nQWx3YXlzKCItW0FWUGxheWVyVmlld0NvbnRyb2xsZXIgZW50ZXJGdWxsU2NyZWVuQW5pbWF0
ZWQ6Y29tcGxldGlvbkhhbmRsZXI6XSBmYWlsZWQgd2l0aCBlcnJvciAlcyIsIFtbZXJyb3IgbG9j
YWxpemVkRGVzY3JpcHRpb25dIFVURjhTdHJpbmddKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBMT0coRnVsbHNjcmVlbiwgIlZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjplbnRlckZ1bGxzY3JlZW5TdGFuZGFyZCAtIGxh
bWJkYSglcCkiLCB0aGlzKTsKKyAgICBpZiAoIW1fc3RhbmRieSkKKyAgICAgICAgc2V0TW9kZShI
VE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGVTdGFuZGFyZCwgIW5leHRB
Y3Rpb25zLmNvbnRhaW5zKE5leHRBY3Rpb246Ok5lZWRzRW50ZXJGdWxsU2NyZWVuKSk7CisKKyAg
ICAvLyBOT1RFOiBEdXJpbmcgYSAicmV0dXJuVG9TdGFuZGJ5IiBvcGVyYXRpb24sIHRoaXMgd2ls
bCBjYXVzZSB0aGUgQVZLaXQgY29udHJvbHMKKyAgICAvLyB0byBiZSB2aXNpYmxlIGlmIHRoZSB1
c2VyIHRhcHMgb24gdGhlIGZ1bGxzY3JlZW4gcHJlc2VudGF0aW9uIGJlZm9yZSB0aGUgRWxlbWVu
dAorICAgIC8vIEZ1bGxzY3JlZW4gcHJlc2VudGF0aW9uIGlzIGZ1bGx5IHJlc3RvcmVkLiBUaGlz
IGlzIGludGVudGlvbmFsOyBpbiB0aGUgY2FzZSB0aGF0CisgICAgLy8gdGhlIEVsZW1lbnQgRnVs
bHNjcmVlbiBwcmVzZW50YXRpb24gZmFpbHMgZm9yIGFueSByZWFzb24sIHRoaXMgZ2l2ZXMgdGhl
IHVzZXIKKyAgICAvLyB0aGUgYWJpbGl0eSB0byBkaXNtaXNzIEFWS2l0IGZ1bGxzY3JlZW4uCisg
ICAgW21fcGxheWVyVmlld0NvbnRyb2xsZXIgc2V0U2hvd3NQbGF5YmFja0NvbnRyb2xzOllFU107
CisKKyAgICBpZiAobmV4dEFjdGlvbnMuY29udGFpbnMoTmV4dEFjdGlvbjo6TmVlZHNFbnRlckZ1
bGxTY3JlZW4pKQorICAgICAgICBkb0VudGVyRnVsbHNjcmVlbigpOworfQorCiB2b2lkIFZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpyZXR1cm5Ub1N0YW5kYnkoKQogewogICAgIEFMV0FZ
U19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CkBAIC0yMTQsNiArMTYxMSwxNCBAQCB2
b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TOjpyZXR1cm5Ub1N0YW5kYnkoKQogICAg
IGRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7CiB9CiAKK05PX1JFVFVSTl9EVUVfVE9fQVNTRVJU
IHZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OndhdGNoZG9nVGltZXJGaXJlZCgp
Cit7CisgICAgTE9HKEZ1bGxzY3JlZW4sICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6
d2F0Y2hkb2dUaW1lckZpcmVkKCVwKSAtIG5vIGV4aXQgZnVsbHNjcmVlbiByZXNwb25zZSBpbiAl
Z3M7IGZvcmNpbmcgZnVsbHNjcmVlbiBoaWRkZW4uIiwgdGhpcywgZGVmYXVsdFdhdGNoZG9nVGlt
ZXJJbnRlcnZhbC52YWx1ZSgpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBbbV93
aW5kb3cgc2V0SGlkZGVuOllFU107CisgICAgW1ttX3BsYXllclZpZXdDb250cm9sbGVyIHZpZXdd
IHNldEhpZGRlbjpZRVNdOworfQorCiB2b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9T
OjpzZXRNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9kZSBtb2Rl
LCBib29sIHNob3VsZE5vdGlmeU1vZGVsKQogewogICAgIGlmICgobV9jdXJyZW50TW9kZS5tb2Rl
KCkgJiBtb2RlKSA9PSBtb2RlKQpAQCAtMjM4LDYgKzE2NDMsMTEgQEAgdm9pZCBWaWRlb1ByZXNl
bnRhdGlvbkludGVyZmFjZUlPUzo6Y2xlYXJNb2RlKEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6Vmlk
ZW9GdWxsc2MKICAgICAgICAgbW9kZWwtPmZ1bGxzY3JlZW5Nb2RlQ2hhbmdlZChtX2N1cnJlbnRN
b2RlLm1vZGUoKSk7CiB9CiAKK2Jvb2wgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6Omlz
UGxheWluZ1ZpZGVvSW5FbmhhbmNlZEZ1bGxzY3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiBo
YXNNb2RlKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnRFbnVtczo6VmlkZW9GdWxsc2NyZWVuTW9k
ZVBpY3R1cmVJblBpY3R1cmUpICYmIFtwbGF5ZXJDb250cm9sbGVyKCkgaXNQbGF5aW5nXTsKK30K
KwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogY29uc3Qgdm9pZCogVmlkZW9QcmVzZW50YXRp
b25JbnRlcmZhY2VJT1M6OmxvZ0lkZW50aWZpZXIoKSBjb25zdAogewpAQCAtMjU0LDQgKzE2NjQs
MjMgQEAgV1RGTG9nQ2hhbm5lbCYgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1M6OmxvZ0No
YW5uZWwoKSBjb25zdAogICAgIHJldHVybiBMb2dGdWxsc2NyZWVuOwogfQogI2VuZGlmCi0jZW5k
aWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworc3RhdGljIHN0ZDo6b3B0aW9uYWw8Ym9vbD4g
aXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydGVkOworCit2b2lkIFdlYkNvcmU6OnNldFN1cHBvcnRz
UGljdHVyZUluUGljdHVyZShib29sIGlzU3VwcG9ydGVkKQoreworICAgIGlzUGljdHVyZUluUGlj
dHVyZVN1cHBvcnRlZCA9IGlzU3VwcG9ydGVkOworfQorCitib29sIFdlYkNvcmU6OnN1cHBvcnRz
UGljdHVyZUluUGljdHVyZSgpCit7CisjaWYgRU5BQkxFKFZJREVPX1BSRVNFTlRBVElPTl9NT0RF
KSAmJiAhUExBVEZPUk0oV0FUQ0hPUykKKyAgICBpZiAoaXNQaWN0dXJlSW5QaWN0dXJlU3VwcG9y
dGVkLmhhc192YWx1ZSgpKQorICAgICAgICByZXR1cm4gKmlzUGljdHVyZUluUGljdHVyZVN1cHBv
cnRlZDsKKyAgICByZXR1cm4gW2dldEFWUGljdHVyZUluUGljdHVyZUNvbnRyb2xsZXJDbGFzcygp
IGlzUGljdHVyZUluUGljdHVyZVN1cHBvcnRlZF07CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkgJiYgSEFWRShBVktJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9WaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUxNSy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlTE1LLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZm
MTQ2YmZhNmE5ZS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSy5oCisrKyAvZGV2L251bGwKQEAgLTEsNzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgUExBVEZPUk0oVklTSU9OKQotCi0jaW5jbHVkZSAiUGxheWJhY2tT
ZXNzaW9uSW50ZXJmYWNlTE1LLmgiCi0jaW5jbHVkZSAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZh
Y2VJT1MuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBWaWRlb1ByZXNlbnRhdGlv
bkludGVyZmFjZUxNSyA6IHB1YmxpYyBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUyB7Ci0K
LXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlTE1LPiBjcmVhdGUoUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlTE1LJik7Ci0jaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgeyByZXR1cm4gIlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LIjsgfTsKLSNlbmRpZgot
ICAgIFdFQkNPUkVfRVhQT1JUIH5WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSygpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdmlkZW9EaW1lbnNpb25zQ2hhbmdlZChjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldHVwRnVsbHNjcmVlbihVSVZp
ZXcmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBVSVZpZXcqLCBIVE1MTWVk
aWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1vZGUsIGJvb2wsIGJvb2wsIGJvb2wpOwot
ICAgIFdlYkFWUGxheWVyTGF5ZXJWaWV3ICpwbGF5ZXJMYXllclZpZXcoKSBjb25zdDsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFZpZGVvUHJlc2VudGF0aW9uTW9kZWwoVmlkZW9QcmVzZW50
YXRpb25Nb2RlbCopOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhpdEZ1bGxzY3JlZW4oY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwaWN0dXJlSW5QaWN0dXJl
V2FzU3RhcnRlZFdoZW5FbnRlcmluZ0JhY2tncm91bmQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VY
UE9SVCBBVlBsYXllclZpZXdDb250cm9sbGVyICphdlBsYXllclZpZXdDb250cm9sbGVyKCkgY29u
c3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGhhc1ZpZGVvQ2hhbmdlZChib29sKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4dGVybmFsUGxheWJhY2tDaGFuZ2VkKGJvb2wsIFBsYXli
YWNrU2Vzc2lvbk1vZGVsOjpFeHRlcm5hbFBsYXliYWNrVGFyZ2V0VHlwZSwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhbnVwRnVsbHNjcmVlbigpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0UGxheWVySWRlbnRpZmllcihzdGQ6Om9wdGlvbmFsPE1lZGlh
UGxheWVySWRlbnRpZmllcj4pIGZpbmFsOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVxdWVz
dEhpZGVBbmRFeGl0RnVsbHNjcmVlbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHJlcGFy
ZWRUb1JldHVyblRvSW5saW5lKGJvb2wsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgbWF5QXV0b21hdGljYWxseVNob3dWaWRlb1BpY3R1cmVJblBpY3R1cmUoKSBj
b25zdDsKLSAgICB2b2lkIHdpbGxTdGFydFBpY3R1cmVJblBpY3R1cmUoKTsKLSAgICB2b2lkIGRp
ZFN0YXJ0UGljdHVyZUluUGljdHVyZSgpOwotICAgIHZvaWQgZmFpbGVkVG9TdGFydFBpY3R1cmVJ
blBpY3R1cmUoKTsKLSAgICB2b2lkIGRpZFN0b3BQaWN0dXJlSW5QaWN0dXJlKCk7Ci0gICAgdm9p
ZCBwcmVwYXJlRm9yUGljdHVyZUluUGljdHVyZVN0b3BXaXRoQ29tcGxldGlvbkhhbmRsZXIodm9p
ZCAoXikoQk9PTCkpOwotICAgIGJvb2wgc2hvdWxkRXhpdEZ1bGxzY3JlZW5XaXRoUmVhc29uKEV4
aXRGdWxsU2NyZWVuUmVhc29uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElubGluZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCk7Ci0gICAgYm9vbCBpc1BsYXlpbmdWaWRlb0luRW5o
YW5jZWRGdWxsc2NyZWVuKCkgY29uc3Q7Ci1wcml2YXRlOgotICAgIFdFQkNPUkVfRVhQT1JUIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUxNSyYp
OwotICAgIHZvaWQgZG9TZXR1cCgpOwotICAgIHZvaWQgZG9FbnRlckZ1bGxzY3JlZW4oKTsKLSAg
ICB2b2lkIGRvRXhpdEZ1bGxzY3JlZW4oKTsKLSAgICB2b2lkIGV4aXRGdWxsc2NyZWVuSGFuZGxl
cihCT09MLCBOU0Vycm9yICosIE5leHRBY3Rpb25zID0gTmV4dEFjdGlvbnMoKSk7Ci0gICAgdm9p
ZCBlbnRlckZ1bGxzY3JlZW5IYW5kbGVyKEJPT0wsIE5TRXJyb3IgKiwgTmV4dEFjdGlvbnMgPSBO
ZXh0QWN0aW9ucygpKTsKLSAgICB2b2lkIHdhdGNoZG9nVGltZXJGaXJlZCgpOwotCi19OwotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oVklTSU9OKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJm
YWNlTE1LLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1ZpZGVvUHJlc2VudGF0aW9u
SW50ZXJmYWNlTE1LLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2QyZWYyYjI2
MmYuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVmlkZW9Q
cmVzZW50YXRpb25JbnRlcmZhY2VMTUsubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQg
ImNvbmZpZy5oIgotI2ltcG9ydCAiVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUsuaCIKLQot
I2lmIFBMQVRGT1JNKFZJU0lPTikKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLVZpZGVv
UHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjp+VmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUso
KQotewotCi19Ci0KLVJlZjxWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSz4gVmlkZW9QcmVz
ZW50YXRpb25JbnRlcmZhY2VMTUs6OmNyZWF0ZShQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VMTUsm
IHBsYXliYWNrU2Vzc2lvbkludGVyZmFjZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBW
aWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSyhwbGF5YmFja1Nlc3Npb25JbnRlcmZhY2UpKTsK
LX0KLQotVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUs6OlZpZGVvUHJlc2VudGF0aW9uSW50
ZXJmYWNlTE1LKFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUxNSyYgcGxheWJhY2tTZXNzaW9uSW50
ZXJmYWNlKQotICAgIDogVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VJT1MocGxheWJhY2tTZXNz
aW9uSW50ZXJmYWNlKQotewotCi19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VM
TUs6OnNldHVwRnVsbHNjcmVlbihVSVZpZXcmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFNpemUmLCBVSVZpZXcqLCBIVE1MTWVkaWFFbGVtZW50RW51bXM6OlZpZGVvRnVsbHNjcmVlbk1v
ZGUsIGJvb2wsIGJvb2wsIGJvb2wpCi17Ci0KLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRhdGlvbklu
dGVyZmFjZUxNSzo6c2V0VmlkZW9QcmVzZW50YXRpb25Nb2RlbChWaWRlb1ByZXNlbnRhdGlvbk1v
ZGVsKikKLXsKLQotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjp2aWRl
b0RpbWVuc2lvbnNDaGFuZ2VkKGNvbnN0IEZsb2F0U2l6ZSYpCi17Ci0KLX0KLQotYm9vbCBWaWRl
b1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSzo6ZXhpdEZ1bGxzY3JlZW4oY29uc3QgRmxvYXRSZWN0
JikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VMTUs6OnBpY3R1cmVJblBpY3R1cmVXYXNTdGFydGVkV2hlbkVudGVyaW5nQmFja2dyb3Vu
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0
aW9uSW50ZXJmYWNlTE1LOjpoYXNWaWRlb0NoYW5nZWQoYm9vbCkKLXsKLQotfQotCi12b2lkIFZp
ZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjpleHRlcm5hbFBsYXliYWNrQ2hhbmdlZChib29s
LCBQbGF5YmFja1Nlc3Npb25Nb2RlbDo6RXh0ZXJuYWxQbGF5YmFja1RhcmdldFR5cGUsIGNvbnN0
IFN0cmluZyYpCi17Ci0KLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSzo6
Y2xlYW51cEZ1bGxzY3JlZW4oKQotewotCi19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRl
cmZhY2VMTUs6OnNldFBsYXllcklkZW50aWZpZXIoc3RkOjpvcHRpb25hbDxNZWRpYVBsYXllcklk
ZW50aWZpZXI+KQotewotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjpy
ZXF1ZXN0SGlkZUFuZEV4aXRGdWxsc2NyZWVuKCkKLXsKLQotfQotCi12b2lkIFZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlTE1LOjpwcmVwYXJlZFRvUmV0dXJuVG9JbmxpbmUoYm9vbCwgY29uc3Qg
RmxvYXRSZWN0JikKLXsKLQotfQotCi1ib29sIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1L
OjptYXlBdXRvbWF0aWNhbGx5U2hvd1ZpZGVvUGljdHVyZUluUGljdHVyZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1L
Ojp3aWxsU3RhcnRQaWN0dXJlSW5QaWN0dXJlKCkKLXsKLQotfQotCi12b2lkIFZpZGVvUHJlc2Vu
dGF0aW9uSW50ZXJmYWNlTE1LOjpkaWRTdGFydFBpY3R1cmVJblBpY3R1cmUoKQotewotCi19Ci0K
LXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUs6OmZhaWxlZFRvU3RhcnRQaWN0dXJl
SW5QaWN0dXJlKCkKLXsKLQotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1L
OjpkaWRTdG9wUGljdHVyZUluUGljdHVyZSgpCi17Ci0KLX0KLQotdm9pZCBWaWRlb1ByZXNlbnRh
dGlvbkludGVyZmFjZUxNSzo6cHJlcGFyZUZvclBpY3R1cmVJblBpY3R1cmVTdG9wV2l0aENvbXBs
ZXRpb25IYW5kbGVyKHZvaWQgKF4pKEJPT0wgcmVzdG9yZWQpKQotewotCi19Ci0KLWJvb2wgVmlk
ZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUs6OnNob3VsZEV4aXRGdWxsc2NyZWVuV2l0aFJlYXNv
bihWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUzo6RXhpdEZ1bGxTY3JlZW5SZWFzb24pCi17
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
TE1LOjpzZXRJbmxpbmVSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wpCi17Ci0KLX0KLQotdm9p
ZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSzo6ZG9TZXR1cCgpCi17Ci0KLX0KLQotdm9p
ZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSzo6ZG9FbnRlckZ1bGxzY3JlZW4oKQotewot
Ci19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUs6OmRvRXhpdEZ1bGxzY3Jl
ZW4oKQotewotCi19Ci0KLXZvaWQgVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VMTUs6OmV4aXRG
dWxsc2NyZWVuSGFuZGxlcihCT09MLCBOU0Vycm9yKiwgTmV4dEFjdGlvbnMpCi17Ci0KLX0KLQot
dm9pZCBWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUxNSzo6ZW50ZXJGdWxsc2NyZWVuSGFuZGxl
cihCT09MLCBOU0Vycm9yKiwgTmV4dEFjdGlvbnMpCi17Ci0KLX0KLQotdm9pZCBWaWRlb1ByZXNl
bnRhdGlvbkludGVyZmFjZUxNSzo6d2F0Y2hkb2dUaW1lckZpcmVkKCkKLXsKLQotfQotCi1ib29s
IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjppc1BsYXlpbmdWaWRlb0luRW5oYW5jZWRG
dWxsc2NyZWVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUFWUGxheWVyVmll
d0NvbnRyb2xsZXIgKlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjphdlBsYXllclZpZXdD
b250cm9sbGVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViQVZQbGF5
ZXJMYXllclZpZXcgKlZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlTE1LOjpwbGF5ZXJMYXllclZp
ZXcoKSBjb25zdAotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi0jZW5kaWYgLy8gUExBVEZP
Uk0oVklTSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1dlYlZp
ZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KaW5kZXggNzIxZGJhYzQx
OTg4Li42NWFkNTM4YjQ2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9XZWJWaWRlb0Z1bGxzY3JlZW5Db250cm9sbGVyQVZLaXQubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1dlYlZpZGVvRnVsbHNjcmVlbkNvbnRyb2xsZXJBVktpdC5tbQpAQCAt
MzYsNyArMzYsNyBAQAogI2ltcG9ydCAiUGxheWJhY2tTZXNzaW9uTW9kZWxNZWRpYUVsZW1lbnQu
aCIKICNpbXBvcnQgIlJlbmRlclZpZGVvLmgiCiAjaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCi0jaW1w
b3J0ICJWaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0LmgiCisjaW1wb3J0ICJWaWRlb1By
ZXNlbnRhdGlvbkludGVyZmFjZUlPUy5oIgogI2ltcG9ydCAiVmlkZW9QcmVzZW50YXRpb25Nb2Rl
bFZpZGVvRWxlbWVudC5oIgogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1bi5oIgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9Db3JlQW5pbWF0aW9uLmg+CkBAIC0yMTIsNyArMjEyLDcgQEAgcHJpdmF0ZToK
IAogICAgIEhhc2hTZXQ8Q2hlY2tlZFB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbENsaWVudD4+IG1f
cGxheWJhY2tDbGllbnRzOwogICAgIEhhc2hTZXQ8Q2hlY2tlZFB0cjxWaWRlb1ByZXNlbnRhdGlv
bk1vZGVsQ2xpZW50Pj4gbV9wcmVzZW50YXRpb25DbGllbnRzOwotICAgIFJlZlB0cjxWaWRlb1By
ZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0PiBtX2ludGVyZmFjZTsKKyAgICBSZWZQdHI8VmlkZW9Q
cmVzZW50YXRpb25JbnRlcmZhY2VJT1M+IG1faW50ZXJmYWNlOwogICAgIFJlZlB0cjxWaWRlb1By
ZXNlbnRhdGlvbk1vZGVsVmlkZW9FbGVtZW50PiBtX3ByZXNlbnRhdGlvbk1vZGVsOwogICAgIFJl
ZlB0cjxQbGF5YmFja1Nlc3Npb25Nb2RlbE1lZGlhRWxlbWVudD4gbV9wbGF5YmFja01vZGVsOwog
ICAgIFJlZlB0cjxIVE1MVmlkZW9FbGVtZW50PiBtX3ZpZGVvRWxlbWVudDsKQEAgLTEwMDcsOCAr
MTAwNyw4IEBAIHZvaWQgVmlkZW9GdWxsc2NyZWVuQ29udHJvbGxlckNvbnRleHQ6OnNldFVwRnVs
bHNjcmVlbihIVE1MVmlkZW9FbGVtZW50JiB2aWRlb0VsCiAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgdGhpcywgdmlkZW9FbGVtZW50
Q2xpZW50UmVjdCwgdmlkZW9EaW1lbnNpb25zLCB2aWV3UmVmLCBtb2RlLCBhbGxvd3NQaWN0dXJl
SW5QaWN0dXJlXSB7CiAgICAgICAgIEFTU0VSVChpc1VJVGhyZWFkKCkpOwogICAgICAgICBXZWJU
aHJlYWRMb2NrKCk7Ci0gICAgICAgIFJlZjxQbGF5YmFja1Nlc3Npb25JbnRlcmZhY2VBVktpdD4g
c2Vzc2lvbkludGVyZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFWS2l0OjpjcmVhdGUo
KnRoaXMpOwotICAgICAgICBtX2ludGVyZmFjZSA9IFZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNl
QVZLaXQ6OmNyZWF0ZShzZXNzaW9uSW50ZXJmYWNlKTsKKyAgICAgICAgUmVmPFBsYXliYWNrU2Vz
c2lvbkludGVyZmFjZUlPUz4gc2Vzc2lvbkludGVyZmFjZSA9IFBsYXliYWNrU2Vzc2lvbkludGVy
ZmFjZUFWS2l0OjpjcmVhdGUoKnRoaXMpOworICAgICAgICBtX2ludGVyZmFjZSA9IFZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlSU9TOjpjcmVhdGUoc2Vzc2lvbkludGVyZmFjZS5nZXQoKSk7CiAg
ICAgICAgIG1faW50ZXJmYWNlLT5zZXRWaWRlb1ByZXNlbnRhdGlvbk1vZGVsKHRoaXMpOwogCiAg
ICAgICAgIG1fdmlkZW9GdWxsc2NyZWVuVmlldyA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSVZpZXdJ
bnN0YW5jZSgpIGluaXRdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1ZpZGVvUHJlc2VudGF0aW9uTWFuYWdlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvVmlkZW9QcmVzZW50YXRpb25NYW5hZ2VyUHJveHkubW0KaW5kZXggZjkxMTU1
NTlkZDBhLi45NzBkZmU4ZDM0NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1ZpZGVvUHJlc2VudGF0aW9uTWFuYWdlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1ZpZGVvUHJlc2VudGF0aW9uTWFuYWdlclByb3h5Lm1tCkBAIC00
Nyw3ICs0Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZUFW
S2l0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXliYWNrU2Vzc2lvbkludGVyZmFjZU1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9UaW1lUmFuZ2VzLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1ZpZGVvUHJl
c2VudGF0aW9uSW50ZXJmYWNlQVZLaXQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVmlkZW9QcmVzZW50
YXRpb25JbnRlcmZhY2VJT1MuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlkZW9QcmVzZW50YXRpb25J
bnRlcmZhY2VNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQVZQbGF5ZXJMYXllci5oPgogI2lt
cG9ydCA8V2ViQ29yZS9XZWJBVlBsYXllckxheWVyVmlldy5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xs
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3Jl
ZW5WaWV3Q29udHJvbGxlci5tbQppbmRleCAyYTA5YmJhYTVlYWMuLjI3MTIyZGZiZmM0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuVmlld0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1
bGxzY3JlZW4vV0tGdWxsU2NyZWVuVmlld0NvbnRyb2xsZXIubW0KQEAgLTQwLDcgKzQwLDcgQEAK
ICNpbXBvcnQgIldlYlByZWZlcmVuY2VzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsaXplZFN0
cmluZ3MuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGxheWJhY2tTZXNzaW9uSW50ZXJmYWNlQVZLaXQu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvVmlkZW9QcmVzZW50YXRpb25JbnRlcmZhY2VBVktpdC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUlPUy5oPgogI2ltcG9y
dCA8cGFsL3NwaS9jb2NvYS9BVktpdFNQSS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgog
I2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2NyZWVuV2lu
ZG93Q29udHJvbGxlcklPUy5tbQppbmRleCAxMmY0MDllMjlkYzguLjQxNTdmYjE2OGQyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL2Z1bGxzY3JlZW4vV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvZnVsbHNjcmVlbi9XS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVySU9TLm1tCkBAIC00Nyw3
ICs0Nyw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0dlb21ldHJ5VXRpbGl0aWVzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxpemVkU3RyaW5ncy5o
PgotI2ltcG9ydCA8V2ViQ29yZS9WaWRlb1ByZXNlbnRhdGlvbkludGVyZmFjZUFWS2l0Lmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1ZpZGVvUHJlc2VudGF0aW9uSW50ZXJmYWNlSU9TLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1ZpZGVvUHJlc2VudGF0aW9uTW9kZWwuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmll
d3BvcnRBcmd1bWVudHMuaD4KICNpbXBvcnQgPG9iamMvcnVudGltZS5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>