vscode: code tunnel not connecting

Does this issue occur when all extensions are disabled?: Yes (except Remote - Tunnel)

  • VS Code Version: 1.78.2 (b3e4e68a0bc097f0ae7907b217c1119af9e03435, x64)
  • OS Version: Debian GNU/Linux 11 (bullseye)

Steps to Reproduce:

  1. install code tunnel on a remote host
  2. run code tunnel --log debug --accept-server-license-terms --verbose
  3. accept license terms, auth with microsoft account
  4. open the URL (e.g. https://vscode.dev/tunnel/<hostname>)

note: created a new VM and fresh install of code, still happens.

what happens

An unexpected error occurred that requires a reload of this page. The workbench failed to connect to the server (Error: undefined)

image

code tunnel logs

all of this looks normal, but no connection to a client

$ code tunnel --log debug --accept-server-license-terms --verbose
*
* Visual Studio Code Server
*
* By using the software, you agree to
* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and
* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).
*
[2023-06-07 22:03:49] debug starting as new singleton
[2023-06-07 22:03:49] trace Found token in keyring
[2023-06-07 22:03:49] debug [reqwest::connect] starting new connection: https://api.github.com/
[2023-06-07 22:03:49] debug [reqwest::connect] starting new connection: https://use.rel.tunnels.api.visualstudio.com/
[2023-06-07 22:03:50] debug Starting tunnel to server...
[2023-06-07 22:03:50] trace Found token in keyring
[2023-06-07 22:03:50] debug [tungstenite::handshake::client] Client handshake done.
[2023-06-07 22:03:50] debug [russh::ssh_read] read_ssh_id: reading
[2023-06-07 22:03:50] debug [russh::ssh_read] read 39
[2023-06-07 22:03:50] debug [russh::ssh_read] Ok("SSH-2.0-Microsoft.DevTunnels.Ssh_3.11\r\n")
[2023-06-07 22:03:50] debug [russh::client] writing 352 bytes
[2023-06-07 22:03:50] debug [russh::ssh_read] id 39 39
[2023-06-07 22:03:50] debug [russh::client::kex] extending []
[2023-06-07 22:03:50] debug [russh::client::kex] algo = Names { kex: Name("none"), key: Name("none"), cipher: Name("none"), client_mac: Name("none"), server_mac: Name("none"), server_compression: None, client_compression: None, ignore_guessed: false }
[2023-06-07 22:03:50] debug [russh::client::kex] write = []
[2023-06-07 22:03:50] debug [russh::client::kex] i0 = 342
[2023-06-07 22:03:50] debug [russh::client::kex] moving to kexdhdone, exchange = Exchange { client_id: CryptoVec { p: 0x7f3eb007f2c0, size: 28, capacity: 32 }, server_id: CryptoVec { p: 0x7f3eb0015aa0, size: 37, capacity: 64 }, client_kex_init: CryptoVec { p: 0x7f3eb00cc9d0, size: 342, capacity: 512 }, server_kex_init: CryptoVec { p: 0x7f3eb00d1d70, size: 94, capacity: 128 }, client_ephemeral: CryptoVec { p: 0x1, size: 0, capacity: 0 }, server_ephemeral: CryptoVec { p: 0x1, size: 0, capacity: 0 } }
[2023-06-07 22:03:50] debug [tunnels::connections::relay_tunnel_host] established host relay primary session
[2023-06-07 22:03:50] debug Connected to tunnel endpoint: TunnelRelayTunnelEndpoint { base: TunnelEndpoint { connection_mode: TunnelRelay, host_id: "20ff42fb-54d1-4004-9448-a28b78820ed1", host_public_keys: [], port_uri_format: Some("https://tfn47fn8-{port}.use.devtunnels.ms/"), tunnel_uri: Some("https://tfn47fn8.use.devtunnels.ms/"), port_ssh_command_format: Some("ssh tfn47fn8-{port}@ssh.use.devtunnels.ms"), tunnel_ssh_command: Some("ssh tfn47fn8@ssh.use.devtunnels.ms"), ssh_gateway_public_key: None }, host_relay_uri: Some("wss://use-data.rel.tunnels.api.visualstudio.com/api/v1/Host/Connect/tfn47fn8"), client_relay_uri: Some("wss://use-data.rel.tunnels.api.visualstudio.com/api/v1/Client/Connect/tfn47fn8") }
[2023-06-07 22:03:50] debug Visual Studio Code Server is listening for incoming connections

Open this link in your browser https://vscode.dev/tunnel/notebook-20230607

[2023-06-07 22:03:50] trace Found token in keyring
[2023-06-07 22:04:50] debug [tunnels::connections::ws] sent liveness ping
[2023-06-07 22:04:50] debug [tunnels::connections::ws] received liveness pong
[2023-06-07 22:05:50] debug [tunnels::connections::ws] received liveness pong
[2023-06-07 22:06:50] debug [tunnels::connections::ws] sent liveness ping
[2023-06-07 22:06:50] debug [tunnels::connections::ws] received liveness pong
[2023-06-07 22:07:50] debug [tunnels::connections::ws] received liveness pong

