@volter/browser-wali 0.1.165 → 0.1.167

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 (219) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +9 -0
  3. package/dist/browser-wali-command.d.ts +7 -0
  4. package/dist/browser-wali-command.d.ts.map +1 -1
  5. package/dist/browser-wali-command.js +70 -18
  6. package/dist/browser-wali-command.js.map +1 -1
  7. package/dist/bulk-memory.d.ts +4 -2
  8. package/dist/bulk-memory.d.ts.map +1 -1
  9. package/dist/bulk-memory.js +32 -9
  10. package/dist/bulk-memory.js.map +1 -1
  11. package/dist/capabilities.d.ts +1 -1
  12. package/dist/capabilities.d.ts.map +1 -1
  13. package/dist/capabilities.js +5 -2
  14. package/dist/capabilities.js.map +1 -1
  15. package/dist/child-processes.d.ts +2 -0
  16. package/dist/child-processes.d.ts.map +1 -1
  17. package/dist/child-processes.js +9 -1
  18. package/dist/child-processes.js.map +1 -1
  19. package/dist/clocks.d.ts +3 -0
  20. package/dist/clocks.d.ts.map +1 -0
  21. package/dist/clocks.js +44 -0
  22. package/dist/clocks.js.map +1 -0
  23. package/dist/coherent-file-locks.d.ts.map +1 -1
  24. package/dist/coherent-file-locks.js +2 -1
  25. package/dist/coherent-file-locks.js.map +1 -1
  26. package/dist/credentials.d.ts +4 -0
  27. package/dist/credentials.d.ts.map +1 -0
  28. package/dist/credentials.js +46 -0
  29. package/dist/credentials.js.map +1 -0
  30. package/dist/descriptors.d.ts +14 -0
  31. package/dist/descriptors.d.ts.map +1 -1
  32. package/dist/descriptors.js +45 -5
  33. package/dist/descriptors.js.map +1 -1
  34. package/dist/environment.d.ts +4 -0
  35. package/dist/environment.d.ts.map +1 -0
  36. package/dist/environment.js +23 -0
  37. package/dist/environment.js.map +1 -0
  38. package/dist/epoll-ready.d.ts +27 -0
  39. package/dist/epoll-ready.d.ts.map +1 -0
  40. package/dist/epoll-ready.js +88 -0
  41. package/dist/epoll-ready.js.map +1 -0
  42. package/dist/events.d.ts +1 -0
  43. package/dist/events.d.ts.map +1 -1
  44. package/dist/events.js +55 -24
  45. package/dist/events.js.map +1 -1
  46. package/dist/filesystem-host-session.d.ts +65 -0
  47. package/dist/filesystem-host-session.d.ts.map +1 -0
  48. package/dist/filesystem-host-session.js +951 -0
  49. package/dist/filesystem-host-session.js.map +1 -0
  50. package/dist/filesystem-host.d.ts +13 -81
  51. package/dist/filesystem-host.d.ts.map +1 -1
  52. package/dist/filesystem-host.js +14 -882
  53. package/dist/filesystem-host.js.map +1 -1
  54. package/dist/filesystem-protocol.d.ts +3 -1
  55. package/dist/filesystem-protocol.d.ts.map +1 -1
  56. package/dist/filesystem-remote.d.ts +8 -3
  57. package/dist/filesystem-remote.d.ts.map +1 -1
  58. package/dist/filesystem-remote.js +42 -20
  59. package/dist/filesystem-remote.js.map +1 -1
  60. package/dist/filesystem-service-client.d.ts +4 -0
  61. package/dist/filesystem-service-client.d.ts.map +1 -0
  62. package/dist/filesystem-service-client.js +16 -0
  63. package/dist/filesystem-service-client.js.map +1 -0
  64. package/dist/filesystem.d.ts +25 -4
  65. package/dist/filesystem.d.ts.map +1 -1
  66. package/dist/filesystem.js +548 -169
  67. package/dist/filesystem.js.map +1 -1
  68. package/dist/fork-memory.d.ts +23 -0
  69. package/dist/fork-memory.d.ts.map +1 -0
  70. package/dist/fork-memory.js +93 -0
  71. package/dist/fork-memory.js.map +1 -0
  72. package/dist/fork-worker.js +32 -11
  73. package/dist/fork-worker.js.map +1 -1
  74. package/dist/jumps.d.ts +7 -0
  75. package/dist/jumps.d.ts.map +1 -1
  76. package/dist/jumps.js +19 -1
  77. package/dist/jumps.js.map +1 -1
  78. package/dist/kernel-filesystem-worker.d.ts +2 -0
  79. package/dist/kernel-filesystem-worker.d.ts.map +1 -0
  80. package/dist/kernel-filesystem-worker.js +28 -0
  81. package/dist/kernel-filesystem-worker.js.map +1 -0
  82. package/dist/kernel-filesystem.d.ts +12 -0
  83. package/dist/kernel-filesystem.d.ts.map +1 -0
  84. package/dist/kernel-filesystem.js +45 -0
  85. package/dist/kernel-filesystem.js.map +1 -0
  86. package/dist/kernel-network-worker.d.ts +2 -0
  87. package/dist/kernel-network-worker.d.ts.map +1 -0
  88. package/dist/kernel-network-worker.js +14 -0
  89. package/dist/kernel-network-worker.js.map +1 -0
  90. package/dist/kernel-network.d.ts +14 -0
  91. package/dist/kernel-network.d.ts.map +1 -0
  92. package/dist/kernel-network.js +50 -0
  93. package/dist/kernel-network.js.map +1 -0
  94. package/dist/kernel-process-client.d.ts +6 -1
  95. package/dist/kernel-process-client.d.ts.map +1 -1
  96. package/dist/kernel-process-client.js +10 -1
  97. package/dist/kernel-process-client.js.map +1 -1
  98. package/dist/memory.d.ts +5 -1
  99. package/dist/memory.d.ts.map +1 -1
  100. package/dist/memory.js +7 -3
  101. package/dist/memory.js.map +1 -1
  102. package/dist/module-layout.d.ts +8 -0
  103. package/dist/module-layout.d.ts.map +1 -1
  104. package/dist/module-layout.js +263 -2
  105. package/dist/module-layout.js.map +1 -1
  106. package/dist/network-host.d.ts +6 -0
  107. package/dist/network-host.d.ts.map +1 -0
  108. package/dist/network-host.js +1582 -0
  109. package/dist/network-host.js.map +1 -0
  110. package/dist/network-protocol.d.ts +9 -2
  111. package/dist/network-protocol.d.ts.map +1 -1
  112. package/dist/network-protocol.js +3 -0
  113. package/dist/network-protocol.js.map +1 -1
  114. package/dist/network-service-client.d.ts +4 -0
  115. package/dist/network-service-client.d.ts.map +1 -0
  116. package/dist/network-service-client.js +16 -0
  117. package/dist/network-service-client.js.map +1 -0
  118. package/dist/network-worker.js +5 -1150
  119. package/dist/network-worker.js.map +1 -1
  120. package/dist/network.d.ts +13 -1
  121. package/dist/network.d.ts.map +1 -1
  122. package/dist/network.js +175 -48
  123. package/dist/network.js.map +1 -1
  124. package/dist/paths.d.ts +11 -0
  125. package/dist/paths.d.ts.map +1 -0
  126. package/dist/paths.js +97 -0
  127. package/dist/paths.js.map +1 -0
  128. package/dist/process-bridge.d.ts +12 -4
  129. package/dist/process-bridge.d.ts.map +1 -1
  130. package/dist/process-bridge.js +53 -17
  131. package/dist/process-bridge.js.map +1 -1
  132. package/dist/program.d.ts.map +1 -1
  133. package/dist/program.js +8 -0
  134. package/dist/program.js.map +1 -1
  135. package/dist/runtime.d.ts.map +1 -1
  136. package/dist/runtime.js +163 -99
  137. package/dist/runtime.js.map +1 -1
  138. package/dist/shared-buffer-pool.d.ts +18 -5
  139. package/dist/shared-buffer-pool.d.ts.map +1 -1
  140. package/dist/shared-buffer-pool.js +86 -14
  141. package/dist/shared-buffer-pool.js.map +1 -1
  142. package/dist/shared-file-layer.d.ts +3 -1
  143. package/dist/shared-file-layer.d.ts.map +1 -1
  144. package/dist/shared-file-layer.js +150 -35
  145. package/dist/shared-file-layer.js.map +1 -1
  146. package/dist/shared-pipes.d.ts +3 -1
  147. package/dist/shared-pipes.d.ts.map +1 -1
  148. package/dist/shared-pipes.js +105 -33
  149. package/dist/shared-pipes.js.map +1 -1
  150. package/dist/signal-interruption.d.ts +9 -0
  151. package/dist/signal-interruption.d.ts.map +1 -0
  152. package/dist/signal-interruption.js +6 -0
  153. package/dist/signal-interruption.js.map +1 -0
  154. package/dist/signals.d.ts +17 -6
  155. package/dist/signals.d.ts.map +1 -1
  156. package/dist/signals.js +101 -22
  157. package/dist/signals.js.map +1 -1
  158. package/dist/snapshot-filesystem.d.ts +1 -0
  159. package/dist/snapshot-filesystem.d.ts.map +1 -1
  160. package/dist/snapshot-filesystem.js +3 -0
  161. package/dist/snapshot-filesystem.js.map +1 -1
  162. package/dist/socket-flags.d.ts +3 -0
  163. package/dist/socket-flags.d.ts.map +1 -0
  164. package/dist/socket-flags.js +9 -0
  165. package/dist/socket-flags.js.map +1 -0
  166. package/dist/special-files.d.ts +6 -0
  167. package/dist/special-files.d.ts.map +1 -0
  168. package/dist/special-files.js +56 -0
  169. package/dist/special-files.js.map +1 -0
  170. package/dist/stdin.d.ts.map +1 -1
  171. package/dist/stdin.js +13 -5
  172. package/dist/stdin.js.map +1 -1
  173. package/dist/symlink.d.ts +2 -1
  174. package/dist/symlink.d.ts.map +1 -1
  175. package/dist/symlink.js +25 -93
  176. package/dist/symlink.js.map +1 -1
  177. package/dist/system.d.ts +2 -4
  178. package/dist/system.d.ts.map +1 -1
  179. package/dist/system.js +46 -29
  180. package/dist/system.js.map +1 -1
  181. package/dist/thread-coordinator-worker.js +58 -24
  182. package/dist/thread-coordinator-worker.js.map +1 -1
  183. package/dist/thread-lifecycle.d.ts +9 -0
  184. package/dist/thread-lifecycle.d.ts.map +1 -0
  185. package/dist/thread-lifecycle.js +30 -0
  186. package/dist/thread-lifecycle.js.map +1 -0
  187. package/dist/thread-worker.js +125 -44
  188. package/dist/thread-worker.js.map +1 -1
  189. package/dist/threads.d.ts +6 -0
  190. package/dist/threads.d.ts.map +1 -1
  191. package/dist/threads.js +46 -6
  192. package/dist/threads.js.map +1 -1
  193. package/dist/tty-job-control.d.ts +13 -0
  194. package/dist/tty-job-control.d.ts.map +1 -0
  195. package/dist/tty-job-control.js +56 -0
  196. package/dist/tty-job-control.js.map +1 -0
  197. package/dist/tty-settings.d.ts +3 -0
  198. package/dist/tty-settings.d.ts.map +1 -0
  199. package/dist/tty-settings.js +25 -0
  200. package/dist/tty-settings.js.map +1 -0
  201. package/dist/types.d.ts +12 -0
  202. package/dist/types.d.ts.map +1 -1
  203. package/dist/wait-state.d.ts +8 -0
  204. package/dist/wait-state.d.ts.map +1 -1
  205. package/dist/wait-state.js +15 -0
  206. package/dist/wait-state.js.map +1 -1
  207. package/dist/worker-program-protocol.d.ts +22 -2
  208. package/dist/worker-program-protocol.d.ts.map +1 -1
  209. package/dist/worker-program-worker.js +40 -10
  210. package/dist/worker-program-worker.js.map +1 -1
  211. package/dist/worker-program.d.ts +12 -2
  212. package/dist/worker-program.d.ts.map +1 -1
  213. package/dist/worker-program.js +214 -36
  214. package/dist/worker-program.js.map +1 -1
  215. package/dist/write-vector.d.ts +3 -0
  216. package/dist/write-vector.d.ts.map +1 -0
  217. package/dist/write-vector.js +35 -0
  218. package/dist/write-vector.js.map +1 -0
  219. package/package.json +1 -1
