peachsim 0.1.659 → 0.1.661

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +10 -15
  2. package/cli/cli-update.ts +53 -21
  3. package/cli/commands/compat.ts +6 -2
  4. package/cli/commands/control.ts +12 -3
  5. package/cli/commands/inspect.ts +16 -14
  6. package/cli/commands/upgrade.ts +4 -2
  7. package/cli/current-sim.ts +4 -0
  8. package/cli/drivers/linux-browser-libs.lock.json +1088 -0
  9. package/cli/drivers/linux-browser-libs.ts +182 -0
  10. package/cli/drivers/playwright-provisioning.ts +20 -98
  11. package/cli/drivers/playwright-sim-host.ts +9 -0
  12. package/cli/drivers/playwright.ts +2 -1
  13. package/dist-lib/agent-daemon-client.cjs +1 -1
  14. package/dist-lib/agent-events.cjs +1 -1
  15. package/dist-lib/agent-identity.cjs +1 -1
  16. package/dist-lib/agent-sessions.cjs +1 -1
  17. package/dist-lib/attached-projects.cjs +1 -1
  18. package/dist-lib/auth/shared-session.cjs +1 -1
  19. package/dist-lib/backend-origin.cjs +18 -1
  20. package/dist-lib/beta.cjs +1 -1
  21. package/dist-lib/beta.mjs +1 -1
  22. package/dist-lib/bridge-constants.cjs +1 -1
  23. package/dist-lib/bridge-contract-input.cjs +1 -1
  24. package/dist-lib/bridge-contract-input.mjs +1 -1
  25. package/dist-lib/bridge-contract.cjs +1 -1
  26. package/dist-lib/bridge-contract.mjs +1 -1
  27. package/dist-lib/capture-contract.cjs +1 -1
  28. package/dist-lib/capture-contract.mjs +1 -1
  29. package/dist-lib/cli-constants.cjs +1 -1
  30. package/dist-lib/cloud-contract.cjs +1 -1
  31. package/dist-lib/cloud-contract.mjs +1 -1
  32. package/dist-lib/cloud-test-args.cjs +1 -1
  33. package/dist-lib/cloud-test-args.mjs +1 -1
  34. package/dist-lib/cloud.cjs +1 -1
  35. package/dist-lib/cloud.mjs +1 -1
  36. package/dist-lib/config.cjs +1 -1
  37. package/dist-lib/detox/index.cjs +1 -1
  38. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  39. package/dist-lib/home-paths.cjs +1 -1
  40. package/dist-lib/host/bridge-host.cjs +45 -41
  41. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  42. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  43. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  44. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  45. package/dist-lib/host/websocket-proxy.cjs +1 -1
  46. package/dist-lib/index.cjs +5 -1
  47. package/dist-lib/jump-to-source-babel.cjs +1 -1
  48. package/dist-lib/jump-to-source-native.cjs +1 -1
  49. package/dist-lib/kotlin-host.cjs +8 -3
  50. package/dist-lib/menu.cjs +1 -1
  51. package/dist-lib/menu.mjs +1 -1
  52. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  53. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  54. package/dist-lib/metro-production-bundle.cjs +1 -1
  55. package/dist-lib/metro-production-bundle.mjs +1 -1
  56. package/dist-lib/metro.cjs +1 -1
  57. package/dist-lib/native-app-identity.cjs +1 -1
  58. package/dist-lib/native-app-identity.mjs +1 -1
  59. package/dist-lib/plist.cjs +1 -1
  60. package/dist-lib/plist.mjs +1 -1
  61. package/dist-lib/profiles.cjs +1 -1
  62. package/dist-lib/public-brand.cjs +1 -1
  63. package/dist-lib/react-native-host-modules.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.mjs +1 -1
  65. package/dist-lib/render-mode.cjs +1 -1
  66. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  67. package/dist-lib/sdk.cjs +1 -1
  68. package/dist-lib/sdk.mjs +1 -1
  69. package/dist-lib/skills.cjs +1339 -180
  70. package/dist-lib/swift-compile.cjs +1 -1
  71. package/dist-lib/swift-compile.mjs +1 -1
  72. package/dist-lib/swift-package.cjs +1 -1
  73. package/dist-lib/swift-package.mjs +1 -1
  74. package/dist-lib/swift-submit.cjs +1 -1
  75. package/dist-lib/swift-submit.mjs +1 -1
  76. package/dist-lib/swift.cjs +1 -1
  77. package/dist-lib/vite-swift.cjs +1 -1
  78. package/dist-lib/vite.cjs +1 -1
  79. package/kotlin/AppSources/android/app/Activity.kt +48 -3
  80. package/kotlin/AppSources/android/app/Application.kt +4 -0
  81. package/kotlin/AppSources/android/content/res/Configuration.kt +4 -0
  82. package/kotlin/AppSources/android/content/res/Resources.kt +3 -1
  83. package/kotlin/AppSources/android/view/Window.kt +15 -9
  84. package/kotlin/AppSources/androidx/activity/ComponentActivity.kt +36 -3
  85. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +233 -86
  86. package/kotlin/ComposeSources/PeachComposeHost.kt +15 -3
  87. package/kotlin/fork/README.md +1 -0
  88. package/kotlin/fork/compose-worker-globals.patch +26 -0
  89. package/kotlin/fork/fork.json +1 -1
  90. package/kotlin/toolchain.json +3 -3
  91. package/package.json +2 -1
  92. package/src/android-theme.ts +14 -0
  93. package/src/backend-origin.ts +25 -0
  94. package/src/host/bridge-host.ts +24 -37
  95. package/src/kotlin-app.ts +29 -4
  96. package/src/kotlin-host.ts +7 -2
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.659 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.661 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -5072,7 +5072,7 @@ var init_supported_native_packages = __esm({
5072
5072
  "react-native-ota-hot-update",
5073
5073
  // seam
5074
5074
  "react-native-pager-view",
5075
- // preset+visual-proof
5075
+ // visual-proof
5076
5076
  "react-native-palette-full",
5077
5077
  // seam
5078
5078
  "react-native-pdf",
@@ -5194,7 +5194,7 @@ var init_supported_native_packages = __esm({
5194
5194
  "react-native-system-setting",
5195
5195
  // seam
5196
5196
  "react-native-teleport",
5197
- // preset+coverage
5197
+ // coverage
5198
5198
  "react-native-testfairy",
5199
5199
  // seam+coverage
5200
5200
  "react-native-text-input-mask",
@@ -21465,11 +21465,10 @@ async function installVerifiedTarball(tarball) {
21465
21465
  const { url, digest, destDir, installedMarker, label } = tarball;
21466
21466
  const downloadDir = import_node_fs7.default.mkdtempSync(import_node_path7.default.join(import_node_os2.default.tmpdir(), "runtime-delivery-download-"));
21467
21467
  const archivePath = import_node_path7.default.join(downloadDir, "archive.tar.gz");
21468
- const tmpDir = import_node_path7.default.join(
21469
- import_node_path7.default.dirname(destDir),
21470
- `.installing-${import_node_path7.default.basename(destDir)}-${process.pid}`
21468
+ import_node_fs7.default.mkdirSync(import_node_path7.default.dirname(destDir), { recursive: true });
21469
+ const tmpDir = import_node_fs7.default.mkdtempSync(
21470
+ import_node_path7.default.join(import_node_path7.default.dirname(destDir), `.installing-${import_node_path7.default.basename(destDir)}-`)
21471
21471
  );
21472
- import_node_fs7.default.rmSync(tmpDir, { recursive: true, force: true });
21473
21472
  try {
21474
21473
  await downloadToFile(url, archivePath);
21475
21474
  const actual = await digestFile(archivePath, digest.algorithm, digest.encoding);
@@ -21478,20 +21477,38 @@ async function installVerifiedTarball(tarball) {
21478
21477
  `${digest.algorithm} mismatch for ${label}: expected ${digest.value}, actual ${actual}`
21479
21478
  );
21480
21479
  }
21481
- import_node_fs7.default.mkdirSync(tmpDir, { recursive: true });
21482
21480
  await extractTarball(archivePath, tmpDir, tarball.stripComponents ?? 0);
21483
21481
  if (!import_node_fs7.default.existsSync(import_node_path7.default.join(tmpDir, installedMarker))) {
21484
21482
  throw new Error(`extracted tarball for ${label} is missing ${installedMarker}`);
21485
21483
  }
21486
- import_node_fs7.default.rmSync(destDir, { recursive: true, force: true });
21487
- import_node_fs7.default.renameSync(tmpDir, destDir);
21488
- } catch (err) {
21489
- import_node_fs7.default.rmSync(tmpDir, { recursive: true, force: true });
21490
- throw err;
21484
+ try {
21485
+ import_node_fs7.default.renameSync(tmpDir, destDir);
21486
+ } catch (err) {
21487
+ if (!isErrnoCode(err, "ENOTEMPTY", "EEXIST")) throw err;
21488
+ const aside = `${tmpDir}-replaced`;
21489
+ try {
21490
+ import_node_fs7.default.renameSync(destDir, aside);
21491
+ } catch (moveErr) {
21492
+ if (!isErrnoCode(moveErr, "ENOENT")) throw moveErr;
21493
+ }
21494
+ try {
21495
+ import_node_fs7.default.renameSync(tmpDir, destDir);
21496
+ } catch (landErr) {
21497
+ if (!isErrnoCode(landErr, "ENOTEMPTY", "EEXIST") || !import_node_fs7.default.existsSync(import_node_path7.default.join(destDir, installedMarker))) {
21498
+ throw landErr;
21499
+ }
21500
+ } finally {
21501
+ import_node_fs7.default.rmSync(aside, { recursive: true, force: true });
21502
+ }
21503
+ }
21491
21504
  } finally {
21505
+ import_node_fs7.default.rmSync(tmpDir, { recursive: true, force: true });
21492
21506
  import_node_fs7.default.rmSync(downloadDir, { recursive: true, force: true });
21493
21507
  }
21494
21508
  }
21509
+ function isErrnoCode(err, ...codes) {
21510
+ return err instanceof Error && "code" in err && codes.includes(String(err.code));
21511
+ }
21495
21512
  async function downloadToFile(url, destPath) {
21496
21513
  const res = await fetch(url);
21497
21514
  if (!res.ok || !res.body) {
@@ -29462,24 +29479,7 @@ var init_bridge_host = __esm({
29462
29479
  this.wsIsAlive.set(ws, true);
29463
29480
  });
29464
29481
  this.agentHost.registerSocket(ws);
29465
- if (role === "sim") {
29466
- sim = {
29467
- id: this.allocateSimId(),
29468
- ws,
29469
- origin,
29470
- connectedAt: Date.now(),
29471
- lastSeenAt: Date.now(),
29472
- lastActiveAt: 0,
29473
- recentActions: []
29474
- };
29475
- this.sims.set(sim.id, sim);
29476
- this.writeConnectedRuntimeSnapshot();
29477
- if (this.shouldPromoteSim(sim)) {
29478
- this.primarySimId = sim.id;
29479
- }
29480
- this.broadcastSimAssignments();
29481
- this.broadcastSimClientStates();
29482
- } else {
29482
+ if (role === "cli") {
29483
29483
  const fallbackKey = `ws-${this.nextCliFallbackId++}`;
29484
29484
  this.cliIdentityKeyBySocket.set(ws, fallbackKey);
29485
29485
  }
@@ -29560,25 +29560,29 @@ var init_bridge_host = __esm({
29560
29560
  }
29561
29561
  return;
29562
29562
  }
29563
- if (role === "sim" && msg.type === "bridge:hello" && sim && !sim.url) {
29564
- const provisionalId = sim.id;
29565
- this.sims.delete(provisionalId);
29566
- if (this.primarySimId === provisionalId) {
29567
- this.primarySimId = this.getOpenSim()?.id ?? null;
29568
- }
29569
- sim = null;
29563
+ if (role === "sim" && msg.type === "bridge:hello" && !sim) {
29570
29564
  role = "cli";
29571
29565
  this.cliIdentityKeyBySocket.set(ws, `ws-${this.nextCliFallbackId++}`);
29572
- this.writeConnectedRuntimeSnapshot();
29573
- this.broadcastSimAssignments();
29574
- this.broadcastSimClientStates();
29575
29566
  }
29576
29567
  if (role === "sim") {
29577
29568
  if (sim) {
29578
29569
  sim.lastSeenAt = Date.now();
29579
29570
  }
29580
- if (msg.type === "bridge:register" && sim) {
29571
+ if (msg.type === "bridge:register") {
29581
29572
  const registration = msg;
29573
+ const firstRegistration = !sim;
29574
+ if (!sim) {
29575
+ sim = {
29576
+ id: this.allocateSimId(),
29577
+ ws,
29578
+ origin,
29579
+ connectedAt: Date.now(),
29580
+ lastSeenAt: Date.now(),
29581
+ lastActiveAt: 0,
29582
+ recentActions: []
29583
+ };
29584
+ this.sims.set(sim.id, sim);
29585
+ }
29582
29586
  const restored = this.tryRestoreSimId(sim, registration.simId);
29583
29587
  sim.url = registration.url;
29584
29588
  sim.title = registration.title;
@@ -29592,7 +29596,7 @@ var init_bridge_host = __esm({
29592
29596
  }
29593
29597
  const reElected = this.primarySimId !== sim.id && this.shouldPromoteSim(sim);
29594
29598
  if (reElected) this.primarySimId = sim.id;
29595
- if (restored || reElected) {
29599
+ if (firstRegistration || restored || reElected) {
29596
29600
  this.broadcastSimAssignments();
29597
29601
  this.broadcastSimClientStates();
29598
29602
  }
@@ -31488,6 +31492,10 @@ var init_current_sim = __esm({
31488
31492
  // claude code, if ever set
31489
31493
  "CODEX_THREAD_ID",
31490
31494
  // codex / openai agent thread, stable across tool invocations
31495
+ // a Team Machine session, per agent run. its other runners set no session
31496
+ // variable of their own, and the terminal variables below are inherited from
31497
+ // whatever shell started the daemon, so every such agent would share one key.
31498
+ "TM_SESSION",
31491
31499
  "TERM_SESSION_ID",
31492
31500
  // macOS Terminal.app + iTerm2
31493
31501
  "ITERM_SESSION_ID",
@@ -34432,6 +34440,1241 @@ var init_playwright_core_pin = __esm({
34432
34440
  }
34433
34441
  });
34434
34442
 
34443
+ // cli/commands/inspect/env.ts
34444
+ function isAgentEnv(env = process.env) {
34445
+ if (env.PEACH_AGENT === "0") return false;
34446
+ for (const name2 of AGENT_ENV_VARS) {
34447
+ const v = env[name2];
34448
+ if (v && v.trim() && v !== "0") return true;
34449
+ }
34450
+ return false;
34451
+ }
34452
+ var AGENT_ENV_VARS;
34453
+ var init_env = __esm({
34454
+ "cli/commands/inspect/env.ts"() {
34455
+ "use strict";
34456
+ AGENT_ENV_VARS = [
34457
+ "PEACH_AGENT",
34458
+ "PEACH_CLI_IDENTITY",
34459
+ "CLAUDECODE",
34460
+ "CLAUDE_CODE_ENTRYPOINT",
34461
+ "CLAUDE_CODE_SESSION_ID",
34462
+ "CODEX_THREAD_ID",
34463
+ "CURSOR_TRACE_ID",
34464
+ "AIDER_MODEL"
34465
+ ];
34466
+ }
34467
+ });
34468
+
34469
+ // cli/cli-update.ts
34470
+ var DEFAULT_CLI_RELEASE_ORIGIN, CLI_UPDATE_CHECK_INTERVAL_MS, CLI_UPDATE_NOTIFICATION_COOLDOWN_MS;
34471
+ var init_cli_update = __esm({
34472
+ "cli/cli-update.ts"() {
34473
+ "use strict";
34474
+ init_src();
34475
+ init_automatic_update_policy();
34476
+ init_cli_version();
34477
+ init_home_paths();
34478
+ init_env();
34479
+ DEFAULT_CLI_RELEASE_ORIGIN = "https://r2.rnxsim.com/rnx-cli";
34480
+ CLI_UPDATE_CHECK_INTERVAL_MS = 20 * 60 * 60 * 1e3;
34481
+ CLI_UPDATE_NOTIFICATION_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1e3;
34482
+ }
34483
+ });
34484
+
34485
+ // cli/drivers/linux-browser-libs.lock.json
34486
+ var linux_browser_libs_lock_default;
34487
+ var init_linux_browser_libs_lock = __esm({
34488
+ "cli/drivers/linux-browser-libs.lock.json"() {
34489
+ linux_browser_libs_lock_default = {
34490
+ id: "c7f1978ea55bd63f",
34491
+ suite: "focal",
34492
+ arches: {
34493
+ x64: [
34494
+ {
34495
+ name: "fontconfig-config",
34496
+ version: "2.13.1-2ubuntu3",
34497
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/f/fontconfig/fontconfig-config_2.13.1-2ubuntu3_all.deb",
34498
+ sha256: "80b090925c52aff3f4681b361c9823b041c42c57cca58b5baf2541bafc25fed9",
34499
+ size: 28780
34500
+ },
34501
+ {
34502
+ name: "libasound2",
34503
+ version: "1.2.2-2.1ubuntu2.5",
34504
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/alsa-lib/libasound2_1.2.2-2.1ubuntu2.5_amd64.deb",
34505
+ sha256: "5ea02b4590b210bb2d4a180007184c10e8941d0ee1f025361950b0d0084578a6",
34506
+ size: 334776
34507
+ },
34508
+ {
34509
+ name: "libasound2-data",
34510
+ version: "1.2.2-2.1ubuntu2.5",
34511
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/alsa-lib/libasound2-data_1.2.2-2.1ubuntu2.5_all.deb",
34512
+ sha256: "d740795494b8259fdb359f9343f224dabb7cb4a63511e13ccccc5ad2d96ffa95",
34513
+ size: 20104
34514
+ },
34515
+ {
34516
+ name: "libatk-bridge2.0-0",
34517
+ version: "2.34.2-0ubuntu2~20.04.1",
34518
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.2-0ubuntu2~20.04.1_amd64.deb",
34519
+ sha256: "2fcfc11cdb476274e1c11f0321c2dcabe97186dab45eb9ca91ee9dc1f6906603",
34520
+ size: 58212
34521
+ },
34522
+ {
34523
+ name: "libatk1.0-0",
34524
+ version: "2.35.1-1ubuntu2",
34525
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/atk1.0/libatk1.0-0_2.35.1-1ubuntu2_amd64.deb",
34526
+ sha256: "3bfb6d72e35771481be152dcc96d39b899d6ff246c995658c181114357f46656",
34527
+ size: 45520
34528
+ },
34529
+ {
34530
+ name: "libatk1.0-data",
34531
+ version: "2.35.1-1ubuntu2",
34532
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/atk1.0/libatk1.0-data_2.35.1-1ubuntu2_all.deb",
34533
+ sha256: "ded987a2b50f0fa9bfd04fba60ad817cb169fb4066f7bc22c174fcae1e2f1aad",
34534
+ size: 2964
34535
+ },
34536
+ {
34537
+ name: "libatspi2.0-0",
34538
+ version: "2.36.0-2",
34539
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/at-spi2-core/libatspi2.0-0_2.36.0-2_amd64.deb",
34540
+ sha256: "482f7e0c7081e9fd16b7cd71d3fc937271b1f722fdcfb0c40f934e108e9fdb80",
34541
+ size: 64244
34542
+ },
34543
+ {
34544
+ name: "libavahi-client3",
34545
+ version: "0.7-4ubuntu7.3",
34546
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/avahi/libavahi-client3_0.7-4ubuntu7.3_amd64.deb",
34547
+ sha256: "965af1f0815d67f1989d5ed48e49b6339285b7ba1284bd80b01bf1dd141eca67",
34548
+ size: 25500
34549
+ },
34550
+ {
34551
+ name: "libavahi-common-data",
34552
+ version: "0.7-4ubuntu7.3",
34553
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/avahi/libavahi-common-data_0.7-4ubuntu7.3_amd64.deb",
34554
+ sha256: "6a49402d2d53758a180030e4de03fb09de79067a8c649d6015016e05c249a09e",
34555
+ size: 21448
34556
+ },
34557
+ {
34558
+ name: "libavahi-common3",
34559
+ version: "0.7-4ubuntu7.3",
34560
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/a/avahi/libavahi-common3_0.7-4ubuntu7.3_amd64.deb",
34561
+ sha256: "8ace707dd8bdc0dcb6c09f136ad6e081dfd782e4316e61dc719afd0f4a5092bb",
34562
+ size: 21888
34563
+ },
34564
+ {
34565
+ name: "libblkid1",
34566
+ version: "2.34-0.1ubuntu9.6",
34567
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/u/util-linux/libblkid1_2.34-0.1ubuntu9.6_amd64.deb",
34568
+ sha256: "d34bb89928706ad665766a45ab48841cff05ef63fe488f74b2c477a75172fca2",
34569
+ size: 136756
34570
+ },
34571
+ {
34572
+ name: "libbsd0",
34573
+ version: "0.10.0-1",
34574
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libb/libbsd/libbsd0_0.10.0-1_amd64.deb",
34575
+ sha256: "4f668025fe923a372eb7fc368d6769fcfff6809233d48fd20fc072917cd82e60",
34576
+ size: 45356
34577
+ },
34578
+ {
34579
+ name: "libcairo2",
34580
+ version: "1.16.0-4ubuntu1",
34581
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/c/cairo/libcairo2_1.16.0-4ubuntu1_amd64.deb",
34582
+ sha256: "f01ae3e61485742b5b72e6195d45204767e64f934bbe96f6c639d26b5114513d",
34583
+ size: 583488
34584
+ },
34585
+ {
34586
+ name: "libcom-err2",
34587
+ version: "1.45.5-2ubuntu1.2",
34588
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/e/e2fsprogs/libcom-err2_1.45.5-2ubuntu1.2_amd64.deb",
34589
+ sha256: "248a8d03de9fdb926bae68748e9b7715598759a2d3cd0a375e3a96764997b48b",
34590
+ size: 9580
34591
+ },
34592
+ {
34593
+ name: "libcups2",
34594
+ version: "2.3.1-9ubuntu1.9",
34595
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/c/cups/libcups2_2.3.1-9ubuntu1.9_amd64.deb",
34596
+ sha256: "9f8f67dcb2beb5ef1e78913310c67797733373b0e9e839c33d98bb6dbf346314",
34597
+ size: 233504
34598
+ },
34599
+ {
34600
+ name: "libdatrie1",
34601
+ version: "0.2.12-3",
34602
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_amd64.deb",
34603
+ sha256: "521d1e41b2362abd51b65e5889529ffe0f83442498b81fd2628c44ed43c7abb6",
34604
+ size: 18692
34605
+ },
34606
+ {
34607
+ name: "libdbus-1-3",
34608
+ version: "1.12.16-2ubuntu2.3",
34609
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/d/dbus/libdbus-1-3_1.12.16-2ubuntu2.3_amd64.deb",
34610
+ sha256: "624e7f78a22f483477bf806c3c4278ce3d5c6707d1176a646baf1dfc453a0982",
34611
+ size: 179056
34612
+ },
34613
+ {
34614
+ name: "libdrm-common",
34615
+ version: "2.4.107-8ubuntu1~20.04.2",
34616
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm-common_2.4.107-8ubuntu1~20.04.2_all.deb",
34617
+ sha256: "52bdffa2e90751b316978799650bb3e8c373c238cc71775ee596069241847e08",
34618
+ size: 5396
34619
+ },
34620
+ {
34621
+ name: "libdrm2",
34622
+ version: "2.4.107-8ubuntu1~20.04.2",
34623
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libd/libdrm/libdrm2_2.4.107-8ubuntu1~20.04.2_amd64.deb",
34624
+ sha256: "9b01d73313841abe8e3f24c2715edced675fbe329bbd10be912a5b135cd51fb6",
34625
+ size: 34112
34626
+ },
34627
+ {
34628
+ name: "libexpat1",
34629
+ version: "2.2.9-1ubuntu0.8",
34630
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/e/expat/libexpat1_2.2.9-1ubuntu0.8_amd64.deb",
34631
+ sha256: "021d56318dba1f753dc8284623161fad3051e4ec2f69ad84c16d649b1ac7d0c0",
34632
+ size: 75552
34633
+ },
34634
+ {
34635
+ name: "libffi7",
34636
+ version: "3.3-4",
34637
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libf/libffi/libffi7_3.3-4_amd64.deb",
34638
+ sha256: "4584aa8fef1bf5086168ce2f7078cd2ebd78fdc4cc0d86d958d795d4e0b0f50d",
34639
+ size: 19688
34640
+ },
34641
+ {
34642
+ name: "libfontconfig1",
34643
+ version: "2.13.1-2ubuntu3",
34644
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/f/fontconfig/libfontconfig1_2.13.1-2ubuntu3_amd64.deb",
34645
+ sha256: "7ca5523936a9b8e42f60c0f01c232145809387e5680b05c7bce0bea31844a522",
34646
+ size: 114072
34647
+ },
34648
+ {
34649
+ name: "libfreetype6",
34650
+ version: "2.10.1-2ubuntu0.4",
34651
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/f/freetype/libfreetype6_2.10.1-2ubuntu0.4_amd64.deb",
34652
+ sha256: "db8593630b432c9f69682f6040578a7db3a6ae2df6d172bc0e6df9982a714e27",
34653
+ size: 340804
34654
+ },
34655
+ {
34656
+ name: "libfribidi0",
34657
+ version: "1.0.8-2ubuntu0.1",
34658
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/f/fribidi/libfribidi0_1.0.8-2ubuntu0.1_amd64.deb",
34659
+ sha256: "3c8b091cb092358ee1812473bb6da5447642005d9c5f0412d63c8f1e4a974e4d",
34660
+ size: 24168
34661
+ },
34662
+ {
34663
+ name: "libgbm1",
34664
+ version: "21.2.6-0ubuntu0.1~20.04.2",
34665
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/m/mesa/libgbm1_21.2.6-0ubuntu0.1~20.04.2_amd64.deb",
34666
+ sha256: "58b610bf61b00e2fb599d44c5247850ea422ff712085639224b0a1cbcee95e50",
34667
+ size: 29200
34668
+ },
34669
+ {
34670
+ name: "libgcrypt20",
34671
+ version: "1.8.5-5ubuntu1.1",
34672
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-5ubuntu1.1_amd64.deb",
34673
+ sha256: "f040f801e2cced9bd82e484c23678cb9b464d04974a9cf4cf25fc9ad09d9e90d",
34674
+ size: 419920
34675
+ },
34676
+ {
34677
+ name: "libglib2.0-0",
34678
+ version: "2.64.6-1~ubuntu20.04.9",
34679
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/g/glib2.0/libglib2.0-0_2.64.6-1~ubuntu20.04.9_amd64.deb",
34680
+ sha256: "459d8f08c5e3e8c0454b1cb16660fc7a11274729c83bd41886e5a1388feeddbd",
34681
+ size: 1289696
34682
+ },
34683
+ {
34684
+ name: "libgmp10",
34685
+ version: "2:6.2.0+dfsg-4ubuntu0.1",
34686
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/g/gmp/libgmp10_6.2.0+dfsg-4ubuntu0.1_amd64.deb",
34687
+ sha256: "541dc5050b0cecdecbfe155641588ba08da645b61b11fc4bcb045f2f4773da43",
34688
+ size: 240684
34689
+ },
34690
+ {
34691
+ name: "libgnutls30",
34692
+ version: "3.6.13-2ubuntu1.12",
34693
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/g/gnutls28/libgnutls30_3.6.13-2ubuntu1.12_amd64.deb",
34694
+ sha256: "af6ff8ce571a81d8aae3f55e84ff4bb777598f3a348660e53086e3ba2554d74a",
34695
+ size: 828712
34696
+ },
34697
+ {
34698
+ name: "libgpg-error0",
34699
+ version: "1.37-1",
34700
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libg/libgpg-error/libgpg-error0_1.37-1_amd64.deb",
34701
+ sha256: "4744163850851f60080a8b0fdf3dd3258d93114bd83f8024414737a2826da7fe",
34702
+ size: 58004
34703
+ },
34704
+ {
34705
+ name: "libgraphite2-3",
34706
+ version: "1.3.13-11build1",
34707
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/g/graphite2/libgraphite2-3_1.3.13-11build1_amd64.deb",
34708
+ sha256: "e4ae794210c589fedb1c008429188066259e5bc61657747a4ecd9502f31b3294",
34709
+ size: 73548
34710
+ },
34711
+ {
34712
+ name: "libgssapi-krb5-2",
34713
+ version: "1.17-6ubuntu4.11",
34714
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libgssapi-krb5-2_1.17-6ubuntu4.11_amd64.deb",
34715
+ sha256: "08356bc6b140564abeea043b9cc8e9fd395f0775d652be739da2ea8ed0915322",
34716
+ size: 121224
34717
+ },
34718
+ {
34719
+ name: "libharfbuzz0b",
34720
+ version: "2.6.4-1ubuntu4.3",
34721
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/h/harfbuzz/libharfbuzz0b_2.6.4-1ubuntu4.3_amd64.deb",
34722
+ sha256: "2611c609a50b13cbd47c276ef0c82383e6f6a8321a78f11a9058297cf26b3915",
34723
+ size: 391136
34724
+ },
34725
+ {
34726
+ name: "libhogweed5",
34727
+ version: "3.5.1+really3.5.1-2ubuntu0.2",
34728
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/n/nettle/libhogweed5_3.5.1+really3.5.1-2ubuntu0.2_amd64.deb",
34729
+ sha256: "12d76fa6c9149af3da228e3062faaefd7d12e0c6fd3424579627672437a84f14",
34730
+ size: 137880
34731
+ },
34732
+ {
34733
+ name: "libidn2-0",
34734
+ version: "2.2.0-2",
34735
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libi/libidn2/libidn2-0_2.2.0-2_amd64.deb",
34736
+ sha256: "698abe11d444c7e87c656c2083373d1e0fae04b3a64be0371adb2bb180092537",
34737
+ size: 50448
34738
+ },
34739
+ {
34740
+ name: "libk5crypto3",
34741
+ version: "1.17-6ubuntu4.11",
34742
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libk5crypto3_1.17-6ubuntu4.11_amd64.deb",
34743
+ sha256: "f5cc56017b5714f427b257e46599f5a228821760439f408ebb7de7c01e5b1ab5",
34744
+ size: 80316
34745
+ },
34746
+ {
34747
+ name: "libkeyutils1",
34748
+ version: "1.6-6ubuntu1.1",
34749
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/k/keyutils/libkeyutils1_1.6-6ubuntu1.1_amd64.deb",
34750
+ sha256: "5a098b2585e549b997a979c38e5bfcc07a5df3efef4753e41ad4dab1122d576c",
34751
+ size: 10252
34752
+ },
34753
+ {
34754
+ name: "libkrb5-3",
34755
+ version: "1.17-6ubuntu4.11",
34756
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb5-3_1.17-6ubuntu4.11_amd64.deb",
34757
+ sha256: "df7b48565c9304efc382da14d082d66240b4889415c5bf01bfaf8334c60f1d40",
34758
+ size: 329500
34759
+ },
34760
+ {
34761
+ name: "libkrb5support0",
34762
+ version: "1.17-6ubuntu4.11",
34763
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb5support0_1.17-6ubuntu4.11_amd64.deb",
34764
+ sha256: "06eb3024db8d8daba8201329f9c53bb94a1a7c7558c51d24967d88712045087a",
34765
+ size: 31496
34766
+ },
34767
+ {
34768
+ name: "liblz4-1",
34769
+ version: "1.9.2-2ubuntu0.20.04.1",
34770
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/l/lz4/liblz4-1_1.9.2-2ubuntu0.20.04.1_amd64.deb",
34771
+ sha256: "a9b706941eb8e2a0012869dbe63c7337fc9629aaf919563f63e92baa2a3a7c18",
34772
+ size: 56124
34773
+ },
34774
+ {
34775
+ name: "liblzma5",
34776
+ version: "5.2.4-1ubuntu1.1",
34777
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/x/xz-utils/liblzma5_5.2.4-1ubuntu1.1_amd64.deb",
34778
+ sha256: "f545d34c86119802fbae869a09e1077a714e12a01ef6a3ef67fdc745e5db311d",
34779
+ size: 91812
34780
+ },
34781
+ {
34782
+ name: "libmount1",
34783
+ version: "2.34-0.1ubuntu9.6",
34784
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/u/util-linux/libmount1_2.34-0.1ubuntu9.6_amd64.deb",
34785
+ sha256: "f8c6e8209025a1ca6e5496107ec793eef142c4a66777f4bc5b1c87bf4de2101e",
34786
+ size: 149220
34787
+ },
34788
+ {
34789
+ name: "libnettle7",
34790
+ version: "3.5.1+really3.5.1-2ubuntu0.2",
34791
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/n/nettle/libnettle7_3.5.1+really3.5.1-2ubuntu0.2_amd64.deb",
34792
+ sha256: "3496aed83407fde71e0dc5988b28e8fd7f07a2f27fcf3e0f214c7cd86667eecd",
34793
+ size: 114900
34794
+ },
34795
+ {
34796
+ name: "libnspr4",
34797
+ version: "2:4.35-0ubuntu0.20.04.1",
34798
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/n/nspr/libnspr4_4.35-0ubuntu0.20.04.1_amd64.deb",
34799
+ sha256: "da98b529dfe37aedbf7d23d2edf5faae4d817c40e5a60932e791ba4cdec4dd88",
34800
+ size: 107632
34801
+ },
34802
+ {
34803
+ name: "libnss3",
34804
+ version: "2:3.98-0ubuntu0.20.04.2",
34805
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/n/nss/libnss3_3.98-0ubuntu0.20.04.2_amd64.deb",
34806
+ sha256: "1e711911ad3ae2de8a19bc6cb048fa81e2e2c2c09d0aad186b7c14d78517bb16",
34807
+ size: 1391200
34808
+ },
34809
+ {
34810
+ name: "libp11-kit0",
34811
+ version: "0.23.20-1ubuntu0.1",
34812
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/p/p11-kit/libp11-kit0_0.23.20-1ubuntu0.1_amd64.deb",
34813
+ sha256: "e6c415cef9c7e829e43cac6cfea7371222005650cf4751eee22fd19710d4fa8e",
34814
+ size: 188124
34815
+ },
34816
+ {
34817
+ name: "libpango-1.0-0",
34818
+ version: "1.44.7-2ubuntu4",
34819
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/p/pango1.0/libpango-1.0-0_1.44.7-2ubuntu4_amd64.deb",
34820
+ sha256: "5ab27de09a2f0dbd0a4959c7427cfa512ca1e01549fe0767b6e0db8d00689f3b",
34821
+ size: 162008
34822
+ },
34823
+ {
34824
+ name: "libpcre2-8-0",
34825
+ version: "10.34-7ubuntu0.1",
34826
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/p/pcre2/libpcre2-8-0_10.34-7ubuntu0.1_amd64.deb",
34827
+ sha256: "5229f14c06074ae5f2d6dd7cef2c9dff8dd57c6ecf1381ff019fe5d233cc275f",
34828
+ size: 197976
34829
+ },
34830
+ {
34831
+ name: "libpcre3",
34832
+ version: "2:8.39-12ubuntu0.1",
34833
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/p/pcre3/libpcre3_8.39-12ubuntu0.1_amd64.deb",
34834
+ sha256: "98c25f98cc8df949e774a7ebaff509c37a6baea4dab83786a3c1efecb850bfae",
34835
+ size: 232396
34836
+ },
34837
+ {
34838
+ name: "libpixman-1-0",
34839
+ version: "0.38.4-0ubuntu2.1",
34840
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/p/pixman/libpixman-1-0_0.38.4-0ubuntu2.1_amd64.deb",
34841
+ sha256: "6714ec9575266bcef0c332ea36739ce88df4a08a1bd20147e2cb89ee0b414679",
34842
+ size: 226932
34843
+ },
34844
+ {
34845
+ name: "libpng16-16",
34846
+ version: "1.6.37-2",
34847
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libp/libpng1.6/libpng16-16_1.6.37-2_amd64.deb",
34848
+ sha256: "6c512b7c67eafe0302026fa719f924bb77b39c57e1845a3d8b81cfd607c3b22c",
34849
+ size: 179076
34850
+ },
34851
+ {
34852
+ name: "libselinux1",
34853
+ version: "3.0-1build2",
34854
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libs/libselinux/libselinux1_3.0-1build2_amd64.deb",
34855
+ sha256: "1b8674b6f9e62fbae768d9ffbd686955d08db889ee4107d15ae02d1ec033cc7b",
34856
+ size: 68784
34857
+ },
34858
+ {
34859
+ name: "libsqlite3-0",
34860
+ version: "3.31.1-4ubuntu0.7",
34861
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/s/sqlite3/libsqlite3-0_3.31.1-4ubuntu0.7_amd64.deb",
34862
+ sha256: "82555868d913b6a435c64dfd9efdf3eca01d06e4d5bc97425f14a3f00e5edfd7",
34863
+ size: 548768
34864
+ },
34865
+ {
34866
+ name: "libssl1.1",
34867
+ version: "1.1.1f-1ubuntu2.24",
34868
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_amd64.deb",
34869
+ sha256: "7cf39d70a639017d1dd7c8d36daa2258063608688e449fddf40ffdd46f992a78",
34870
+ size: 1323248
34871
+ },
34872
+ {
34873
+ name: "libsystemd0",
34874
+ version: "245.4-4ubuntu3.24",
34875
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/s/systemd/libsystemd0_245.4-4ubuntu3.24_amd64.deb",
34876
+ sha256: "5b510f79d65149f9952220ad9f74c1d6c8d48e3086a688a8c58d0b6ff57f9ee2",
34877
+ size: 267456
34878
+ },
34879
+ {
34880
+ name: "libtasn1-6",
34881
+ version: "4.16.0-2ubuntu0.1",
34882
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2ubuntu0.1_amd64.deb",
34883
+ sha256: "20abf229083d5d60b158364a1e3e26d54cdb1840f0897b80deb0ebae9f049b3c",
34884
+ size: 38592
34885
+ },
34886
+ {
34887
+ name: "libthai-data",
34888
+ version: "0.1.28-3",
34889
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb",
34890
+ sha256: "4789eb1d23fc72f9b1cb18649f5dede84442bce2ceb829b0f371aa248ba51405",
34891
+ size: 134404
34892
+ },
34893
+ {
34894
+ name: "libthai0",
34895
+ version: "0.1.28-3",
34896
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libt/libthai/libthai0_0.1.28-3_amd64.deb",
34897
+ sha256: "4e4268c7bdaf33c64cf69a15684faccb7ec7520c04b805e525d7b2b47bd65642",
34898
+ size: 18124
34899
+ },
34900
+ {
34901
+ name: "libudev1",
34902
+ version: "245.4-4ubuntu3.24",
34903
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/s/systemd/libudev1_245.4-4ubuntu3.24_amd64.deb",
34904
+ sha256: "f2dc7d6771a2f26b93d1f17cdf3011a2b43b1adfd3df716e396a64c6890a4e3a",
34905
+ size: 75184
34906
+ },
34907
+ {
34908
+ name: "libunistring2",
34909
+ version: "0.9.10-2",
34910
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libu/libunistring/libunistring2_0.9.10-2_amd64.deb",
34911
+ sha256: "4ccfbc1e3a1cbc42616bd4fd407e01eb1434996c8500ac2fbccb7a2e1bcb166a",
34912
+ size: 368092
34913
+ },
34914
+ {
34915
+ name: "libuuid1",
34916
+ version: "2.34-0.1ubuntu9.6",
34917
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/u/util-linux/libuuid1_2.34-0.1ubuntu9.6_amd64.deb",
34918
+ sha256: "c1fb2ac586d0fbf375890536979fabf1b897e3481dac1696d615275477cb0751",
34919
+ size: 19976
34920
+ },
34921
+ {
34922
+ name: "libwayland-server0",
34923
+ version: "1.18.0-1ubuntu0.1",
34924
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/w/wayland/libwayland-server0_1.18.0-1ubuntu0.1_amd64.deb",
34925
+ sha256: "c1470c26861afaaafda54c9b9802b55a7bcc873841c239d4a844f6f5160e2363",
34926
+ size: 31252
34927
+ },
34928
+ {
34929
+ name: "libx11-6",
34930
+ version: "2:1.6.9-2ubuntu1.6",
34931
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libx11/libx11-6_1.6.9-2ubuntu1.6_amd64.deb",
34932
+ sha256: "20d7c0a8ea7a138d49d777a5db8e652071a3c47c78136450ec7417b5232b84ac",
34933
+ size: 576536
34934
+ },
34935
+ {
34936
+ name: "libx11-data",
34937
+ version: "2:1.6.9-2ubuntu1.6",
34938
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libx11/libx11-data_1.6.9-2ubuntu1.6_all.deb",
34939
+ sha256: "45c1fac19a8b7cc08162d1c8f63e04251bb2d0c4ff5cb3969227bd6fe8c5293b",
34940
+ size: 113552
34941
+ },
34942
+ {
34943
+ name: "libxau6",
34944
+ version: "1:1.0.9-0ubuntu1",
34945
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxau/libxau6_1.0.9-0ubuntu1_amd64.deb",
34946
+ sha256: "58a0d78302a35e4584f96cd598af16b563ae7aae4af589e2a7cee6dc6666d979",
34947
+ size: 7488
34948
+ },
34949
+ {
34950
+ name: "libxcb-render0",
34951
+ version: "1.14-2",
34952
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxcb/libxcb-render0_1.14-2_amd64.deb",
34953
+ sha256: "d5423de927f855b1a266b9b66e16e4ae9e067664c9337b5aaf57fb98b4791647",
34954
+ size: 14840
34955
+ },
34956
+ {
34957
+ name: "libxcb-shm0",
34958
+ version: "1.14-2",
34959
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxcb/libxcb-shm0_1.14-2_amd64.deb",
34960
+ sha256: "776c691acd4fcdad314f0f09c98927a608cbc422007ce0f0c88e9d6711773217",
34961
+ size: 5584
34962
+ },
34963
+ {
34964
+ name: "libxcb1",
34965
+ version: "1.14-2",
34966
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxcb/libxcb1_1.14-2_amd64.deb",
34967
+ sha256: "3fcab5cc6a70bcb1e4157748f9c626be21bc18b4c8459447e4c213cba98b9831",
34968
+ size: 44652
34969
+ },
34970
+ {
34971
+ name: "libxcomposite1",
34972
+ version: "1:0.4.5-1",
34973
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_amd64.deb",
34974
+ sha256: "d87e5d52d4bfa714bd56bb3103999e045b4f50638917736e544b67db361d0c8e",
34975
+ size: 6976
34976
+ },
34977
+ {
34978
+ name: "libxdamage1",
34979
+ version: "1:1.1.5-2",
34980
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_amd64.deb",
34981
+ sha256: "77f4088c85b973a05a9e12825db9fc8e0cc5a577bed57ac29f4427e187c2896f",
34982
+ size: 6996
34983
+ },
34984
+ {
34985
+ name: "libxdmcp6",
34986
+ version: "1:1.1.3-0ubuntu1",
34987
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxdmcp/libxdmcp6_1.1.3-0ubuntu1_amd64.deb",
34988
+ sha256: "8a612b0fb60a41b92698f87258bc5ec6467da88e38d3de79411e02921c42af87",
34989
+ size: 10580
34990
+ },
34991
+ {
34992
+ name: "libxext6",
34993
+ version: "2:1.3.4-0ubuntu1",
34994
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxext/libxext6_1.3.4-0ubuntu1_amd64.deb",
34995
+ sha256: "a3c546490c0ae0f9247cf8f2919fc7b99b386a538ac91ae48a4ebb96a2a69834",
34996
+ size: 29060
34997
+ },
34998
+ {
34999
+ name: "libxfixes3",
35000
+ version: "1:5.0.3-2",
35001
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_amd64.deb",
35002
+ sha256: "ee3d380e5f825048a381fea92e8215bc65662fa4ce06346579fbaada2b1f7acc",
35003
+ size: 10932
35004
+ },
35005
+ {
35006
+ name: "libxkbcommon0",
35007
+ version: "0.10.0-1",
35008
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxkbcommon/libxkbcommon0_0.10.0-1_amd64.deb",
35009
+ sha256: "b704ce1751dd938025b88a84c4054d4f36651661e473efeb3da8ed39aaf05868",
35010
+ size: 98444
35011
+ },
35012
+ {
35013
+ name: "libxrandr2",
35014
+ version: "2:1.5.2-0ubuntu1",
35015
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxrandr/libxrandr2_1.5.2-0ubuntu1_amd64.deb",
35016
+ sha256: "e6b232c3b2e6f8858aee0f1e46d2cec1575de1b85cb9cfdff93b8b951b15ff97",
35017
+ size: 18544
35018
+ },
35019
+ {
35020
+ name: "libxrender1",
35021
+ version: "1:0.9.10-1",
35022
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb",
35023
+ sha256: "bfda6dc44a39d6500ac2974b3113105477adce457699aadd99f022d5a4858c1c",
35024
+ size: 18706
35025
+ },
35026
+ {
35027
+ name: "zlib1g",
35028
+ version: "1:1.2.11.dfsg-2ubuntu1.5",
35029
+ url: "https://archive.ubuntu.com/ubuntu/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2ubuntu1.5_amd64.deb",
35030
+ sha256: "bf67018f5303466eb468680b637a5d3f3bb17b9d44decf3d82d40b35babcd3e0",
35031
+ size: 54164
35032
+ }
35033
+ ],
35034
+ arm64: [
35035
+ {
35036
+ name: "fontconfig-config",
35037
+ version: "2.13.1-2ubuntu3",
35038
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/f/fontconfig/fontconfig-config_2.13.1-2ubuntu3_all.deb",
35039
+ sha256: "80b090925c52aff3f4681b361c9823b041c42c57cca58b5baf2541bafc25fed9",
35040
+ size: 28780
35041
+ },
35042
+ {
35043
+ name: "libasound2",
35044
+ version: "1.2.2-2.1ubuntu2.5",
35045
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/alsa-lib/libasound2_1.2.2-2.1ubuntu2.5_arm64.deb",
35046
+ sha256: "3cf3900c1b9e5aa90c340099b15f04d8f93c078cd69acf1856ea65fea42b003e",
35047
+ size: 304140
35048
+ },
35049
+ {
35050
+ name: "libasound2-data",
35051
+ version: "1.2.2-2.1ubuntu2.5",
35052
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/alsa-lib/libasound2-data_1.2.2-2.1ubuntu2.5_all.deb",
35053
+ sha256: "d740795494b8259fdb359f9343f224dabb7cb4a63511e13ccccc5ad2d96ffa95",
35054
+ size: 20104
35055
+ },
35056
+ {
35057
+ name: "libatk-bridge2.0-0",
35058
+ version: "2.34.2-0ubuntu2~20.04.1",
35059
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.34.2-0ubuntu2~20.04.1_arm64.deb",
35060
+ sha256: "3a50e4c2112a0fae245aae3c7ed30b7468d2cf5601cb85547f0b3459c214ef52",
35061
+ size: 54764
35062
+ },
35063
+ {
35064
+ name: "libatk1.0-0",
35065
+ version: "2.35.1-1ubuntu2",
35066
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/atk1.0/libatk1.0-0_2.35.1-1ubuntu2_arm64.deb",
35067
+ sha256: "c67756f42f3655a896300145ad5faa313426e5e2353005e3a555ebad78fbe32e",
35068
+ size: 42912
35069
+ },
35070
+ {
35071
+ name: "libatk1.0-data",
35072
+ version: "2.35.1-1ubuntu2",
35073
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/atk1.0/libatk1.0-data_2.35.1-1ubuntu2_all.deb",
35074
+ sha256: "ded987a2b50f0fa9bfd04fba60ad817cb169fb4066f7bc22c174fcae1e2f1aad",
35075
+ size: 2964
35076
+ },
35077
+ {
35078
+ name: "libatspi2.0-0",
35079
+ version: "2.36.0-2",
35080
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/at-spi2-core/libatspi2.0-0_2.36.0-2_arm64.deb",
35081
+ sha256: "7f77390e8cde88006cf4277ecf2e678b486f3032ac476a2ae261cf7fa7a9befc",
35082
+ size: 60524
35083
+ },
35084
+ {
35085
+ name: "libavahi-client3",
35086
+ version: "0.7-4ubuntu7.3",
35087
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/avahi/libavahi-client3_0.7-4ubuntu7.3_arm64.deb",
35088
+ sha256: "5b73ca0f8514f68784d085746c0e420ef425d3962030f9e60c56ac68f212bacc",
35089
+ size: 24116
35090
+ },
35091
+ {
35092
+ name: "libavahi-common-data",
35093
+ version: "0.7-4ubuntu7.3",
35094
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/avahi/libavahi-common-data_0.7-4ubuntu7.3_arm64.deb",
35095
+ sha256: "4157edf019a38ac88adba51c9975e8b3d6920f8c45c843559d5b423a4275ce2d",
35096
+ size: 21448
35097
+ },
35098
+ {
35099
+ name: "libavahi-common3",
35100
+ version: "0.7-4ubuntu7.3",
35101
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/a/avahi/libavahi-common3_0.7-4ubuntu7.3_arm64.deb",
35102
+ sha256: "8e7017dd7f20083d53e20dd28c398a51f6bffe114d6b4f713dad56e8d30b7b00",
35103
+ size: 20588
35104
+ },
35105
+ {
35106
+ name: "libblkid1",
35107
+ version: "2.34-0.1ubuntu9.6",
35108
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/u/util-linux/libblkid1_2.34-0.1ubuntu9.6_arm64.deb",
35109
+ sha256: "6501deae2c21100fa083d7673090eca29462f9c11dae4ebe940e6dd8faf79a36",
35110
+ size: 128748
35111
+ },
35112
+ {
35113
+ name: "libbsd0",
35114
+ version: "0.10.0-1",
35115
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libb/libbsd/libbsd0_0.10.0-1_arm64.deb",
35116
+ sha256: "0486962198502bfd808a4645d453d3d9ee0916c29c4217355b61a3d206d77f4a",
35117
+ size: 43736
35118
+ },
35119
+ {
35120
+ name: "libcairo2",
35121
+ version: "1.16.0-4ubuntu1",
35122
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/c/cairo/libcairo2_1.16.0-4ubuntu1_arm64.deb",
35123
+ sha256: "afdf13c7d5ee20e910349a555d23d86ab373450e9eab099fe0cc1ddcbf410fba",
35124
+ size: 537620
35125
+ },
35126
+ {
35127
+ name: "libcom-err2",
35128
+ version: "1.45.5-2ubuntu1.2",
35129
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/e/e2fsprogs/libcom-err2_1.45.5-2ubuntu1.2_arm64.deb",
35130
+ sha256: "26dcb25c85aa9aac44d38b68ec87d7c0f00f79b263249985ff6e9cb077c796cb",
35131
+ size: 9272
35132
+ },
35133
+ {
35134
+ name: "libcups2",
35135
+ version: "2.3.1-9ubuntu1.9",
35136
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/c/cups/libcups2_2.3.1-9ubuntu1.9_arm64.deb",
35137
+ sha256: "b0538d219b803898cc4923ed67e8eb882cd19c3ab6a6bdd51219c935c8a05a9e",
35138
+ size: 218060
35139
+ },
35140
+ {
35141
+ name: "libdatrie1",
35142
+ version: "0.2.12-3",
35143
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libd/libdatrie/libdatrie1_0.2.12-3_arm64.deb",
35144
+ sha256: "31918038b7125be45b4f94772a2305009487812556f0cf9002b4e1ec0e6965ca",
35145
+ size: 17876
35146
+ },
35147
+ {
35148
+ name: "libdbus-1-3",
35149
+ version: "1.12.16-2ubuntu2.3",
35150
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/d/dbus/libdbus-1-3_1.12.16-2ubuntu2.3_arm64.deb",
35151
+ sha256: "db181df6a0e2533bcc236e6dbcc2cb4416ecccffe617841203535d42a9f7681b",
35152
+ size: 169260
35153
+ },
35154
+ {
35155
+ name: "libdrm-common",
35156
+ version: "2.4.107-8ubuntu1~20.04.2",
35157
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libd/libdrm/libdrm-common_2.4.107-8ubuntu1~20.04.2_all.deb",
35158
+ sha256: "52bdffa2e90751b316978799650bb3e8c373c238cc71775ee596069241847e08",
35159
+ size: 5396
35160
+ },
35161
+ {
35162
+ name: "libdrm2",
35163
+ version: "2.4.107-8ubuntu1~20.04.2",
35164
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libd/libdrm/libdrm2_2.4.107-8ubuntu1~20.04.2_arm64.deb",
35165
+ sha256: "b7039d3dc8af3248a3b01366d47e6bfd080f1a76ad3b6c63fa0bb4f8bae257a0",
35166
+ size: 33940
35167
+ },
35168
+ {
35169
+ name: "libexpat1",
35170
+ version: "2.2.9-1ubuntu0.8",
35171
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/e/expat/libexpat1_2.2.9-1ubuntu0.8_arm64.deb",
35172
+ sha256: "a51e25c803283d266f63de4b631fe7ff0db2a4fa28d3743ad2d6d7dde1409a38",
35173
+ size: 63e3
35174
+ },
35175
+ {
35176
+ name: "libffi7",
35177
+ version: "3.3-4",
35178
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libf/libffi/libffi7_3.3-4_arm64.deb",
35179
+ sha256: "a3e7abc48b5b4614fd5f6d1d95019d52be092e40e9b8a05f670905c6abf6eac4",
35180
+ size: 17136
35181
+ },
35182
+ {
35183
+ name: "libfontconfig1",
35184
+ version: "2.13.1-2ubuntu3",
35185
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/f/fontconfig/libfontconfig1_2.13.1-2ubuntu3_arm64.deb",
35186
+ sha256: "7abc3c68569ebd52e7e27ba1cd1e97004bf5a1641212acd821220a020b713c2f",
35187
+ size: 110740
35188
+ },
35189
+ {
35190
+ name: "libfreetype6",
35191
+ version: "2.10.1-2ubuntu0.4",
35192
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/f/freetype/libfreetype6_2.10.1-2ubuntu0.4_arm64.deb",
35193
+ sha256: "14e03a33e5ee8ea909d58804b895cb5f3aa9e774e008f0a635593e7f1826a329",
35194
+ size: 315716
35195
+ },
35196
+ {
35197
+ name: "libfribidi0",
35198
+ version: "1.0.8-2ubuntu0.1",
35199
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/f/fribidi/libfribidi0_1.0.8-2ubuntu0.1_arm64.deb",
35200
+ sha256: "bcbc7bf30ad655a3dbb6d23ae3f74aa19d47eac81684bdab3e37c8bb62997010",
35201
+ size: 24068
35202
+ },
35203
+ {
35204
+ name: "libgbm1",
35205
+ version: "21.2.6-0ubuntu0.1~20.04.2",
35206
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/m/mesa/libgbm1_21.2.6-0ubuntu0.1~20.04.2_arm64.deb",
35207
+ sha256: "9e5279a35d431bf0f5c99368d0cc9a7ba86fa7b4359cfce5734112e0973e1a69",
35208
+ size: 27912
35209
+ },
35210
+ {
35211
+ name: "libgcrypt20",
35212
+ version: "1.8.5-5ubuntu1.1",
35213
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libg/libgcrypt20/libgcrypt20_1.8.5-5ubuntu1.1_arm64.deb",
35214
+ sha256: "30960de1028522bb10bf3ae16d32967cb2ab9a479a26ba2c1d63d828300696d8",
35215
+ size: 349392
35216
+ },
35217
+ {
35218
+ name: "libglib2.0-0",
35219
+ version: "2.64.6-1~ubuntu20.04.9",
35220
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/g/glib2.0/libglib2.0-0_2.64.6-1~ubuntu20.04.9_arm64.deb",
35221
+ sha256: "5165775294bf29ceea14b119c2b561a4550ec7d011b65c31a78e3107f5c810f0",
35222
+ size: 1201064
35223
+ },
35224
+ {
35225
+ name: "libgmp10",
35226
+ version: "2:6.2.0+dfsg-4ubuntu0.1",
35227
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/g/gmp/libgmp10_6.2.0+dfsg-4ubuntu0.1_arm64.deb",
35228
+ sha256: "0ad2322370e552a0c8541c71e86cc0f63573b8cc2521d07b873fb4fa5efbc313",
35229
+ size: 217624
35230
+ },
35231
+ {
35232
+ name: "libgnutls30",
35233
+ version: "3.6.13-2ubuntu1.12",
35234
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/g/gnutls28/libgnutls30_3.6.13-2ubuntu1.12_arm64.deb",
35235
+ sha256: "bdfda0cc83d63003b04494a3cef41fab97c8c3a3f488eca4d0c6b9fb9f6d5e76",
35236
+ size: 753496
35237
+ },
35238
+ {
35239
+ name: "libgpg-error0",
35240
+ version: "1.37-1",
35241
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libg/libgpg-error/libgpg-error0_1.37-1_arm64.deb",
35242
+ sha256: "3b1364e9125ec484cfc3dd4441b836e111cf99e86274ca5e24a82d6c8343f15f",
35243
+ size: 55060
35244
+ },
35245
+ {
35246
+ name: "libgraphite2-3",
35247
+ version: "1.3.13-11build1",
35248
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/g/graphite2/libgraphite2-3_1.3.13-11build1_arm64.deb",
35249
+ sha256: "7eda3f4fa7eb67fbe9272ec52f73e09bd16ea0109817081e434119327a66f620",
35250
+ size: 67696
35251
+ },
35252
+ {
35253
+ name: "libgssapi-krb5-2",
35254
+ version: "1.17-6ubuntu4.11",
35255
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/k/krb5/libgssapi-krb5-2_1.17-6ubuntu4.11_arm64.deb",
35256
+ sha256: "3e21ca21e774b38d28d821c0aaf23d85bc9b1d9b8d807c07153133041194023a",
35257
+ size: 113180
35258
+ },
35259
+ {
35260
+ name: "libharfbuzz0b",
35261
+ version: "2.6.4-1ubuntu4.3",
35262
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/h/harfbuzz/libharfbuzz0b_2.6.4-1ubuntu4.3_arm64.deb",
35263
+ sha256: "34947348ee3b296950adbed5e6b8886cfc92412cd36c6bc1bbdc24aeb2471f74",
35264
+ size: 352820
35265
+ },
35266
+ {
35267
+ name: "libhogweed5",
35268
+ version: "3.5.1+really3.5.1-2ubuntu0.2",
35269
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/n/nettle/libhogweed5_3.5.1+really3.5.1-2ubuntu0.2_arm64.deb",
35270
+ sha256: "bb96808b5e2e28465720eab769461bed98bbf054efce3c176171d340fa66b5bc",
35271
+ size: 134516
35272
+ },
35273
+ {
35274
+ name: "libidn2-0",
35275
+ version: "2.2.0-2",
35276
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libi/libidn2/libidn2-0_2.2.0-2_arm64.deb",
35277
+ sha256: "87b95a889659edc2cae07679a930880b625449e28608cb22a8b6b6e6149c22cd",
35278
+ size: 49376
35279
+ },
35280
+ {
35281
+ name: "libk5crypto3",
35282
+ version: "1.17-6ubuntu4.11",
35283
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/k/krb5/libk5crypto3_1.17-6ubuntu4.11_arm64.deb",
35284
+ sha256: "8570e188404422a8df04c2a5afebb8cc3795336c85818e2172b5971148f546b9",
35285
+ size: 80428
35286
+ },
35287
+ {
35288
+ name: "libkeyutils1",
35289
+ version: "1.6-6ubuntu1.1",
35290
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/k/keyutils/libkeyutils1_1.6-6ubuntu1.1_arm64.deb",
35291
+ sha256: "b96a599092f6a76f48f61ca1b309da065ccbce19eda474155b3b89ab7b0e9450",
35292
+ size: 10112
35293
+ },
35294
+ {
35295
+ name: "libkrb5-3",
35296
+ version: "1.17-6ubuntu4.11",
35297
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/k/krb5/libkrb5-3_1.17-6ubuntu4.11_arm64.deb",
35298
+ sha256: "c4f072347862881c835b47ac073e201deec40c980b5146696a87715029bad832",
35299
+ size: 311860
35300
+ },
35301
+ {
35302
+ name: "libkrb5support0",
35303
+ version: "1.17-6ubuntu4.11",
35304
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/k/krb5/libkrb5support0_1.17-6ubuntu4.11_arm64.deb",
35305
+ sha256: "8391f8041f18540b0fb80d9227d6ed225febad94c85ef44b47f29ce36902564f",
35306
+ size: 30984
35307
+ },
35308
+ {
35309
+ name: "liblz4-1",
35310
+ version: "1.9.2-2ubuntu0.20.04.1",
35311
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/l/lz4/liblz4-1_1.9.2-2ubuntu0.20.04.1_arm64.deb",
35312
+ sha256: "d41c5b06e7a79afae062523222029a0cc126d3d9d0eecd5f363bfec06b4d7eeb",
35313
+ size: 52968
35314
+ },
35315
+ {
35316
+ name: "liblzma5",
35317
+ version: "5.2.4-1ubuntu1.1",
35318
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/x/xz-utils/liblzma5_5.2.4-1ubuntu1.1_arm64.deb",
35319
+ sha256: "fa5c6beb4390bd9dcca70abbd507573f3aaf637581eb45131ccc5dd147a484cd",
35320
+ size: 88072
35321
+ },
35322
+ {
35323
+ name: "libmount1",
35324
+ version: "2.34-0.1ubuntu9.6",
35325
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/u/util-linux/libmount1_2.34-0.1ubuntu9.6_arm64.deb",
35326
+ sha256: "7f7548911174a09fe5311a52b02ab61c43cd66aea829b81e69af47047f0131fd",
35327
+ size: 139600
35328
+ },
35329
+ {
35330
+ name: "libnettle7",
35331
+ version: "3.5.1+really3.5.1-2ubuntu0.2",
35332
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/n/nettle/libnettle7_3.5.1+really3.5.1-2ubuntu0.2_arm64.deb",
35333
+ sha256: "6d18525e248e84b8a4ee39a226fd1195ca9b9d0d5a1c7909ae4f997d46378848",
35334
+ size: 124352
35335
+ },
35336
+ {
35337
+ name: "libnspr4",
35338
+ version: "2:4.35-0ubuntu0.20.04.1",
35339
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/n/nspr/libnspr4_4.35-0ubuntu0.20.04.1_arm64.deb",
35340
+ sha256: "7596d99c54ed9047c56760e437b2530b7735de7a09742b33436793f20d835e69",
35341
+ size: 99780
35342
+ },
35343
+ {
35344
+ name: "libnss3",
35345
+ version: "2:3.98-0ubuntu0.20.04.2",
35346
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/n/nss/libnss3_3.98-0ubuntu0.20.04.2_arm64.deb",
35347
+ sha256: "af135396514d91c694cd088ff022f746ce197ce98d0bf30b8d79fa5f0a0b9651",
35348
+ size: 1291416
35349
+ },
35350
+ {
35351
+ name: "libp11-kit0",
35352
+ version: "0.23.20-1ubuntu0.1",
35353
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/p/p11-kit/libp11-kit0_0.23.20-1ubuntu0.1_arm64.deb",
35354
+ sha256: "13f594407a38c9d6f454bc6009aeeb4862c316be03de8ec4b9234c15c8bee5bb",
35355
+ size: 176892
35356
+ },
35357
+ {
35358
+ name: "libpango-1.0-0",
35359
+ version: "1.44.7-2ubuntu4",
35360
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/p/pango1.0/libpango-1.0-0_1.44.7-2ubuntu4_arm64.deb",
35361
+ sha256: "a3f8dd6f8ff2bbb76d062673afc821d5251969dfc68454dce131b261fae55523",
35362
+ size: 153408
35363
+ },
35364
+ {
35365
+ name: "libpcre2-8-0",
35366
+ version: "10.34-7ubuntu0.1",
35367
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/p/pcre2/libpcre2-8-0_10.34-7ubuntu0.1_arm64.deb",
35368
+ sha256: "098c3f31085cc0cb968e739ae3e4f5fb9f27298765d222e7d517c0ae87101391",
35369
+ size: 170340
35370
+ },
35371
+ {
35372
+ name: "libpcre3",
35373
+ version: "2:8.39-12ubuntu0.1",
35374
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/p/pcre3/libpcre3_8.39-12ubuntu0.1_arm64.deb",
35375
+ sha256: "caa77e05707539866a8651b09227f9be310483e239afcd360c7e3db2498c858d",
35376
+ size: 209060
35377
+ },
35378
+ {
35379
+ name: "libpixman-1-0",
35380
+ version: "0.38.4-0ubuntu2.1",
35381
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/p/pixman/libpixman-1-0_0.38.4-0ubuntu2.1_arm64.deb",
35382
+ sha256: "501de31785006f0f041f8704049518fa9c2330295a8b8b3b6170549791d6806e",
35383
+ size: 129724
35384
+ },
35385
+ {
35386
+ name: "libpng16-16",
35387
+ version: "1.6.37-2",
35388
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libp/libpng1.6/libpng16-16_1.6.37-2_arm64.deb",
35389
+ sha256: "95185d067fcdee1fcc51cb83490720fd2dcee450c55b9cfabcc940ed160879b5",
35390
+ size: 173524
35391
+ },
35392
+ {
35393
+ name: "libselinux1",
35394
+ version: "3.0-1build2",
35395
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libs/libselinux/libselinux1_3.0-1build2_arm64.deb",
35396
+ sha256: "91006c0db207cb6df4205db9c5a91309db58e7f4eef649093aa89def780e0e66",
35397
+ size: 64952
35398
+ },
35399
+ {
35400
+ name: "libsqlite3-0",
35401
+ version: "3.31.1-4ubuntu0.7",
35402
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/s/sqlite3/libsqlite3-0_3.31.1-4ubuntu0.7_arm64.deb",
35403
+ sha256: "e502ae78438a48d777029a22160bf08a0167607878d03b0cb59e30957ffdcc62",
35404
+ size: 506464
35405
+ },
35406
+ {
35407
+ name: "libssl1.1",
35408
+ version: "1.1.1f-1ubuntu2.24",
35409
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.24_arm64.deb",
35410
+ sha256: "dded4572af8b0a9e0310909f211a519cc6409fda31ea81132a77e268b0ec0f2f",
35411
+ size: 1159156
35412
+ },
35413
+ {
35414
+ name: "libsystemd0",
35415
+ version: "245.4-4ubuntu3.24",
35416
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/s/systemd/libsystemd0_245.4-4ubuntu3.24_arm64.deb",
35417
+ sha256: "4e611130122108641de56d1ac809a6361b68a5428613b2dbab2a1ca795cc7d0e",
35418
+ size: 246048
35419
+ },
35420
+ {
35421
+ name: "libtasn1-6",
35422
+ version: "4.16.0-2ubuntu0.1",
35423
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libt/libtasn1-6/libtasn1-6_4.16.0-2ubuntu0.1_arm64.deb",
35424
+ sha256: "76cc2b2e52f73cf33ea130bf8de05b116540d72d0ab5d0f63d2c9135fca1ef6b",
35425
+ size: 36968
35426
+ },
35427
+ {
35428
+ name: "libthai-data",
35429
+ version: "0.1.28-3",
35430
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libt/libthai/libthai-data_0.1.28-3_all.deb",
35431
+ sha256: "4789eb1d23fc72f9b1cb18649f5dede84442bce2ceb829b0f371aa248ba51405",
35432
+ size: 134404
35433
+ },
35434
+ {
35435
+ name: "libthai0",
35436
+ version: "0.1.28-3",
35437
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libt/libthai/libthai0_0.1.28-3_arm64.deb",
35438
+ sha256: "44844a07dca38de9b115055627aae8102d1eee741ef2cd6d55c181e7f45e4df2",
35439
+ size: 16808
35440
+ },
35441
+ {
35442
+ name: "libudev1",
35443
+ version: "245.4-4ubuntu3.24",
35444
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/s/systemd/libudev1_245.4-4ubuntu3.24_arm64.deb",
35445
+ sha256: "64e5cb9b70622038d57d2aa898cc4903e127f050e62f84abecf6c6f7b65e86b8",
35446
+ size: 68848
35447
+ },
35448
+ {
35449
+ name: "libunistring2",
35450
+ version: "0.9.10-2",
35451
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libu/libunistring/libunistring2_0.9.10-2_arm64.deb",
35452
+ sha256: "22323af293a1d3377ba77b717c683a267c37d3da095798edf098aaa23e5a5439",
35453
+ size: 357648
35454
+ },
35455
+ {
35456
+ name: "libuuid1",
35457
+ version: "2.34-0.1ubuntu9.6",
35458
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/u/util-linux/libuuid1_2.34-0.1ubuntu9.6_arm64.deb",
35459
+ sha256: "4ba69927ad94f1f5b0ff4c0cc28f7fdefca0418b97565acd84d0219567298b5b",
35460
+ size: 19400
35461
+ },
35462
+ {
35463
+ name: "libwayland-server0",
35464
+ version: "1.18.0-1ubuntu0.1",
35465
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/w/wayland/libwayland-server0_1.18.0-1ubuntu0.1_arm64.deb",
35466
+ sha256: "39c9aeeed7854f491bf10865967602122c8878f271af9e9327fd3c24931d5cd6",
35467
+ size: 30284
35468
+ },
35469
+ {
35470
+ name: "libx11-6",
35471
+ version: "2:1.6.9-2ubuntu1.6",
35472
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libx11/libx11-6_1.6.9-2ubuntu1.6_arm64.deb",
35473
+ sha256: "68cbdb8a44dac09acaf52505b75cbdcaf43aeeee544dd9982e4754adf865daa4",
35474
+ size: 553708
35475
+ },
35476
+ {
35477
+ name: "libx11-data",
35478
+ version: "2:1.6.9-2ubuntu1.6",
35479
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libx11/libx11-data_1.6.9-2ubuntu1.6_all.deb",
35480
+ sha256: "45c1fac19a8b7cc08162d1c8f63e04251bb2d0c4ff5cb3969227bd6fe8c5293b",
35481
+ size: 113552
35482
+ },
35483
+ {
35484
+ name: "libxau6",
35485
+ version: "1:1.0.9-0ubuntu1",
35486
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxau/libxau6_1.0.9-0ubuntu1_arm64.deb",
35487
+ sha256: "0f19eb67992cf9a755a781502529750841d93fb8729691df02b9b16aec845b40",
35488
+ size: 7356
35489
+ },
35490
+ {
35491
+ name: "libxcb-render0",
35492
+ version: "1.14-2",
35493
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxcb/libxcb-render0_1.14-2_arm64.deb",
35494
+ sha256: "4a82f349fc869c8f803c73fdd7e94a6ee1c06d6fb3f6ceab1227efee64828957",
35495
+ size: 14656
35496
+ },
35497
+ {
35498
+ name: "libxcb-shm0",
35499
+ version: "1.14-2",
35500
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxcb/libxcb-shm0_1.14-2_arm64.deb",
35501
+ sha256: "e0eb8cad040933946459ff6d2116953a68ce149e9d695c28552a1d0beaa9a07b",
35502
+ size: 5560
35503
+ },
35504
+ {
35505
+ name: "libxcb1",
35506
+ version: "1.14-2",
35507
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxcb/libxcb1_1.14-2_arm64.deb",
35508
+ sha256: "88e171a33249719366a4e29330775e2ac777226f1f379557daf0777083a1fc93",
35509
+ size: 42988
35510
+ },
35511
+ {
35512
+ name: "libxcomposite1",
35513
+ version: "1:0.4.5-1",
35514
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxcomposite/libxcomposite1_0.4.5-1_arm64.deb",
35515
+ sha256: "61407cb59f0fe5e0f04ea3718a14f9da13a97c0b4675746289e9bd45ec9cc5b8",
35516
+ size: 6864
35517
+ },
35518
+ {
35519
+ name: "libxdamage1",
35520
+ version: "1:1.1.5-2",
35521
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxdamage/libxdamage1_1.1.5-2_arm64.deb",
35522
+ sha256: "fabd968fe71f4c5ce1af2aa2ee0ef98e15fe64c17d206a6ceba29d0dc52f124e",
35523
+ size: 6820
35524
+ },
35525
+ {
35526
+ name: "libxdmcp6",
35527
+ version: "1:1.1.3-0ubuntu1",
35528
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxdmcp/libxdmcp6_1.1.3-0ubuntu1_arm64.deb",
35529
+ sha256: "065c2e430e0de48007107aabb9b6ee25bb360eecca312c426827e158fa10974d",
35530
+ size: 10272
35531
+ },
35532
+ {
35533
+ name: "libxext6",
35534
+ version: "2:1.3.4-0ubuntu1",
35535
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxext/libxext6_1.3.4-0ubuntu1_arm64.deb",
35536
+ sha256: "4f153b62b8c5f77a8b043d7b6746ed43deedf0c2dee5d3911600df89b1a7c3db",
35537
+ size: 27656
35538
+ },
35539
+ {
35540
+ name: "libxfixes3",
35541
+ version: "1:5.0.3-2",
35542
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxfixes/libxfixes3_5.0.3-2_arm64.deb",
35543
+ sha256: "3cea7f92d5ff7b0b2a29264c74181edf525b278b0be8d82a5ffe73cf20b1aa1e",
35544
+ size: 10764
35545
+ },
35546
+ {
35547
+ name: "libxkbcommon0",
35548
+ version: "0.10.0-1",
35549
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxkbcommon/libxkbcommon0_0.10.0-1_arm64.deb",
35550
+ sha256: "3f2620fa08f83a1d139dde4012c49519a96abd58f07a92945e0f16154096bb2a",
35551
+ size: 93008
35552
+ },
35553
+ {
35554
+ name: "libxrandr2",
35555
+ version: "2:1.5.2-0ubuntu1",
35556
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxrandr/libxrandr2_1.5.2-0ubuntu1_arm64.deb",
35557
+ sha256: "32d7f174ee845be1c7c4198113b401520f5bd77e4cf09b534c53eca0e496dc21",
35558
+ size: 17696
35559
+ },
35560
+ {
35561
+ name: "libxrender1",
35562
+ version: "1:0.9.10-1",
35563
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb",
35564
+ sha256: "931f3d61ec6528221a0a2dc6f9fdac494e24d7e92e49ce1811c495571f3b2cea",
35565
+ size: 16088
35566
+ },
35567
+ {
35568
+ name: "zlib1g",
35569
+ version: "1:1.2.11.dfsg-2ubuntu1.5",
35570
+ url: "https://ports.ubuntu.com/ubuntu-ports/pool/main/z/zlib/zlib1g_1.2.11.dfsg-2ubuntu1.5_arm64.deb",
35571
+ sha256: "2c5f4ba1539a6126f0f04a07bcf2dd920c9505eb4afc7aefcec6f27d0a397578",
35572
+ size: 51564
35573
+ }
35574
+ ]
35575
+ }
35576
+ };
35577
+ }
35578
+ });
35579
+
35580
+ // cli/drivers/linux-browser-libs.ts
35581
+ function isLockPackage(value) {
35582
+ return isRecord(value) && typeof value.name === "string" && typeof value.version === "string" && typeof value.url === "string" && typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256) && typeof value.size === "number";
35583
+ }
35584
+ function parseLinuxBrowserLibsLock(value) {
35585
+ if (!isRecord(value) || typeof value.id !== "string" || !/^[a-f0-9]{16}$/.test(value.id) || typeof value.suite !== "string" || !isRecord(value.arches)) {
35586
+ throw new Error("invalid linux browser library lock");
35587
+ }
35588
+ const { x64, arm64 } = value.arches;
35589
+ if (!Array.isArray(x64) || !x64.every(isLockPackage) || !Array.isArray(arm64) || !arm64.every(isLockPackage)) {
35590
+ throw new Error("invalid linux browser library lock packages");
35591
+ }
35592
+ return { id: value.id, suite: value.suite, arches: { x64, arm64 } };
35593
+ }
35594
+ function linuxBrowserLibsKey(id, arch) {
35595
+ return `linux-libs/${id}/${arch}.tar.gz`;
35596
+ }
35597
+ function missingLibraries(executablePath, libraryPath) {
35598
+ const ldd = (0, import_node_child_process6.spawnSync)("ldd", [executablePath], {
35599
+ encoding: "utf8",
35600
+ timeout: 3e4,
35601
+ env: libraryPath ? {
35602
+ ...process.env,
35603
+ LD_LIBRARY_PATH: [libraryPath, process.env.LD_LIBRARY_PATH].filter(Boolean).join(":")
35604
+ } : process.env
35605
+ });
35606
+ return [...(ldd.stdout ?? "").matchAll(/^\s*(\S+) => not found$/gm)].map(
35607
+ (match) => match[1]
35608
+ );
35609
+ }
35610
+ async function ensureLinuxBrowserLibraries(executablePath, browser) {
35611
+ if (process.platform !== "linux") return { ok: true, libraryPath: null };
35612
+ const missing = missingLibraries(executablePath, null);
35613
+ if (!missing.length) return { ok: true, libraryPath: null };
35614
+ const arch = LINUX_BROWSER_LIBS_ARCHES.find((candidate) => candidate === process.arch);
35615
+ if (!arch) {
35616
+ return {
35617
+ ok: false,
35618
+ message: `${browser} at ${executablePath} cannot start: this system is missing shared libraries it links (${missing.join(", ")}), and peach has no library bundle for ${process.arch}.`
35619
+ };
35620
+ }
35621
+ const lock = parseLinuxBrowserLibsLock(linux_browser_libs_lock_default);
35622
+ const dir = (0, import_node_path26.join)(rnxHomeDir(), "linux-libs", `${lock.id}-${arch}`);
35623
+ if (!(0, import_node_fs25.existsSync)((0, import_node_path26.join)(dir, LINUX_BROWSER_LIBS_MARKER))) {
35624
+ const url = `${DEFAULT_CLI_RELEASE_ORIGIN}/${linuxBrowserLibsKey(lock.id, arch)}`;
35625
+ process.stderr.write(
35626
+ `peach: this system lacks ${missing.length} shared libraries ${browser} links; downloading them\u2026
35627
+ `
35628
+ );
35629
+ try {
35630
+ const sidecar = await fetch(`${url}.sha256`);
35631
+ if (!sidecar.ok)
35632
+ throw new Error(`${url}.sha256: ${sidecar.status} ${sidecar.statusText}`);
35633
+ await installVerifiedTarball({
35634
+ url,
35635
+ digest: {
35636
+ algorithm: "sha256",
35637
+ encoding: "hex",
35638
+ value: (await sidecar.text()).trim()
35639
+ },
35640
+ destDir: dir,
35641
+ installedMarker: LINUX_BROWSER_LIBS_MARKER,
35642
+ label: `linux browser libraries ${lock.id} (${arch})`
35643
+ });
35644
+ } catch (error) {
35645
+ return {
35646
+ ok: false,
35647
+ message: `${browser} at ${executablePath} cannot start: this system is missing shared libraries it links (${missing.join(", ")}), and downloading them failed: ${error instanceof Error ? error.message : String(error)}`
35648
+ };
35649
+ }
35650
+ }
35651
+ const libraryPath = [(0, import_node_path26.join)(dir, "lib"), (0, import_node_path26.join)(dir, "lib", "nss")].join(":");
35652
+ const stillMissing = missingLibraries(executablePath, libraryPath);
35653
+ if (stillMissing.length) {
35654
+ return {
35655
+ ok: false,
35656
+ message: `${browser} at ${executablePath} cannot start: neither this system nor peach's library bundle (${dir}) provides ${stillMissing.join(", ")}.`
35657
+ };
35658
+ }
35659
+ return { ok: true, libraryPath };
35660
+ }
35661
+ var import_node_child_process6, import_node_fs25, import_node_path26, LINUX_BROWSER_LIBS_ARCHES, LINUX_BROWSER_LIBS_MARKER;
35662
+ var init_linux_browser_libs = __esm({
35663
+ "cli/drivers/linux-browser-libs.ts"() {
35664
+ "use strict";
35665
+ import_node_child_process6 = require("node:child_process");
35666
+ import_node_fs25 = require("node:fs");
35667
+ import_node_path26 = require("node:path");
35668
+ init_src();
35669
+ init_home_paths();
35670
+ init_is_record();
35671
+ init_cli_update();
35672
+ init_linux_browser_libs_lock();
35673
+ LINUX_BROWSER_LIBS_ARCHES = ["x64", "arm64"];
35674
+ LINUX_BROWSER_LIBS_MARKER = "peach-linux-libs.json";
35675
+ }
35676
+ });
35677
+
34435
35678
  // cli/drivers/playwright-provisioning.ts
34436
35679
  function resolvePlaywright() {
34437
35680
  const roots = [`${process.cwd()}/`];
@@ -34445,13 +35688,13 @@ function resolvePlaywright() {
34445
35688
  try {
34446
35689
  const modulePath = requireFromRoot.resolve(spec);
34447
35690
  const packageJsonPath = requireFromRoot.resolve(`${spec}/package.json`);
34448
- const parsed = JSON.parse((0, import_node_fs25.readFileSync)(packageJsonPath, "utf8"));
35691
+ const parsed = JSON.parse((0, import_node_fs26.readFileSync)(packageJsonPath, "utf8"));
34449
35692
  if (!isRecord(parsed) || typeof parsed.version !== "string") continue;
34450
35693
  const corePackagePath = (0, import_node_module5.createRequire)(modulePath).resolve(
34451
35694
  "playwright-core/package.json"
34452
35695
  );
34453
- const cliPath = (0, import_node_path26.join)((0, import_node_path26.dirname)(corePackagePath), "cli.js");
34454
- if (!(0, import_node_fs25.existsSync)(cliPath)) continue;
35696
+ const cliPath = (0, import_node_path27.join)((0, import_node_path27.dirname)(corePackagePath), "cli.js");
35697
+ if (!(0, import_node_fs26.existsSync)(cliPath)) continue;
34455
35698
  return {
34456
35699
  spec,
34457
35700
  modulePath,
@@ -34479,7 +35722,7 @@ async function provisionPlaywright() {
34479
35722
  await installVerifiedTarball({
34480
35723
  url: `https://registry.npmjs.org/playwright-core/-/playwright-core-${version}.tgz`,
34481
35724
  digest: { algorithm, encoding: "base64", value: digest },
34482
- destDir: (0, import_node_path26.join)(playwrightCoreDir(version), "node_modules", "playwright-core"),
35725
+ destDir: (0, import_node_path27.join)(playwrightCoreDir(version), "node_modules", "playwright-core"),
34483
35726
  installedMarker: "package.json",
34484
35727
  // npm tarballs hold the package under a leading `package/`
34485
35728
  stripComponents: 1,
@@ -34495,7 +35738,7 @@ async function provisionPlaywright() {
34495
35738
  }
34496
35739
  function probeBrowser(resolved, env) {
34497
35740
  const self = rnxSelfInvocation();
34498
- const probe3 = (0, import_node_child_process6.spawnSync)(
35741
+ const probe3 = (0, import_node_child_process7.spawnSync)(
34499
35742
  self.executable,
34500
35743
  [...self.prefixArgs, RNX_INTERNAL_COMMAND, RNX_INTERNAL_CHILDREN.playwrightProbe],
34501
35744
  {
@@ -34522,7 +35765,7 @@ function probeBrowser(resolved, env) {
34522
35765
  return {
34523
35766
  ok: true,
34524
35767
  executablePath: parsed.executablePath,
34525
- exists: parsed.exists && (0, import_node_fs25.existsSync)(parsed.executablePath)
35768
+ exists: parsed.exists && (0, import_node_fs26.existsSync)(parsed.executablePath)
34526
35769
  };
34527
35770
  } catch (error) {
34528
35771
  return {
@@ -34531,19 +35774,24 @@ function probeBrowser(resolved, env) {
34531
35774
  };
34532
35775
  }
34533
35776
  }
34534
- function ensurePlaywrightBrowser(resolved, headless, env = process.env) {
35777
+ async function ensurePlaywrightBrowser(resolved, headless, env = process.env) {
34535
35778
  const headlessShell = headless && process.platform !== "darwin";
34536
35779
  const probeEnv = { ...env, SOOTSIM_PW_HEADLESS_SHELL: headlessShell ? "1" : "0" };
34537
35780
  const browser = headlessShell ? "chromium-headless-shell" : "chromium";
34538
35781
  const before = probeBrowser(resolved, probeEnv);
34539
35782
  if (!before.ok) return before;
34540
35783
  if (before.exists) {
34541
- const missing2 = missingLibrariesMessage(before.executablePath, browser);
34542
- if (missing2) return { ok: false, message: missing2 };
34543
- return { ok: true, executablePath: before.executablePath, installed: false };
35784
+ const libraries2 = await ensureLinuxBrowserLibraries(before.executablePath, browser);
35785
+ if (!libraries2.ok) return libraries2;
35786
+ return {
35787
+ ok: true,
35788
+ executablePath: before.executablePath,
35789
+ installed: false,
35790
+ libraryPath: libraries2.libraryPath
35791
+ };
34544
35792
  }
34545
35793
  const installer = rnxSelfInvocation();
34546
- const install = (0, import_node_child_process6.spawnSync)(
35794
+ const install = (0, import_node_child_process7.spawnSync)(
34547
35795
  installer.executable,
34548
35796
  [
34549
35797
  ...installer.prefixArgs,
@@ -34576,94 +35824,30 @@ ${detail}` : ""}`
34576
35824
  message: `${resolved.spec}@${resolved.version} browser install completed, but its required ${browser} executable is still missing at ${after.executablePath}`
34577
35825
  };
34578
35826
  }
34579
- const missing = missingLibrariesMessage(after.executablePath, browser);
34580
- if (missing) return { ok: false, message: missing };
34581
- return { ok: true, executablePath: after.executablePath, installed: true };
34582
- }
34583
- function isTime64Distro() {
34584
- if (!(0, import_node_fs25.existsSync)("/etc/os-release")) return false;
34585
- const fields = Object.fromEntries(
34586
- (0, import_node_fs25.readFileSync)("/etc/os-release", "utf8").split("\n").map((line) => line.match(/^(\w+)="?([^"]*)"?$/)).filter((match) => match !== null).map((match) => [match[1], match[2]])
34587
- );
34588
- const version = Number.parseFloat(fields.VERSION_ID ?? "");
34589
- return fields.ID === "ubuntu" && version >= 24.04 || fields.ID === "debian" && version >= 13;
35827
+ const libraries = await ensureLinuxBrowserLibraries(after.executablePath, browser);
35828
+ if (!libraries.ok) return libraries;
35829
+ return {
35830
+ ok: true,
35831
+ executablePath: after.executablePath,
35832
+ installed: true,
35833
+ libraryPath: libraries.libraryPath
35834
+ };
34590
35835
  }
34591
- function missingLibrariesMessage(executablePath, browser) {
34592
- if (process.platform !== "linux") return null;
34593
- const ldd = (0, import_node_child_process6.spawnSync)("ldd", [executablePath], { encoding: "utf8", timeout: 3e4 });
34594
- const libraries = [...(ldd.stdout ?? "").matchAll(/^\s*(\S+) => not found$/gm)].map(
34595
- (match) => match[1]
34596
- );
34597
- if (!libraries.length) return null;
34598
- const time64 = isTime64Distro();
34599
- const packages = /* @__PURE__ */ new Set();
34600
- const unknown = [];
34601
- for (const library of libraries) {
34602
- const name2 = LIBRARY_PACKAGES[library];
34603
- if (!name2) unknown.push(library);
34604
- else packages.add(time64 && TIME64_PACKAGES.has(name2) ? `${name2}t64` : name2);
34605
- }
34606
- const sudo = process.getuid?.() === 0 ? "" : "sudo ";
34607
- return [
34608
- `${browser} at ${executablePath} cannot start: this system is missing shared libraries it links (${libraries.join(", ")}).`,
34609
- ...packages.size ? [
34610
- "On Debian or Ubuntu, install them and run the command again:",
34611
- "",
34612
- ` ${sudo}apt-get update && ${sudo}apt-get install -y --no-install-recommends ${[...packages].join(" ")}`
34613
- ] : [],
34614
- ...unknown.length ? ["", `No known Debian package provides: ${unknown.join(", ")}`] : []
34615
- ].join("\n");
34616
- }
34617
- var import_node_child_process6, import_node_fs25, import_node_module5, import_node_path26, LIBRARY_PACKAGES, TIME64_PACKAGES;
35836
+ var import_node_child_process7, import_node_fs26, import_node_module5, import_node_path27;
34618
35837
  var init_playwright_provisioning = __esm({
34619
35838
  "cli/drivers/playwright-provisioning.ts"() {
34620
35839
  "use strict";
34621
- import_node_child_process6 = require("node:child_process");
34622
- import_node_fs25 = require("node:fs");
35840
+ import_node_child_process7 = require("node:child_process");
35841
+ import_node_fs26 = require("node:fs");
34623
35842
  import_node_module5 = require("node:module");
34624
- import_node_path26 = require("node:path");
35843
+ import_node_path27 = require("node:path");
34625
35844
  init_src();
34626
35845
  init_home_paths();
34627
35846
  init_is_record();
34628
35847
  init_internal_child();
34629
35848
  init_self_invocation();
35849
+ init_linux_browser_libs();
34630
35850
  init_playwright_core_pin();
34631
- LIBRARY_PACKAGES = {
34632
- "libasound.so.2": "libasound2",
34633
- "libatk-1.0.so.0": "libatk1.0-0",
34634
- "libatk-bridge-2.0.so.0": "libatk-bridge2.0-0",
34635
- "libatspi.so.0": "libatspi2.0-0",
34636
- "libcairo.so.2": "libcairo2",
34637
- "libcups.so.2": "libcups2",
34638
- "libdbus-1.so.3": "libdbus-1-3",
34639
- "libexpat.so.1": "libexpat1",
34640
- "libgbm.so.1": "libgbm1",
34641
- "libgio-2.0.so.0": "libglib2.0-0",
34642
- "libglib-2.0.so.0": "libglib2.0-0",
34643
- "libgobject-2.0.so.0": "libglib2.0-0",
34644
- "libnspr4.so": "libnspr4",
34645
- "libnss3.so": "libnss3",
34646
- "libnssutil3.so": "libnss3",
34647
- "libpango-1.0.so.0": "libpango-1.0-0",
34648
- "libsmime3.so": "libnss3",
34649
- "libudev.so.1": "libudev1",
34650
- "libX11.so.6": "libx11-6",
34651
- "libxcb.so.1": "libxcb1",
34652
- "libXcomposite.so.1": "libxcomposite1",
34653
- "libXdamage.so.1": "libxdamage1",
34654
- "libXext.so.6": "libxext6",
34655
- "libXfixes.so.3": "libxfixes3",
34656
- "libxkbcommon.so.0": "libxkbcommon0",
34657
- "libXrandr.so.2": "libxrandr2"
34658
- };
34659
- TIME64_PACKAGES = /* @__PURE__ */ new Set([
34660
- "libasound2",
34661
- "libatk1.0-0",
34662
- "libatk-bridge2.0-0",
34663
- "libatspi2.0-0",
34664
- "libcups2",
34665
- "libglib2.0-0"
34666
- ]);
34667
35851
  }
34668
35852
  });
34669
35853
 
@@ -34715,7 +35899,7 @@ async function launch2(opts) {
34715
35899
  };
34716
35900
  }
34717
35901
  const playwrightEnv = { ...process.env };
34718
- const provisioning = ensurePlaywrightBrowser(
35902
+ const provisioning = await ensurePlaywrightBrowser(
34719
35903
  resolved,
34720
35904
  opts.headless ?? true,
34721
35905
  playwrightEnv
@@ -34752,7 +35936,8 @@ async function launch2(opts) {
34752
35936
  ...opts.viewport ? { SOOTSIM_PW_VIEWPORT: `${opts.viewport.width}x${opts.viewport.height}` } : {},
34753
35937
  SOOTSIM_PW_CONNECTED_ACK_FILE: connectAckFile,
34754
35938
  SOOTSIM_PW_CONNECT_TIMEOUT_MS: String(opts.connectTimeoutMs ?? 12e4),
34755
- SOOTSIM_PW_OWNER_PID: String(ownerPid)
35939
+ SOOTSIM_PW_OWNER_PID: String(ownerPid),
35940
+ SOOTSIM_PW_LIBRARY_PATH: provisioning.libraryPath ?? ""
34756
35941
  }
34757
35942
  }
34758
35943
  );
@@ -34844,32 +36029,6 @@ var init_open_url2 = __esm({
34844
36029
  }
34845
36030
  });
34846
36031
 
34847
- // cli/commands/inspect/env.ts
34848
- function isAgentEnv(env = process.env) {
34849
- if (env.PEACH_AGENT === "0") return false;
34850
- for (const name2 of AGENT_ENV_VARS) {
34851
- const v = env[name2];
34852
- if (v && v.trim() && v !== "0") return true;
34853
- }
34854
- return false;
34855
- }
34856
- var AGENT_ENV_VARS;
34857
- var init_env = __esm({
34858
- "cli/commands/inspect/env.ts"() {
34859
- "use strict";
34860
- AGENT_ENV_VARS = [
34861
- "PEACH_AGENT",
34862
- "PEACH_CLI_IDENTITY",
34863
- "CLAUDECODE",
34864
- "CLAUDE_CODE_ENTRYPOINT",
34865
- "CLAUDE_CODE_SESSION_ID",
34866
- "CODEX_THREAD_ID",
34867
- "CURSOR_TRACE_ID",
34868
- "AIDER_MODEL"
34869
- ];
34870
- }
34871
- });
34872
-
34873
36032
  // cli/privacy.ts
34874
36033
  function doNotTrack() {
34875
36034
  const value = process.env.DO_NOT_TRACK;
@@ -35588,14 +36747,14 @@ function assertExplicitBridgeLock(preferredPort, explicitPort, lock) {
35588
36747
  async function ensureRuntimeForOpen() {
35589
36748
  if (resolveDevCheckoutRuntimeRoot()) return;
35590
36749
  const active = readActiveRuntime();
35591
- if (active && import_node_fs26.default.existsSync(runtimeDir(active))) return;
36750
+ if (active && import_node_fs27.default.existsSync(runtimeDir(active))) return;
35592
36751
  console.error(" installing peach engine runtime...");
35593
36752
  const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
35594
36753
  await runRuntime2(["install"], {});
35595
36754
  }
35596
36755
  function spawnSootsim(args) {
35597
36756
  const { executable, prefixArgs } = rnxSelfInvocation();
35598
- return (0, import_node_child_process7.spawn)(executable, [...prefixArgs, ...args], {
36757
+ return (0, import_node_child_process8.spawn)(executable, [...prefixArgs, ...args], {
35599
36758
  detached: true,
35600
36759
  stdio: "ignore",
35601
36760
  env: process.env
@@ -35742,10 +36901,10 @@ async function buildResolvedBundleOpenUrl(target, baseUrl, opts = {}) {
35742
36901
  }
35743
36902
  function normalizeReplacementPath(filePath) {
35744
36903
  if (filePath.startsWith("~/")) {
35745
- return import_node_path27.default.join(import_node_os4.default.homedir(), filePath.slice(2));
36904
+ return import_node_path28.default.join(import_node_os4.default.homedir(), filePath.slice(2));
35746
36905
  }
35747
- if (import_node_path27.default.isAbsolute(filePath)) return filePath;
35748
- return import_node_path27.default.resolve(process.cwd(), filePath);
36906
+ if (import_node_path28.default.isAbsolute(filePath)) return filePath;
36907
+ return import_node_path28.default.resolve(process.cwd(), filePath);
35749
36908
  }
35750
36909
  function parseOpenRuntimeConfig(args) {
35751
36910
  const modules = {};
@@ -35764,7 +36923,7 @@ function parseOpenRuntimeConfig(args) {
35764
36923
  }
35765
36924
  const moduleName = raw.slice(0, eqIndex).trim();
35766
36925
  const filePath = normalizeReplacementPath(raw.slice(eqIndex + 1).trim());
35767
- if (!import_node_fs26.default.existsSync(filePath)) {
36926
+ if (!import_node_fs27.default.existsSync(filePath)) {
35768
36927
  console.error(` peach open: replacement file not found: ${filePath}`);
35769
36928
  rnxExit(1);
35770
36929
  }
@@ -35795,7 +36954,7 @@ async function resolveAppProjectForBundleUrl(bundleUrl) {
35795
36954
  return advertisedRoot ? resolveAppProject(advertisedRoot) : null;
35796
36955
  }
35797
36956
  async function ensureConfiguredRuntime(version) {
35798
- if (import_node_fs26.default.existsSync(import_node_path27.default.join(runtimeDir(version), "index.html"))) return;
36957
+ if (import_node_fs27.default.existsSync(import_node_path28.default.join(runtimeDir(version), "index.html"))) return;
35799
36958
  console.error(` installing configured engine runtime ${version}...`);
35800
36959
  const result = await rnxRuntime.install({
35801
36960
  version,
@@ -36112,7 +37271,7 @@ function playwrightHostPidForSim(sim) {
36112
37271
  function signalDriverLaunchConnected(result) {
36113
37272
  if (!result.connectAckFile) return false;
36114
37273
  try {
36115
- import_node_fs26.default.writeFileSync(
37274
+ import_node_fs27.default.writeFileSync(
36116
37275
  result.connectAckFile,
36117
37276
  `${JSON.stringify({ connectedAt: Date.now(), pid: result.pid ?? null })}
36118
37277
  `,
@@ -36126,19 +37285,19 @@ function signalDriverLaunchConnected(result) {
36126
37285
  function printDriverDiagnosticLogTail(result) {
36127
37286
  if (!result.diagnosticLogPath) return;
36128
37287
  try {
36129
- const detail = import_node_fs26.default.readFileSync(result.diagnosticLogPath, "utf8").trim();
37288
+ const detail = import_node_fs27.default.readFileSync(result.diagnosticLogPath, "utf8").trim();
36130
37289
  if (!detail) {
36131
- console.error(` ${import_node_path27.default.basename(result.diagnosticLogPath)} was empty`);
37290
+ console.error(` ${import_node_path28.default.basename(result.diagnosticLogPath)} was empty`);
36132
37291
  return;
36133
37292
  }
36134
37293
  const shown = detail.length > 4e3 ? `\u2026
36135
37294
  ${detail.slice(-4e3)}` : detail;
36136
- console.error(` ${import_node_path27.default.basename(result.diagnosticLogPath)}:`);
37295
+ console.error(` ${import_node_path28.default.basename(result.diagnosticLogPath)}:`);
36137
37296
  console.error(shown);
36138
37297
  } catch (err) {
36139
37298
  const message = err instanceof Error ? err.message : String(err);
36140
37299
  console.error(
36141
- ` failed to read ${import_node_path27.default.basename(result.diagnosticLogPath)}: ${message}`
37300
+ ` failed to read ${import_node_path28.default.basename(result.diagnosticLogPath)}: ${message}`
36142
37301
  );
36143
37302
  }
36144
37303
  }
@@ -36159,11 +37318,11 @@ async function waitForProcessExit(pid, timeoutMs = 2500) {
36159
37318
  return !isProcessAlive2(pid);
36160
37319
  }
36161
37320
  function isPlaywrightHostProcess(pid) {
36162
- const plain = (0, import_node_child_process7.spawnSync)("ps", ["-o", "command=", "-p", String(pid)], {
37321
+ const plain = (0, import_node_child_process8.spawnSync)("ps", ["-o", "command=", "-p", String(pid)], {
36163
37322
  encoding: "utf8",
36164
37323
  stdio: ["ignore", "pipe", "pipe"]
36165
37324
  });
36166
- const withEnv = (0, import_node_child_process7.spawnSync)("ps", ["eww", "-o", "command=", "-p", String(pid)], {
37325
+ const withEnv = (0, import_node_child_process8.spawnSync)("ps", ["eww", "-o", "command=", "-p", String(pid)], {
36167
37326
  encoding: "utf8",
36168
37327
  stdio: ["ignore", "pipe", "pipe"]
36169
37328
  });
@@ -36840,7 +37999,7 @@ async function runUseLikeCommand(args, opts = {}) {
36840
37999
  try {
36841
38000
  const sims = await bridge.listSims();
36842
38001
  const target = resolveTargetSim(sims, parsed.positional[0] || parsed.simId);
36843
- if (target.lockedBy && target.lockExpiresAt && target.lockExpiresAt > Date.now()) {
38002
+ if (target.lockedBy && !target.lockedByMe && target.lockExpiresAt && target.lockExpiresAt > Date.now()) {
36844
38003
  const secs = Math.max(0, Math.round((target.lockExpiresAt - Date.now()) / 1e3));
36845
38004
  if (target.lockedByKind === "user-active") {
36846
38005
  console.error(
@@ -36851,7 +38010,7 @@ async function runUseLikeCommand(args, opts = {}) {
36851
38010
  }
36852
38011
  if (!force) {
36853
38012
  console.error(
36854
- ` refused: ${target.id} is leased by ${target.lockedBy} (${secs}s)`
38013
+ ` refused: ${target.id} is leased by ${formatLockOwner(target.lockedBy)} (${secs}s)`
36855
38014
  );
36856
38015
  console.error(
36857
38016
  ` \`peach use ${target.id} --force\` to take it, or \`peach open --new\` for a fresh sim`
@@ -36891,7 +38050,7 @@ async function runClaimCommand(args, opts = {}) {
36891
38050
  try {
36892
38051
  const sims = await bridge.listSims();
36893
38052
  const target = resolveTargetSim(sims, parsed.positional[0] || parsed.simId);
36894
- const priorHolder = force && target.lockedBy && target.lockedByKind !== "user-active" ? target.lockedBy : null;
38053
+ const priorHolder = force && target.lockedBy && !target.lockedByMe && target.lockedByKind !== "user-active" ? target.lockedBy : null;
36895
38054
  const result = await bridge.claim(target.id, { force });
36896
38055
  saveCurrentSimId(target.id);
36897
38056
  const ttl = Math.max(0, Math.round((result.lockExpiresAt - Date.now()) / 1e3));
@@ -37117,14 +38276,14 @@ async function runCloseCommand(args, opts = {}) {
37117
38276
  bridge.close();
37118
38277
  }
37119
38278
  }
37120
- var import_node_child_process7, import_node_fs26, import_node_os4, import_node_path27, import_app_catalog_wire, import_devices2, import_ws4, DEFAULT_DRIVER_CONNECT_TIMEOUT_MS, DRIVER_CONNECT_INTERVAL_MS, DRIVER_CONNECT_HOST_GRACE_MS, OPEN_BRIDGE_SPAWN_TIMEOUT_MS, SHELL_APPS, DEV_BUNDLE_RESOLVE_ATTEMPTS, DEV_BUNDLE_RESOLVE_INTERVAL_MS;
38279
+ var import_node_child_process8, import_node_fs27, import_node_os4, import_node_path28, import_app_catalog_wire, import_devices2, import_ws4, DEFAULT_DRIVER_CONNECT_TIMEOUT_MS, DRIVER_CONNECT_INTERVAL_MS, DRIVER_CONNECT_HOST_GRACE_MS, OPEN_BRIDGE_SPAWN_TIMEOUT_MS, SHELL_APPS, DEV_BUNDLE_RESOLVE_ATTEMPTS, DEV_BUNDLE_RESOLVE_INTERVAL_MS;
37121
38280
  var init_control = __esm({
37122
38281
  "cli/commands/control.ts"() {
37123
38282
  "use strict";
37124
- import_node_child_process7 = require("node:child_process");
37125
- import_node_fs26 = __toESM(require("node:fs"), 1);
38283
+ import_node_child_process8 = require("node:child_process");
38284
+ import_node_fs27 = __toESM(require("node:fs"), 1);
37126
38285
  import_node_os4 = __toESM(require("node:os"), 1);
37127
- import_node_path27 = __toESM(require("node:path"), 1);
38286
+ import_node_path28 = __toESM(require("node:path"), 1);
37128
38287
  import_app_catalog_wire = require("peach-engine/engine/app-catalog-wire");
37129
38288
  import_devices2 = require("peach-engine/settings/devices");
37130
38289
  import_ws4 = require("ws");