devtools logs in browser (edge or chrome)

summary: looks like a websocket connection isn’t made?

screenshot of first few lines:

image

all lines:


DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/core/vs/workbench/workbench.web.main.nls.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://main.vscode-cdn.net/stable/b3e4e68a0bc097f0ae7907b217c1119af9e03435/node_modules/vscode-textmate/release/main.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
log.ts:421  INFO Resolving connection token (tunnel)...
log.ts:421  INFO Resolved connection token (tunnel) after 4 ms
log.ts:421  INFO Creating a socket (renderer-Management-241b50c8-ed41-4216-9053-aa7e100c8c4b)...
10Refused to connect to '<URL>' because it violates the following Content Security Policy directive: "connect-src 'self' <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL> <URL>".

log.ts:421  INFO Creating a socket (renderer-Management-241b50c8-ed41-4216-9053-aa7e100c8c4b) returned an error after 2 ms.
log.ts:441   ERR [remote-connection][Management   ][241b5…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 1] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-Management-0450f48f-a982-4c90-9335-c0b5893afab7)...
log.ts:421  INFO Creating a socket (renderer-Management-0450f48f-a982-4c90-9335-c0b5893afab7) returned an error after 1 ms.
log.ts:441   ERR [remote-connection][Management   ][0450f…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 2] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-Management-e48a3f94-75af-47f3-9e1d-985ac9095386)...
log.ts:421  INFO Creating a socket (renderer-Management-e48a3f94-75af-47f3-9e1d-985ac9095386) returned an error after 1 ms.
log.ts:441   ERR [remote-connection][Management   ][e48a3…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 3] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-Management-28e370e2-c64d-4e55-902a-6a87185bc69b)...
log.ts:421  INFO Creating a socket (renderer-Management-28e370e2-c64d-4e55-902a-6a87185bc69b) returned an error after 0 ms.
log.ts:441   ERR [remote-connection][Management   ][28e37…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 4] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-Management-1f20cb5c-e790-4c7d-b973-9f83788fa5e0)...
log.ts:421  INFO Creating a socket (renderer-Management-1f20cb5c-e790-4c7d-b973-9f83788fa5e0) returned an error after 1 ms.
log.ts:441   ERR [remote-connection][Management   ][1f20c…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 5]  An error occurred in initial connection! It will be treated as a permanent error. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Cannot register remote filesystem provider. Error while fetching remote environment. [object Event]
log.ts:431  WARN Via 'product.json#extensionEnabledApiProposals' extension 'ms-vscode.vscode-selfhost-test-provider' wants API proposal 'testContinuousRun' but that proposal DOES NOT EXIST. Likely, the proposal has been finalized (check 'vscode.d.ts') or was abandoned.
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-08e23625-8322-469a-a6da-3d6e650e0516)...
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR An unknown error occurred. Please consult the log for more details.
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-08e23625-8322-469a-a6da-3d6e650e0516) returned an error after 10 ms.
log.ts:441   ERR [remote-connection][ExtensionHost][08e23…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 1] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-791be248-9bbf-470d-9af5-d06e07aea467)...
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-791be248-9bbf-470d-9af5-d06e07aea467) returned an error after 3 ms.
log.ts:441   ERR [remote-connection][ExtensionHost][791be…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 2] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-ac257e6d-1d3a-4145-83da-f66cbf0fa8ed)...
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-ac257e6d-1d3a-4145-83da-f66cbf0fa8ed) returned an error after 2 ms.
log.ts:441   ERR [remote-connection][ExtensionHost][ac257…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 3] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-ebe46f2c-a2aa-4b02-b002-768c6aa24e33)...
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-ebe46f2c-a2aa-4b02-b002-768c6aa24e33) returned an error after 1 ms.
log.ts:441   ERR [remote-connection][ExtensionHost][ebe46…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 4] An error occurred in initial connection! Will retry... Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-d55b3886-dd80-4dbe-bb50-897d35f80766)...
log.ts:421  INFO Creating a socket (renderer-ExtensionHost-d55b3886-dd80-4dbe-bb50-897d35f80766) returned an error after 0 ms.
log.ts:441   ERR [remote-connection][ExtensionHost][d55b3…][initial][tunnel+notebook-20230607:443] socketFactory.connect() failed or timed out. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR [remote-connection][attempt 5]  An error occurred in initial connection! It will be treated as a permanent error. Error:
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Error received from starting extension host (kind: Remote)
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:421  INFO Found additional builtin gallery extensions in env (4) [{…}, {…}, {…}, {…}]
log.ts:421  INFO Found additional builtin location extensions in env (2) ['https://ms-vscode.vscode-unpkg.net/ms-vscode/remote-server/1.2.0/extension', 'https://ms-vscode.vscode-unpkg.net/ms-vscode/remote-explorer/0.4.0/extension']
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/core/vs/workbench/services/keybinding/browser/keyboardLayouts/layout.contribution.darwin.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://main.vscode-cdn.net/stable/b3e4e68a0bc097f0ae7907b217c1119af9e03435/node_modules/tas-client-umd/lib/tas-client-umd.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
log.ts:431  WARN [ms-vscode.remote-server]: The viewsWelcome contribution in 'ms-vscode.remote-server' requires 'enabledApiProposals: ["contribViewsWelcome"]' in order to use the 'group' proposed property.
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/github-authentication/dist/browser/extension.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/git-base/dist/browser/extension.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/microsoft-authentication/dist/browser/extension.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/merge-conflict/dist/browser/mergeConflictMain.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
log.ts:441   ERR An unknown error occurred. Please consult the log for more details.
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/json-language-features/client/dist/browser/jsonClientMain.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/typescript-language-features/dist/browser/extension.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/emmet/dist/browser/emmetBrowserMain.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
DevTools failed to load source map: Could not load content for https://ticino.blob.core.windows.net/sourcemaps/b3e4e68a0bc097f0ae7907b217c1119af9e03435/extensions/json-language-features/server/dist/browser/jsonServerMain.js.map: Fetch through target failed: Target not supported; Fallback: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
sw.js:1 SW Preloading workbench: {quality: 'stable', version: 'b3e4e68a0bc097f0ae7907b217c1119af9e03435'}
sw.js:1 SW Garbage collecting 0 entries...
sw.js:1 SW Done garbage collecting
sw.js:1 SW Caching 0 entries...
sw.js:1 SW Done caching workbench
log.ts:441   ERR An unknown error occurred. Please consult the log for more details.
log.ts:421  INFO Updating additional builtin extensions cache
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR Event {isTrusted: true, type: 'error', target: WebSocket, currentTarget: WebSocket, eventPhase: 0, …}
log.ts:441   ERR An unknown error occurred. Please consult the log for more details.