package/dist/program.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { realtimeMilliseconds } from "./monotonic-clock.js";
2
2
  import { normalizeProcessFilesystemPolicy } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
3
3
  import { BrowserByteVault } from "@volter/browser-runtime/browser-byte-vault.js";
4
+ import { setBrowserFileTimes } from "@volter/browser-runtime/browser-file-times.js";
4
5
  import { installProgramResources } from "@volter/browser-runtime/browser-program-resources.js";
5
6
  import { BrowserWaliWorkerProgram } from "./worker-program.js";
6
7
  /** Where the host puts each program's marker; the programs themselves are its parent's other children. */
@@ -82,6 +83,13 @@ class PrivateFileOverlay {
82
83
  }
83
84
  file.mtimeMs = typeof mtime === "number" ? mtime : Number(mtime);
84
85
  }
86
+ utimesMsSync(path, atimeMs, mtimeMs) {
87
+ const file = this.privateFile(path);
88
+ if (file)
89
+ file.mtimeMs = mtimeMs;
90
+ else
91
+ setBrowserFileTimes(this.shared, path, atimeMs, mtimeMs);
92
+ }
85
93
  privateFile(path) {
86
94
  return this.files.find((file) => file.path === path);
87
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gCAAgC,EAAE,MAAM,8DAA8D,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+CAA+C,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAU/F,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,0GAA0G;AAC1G,MAAM,CAAC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAEvF,6EAA6E;AAC7E,uEAAuE;AACvE,MAAM,cAAc,GAAG,+BAA+B,CAAC;AACvD,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,0BAA0B,GAAG,IAAI,GAAG,IAAI,CAAC;AAiE/C,wFAAwF;AACxF,MAAM,kBAAkB;IACO;IAA4C;IAAzE,YAA6B,MAAyB,EAAmB,KAAoB;QAAhE,WAAM,GAAN,MAAM,CAAmB;QAAmB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAEjG,UAAU,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,IAAyB;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,0BAA0B,EAAE,CAAC;YAC5E,MAAM,IAAI,YAAY,CAAC,kDAAkD,EAAE,oBAAoB,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,OAAiC,IAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1G,UAAU,CAAC,IAAY;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,IAAY,IAAU,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9D,SAAS,CAAC,IAAY,EAAE,IAAY;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,MAAqB,EAAE,KAAoB;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACrE,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,OAAe,EAAE,OAAe;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;YAC5B,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACvD,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,OAAO,kBAAkB;IAQV;IACA;IACR;IACQ;IAVV,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,IAAa,EAAE,CAAC,CAAC;IAC1D,MAAM,CAA2B;IACjC,YAAY,CAAgB;IAC5B,cAAc,CAAqB;IAC5C,MAAM,GAAG,KAAK,CAAC;IAEvB,YACmB,UAA6B,EAC7B,WAA+B,EACvC,QAAgC,EACxB,UAAqC,EAAE;QAHvC,eAAU,GAAV,UAAU,CAAmB;QAC7B,gBAAW,GAAX,WAAW,CAAoB;QACvC,aAAQ,GAAR,QAAQ,CAAwB;QACxB,YAAO,GAAP,OAAO,CAAgC;QAExD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE,yBAAyB,CAAC,CAAC;QACzF,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,IAAI,SAAS,CAAC;QACtD,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;aACvE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1D,YAAY,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtG,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,cAAc,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;YAClD,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,SAAS;YAC1B,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,oBAAoB,EAAE;SAChC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,cAAc,GAAG,IAAI,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,2DAA2D;IAC3D,IAAI,OAAO,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAEtD,MAAM,CAAC,IAAY;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,WAAW,IAAI,UAAU,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,KAAc;QAC5B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS;eACxD,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,cAAc,CAAC,KAAmB;QAChC,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YAAC,GAAG,GAAG,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;QACpF,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;eAC5E,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/E,CAAC;IAED,iBAAiB,CAAC,OAA4C;QAC5D,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,CAAC,OAAe,EAAE,IAAY,IAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAClF,SAAS,KAAW,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE9C,KAAK,CAAC,YAAY;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjD,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChC,CAAC;YACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI,KAAc,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,GAAG,CAAC,IAAuB,EAAE,aAAuC,EAAE;QAC1E,IAAI,UAAU,CAAC,gBAAgB,KAAK,SAAS;YAAE,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,gBAAgB,EAAE,gCAAgC,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/J,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,sBAAsB,CAAC,CAAC;QACrF,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,UAAU;YAC7E,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,eAAmC,CAAC;QACxC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YAC/B,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;gBAAE,eAAe,GAAG,MAAM,CAAC;YACpD,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB;QAC5B,MAAM,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC5D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9F,CAAC,CAAC;IACL,CAAC;IAEO,YAAY;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI;YAC3G,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY;YAChD,cAAc,EAAE,EAAE;YAClB,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC;QACF,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE;YACnD,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;YAC3D,sEAAsE;YACtE,sEAAsE;YACtE,wEAAwE;YACxE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS;YAC7E,GAAG,EAAE,YAAY;YACjB,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;iBAC9D,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE;YACxD,qEAAqE;YACrE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBACrE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE;gBACP,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,OAAO;aACX;YACD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW;YAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;YAC1F,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC;YACxE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;YAC1E,uBAAuB,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;YACpE,mBAAmB,EAAE,IAAI,CAAC,cAAc;YACxC,kBAAkB,EAAE,KAAK,IAAI,EAAE;gBAC7B,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACnC,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;IAC/E,CAAC;IAEO,UAAU,CAAC,IAAuB;QACxC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;aACzC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,oBAAoB,EAAE,CAAC;YACtC,wEAAwE;YACxE,qEAAqE;YACrE,0EAA0E;YAC1E,IAAI,MAAM;gBAAE,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACK,iBAAiB;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACrD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC;aACzC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,KAAK,KAAK,CAAC;aAC7D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,wBAAwB,CAAC,QAAmC;QACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5G,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,SAAS;YAC1B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,QAAmC;QACzE,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CACxE,IAAI,EACJ,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CACzD,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;IAClH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,KAAoC;QACrE,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5E,IAAI,KAAK;gBAAE,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBAClD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,CAAC;QACvG,CAAC,CAAC,CAAC,CAAC;QACJ,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YACjG,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;SAC/F,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,IAAiB,EACjB,KAA6D;QAE7D,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7F,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YAAC,OAAO;QAAC,CAAC;QAC7F,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,eAAwB;QACzD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrD,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,eAAe,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;gBAChH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAAC,OAAO;YAAC,CAAC;YACzF,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,IAAiB;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO;IACT,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAAY;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;mBAC7E,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QAC7D,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IAC3B,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACpH,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAiD,EAAE,IAAY;IACjG,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAChC,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,gBAAgB,CAAC;QAC3C,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,eAAe,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAuB,EAAE,KAAwB;IAClE,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9F,CAAC;AAED,SAAS,oBAAoB,CAAC,UAA6B,EAAE,IAAY;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,EAAE,CAAC,CAAC;YACvH,SAAS;QACX,CAAC;QACD,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9B,UAAU,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,IAAI,gBAAgB,CAAC;QAC1B,YAAY,EAAE,cAAc;QAC5B,SAAS,EAAE,WAAW;QACtB,UAAU,EAAE,GAAG;QACf,SAAS,EAAE,GAAG,GAAG,SAAS;QAC1B,YAAY,EAAE,CAAC;QACf,YAAY,EAAE,0BAA0B;KACzC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,GAAW;IACxD,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC;AAC/D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CA22B1F"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAGV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACd,MAAM,YAAY,CAAC;AAWpB,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE;gBAA1B,OAAO,EAAE,SAAS,MAAM,EAAE;CAIhD;AA+CD,qBAAa,kBAAkB;IACvB,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;CA46B1F"}
package/dist/runtime.js CHANGED
@@ -1,4 +1,10 @@
1
+ import { waliRaisesBrokenPipe } from "./socket-flags.js";
2
+ import { waliTerminalAccess, waliTerminalOperation, waliTerminalSettingsIoctl } from "./tty-job-control.js";
3
+ import { setWaliSignalInterruption } from "./signal-interruption.js";
1
4
  import { resolveWaliExec } from "./exec-format.js";
5
+ import { createWaliEnvironmentImports } from "./environment.js";
6
+ import { captureWaliForkMemory, restoreWaliForkMemory } from "./fork-memory.js";
7
+ import { gatherWaliWriteVector } from "./write-vector.js";
2
8
  import { WaliKernelProcessClient, forkKernelProcessIdentity, kernelTerminalIoctl, parkWaliStopped } from "./kernel-process-client.js";
3
9
  import { releaseWaliSharedBuffers } from "./shared-buffer-pool.js";
4
10
  import { hostWait, setHostIdle } from "./host-idle.js";
@@ -28,7 +34,7 @@ import { applyProcessFilesystemPatch, createBrowserProcessSharedState, closeShar
28
34
  import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
29
35
  import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
30
36
  import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
31
- import { monotonicMilliseconds, realtimeMilliseconds } from "./monotonic-clock.js";
37
+ import { realtimeMilliseconds } from "./monotonic-clock.js";
32
38
  const EBADF = 9n;
33
39
  const EINVAL = 22n;
34
40
  const encoder = new TextEncoder();
@@ -119,6 +125,11 @@ export class BrowserWaliRuntime {
119
125
  let filesystemCoordinator;
120
126
  let filesystemOnMainThread = false;
121
127
  const importedMemory = createImportedMemory(source, options.memory);
128
+ const memoryLayout = options.memoryLayout ?? (!(source instanceof WebAssembly.Module)
129
+ ? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
130
+ // A reused Memory retains its capacity. This instance's allocator starts
131
+ // at the module's original extent, plus this instance's host reservations.
132
+ let imageExtent = memoryLayout ? memoryLayout.initial * 65_536 : importedMemory?.buffer.byteLength;
122
133
  const stdioAliasRegistry = createStdioAliasRegistry();
123
134
  // Word 0 is the fatal flag. Word 1 retains the first failing worker slot,
124
135
  // so a later futex wake cannot hide the original pthread diagnostic.
@@ -177,10 +188,14 @@ export class BrowserWaliRuntime {
177
188
  * things about who decided.
178
189
  */
179
190
  const exit = (status, name = "SYS_exit_group") => {
180
- const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
181
- + ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
182
- console.error(notice);
183
- options.onDiagnostic?.(notice);
191
+ // Only a process with pthreads has another thread that could have ended it;
192
+ // without one, every exit (each fork's included) printed and relayed this.
193
+ if (threadPool) {
194
+ const notice = `[WALI] ${name}(${status & 0xff}) on the MAIN thread -- the process is ending here,`
195
+ + ` not in a pthread. If the program did not ask to exit, this is the caller to find.`;
196
+ console.error(notice);
197
+ options.onDiagnostic?.(notice);
198
+ }
184
199
  throw new WaliProcessExit(status & 0xff);
185
200
  };
186
201
  const signalSelf = (signal) => {
@@ -188,12 +203,12 @@ export class BrowserWaliRuntime {
188
203
  return -22n;
189
204
  if (signal === 0)
190
205
  return 0n;
191
- // blocked, it stays pending until the mask admits it (raise queues only for a handler)
206
+ // A blocked default action is pending too; delivery consults the thread mask.
192
207
  if (signal !== 9 && (signalHost.mask & (1n << BigInt(signal - 1))) !== 0n) {
193
- new WaliSignals(signalState).raise(signal);
208
+ new WaliSignals(signalState).raise(signal, 0, 0, 0, true);
194
209
  return 0n;
195
210
  }
196
- const disposition = signal === 9 || signal === 19 ? "default" : new WaliSignals(signalState).raise(signal);
211
+ const disposition = signal === 9 ? "default" : new WaliSignals(signalState).raise(signal);
197
212
  if (disposition === "default" && defaultStops(signal) && kernelProcesses)
198
213
  return kernelProcesses.call("kill", pid, signal);
199
214
  if (disposition === "default" && defaultTerminates(signal))
@@ -240,7 +255,7 @@ export class BrowserWaliRuntime {
240
255
  ...(options.filesystemUpdatePort ? { updatePort: options.filesystemUpdatePort } : {}),
241
256
  ...(options.fileLocks ? { fileLocks: options.fileLocks } : {}),
242
257
  ...(options.fileCoherence ? { fileCoherence: options.fileCoherence } : {}),
243
- });
258
+ }, filesystemOnMainThread ? undefined : await options.filesystemService?.());
244
259
  }
245
260
  if (filesystemPolicy && threaded && !filesystemCoordinator && !inheritedDescriptors)
246
261
  throw new Error("Confined WALI threads require the shared filesystem owner.");
@@ -257,6 +272,11 @@ export class BrowserWaliRuntime {
257
272
  ...(runtimeFilesystem ? { filesystem: runtimeFilesystem } : {}),
258
273
  cwd: options.cwd ?? "/",
259
274
  stdin,
275
+ ...(options.terminalStdin ? { terminalStdin: options.terminalStdin } : {}),
276
+ ...(options.onTerminalOutput ? { emitTerminal: (value) => {
277
+ options.onTerminalOutput(value.slice());
278
+ return BigInt(value.byteLength);
279
+ } } : {}),
260
280
  executablePath,
261
281
  memory,
262
282
  emit,
@@ -275,19 +295,34 @@ export class BrowserWaliRuntime {
275
295
  ...(options.onDiagnostic ? { onDiagnostic: options.onDiagnostic } : {}),
276
296
  });
277
297
  const fileDescriptorImports = fileDescriptors.imports();
278
- const environmentFile = fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
298
+ // A fork child resumes inside the parent's image, whose environ is already
299
+ // in memory; libc reads the environment file only at startup, so a fork
300
+ // would write and remove one no one reads (four filesystem round trips).
301
+ const directEnvironment = waliDescriptors.some((descriptor) => descriptor.name === "__cl_get_envc");
302
+ const environmentFile = options.forkState || directEnvironment ? undefined : fileDescriptors.writeEnvironmentFile(options.env ?? {}, pid);
279
303
  const sharedFileClient = inheritedDescriptors ?? filesystemCoordinator?.filesystem();
280
304
  const sharedFileHost = sharedFileClient
281
305
  ? new WaliSharedFileDescriptorHost(sharedFileClient, stdioAliasRegistry, sharedPipeState, memory) : undefined;
282
306
  const memoryManager = new WaliMemoryManager(memory, (fd, offset, length) => sharedFileHost?.readForMapping(fd, offset, length)
283
307
  ?? fileDescriptors.readForMapping(fd, offset, length), mmapCursor, (fd) => sharedFileHost?.mappingPath(fd) ?? fileDescriptors.mappingPath(fd), (path, offset, value) => sharedFileHost?.writeForMapping(path, offset, value)
284
- ?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic);
285
- const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory));
308
+ ?? fileDescriptors.writeForMapping(path, offset, value), sharedMmapRegistry, options.onDiagnostic, () => imageExtent ?? memory().buffer.byteLength);
309
+ const signalHost = new WaliSignalHost(new WaliSignals(signalState), memory, () => instance?.exports.__indirect_function_table, () => Number(memoryManager.imports().SYS_mmap(0, 4096, 3, 0x22, -1, 0)), privateTreeHeld(() => instance?.exports, memory), signal => {
310
+ if (defaultStops(signal)) {
311
+ if (!kernelProcesses)
312
+ throw new Error("ENOSYS: default stop needs the kernel process owner.");
313
+ kernelProcesses.call("stop", signal);
314
+ parkWaliStopped(options.processIdentity);
315
+ }
316
+ else if (defaultTerminates(signal))
317
+ exit(128 + signal, `signal ${signal}`);
318
+ }, true);
286
319
  signalHost.mask = options.forkState?.signalMask ?? 0n;