similar issues

https://github.com/microsoft/vscode-remote-release/issues/8126

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Reactions: 6
  • Comments: 15 (3 by maintainers)

Most upvoted comments

I get the same error too.

Tunnels extension 1.2.1 has the fix published for VS Code desktop. The fix for vscode.dev will go out in a few hours.

This is probably related to this issue: https://github.com/microsoft/vscode-remote-release/issues/8582 - a fix is coming.

Approximately 11AM PST (in 1hr)

I am able to get it to work, but I need to run a local client version of vs code and install remote tunnel extension v1.1.0

on the server side i have roll backed to

Commit: 704ed70d4fd1c6bd6342c436f1ede30d1cff4710
Date: 2023-04-12T09:16:52.732Z
Electron: 19.1.11
Chromium: 102.0.5005.196
Node.js: 16.14.2
V8: 10.2.154.26-electron.0
OS: Linux x64 4.15.0-197-generic
Sandboxed: Yes

(as I am getting another issue if I upgrade to 1.78.2)

and on client side (which has remote tunnel v.1.1.0 installed)

Commit: b3e4e68a0bc097f0ae7907b217c1119af9e03435
Date: 2023-05-10T14:39:26.248Z
Electron: 22.5.2
Chromium: 108.0.5359.215
Node.js: 16.17.1
V8: 10.8.168.25-electron.0
OS: Windows_NT x64 10.0.19045
Sandboxed: Yes

vscode.dev/tunnel/ still does not work, I suspect once a fix to the extension is released it will work again, as there is no way to change the extension version in vscode.dev

issue fixed with switching to insiders version 1.79.0-insider / b380da4ef1ee00e224a15c1d4d9793e27c2b6302

maybe this is an issue with vscode, stable version?

related issues, posted today

@connor4312 any idea when vscode.dev would get the update with the fix ?

and then i went ahead to update to latest stable version and then got this error: $ code tunnel --log debug --accept-server-license-terms --verbose /usr/share/code/bin/code-tunnel: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.29' not found (required by /usr/share/code/bin/code-tunnel) /usr/share/code/bin/code-tunnel: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28’ not found (required by /usr/share/code/bin/code-tunnel)

also tried using code-insider with same result

i am on Ubuntu 18.04.4 LTS and vs code version: Version: 1.78.2 Commit: b3e4e68 Date: 2023-05-10T14:47:05.613Z Electron: 22.5.2 Chromium: 108.0.5359.215 Node.js: 16.17.1 V8: 10.8.168.25-electron.0 OS: Linux x64 4.15.0-197-generic Sandboxed: Yes

@isaacfpv, for your libc.so.6: version GLIBC_2.29' not found error, i recommend either upgrading your OS or downgrading VS code to 1.77. This error is happening because Ubuntu 18.04 uses an older version of glibc (and it’s bad to attempt upgrading glibc on the machine as it will probably break many other things), and VS Code requires a more recent version. This might be resolved in the coming months, however. See https://github.com/microsoft/vscode/issues/181720

thanks @connor4312 ! confirmed, working with Version: 1.78.2 / b3e4e68a0bc097f0ae7907b217c1119af9e03435 with Remote - Tunnels extension v1.2.1, last updated 6/8/2023, 10:29:43.