287
320
  // The same number the thread pool is built with below, so the CPU count
288
321
  // the guest is told about can never exceed the workers that exist.
289
322
  const threadPoolSize = options.threadPoolSize ?? 18;
290
- const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead());
323
+ if (sharedFileClient)
324
+ fileDescriptors.descriptors.descriptorLimits = sharedFileClient.descriptorLimits;
325
+ const systemHost = new WaliSystemHost(memory, pid, stdin, pthreadFatal, options.terminal, threadPoolSize, () => memoryManager.growAhead(), fileDescriptors.descriptors.descriptorLimits);
291
326
  const hostDoorbell = filesystemOnMainThread ? filesystemCoordinator?.doorbell() : undefined;
292
327
  // ADR-0046: every wait of this thread answers the other threads and the page from here on.
293
328
  setHostIdle(hostDoorbell ? { pump: () => filesystemCoordinator.pump(true), doorbell: hostDoorbell } : undefined);
@@ -302,7 +337,7 @@ export class BrowserWaliRuntime {
302
337
  // hundredth copy of the notice buries the first.
303
338
  let threadPoolExhaustionReported = false;
304
339
  if (options.network || childDoor) {
305
- networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity);
340
+ networkCoordinator = await WaliNetworkCoordinator.create(options.network, sharedPipeState, stdin instanceof SharedWaliStdinReader ? stdin.buffer : undefined, stdioAliasRegistry.buffer, signalState, options.waitAgent?.activity, options.networkService ? await options.networkService() : undefined, !options.forkState, fileDescriptors.descriptors.descriptorLimits, options.terminalStdin instanceof SharedWaliStdinReader ? options.terminalStdin.buffer : undefined);
306
341
  }
307
342
  const networkHost = networkCoordinator ? new WaliNetworkHost(memory, networkCoordinator.createChannel(), signalHost, options.processIdentity) : undefined;
308
343
  const sharedPipeHost = new WaliSharedPipeHost(memory, sharedPipeState, sharedFileClient ? undefined : localDescriptors, sharedFileClient);
@@ -525,11 +560,12 @@ export class BrowserWaliRuntime {
525
560
  const image = resolveWaliExec(runtimeFilesystem, path, readCStringArray(argvPointer), currentCwd());
526
561
  if (typeof image === "number")
527
562
  return BigInt(image);
528
- // A NULL envp is the process's own environment (see inheritEnvironment).
529
- const env = envPointer === 0 ? { ...options.env } : {};
563
+ // Linux treats NULL envp as an empty vector. A null-prototype record
564
+ // also retains names such as __proto__ without object setter rules.
565
+ const env = Object.create(null);
530
566
  for (const entry of readCStringArray(envPointer)) {
531
567
  const separator = entry.indexOf("=");
532
- if (separator > 0)
568
+ if (separator >= 0)
533
569
  env[entry.slice(0, separator)] = entry.slice(separator + 1);
534
570
  }
535
571
  sharedFileClient.prepareSpawn();
@@ -537,7 +573,7 @@ export class BrowserWaliRuntime {
537
573
  const stdin = exportPipe(0, "reader");
538
574
  const stdout = exportPipe(1, "writer");
539
575
  const stderr = exportPipe(2, "writer");
540
- const completion = options.forkState ?? createBrowserProcessSharedState();
576
+ const completion = options.execCompletion ?? options.forkState ?? createBrowserProcessSharedState();
541
577
  options.browserProcess.spawn({
542
578
  // The kernel's exec: the image changes, the process does not. The pid
543
579
  // and the parent go across, and the child numbers ITS children from
@@ -552,13 +588,17 @@ export class BrowserWaliRuntime {
552
588
  ...(filesystemPolicy ? { filesystemPolicy } : {}),
553
589
  ...(stdin ? { stdin } : {}), ...(stdout ? { stdout } : {}), ...(stderr ? { stderr } : {}),
554
590
  });
555
- if (options.forkState)
591
+ // An inherited image forwards the existing process completion to its
592
+ // successor. It owns no coordinator which needs keeping alive, and
593
+ // must not wait on a private record or publish an intermediate exit.
594
+ if (options.forkState || options.execCompletion)
556
595
  throw new WaliProcessReplaced();
557
596
  // A root owns the descriptor coordinator the replacement borrows.
558
597
  // Keep servicing it until completion; never resume the old guest image.
559
598
  const control = new Int32Array(completion.control);
560
599
  while (Atomics.load(control, 0) === 0)
561
600
  hostWait(control, 0, 0);
601
+ const exitCode = Atomics.load(control, 1);
562
602
  const patch = decodeProcessSnapshot(completion);
563
603
  releaseWaliSharedBuffers(completion.bufferLease, 2);
564
604
  if (patch) {
@@ -569,9 +609,10 @@ export class BrowserWaliRuntime {
569
609
  if (snapshot)
570
610
  options.browserProcess.restore?.(snapshot);
571
611
  }
572
- throw new WaliProcessExit(Atomics.load(control, 1));
612
+ throw new WaliProcessExit(exitCode);
573
613
  };
574
614
  const builtins = {
615
+ ...createWaliEnvironmentImports(options.env ?? {}, memory),
575
616
  __init: () => 0,
576
617
  __deinit: () => 0,
577
618
  __proc_exit: (status) => exit(Number(status)),
@@ -588,28 +629,14 @@ export class BrowserWaliRuntime {
588
629
  ? fileDescriptors.copyCString(Number(pointer), environmentFile, Number(size)) : 0,
589
630
  SYS_write: (fd, pointer, length) => emit(Number(fd), copyOut(Number(pointer), Number(length))),
590
631
  SYS_writev: (fd, iovPointer, iovCount) => {
591
- let written = 0n;
592
- for (let index = 0; index < Number(iovCount); index += 1) {
593
- const offset = Number(iovPointer) + index * 8;
594
- assertMemoryRange(memory(), offset, 8);
595
- const pointer = view().getUint32(offset, true);
596
- const length = view().getUint32(offset + 4, true);
597
- const result = emit(Number(fd), copyOut(pointer, length));
598
- if (result < 0n)
599
- return result;
600
- written += result;
601
- }
602
- return written;
632
+ const value = gatherWaliWriteVector(memory(), Number(iovPointer), Number(iovCount));
633
+ return typeof value === "bigint" ? value : emit(Number(fd), value);
603
634
  },
604
635
  SYS_exit: (status) => exit(Number(status), "SYS_exit"),
605
636
  SYS_exit_group: (status) => exit(Number(status), "SYS_exit_group"),
606
637
  SYS_getpid: () => BigInt(pid),
607
638
  SYS_getppid: () => BigInt(parentProcessId),
608
639
  SYS_gettid: () => BigInt(pid),
609
- SYS_getuid: () => 1000n,
610
- SYS_geteuid: () => 1000n,
611
- SYS_getgid: () => 1000n,
612
- SYS_getegid: () => 1000n,
613
640
  SYS_set_tid_address: () => BigInt(pid),
614
641
  SYS_sched_yield: () => 0n,
615
642
  SYS_sched_setscheduler: () => 0n,
@@ -687,13 +714,6 @@ export class BrowserWaliRuntime {
687
714
  }
688
715
  return tid;
689
716
  },
690
- SYS_clock_gettime: (clockId, pointer) => {
691
- const nowNanoseconds = clockNanoseconds(Number(clockId));
692
- if (nowNanoseconds === undefined)
693
- return -EINVAL;
694
- writeTimespec(view(), Number(pointer), nowNanoseconds);
695
- return 0n;
696
- },
697
717
  SYS_gettimeofday: (pointer) => {
698
718
  if (Number(pointer) !== 0) {
699
719
  const microseconds = BigInt(Math.floor(realtimeMilliseconds() * 1_000));
@@ -718,11 +738,26 @@ export class BrowserWaliRuntime {
718
738
  // epoll, eventfd, and timerfd. Root and pthread instances must share it:
719
739
  // Tokio passes waker descriptors across those instance boundaries.
720
740
  ...(networkHost ? networkHost.imports({ ...pipeImports, ...eventImports }) : eventImports),
721
- SYS_ioctl: (fd, request, argument) => sharedPipeHost.ioctl(Number(fd), Number(request))
722
- ?? fileDescriptors.ioctl(Number(fd), Number(request))
723
- ?? (kernelProcesses && options.terminal && fileDescriptors.stdioFd(Number(fd)) !== undefined
724
- && ((Number(request) >>> 0) === 0x540f || (Number(request) >>> 0) === 0x5410)
725
- ? kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument)) : systemImports.SYS_ioctl(fileDescriptors.stdioFd(Number(fd)) ?? fd, request, argument)),
741
+ SYS_ioctl: (fd, request, argument) => {
742
+ if (fileDescriptors.terminalFd(Number(fd)) && (Number(request) >>> 0) === 0x541b)
743
+ return fileDescriptors.terminalAvailable(Number(argument));
744
+ if (networkHost?.isNetworkFd(Number(fd)))
745
+ return networkHost.ioctl(Number(fd), Number(request) >>> 0, Number(argument));
746
+ const operation = Number(request) >>> 0;
747
+ const stream = fileDescriptors.stdioFd(Number(fd));
748
+ if (stream === undefined || operation === 0x5421 || operation === 0x5451 || operation === 0x5450) {
749
+ return pipeImports.SYS_ioctl(fd, request, argument);
750
+ }
751
+ if (kernelProcesses && options.terminal) {
752
+ const settings = waliTerminalSettingsIoctl(kernelProcesses, memory(), operation, Number(argument));
753
+ if (settings !== undefined)
754
+ return settings;
755
+ }
756
+ if (kernelProcesses && options.terminal && (operation === 0x540f || operation === 0x5410)) {
757
+ return kernelTerminalIoctl(kernelProcesses, memory(), Number(request), Number(argument));
758
+ }
759
+ return systemImports.SYS_ioctl(stream, request, argument);
760
+ },
726
761
  // Every other prctl is a no-op, as the capability table advertises. ADR-0047's
727
762
  // handshake goes to the table that holds the files: the filesystem's host,
728
763
  // or this thread's own. After the spreads, since a threaded program's thin
@@ -765,20 +800,46 @@ export class BrowserWaliRuntime {
765
800
  const timed = !sampled || (spent.calls & (SAMPLE_EVERY - 1)) === 0;
766
801
  const began = timed ? performance.now() : 0;
767
802
  try {
768
- const result = waliCall(descriptor.name, () => handler(...args), args);
769
- options.onSyscallResult?.(descriptor.name, result);
770
- if (!jumps.isCapturing()) {
771
- // Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
772
- // well as returning EPIPE. Raise it in the calling guest, after
773
- // descriptor routing (including remote inherited descriptors),
774
- // before libc can turn the error into a builtin diagnostic.
775
- // send/sendto with MSG_NOSIGNAL do not use this write boundary.
776
- if (result === -32n && (descriptor.name === "SYS_write" || descriptor.name === "SYS_writev"))
777
- signalSelf(13);
778
- signalHost.deliver(result === -4n);
803
+ for (;;) {
804
+ const result = waliCall(descriptor.name, () => {
805
+ const request = descriptor.name === "SYS_ioctl" ? Number(args[1]) >>> 0 : 0;
806
+ const candidate = waliTerminalOperation(descriptor.name, request);
807
+ const terminal = (candidate !== undefined || descriptor.name === "SYS_ioctl")
808
+ && options.terminal && kernelProcesses && fileDescriptors.stdioFd(Number(args[0])) !== undefined;
809
+ const operation = terminal ? candidate : undefined;
810
+ if (operation && kernelProcesses) {
811
+ const access = waliTerminalAccess(kernelProcesses, options.processIdentity, signalHost, operation);
812
+ if (access !== 0n)
813
+ return access;
814
+ }
815
+ const value = handler(...args);
816
+ if ((descriptor.name === "SYS_open" || descriptor.name === "SYS_openat")
817
+ && typeof value === "bigint" && value >= 0n && fileDescriptors.terminalFd(Number(value))) {
818
+ const attached = kernelProcesses?.call("ttyopen") ?? (options.terminal ? 0n : -6n);
819
+ if (attached < 0n) {
820
+ pipeImports.SYS_close(value);
821
+ return attached;
822
+ }
823
+ }
824
+ return value;
825
+ }, args);
826
+ options.onSyscallResult?.(descriptor.name, result);
827
+ if (!jumps.isCapturing()) {
828
+ // Linux pipe.c anon_pipe_write sends SIGPIPE to the writer as
829
+ // well as returning EPIPE. Raise it in the calling guest, after
830
+ // descriptor routing (including remote inherited descriptors),
831
+ // before libc can turn the error into a builtin diagnostic.
832
+ // Socket send calls suppress the signal only with MSG_NOSIGNAL.
833
+ if (result === -32n && waliRaisesBrokenPipe(descriptor.name, args))
834
+ signalSelf(13);
835
+ const restart = signalHost.deliver(result === -4n);
836
+ if (result === -4n && restart && (RESTARTABLE_STREAM_CALLS.has(descriptor.name)
837
+ || waliTerminalOperation(descriptor.name, Number(args[1]) >>> 0) === "change"))
838
+ continue;
839
+ }
840
+ parkWaliStopped(options.processIdentity);
841
+ return result;
779
842
  }
780
- parkWaliStopped(options.processIdentity);
781
- return result;
782
843
  }
783
844
  finally {
784
845
  spent.calls += 1;
@@ -798,13 +859,7 @@ export class BrowserWaliRuntime {
798
859
  env,
799
860
  });
800
861
  if (options.forkState) {
801
- const snapshot = options.forkState.memory;
802
- bytes().set(new Uint8Array(snapshot));
803
- // This transferred image has one consumer. A live child needs its
804
- // restored memory, not a second full image retained by forkState.
805
- // The browser baseline supplies ES2024 transfer; this package's
806
- // declaration lib remains ES2023 for its other APIs.
807
- snapshot.transfer(0);
862
+ restoreWaliForkMemory(memory(), options.forkState);
808
863
  for (const [name, value] of Object.entries(options.forkState.globals)) {
809
864
  const global = instance.exports[name];
810
865
  if (!(global instanceof WebAssembly.Global))
@@ -812,7 +867,9 @@ export class BrowserWaliRuntime {
812
867
  global.value = value;
813
868
  }
814
869
  memoryManager.restoreFork(options.forkState.mappings);
815
- systemImports.SYS_umask(options.forkState.umask);
870
+ // The owner's copy of this table already holds the umask; only the local
871
+ // table needs it, so setting it is no round trip.
872
+ localFileImports.SYS_umask(options.forkState.umask);
816
873
  }
817
874
  else if (typeof instance.exports.asyncify_start_unwind === "function") {
818
875
  const stack = instance.exports.__stack_pointer;
@@ -823,8 +880,11 @@ export class BrowserWaliRuntime {
823
880
  const capacity = Number(stack.value);
824
881
  if (capacity <= 0)
825
882
  throw new Error("Asyncify fork requires a nonempty module stack.");
826
- asyncifyData = memory().buffer.byteLength;
827
- memory().grow(Math.ceil((capacity + 8) / 65_536));
883
+ asyncifyData = imageExtent ?? memory().buffer.byteLength;
884
+ imageExtent = asyncifyData + Math.ceil((capacity + 8) / 65_536) * 65_536;
885
+ const missing = imageExtent - memory().buffer.byteLength;
886
+ if (missing > 0)
887
+ memory().grow(Math.ceil(missing / 65_536));
828
888
  view().setUint32(asyncifyData + 4, asyncifyData + 8 + capacity, true);
829
889
  }
830
890
  if (options.codec?.version === 1) {
@@ -845,8 +905,7 @@ export class BrowserWaliRuntime {
845
905
  if (!importedMemory) {
846
906
  throw new Error("A threaded WALI module must be linked with --import-memory so browser workers can share its process memory.");
847
907
  }
848
- const poolLayout = options.memoryLayout ?? (!(source instanceof WebAssembly.Module)
849
- ? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
908
+ const poolLayout = memoryLayout;
850
909
  threadPool = new WaliThreadPool({
851
910
  ...(options.waitAgent ? { waitAgent: options.waitAgent } : {}),
852
911
  ...(options.onWaitState ? { onWaitState: options.onWaitState } : {}),
@@ -862,6 +921,7 @@ export class BrowserWaliRuntime {
862
921
  ...(options.processIdentity ? { processIdentity: options.processIdentity } : {}),
863
922
  executablePath,
864
923
  argv,
924
+ env: options.env ?? {},
865
925
  cwd: fileDescriptors.currentWorkingDirectory(),
866
926
  stdioAliasRegistry: stdioAliasRegistry.buffer,
867
927
  sharedPipes: sharedPipeState,
@@ -872,7 +932,9 @@ export class BrowserWaliRuntime {
872
932
  ...(options.browserProcess?.filesystemPolicyVersion === 1 ? { childFilesystemPolicyVersion: 1 } : {}),
873
933
  ...(options.threadOutputPorts ? { outputPorts: options.threadOutputPorts } : {}),
874
934
  ...(stdin instanceof SharedWaliStdinReader ? { stdin: stdin.buffer } : {}),
935
+ ...(options.terminalStdin instanceof SharedWaliStdinReader ? { terminalStdin: options.terminalStdin.buffer } : {}),
875
936
  terminal: options.terminal === true,
937
+ ...(options.onTerminalOutput ? { onTerminalOutput: options.onTerminalOutput } : {}),
876
938
  onStdout: (chunk) => { emit(1, chunk); },
877
939
  onStderr: (chunk) => { emit(2, chunk); },
878
940
  ...(networkCoordinator ? { network: networkCoordinator } : {}),
@@ -891,6 +953,11 @@ export class BrowserWaliRuntime {
891
953
  let exitCode = 0;
892
954
  let replaced = false;
893
955
  const rootStackPointer = Number(instance.exports.__stack_pointer?.value ?? 0);
956
+ setWaliSignalInterruption(() => {
957
+ const words = signalHost.signals.words, generation = Atomics.load(words, 1);
958
+ return { pending: (signalHost.signals.pending() & ~signalHost.mask) !== 0n,
959
+ guards: [{ words, index: 1, value: generation }] };
960
+ });
894
961
  try {
895
962
  try {
896
963
  if (rewinding)
@@ -910,8 +977,7 @@ export class BrowserWaliRuntime {
910
977
  break;
911
978
  asyncify("asyncify_stop_unwind");
912
979
  unwinding = false;
913
- const layout = options.memoryLayout ?? (!(source instanceof WebAssembly.Module)
914
- ? findImportedMemory(source instanceof Uint8Array ? source : new Uint8Array(source)) : undefined);
980
+ const layout = memoryLayout;
915
981
  if (!layout)
916
982
  throw new Error("Fork requires the module's imported memory layout.");
917
983
  const globals = {};
@@ -932,19 +998,26 @@ export class BrowserWaliRuntime {
932
998
  childWaitControls.set(forkResult, new Int32Array(control));
933
999
  if (registered < 0)
934
1000
  throw new Error(`Fork child registration failed: ${registered}`);
935
- const mask = Number(systemImports.SYS_umask(0));
936
- systemImports.SYS_umask(mask);
937
- options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
1001
+ // Rewind reads the Asyncify data only up to its current position. With
1002
+ // the stack lowest in memory (layout.stackTop), below the stack pointer
1003
+ // is unused stack; one page under it is kept as margin.
1004
+ const stackPointer = Number(globals.__stack_pointer ?? 0);
1005
+ const unused = [{ start: view().getUint32(asyncifyData, true), end: view().getUint32(asyncifyData + 4, true) },
1006
+ ...(layout.stackTop !== undefined && stackPointer > 0 && stackPointer <= layout.stackTop
1007
+ ? [{ start: 0, end: stackPointer - 65_536 }] : [])];
1008
+ const snapshot = captureWaliForkMemory(memory(), threaded, unused);
1009
+ options.onDiagnostic?.(`[WALI] fork snapshot: ${memory().buffer.byteLength} bytes, payload ${snapshot.memory.byteLength} bytes, Asyncify stack ${view().getUint32(asyncifyData, true) - asyncifyData - 8} bytes.`);
1010
+ const forked = sharedFileClient.copyForForkChannel();
938
1011
  options.browserProcess.fork({
939
1012
  module, memoryLayout: layout, pid: forkResult, ...completion,
940
- descriptorTable: sharedFileClient.copyForForkChannel(),
1013
+ descriptorTable: forked.channel,
941
1014
  childPidAllocator: nextChildPid.buffer,
942
- argv, env: { ...options.env }, cwd: currentCwd(), executablePath,
1015
+ argv, env: { ...options.env }, cwd: forked.cwd, executablePath,
943
1016
  ...(filesystemPolicy ? { filesystemPolicy } : {}),
944
- forkState: { ...completion, memory: bytes().slice().buffer, globals,
1017
+ forkState: { ...completion, ...snapshot, globals,
945
1018
  allocator: memoryManager.allocatorControl().slice(0), mappings: memoryManager.forkSnapshot(),
946
1019
  signalState: forkSignals.state, signalMask: forkSignals.mask,
947
- asyncifyData, jumps: jumps.forkSnapshot(), umask: mask, parentPid: pid },
1020
+ asyncifyData, jumps: jumps.forkSnapshot(), umask: forked.umask, parentPid: pid },
948
1021
  });
949
1022
  rewinding = true;
950
1023
  asyncify("asyncify_start_rewind", asyncifyData);
@@ -968,6 +1041,7 @@ export class BrowserWaliRuntime {
968
1041
  }
969
1042
  finally {
970
1043
  // First, so a teardown step that throws cannot leave a process's pipe buffers held (review of 945655a).
1044
+ setWaliSignalInterruption(undefined);
971
1045
  forgetWaliSharedPipeState();
972
1046
  setWaliWaitPublisher(undefined);
973
1047
  threadPool?.terminate();
@@ -982,6 +1056,10 @@ export class BrowserWaliRuntime {
982
1056
  }
983
1057
  else
984
1058
  syncFilesystem();
1059
+ // Inherited images have no private filesystem to publish at exit.
1060
+ // Flush the one owner's writes before closing this image's table.
1061
+ if (inheritedDescriptors)
1062
+ inheritedDescriptors.prepareSpawn();
985
1063
  sharedFileClient?.closeProcess();
986
1064
  if (!sharedFileClient)
987
1065
  fileDescriptors.descriptors.exit();
@@ -1012,6 +1090,9 @@ export class BrowserWaliRuntime {
1012
1090
  };
1013
1091
  }
1014
1092
  }
1093
+ // Linux restarts interrupted blocking stream I/O when the handler has SA_RESTART.
1094
+ // Timeout-bearing poll/sleep/sigtimedwait calls are deliberately not retried here.
1095
+ const RESTARTABLE_STREAM_CALLS = new Set(["SYS_read", "SYS_write", "SYS_readv", "SYS_writev", "SYS_recv", "SYS_recvfrom", "SYS_recvmsg"]);
1015
1096
  /** The calls through which a process makes a child: fork, exec, the browser's spawn door, and the wait for one. */
1016
1097
  const CHILD_PROCESS_SYSCALLS = new Set(["SYS_fork", "SYS_execve", "SYS_browser_spawn", "SYS_browser_spawn_confined_v1", "SYS_wait4"]);
1017
1098
  /** A run longer than this prints where its time went (`[wali-profile]`). */
@@ -1061,23 +1142,6 @@ function concatenate(chunks) {
1061
1142
  }
1062
1143
  return result;
1063
1144
  }
1064
- function clockNanoseconds(clockId) {
1065
- if (clockId === 0) {
1066
- const milliseconds = typeof performance === "undefined"
1067
- ? Date.now() : performance.timeOrigin + performance.now();
1068
- return BigInt(Math.floor(milliseconds * 1_000_000));
1069
- }
1070
- if (clockId === 1 || clockId === 4) {
1071
- return BigInt(Math.floor(monotonicMilliseconds() * 1_000_000));
1072
- }
1073
- return undefined;
1074
- }
1075
- function writeTimespec(view, pointer, nanoseconds) {
1076
- if (pointer < 0 || pointer + 16 > view.byteLength)
1077
- throw new WebAssembly.RuntimeError("WALI timespec pointer is out of bounds.");
1078
- view.setBigInt64(pointer, nanoseconds / 1000000000n, true);
1079
- view.setBigInt64(pointer + 8, nanoseconds % 1000000000n, true);
1080
- }
1081
1145
  function fillRandom(destination) {
1082
1146
  if (!globalThis.crypto?.getRandomValues)
1083
1147
  throw new Error("Web Crypto is required for SYS_getrandom.");